def __validate_request(self, action_request: ExternalActionRequest, validate_timestamp: bool) -> ValidationResponse:
        """
        Two auth protocols are supported:
        1. signature - Signing the body using the signing_key should match the signature
        2. partial keys auth - using partial_auth_a and partial_auth_b
           Each partial auth should be decrypted using the private key (rsa private key).
           The content should have 2 items:
           - key
           - body hash
           The operation key_a XOR key_b should be equal to the signing_key

        If both protocols are present, we only check the signature
        """
        if validate_timestamp and (time.time() - action_request.body.timestamp > INCOMING_REQUEST_TIME_WINDOW_SECONDS):
            logging.error(f"Rejecting incoming request because it's too old. Cannot verify request {action_request}")
            return ValidationResponse(
                http_code=500, error_code=ErrorCodes.ILLEGAL_TIMESTAMP.value, error_msg="Illegal timestamp"
            )

        signing_key = self.event_handler.get_global_config().get("signing_key")
        if not signing_key:
            logging.error(f"Signing key not available. Cannot verify request {action_request.body}")
            return ValidationResponse(
                http_code=500, error_code=ErrorCodes.NO_SIGNING_KEY.value, error_msg="No signing key"
            )

        if action_request.signature:
            # First auth protocol option, based on signature only
            return self.validate_action_request_signature(action_request, signing_key)
        elif action_request.partial_auth_a or action_request.partial_auth_b:
            # Second auth protocol option, based on public key
            return self.validate_with_private_key(action_request, signing_key)
        else:  # Light action protocol option, authenticated in relay
            return self.validate_light_action(action_request)

        Two auth protocols are supported:
        1. signature - Signing the body using the signing_key should match the signature
        2. partial keys auth - using partial_auth_a and partial_auth_b
           Each partial auth should be decrypted using the private key (rsa private key).
           The content should have 2 items:
           - key
           - body hash
           The operation key_a XOR key_b should be equal to the signing_key

        If both protocols are present, we only check the signature
        
src/robusta/integrations/receiver.py