Esempio n. 1
0
    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)
Esempio n. 2
0
    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)
Esempio n. 3
0
 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)
Esempio n. 4
0
    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)
Esempio n. 5
0
    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)
Esempio n. 6
0
 def test_join_messages_with_single_argument_should_return_single_string(
         self):
     self.assertEqual(join_messages('Error in Golem Message.'),
                      'Error in Golem Message.')
Esempio n. 7
0
def log_error_message(logger: Logger, *messages_to_log: str):
    logger.error(join_messages(*messages_to_log))
Esempio n. 8
0
def log_string_message(logger: Logger, *messages_to_log: str):
    logger.info(join_messages(*messages_to_log))