deeppavlov/utils/alexa/bot.py
def _verify_request(self, signature_chain_url: str, signature: str, request_body: bytes) -> bool:
        """Conducts series of Alexa request verifications against Amazon Alexa requirements.

        Args:
            signature_chain_url: Signature certificate URL from SignatureCertChainUrl HTTP header.
            signature: Base64 decoded Alexa request signature from Signature HTTP header.
            request_body: full HTTPS request body
        Returns:
            result: True if verification was successful, False if not.
        """
        if signature_chain_url not in self.valid_certificates.keys():
            amazon_cert: X509 = verify_cert(signature_chain_url)
            if amazon_cert:
                amazon_cert_lifetime: timedelta = self.config['amazon_cert_lifetime']
                expiration_timestamp = datetime.utcnow() + amazon_cert_lifetime
                validated_cert = ValidatedCert(cert=amazon_cert, expiration_timestamp=expiration_timestamp)
                self.valid_certificates[signature_chain_url] = validated_cert
                log.info(f'Certificate {signature_chain_url} validated')
            else:
                log.error(f'Certificate {signature_chain_url} validation failed')
                return False
        else:
            validated_cert: ValidatedCert = self.valid_certificates[signature_chain_url]
            amazon_cert: X509 = validated_cert.cert

        if verify_signature(amazon_cert, signature, request_body):
            result = True
        else:
            log.error(f'Failed signature verification for request: {request_body.decode("utf-8", "replace")}')
            result = False

        return result
def _verify_request(self, signature_chain_url: str, signature: str, request_body: bytes) -> bool:
        if signature_chain_url not in self.valid_certificates.keys():
            amazon_cert: X509 = verify_cert(signature_chain_url)
            if amazon_cert:
                amazon_cert_lifetime: timedelta = self.config['amazon_cert_lifetime']
                expiration_timestamp = datetime.utcnow() + amazon_cert_lifetime
                validated_cert = ValidatedCert(cert=amazon_cert, expiration_timestamp=expiration_timestamp)
                self.valid_certificates[signature_chain_url] = validated_cert
                log.info(f'Certificate {signature_chain_url} validated')
            else:
                log.error(f'Certificate {signature_chain_url} validation failed')
                return False
        else:
            validated_cert: ValidatedCert = self.valid_certificates[signature_chain_url]
            amazon_cert: X509 = validated_cert.cert

        if verify_signature(amazon_cert, signature, request_body):
            result = True
        else:
            log.error(f'Failed signature verification for request: {request_body.decode("utf-8", "replace")}')
            result = False

        return result
def _verify_request ( self , signature_chain_url : str , signature : str , request_body : bytes ) -> bool : if signature_chain_url not in self . valid_certificates . keys ( ) : amazon_cert : X509 = verify_cert ( signature_chain_url ) if amazon_cert : amazon_cert_lifetime : timedelta = self . config [ 'amazon_cert_lifetime' ] expiration_timestamp = datetime . utcnow ( ) + amazon_cert_lifetime validated_cert = ValidatedCert ( cert = amazon_cert , expiration_timestamp = expiration_timestamp ) self . valid_certificates [ signature_chain_url ] = validated_cert log . info ( f'Certificate {signature_chain_url} validated' ) else : log . error ( f'Certificate {signature_chain_url} validation failed' ) return False else : validated_cert : ValidatedCert = self . valid_certificates [ signature_chain_url ] amazon_cert : X509 = validated_cert . cert if verify_signature ( amazon_cert , signature , request_body ) : result = True else : log . error ( f'Failed signature verification for request: {request_body.decode("utf-8", "replace")}' ) result = False return result
Conducts series of Alexa request verifications against Amazon Alexa requirements.

        Args:
            signature_chain_url: Signature certificate URL from SignatureCertChainUrl HTTP header.
            signature: Base64 decoded Alexa request signature from Signature HTTP header.
            request_body: full HTTPS request body
        Returns:
            result: True if verification was successful, False if not.
Conducts series of Alexa request verifications against Amazon Alexa requirements .