o
    6Wc                     @   s   d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 ddl
mZ G dd	 d	eZd
d Zdd Zdd Zdd Zdd Zdd ZdS )    N)datetime)urlparse)urlopen)crypto   )loggerc                   @   s   e Zd ZdS )VerificationErrorN)__name__
__module____qualname__ r   r   4D:\Flask\env\Lib\site-packages\flask_ask/verifier.pyr      s    r   c                 C   s>   t | stdt|  }ttj|}t|std|S )Nz#Certificate URL verification failedzCertificate verification failed)_valid_certificate_urlr   r   readr   load_certificateZFILETYPE_PEM_valid_certificate)cert_urlZ	cert_datacertr   r   r   r      s   r   c              
   C   sD   zt |}t| ||d W d S  tjy! } zt|d }~ww )Nsha1)base64	b64decoder   verifyErrorr   )r   	signatureZsigned_dataer   r   r   verify_signature   s   
r   c                 C   s0   t  | jd d }t| dkrtdd S )N)tzinfo   zTimestamp verification failed)r   utcnowreplaceabstotal_secondsr   )	timestampdtr   r   r   verify_timestamp"   s   r$   c                 C   s   | |vrt dd S )Nz"Application ID verification failed)r   )	candidaterecordsr   r   r   verify_application_id(   s   r'   c                 C   s6   t | }|jdkr|jdkrt|jdrdS dS )Nhttpszs3.amazonaws.comz
/echo.api/TF)r   schemehostname	posixpathnormpathpath
startswith)r   
parsed_urlr   r   r   r   -   s   

r   c                 C   s   |   d}t|d}t |krdS d}td|  D ]}| |}| d}t	|}d|kr<d|kr<d} nq|sAdS dS )Nzutf-8z%Y%m%d%H%M%SZFr   subjectAltNamezDNS:echo-api.amazon.comT)
Zget_notAfterdecoder   strptimer   rangeZget_extension_countget_extensionZget_short_namestr)r   Z	not_afterfoundi	extensionZ
short_namevaluer   r   r   r   6   s    
r   )osr   r+   r   Zsix.moves.urllib.parser   Zsix.moves.urllib.requestr   ZOpenSSLr    r   	Exceptionr   r   r   r$   r'   r   r   r   r   r   r   <module>   s    
	