def wrapper(request: HttpRequest, *args: Any, **kwargs: Any) -> Union[HttpResponse, JsonResponse]: if request.content_type == '': log(logger, 'error: Content-Type is missing') return JsonResponse({'error': 'Content-Type is missing.'}, status = 400) elif request.content_type == 'application/octet-stream': try: auth_message = load_without_public_key(request.body) if isinstance(auth_message, message.concents.ClientAuthorization): if is_golem_message_signed_with_key( auth_message.client_public_key, auth_message, ): log( logger, f'A message has been received in `{request.resolver_match.view_name if request.resolver_match is not None else "-not available"}`.' f'Message type: {auth_message.__class__.__name__}.', client_public_key=auth_message.client_public_key ) else: log( logger, f'ClientAuthorization message is not signed with public key {auth_message.client_public_key}.', client_public_key=auth_message.client_public_key ) return JsonResponse( { 'error': f'ClientAuthorization message is not signed with public key {auth_message.client_public_key}.', 'error_code': ErrorCode.MESSAGE_SIGNATURE_WRONG.value, }, status=400 ) else: log(logger, 'error: Client Authentication message not included') return JsonResponse({'error': 'Client Authentication message not included'}, status = 400) except FieldError as exception: log(logger, 'Golem Message contains wrong fields.', exception.__class__.__name__) return JsonResponse({'error': join_messages('Golem Message contains wrong fields.', str(exception))}, status = 400) except MessageFromFutureError as exception: log(logger, 'Message timestamp too far in the future.', exception.__class__.__name__) return JsonResponse({'error': join_messages('Message timestamp too far in the future.', str(exception))}, status = 400) except MessageTooOldError as exception: log(logger, 'Message is too old.', exception.__class__.__name__) return JsonResponse({'error': join_messages('Message is too old.', str(exception))}, status = 400) except TimestampError as exception: log(logger, 'Error:', exception.__class__.__name__) return JsonResponse({'error': f'{exception}'}, status = 400) except MessageError as exception: request_id = generate_uuid() log(logger, f'uuid: {request_id}', ERROR_IN_GOLEM_MESSAGE, exception.__class__.__name__, logging_level=logging.LoggingLevel.EXCEPTION) return JsonResponse({'error': join_messages(f'uuid: {request_id}', ERROR_IN_GOLEM_MESSAGE, exception.__class__.__name__)}, status=400) else: log(logger, 'error: Concent supports only application/octet-stream.') return JsonResponse({'error': "Concent supports only application/octet-stream."}, status = 415) return view(request, auth_message, auth_message.client_public_key, *args, *kwargs)
def wrapper(request: HttpRequest, *args: Any, **kwargs: Any) -> Union[HttpResponse, JsonResponse]: if request.content_type == '': log(logger, 'error: Content-Type is missing') return JsonResponse({'error': 'Content-Type is missing.'}, status = 400) elif request.content_type == 'application/octet-stream': try: golem_message = load_without_public_key(request.body) assert golem_message is not None client_public_key = get_validated_client_public_key_from_client_message(golem_message) log( logger, f'A message has been received in `{request.resolver_match.view_name if request.resolver_match is not None else "-not available"}`.' f'Message type: {golem_message.__class__.__name__}.', f'Content type: {request.META["CONTENT_TYPE"] if "CONTENT_TYPE" in request.META.keys() else "-not available"}' f'TASK_ID: {golem_message.task_id if "task_id" in dir(golem_message) else "-not available"}', subtask_id=golem_message.subtask_id if 'subtask_id' in dir(golem_message) else None, client_public_key=client_public_key ) except ConcentValidationError as exception: log(logger, f"error_code: {exception.error_code.value} error: {exception.error_message} ") return JsonResponse( { 'error': f'{exception.error_message}', 'error_code': exception.error_code.value, }, status=400 ) except FieldError as exception: log(logger, 'Golem Message contains wrong fields.', exception.__class__.__name__) return JsonResponse({'error': join_messages('Golem Message contains wrong fields.', str(exception))}, status = 400) except MessageFromFutureError as exception: log(logger, 'Message timestamp too far in the future.', exception.__class__.__name__) return JsonResponse({'error': join_messages('Message timestamp too far in the future.', str(exception))}, status = 400) except MessageTooOldError as exception: log(logger, 'Message is too old.', exception.__class__.__name__) return JsonResponse({'error': join_messages('Message is too old.', str(exception))}, status = 400) except TimestampError as exception: log(logger, 'Error:', exception.__class__.__name__) return JsonResponse({'error': f'{exception}'}, status = 400) except MessageError as exception: request_id = generate_uuid() log(logger, f'uuid: {request_id}', ERROR_IN_GOLEM_MESSAGE, exception.__class__.__name__, logging_level=logging.LoggingLevel.EXCEPTION) return JsonResponse({'error': join_messages(f'uuid: {request_id}', ERROR_IN_GOLEM_MESSAGE, exception.__class__.__name__)}, status=400) else: log(logger, 'error: Concent supports only application/octet-stream.') return JsonResponse({'error': "Concent supports only application/octet-stream."}, status = 415) return view(request, golem_message, client_public_key, *args, *kwargs)
def test_join_messages_should_return_joined_string_separeted_with_whitespace( self): """ Tests if join_messages function works as expected. """ for messages, expected_join in { ('Error in Golem Message.', 'Invalid value'): 'Error in Golem Message. Invalid value', (' Error in Golem Message.', ' Invalid value'): 'Error in Golem Message. Invalid value', ('Error in Golem Message. ', 'Invalid value '): 'Error in Golem Message. Invalid value', ('Error in Golem Message.', 'Invalid value', 'for enum slot'): 'Error in Golem Message. Invalid value for enum slot', (' Error in Golem Message.', 'Invalid value ', 'for enum slot '): 'Error in Golem Message. Invalid value for enum slot', }.items(): self.assertEqual(join_messages(*messages), expected_join)
def wrapper(request, *args, **kwargs): if request.content_type == '': log_string_message(logger, 'error: Content-Type is missing') return JsonResponse({'error': 'Content-Type is missing.'}, status=400) elif request.content_type == 'application/octet-stream': try: auth_message = load_without_public_key(request.body) if isinstance(auth_message, message.concents.ClientAuthorization): if is_golem_message_signed_with_key( auth_message.client_public_key, auth_message, ): log_message_received_in_endpoint( logger, request.resolver_match.view_name if request.resolver_match is not None else None, auth_message.__class__.__name__, auth_message.client_public_key) else: log_string_message( logger, f'ClientAuthorization message is not signed with public key {auth_message.client_public_key}.', ) return JsonResponse( { 'error': f'ClientAuthorization message is not signed with public key {auth_message.client_public_key}.', 'error_code': ErrorCode.MESSAGE_SIGNATURE_WRONG.value, }, status=400) else: log_string_message( logger, 'error: Client Authentication message not included') return JsonResponse( { 'error': 'Client Authentication message not included' }, status=400) except FieldError as exception: log_string_message(logger, 'Golem Message contains wrong fields.', exception.__class__.__name__) return JsonResponse( { 'error': join_messages('Golem Message contains wrong fields.', str(exception)) }, status=400) except MessageFromFutureError as exception: log_string_message(logger, 'Message timestamp too far in the future.', exception.__class__.__name__) return JsonResponse( { 'error': join_messages( 'Message timestamp too far in the future.', str(exception)) }, status=400) except MessageTooOldError as exception: log_string_message(logger, 'Message is too old.', exception.__class__.__name__) return JsonResponse( { 'error': join_messages('Message is too old.', str(exception)) }, status=400) except TimestampError as exception: log_string_message(logger, 'Error:', exception.__class__.__name__) return JsonResponse({'error': f'{exception}'}, status=400) except MessageError as exception: log_string_message(logger, 'Error in Golem Message.', exception.__class__.__name__) return JsonResponse( { 'error': join_messages('Error in Golem Message.', str(exception)) }, status=400) else: log_string_message( logger, 'error: Concent supports only application/octet-stream.') return JsonResponse( {'error': "Concent supports only application/octet-stream."}, status=415) return view(request, auth_message, auth_message.client_public_key, *args, *kwargs)
def wrapper(request, *args, **kwargs): if request.content_type == '': log_string_message(logger, 'error: Content-Type is missing') return JsonResponse({'error': 'Content-Type is missing.'}, status=400) elif request.content_type == 'application/octet-stream': try: golem_message = load_without_public_key(request.body) assert golem_message is not None client_public_key = get_validated_client_public_key_from_client_message( golem_message) log_message_received_in_endpoint( logger, request.resolver_match.view_name if request.resolver_match is not None else None, golem_message.__class__.__name__, client_public_key, request.META['CONTENT_TYPE'] if 'CONTENT_TYPE' in request.META.keys() else None, golem_message.task_id if 'task_id' in dir(golem_message) else None, golem_message.subtask_id if 'subtask_id' in dir(golem_message) else None) except ConcentValidationError as exception: log_string_message( logger, f"error_code: {exception.error_code.value} error: {exception.error_message} " ) return JsonResponse( { 'error': f'{exception.error_message}', 'error_code': exception.error_code.value, }, status=400) except FieldError as exception: log_string_message(logger, 'Golem Message contains wrong fields.', exception.__class__.__name__) return JsonResponse( { 'error': join_messages('Golem Message contains wrong fields.', str(exception)) }, status=400) except MessageFromFutureError as exception: log_string_message(logger, 'Message timestamp too far in the future.', exception.__class__.__name__) return JsonResponse( { 'error': join_messages( 'Message timestamp too far in the future.', str(exception)) }, status=400) except MessageTooOldError as exception: log_string_message(logger, 'Message is too old.', exception.__class__.__name__) return JsonResponse( { 'error': join_messages('Message is too old.', str(exception)) }, status=400) except TimestampError as exception: log_string_message(logger, 'Error:', exception.__class__.__name__) return JsonResponse({'error': f'{exception}'}, status=400) except MessageError as exception: log_string_message(logger, 'Error in Golem Message.', exception.__class__.__name__) return JsonResponse( { 'error': join_messages('Error in Golem Message.', str(exception)) }, status=400) else: log_string_message( logger, 'error: Concent supports only application/octet-stream.') return JsonResponse( {'error': "Concent supports only application/octet-stream."}, status=415) return view(request, golem_message, client_public_key, *args, *kwargs)
def test_join_messages_with_single_argument_should_return_single_string( self): self.assertEqual(join_messages('Error in Golem Message.'), 'Error in Golem Message.')
def log_error_message(logger: Logger, *messages_to_log: str): logger.error(join_messages(*messages_to_log))
def log_string_message(logger: Logger, *messages_to_log: str): logger.info(join_messages(*messages_to_log))