| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- # IRIS Source Code
- # Copyright (C) 2024 - DFIR-IRIS
- # contact@dfir-iris.org
- #
- # This program is free software; you can redistribute it and/or
- # modify it under the terms of the GNU Lesser General Public
- # License as published by the Free Software Foundation; either
- # version 3 of the License, or (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- # Lesser General Public License for more details.
- #
- # You should have received a copy of the GNU Lesser General Public License
- # along with this program; if not, write to the Free Software Foundation,
- # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- from functools import wraps
- from flask_sqlalchemy.pagination import Pagination
- from app import app
- from app.blueprints.responses import response_error, response
- logger = app.logger
- def response_api_success(data):
- return response(200, data=data)
- def _get_next_page(paginated_elements: Pagination):
- if paginated_elements.has_next:
- next_page = paginated_elements.has_next
- else:
- next_page = None
- return next_page
- def response_api_paginated(schema, paginated_elements: Pagination):
- data = schema.dump(paginated_elements.items, many=True)
- next_page = _get_next_page(paginated_elements)
- result = {
- 'total': paginated_elements.total,
- 'data': data,
- 'last_page': paginated_elements.pages,
- 'current_page': paginated_elements.page,
- 'next_page': next_page
- }
- return response_api_success(result)
- def response_api_deleted():
- return response(204)
- def response_api_created(data):
- return response(201, data=data)
- def response_api_error(message, data=None):
- content = {
- 'message': message
- }
- if data:
- content['data'] = data
- return response(400, data=content)
- def response_api_not_found():
- return response(404)
- def endpoint_deprecated(alternative_verb, alternative_url):
- def inner_wrap(f):
- @wraps(f)
- def wrap(*args, **kwargs):
- result = f(*args, **kwargs)
- logger.warning(f'Endpoint will be deprecated soon. Use {alternative_verb} {alternative_url} instead')
- result.headers['Link'] = f'<{alternative_url}>; rel="alternate"'
- result.headers['Deprecation'] = True
- return result
- return wrap
- return inner_wrap
- def endpoint_removed(message, version):
- def inner_wrap(f):
- @wraps(f)
- def wrap(*args, **kwargs):
- return response_error(f"Endpoint deprecated in {version}. {message}.", status=410)
- return wrap
- return inner_wrap
|