mirror of
https://github.com/fuckpiracyshield/api.git
synced 2024-12-22 18:40:52 +01:00
56 lines
2 KiB
Python
56 lines
2 KiB
Python
|
from .request import RequestHandler
|
||
|
|
||
|
from .parameters import JSONParametersHandler, JSONParametersNonValidException, JSONParametersMissingException, JSONParametersTooManyException
|
||
|
|
||
|
from .errors import ErrorCode, ErrorMessage
|
||
|
|
||
|
class BaseHandler(RequestHandler):
|
||
|
|
||
|
"""
|
||
|
Base class for initial input sanitizing and management.
|
||
|
"""
|
||
|
|
||
|
request_data = {}
|
||
|
|
||
|
def handle_post(self, required_fields: list, optional_fields: list = None, sanitization_rules: list = None) -> None | Exception:
|
||
|
"""
|
||
|
Handle POST parameters.
|
||
|
|
||
|
:param required_fields: a list of mandatory fields.
|
||
|
:param optional_fields: a list of non-mandatory fields.
|
||
|
:param sanitization_rules: a list of rules based on the Filter class component.
|
||
|
"""
|
||
|
|
||
|
request_body = self.request.body.decode('utf-8')
|
||
|
|
||
|
try:
|
||
|
json_handler = JSONParametersHandler(request_body)
|
||
|
|
||
|
# will raise an exception if the content is not what we're expecting
|
||
|
processed_request = json_handler.process_request(
|
||
|
required_fields = required_fields,
|
||
|
optional_fields = optional_fields,
|
||
|
sanitization_rules = sanitization_rules
|
||
|
)
|
||
|
|
||
|
self.request_data = {}
|
||
|
|
||
|
# save the processed parameters so we can access them from child classes
|
||
|
for key, value in processed_request.items():
|
||
|
self.request_data[key] = value
|
||
|
|
||
|
except JSONParametersNonValidException:
|
||
|
self.error(status_code = 400, error_code = ErrorCode.NON_VALID_PARAMETERS, message = ErrorMessage.NON_VALID_PARAMETERS)
|
||
|
|
||
|
return False
|
||
|
|
||
|
except JSONParametersMissingException:
|
||
|
self.error(status_code = 400, error_code = ErrorCode.MISSING_PARAMETERS, message = ErrorMessage.MISSING_PARAMETERS)
|
||
|
|
||
|
return False
|
||
|
|
||
|
except JSONParametersTooManyException:
|
||
|
self.error(status_code = 400, error_code = ErrorCode.TOO_MANY_PARAMETERS, message = ErrorMessage.TOO_MANY_PARAMETERS)
|
||
|
|
||
|
return False
|