o
    è’Ojôa  ã                   @   s  d dl mZ d dlmZmZmZmZmZmZ d dl	m
Z
mZmZmZmZmZ d dlmZ d dlmZ d dlmZ G dd„ deƒZG d	d
„ d
eƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZeeeeeeedœZdS )é    )ÚBytesIO)ÚSIGNED_HEADERS_BLACKLISTÚ"STREAMING_UNSIGNED_PAYLOAD_TRAILERÚUNSIGNED_PAYLOADÚ
BaseSignerÚ_get_body_as_dictÚ_host_from_url)ÚHTTPHeadersÚawscrtÚget_current_datetimeÚparse_qsÚurlsplitÚ
urlunsplit)ÚNoCredentialsError)Úregister_feature_id)Úpercent_encode_sequencec                   @   óz   e Zd ZdZg d¢ZejjjZ	dZ
dZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚCrtSigV4AuthT©ÚAuthorizationz
X-Amz-DateúX-Amz-Content-SHA256zX-Amz-Security-Tokenc                 C   ó   || _ || _|| _d | _d S ©N©ÚcredentialsÚ_service_nameÚ_region_nameÚ_expiration_in_seconds©Úselfr   Úservice_nameÚregion_name© r"   úW/var/www/html/pharmsmart-cdr-gen/venv/lib/python3.10/site-packages/botocore/crt/auth.pyÚ__init__1   ó   
zCrtSigV4Auth.__init__c                 C   ó0   |j  di ¡}| d¡}t|tƒo| d¡dkS ©NÚchecksumÚrequest_algorithmÚinÚtrailer©ÚcontextÚgetÚ
isinstanceÚdict©r   ÚrequestÚchecksum_contextÚ	algorithmr"   r"   r#   Ú_is_streaming_checksum_payload7   ó   
z+CrtSigV4Auth._is_streaming_checksum_payloadc           
      C   s  | j d u rtƒ ‚tdd�}|  |¡}|  |¡ tjjj| j j	| j j
| j jd�}|  |¡r/t}n|  |¡r<|r9|}nd }nt}|  |¡rItjjj}ntjjj}tjjtjjj| j|| j| j|| j| j| j||| jd�}|  |¡}tj ||¡}	|	  ¡  |  !||¡ d S )NF©Úremove_tzinfo©Úaccess_key_idÚsecret_access_keyÚsession_token©r4   Úsignature_typeÚcredentials_providerÚregionÚserviceÚdateÚshould_sign_headerÚuse_double_uri_encodeÚshould_normalize_uri_pathÚsigned_body_valueÚsigned_body_header_typeÚexpiration_in_seconds)"r   r   r   Ú_get_existing_sha256Ú_modify_request_before_signingr
   ÚauthÚAwsCredentialsProviderÚ
new_staticÚ
access_keyÚ
secret_keyÚtokenr5   r   Ú_should_sha256_sign_payloadr   Ú!_should_add_content_sha256_headerÚAwsSignedBodyHeaderTypeÚX_AMZ_CONTENT_SHA_256ÚNONEÚAwsSigningConfigÚAwsSigningAlgorithmÚV4Ú_SIGNATURE_TYPEr   r   Ú_should_sign_headerÚ_USE_DOUBLE_URI_ENCODEÚ_SHOULD_NORMALIZE_URI_PATHr   Ú_crt_request_from_aws_requestÚaws_sign_requestÚresultÚ_apply_signing_changes©
r   r2   Údatetime_nowÚexisting_sha256r?   Úexplicit_payloadÚbody_headerÚsigning_configÚcrt_requestÚfuturer"   r"   r#   Úadd_auth<   sN   



ý


ÿ
ô
zCrtSigV4Auth.add_authc           
      C   óÒ   t |jƒ}|jr|jnd}|jr4g }|j ¡ D ]\}}t|ƒ}| |› d|› �¡ q|d d |¡ }n|jr?|› d|j› �}t	j
 |j ¡ ¡}d }|jr\t|jdƒrW|j}nt|jƒ}t	j
j|j|||d�}	|	S ©Nú/ú=ú?ú&Úseek)ÚmethodÚpathÚheadersÚbody_stream©r   Úurlrr   ÚparamsÚitemsÚstrÚappendÚjoinÚqueryr
   ÚhttpÚHttpHeadersrs   ÚbodyÚhasattrr   ÚHttpRequestrq   ©
r   Úaws_requestÚ	url_partsÚcrt_pathÚarrayÚparamÚvalueÚcrt_headersÚcrt_body_streamrg   r"   r"   r#   r]   q   ó.   

üz*CrtSigV4Auth._crt_request_from_aws_requestc                 C   ó   t  t|jƒ¡|_d S r   ©r	   Ú
from_pairsÚlistrs   ©r   rƒ   Úsigned_crt_requestr"   r"   r#   r`   �   ó   
ÿz#CrtSigV4Auth._apply_signing_changesc                 K   ó   |  ¡ tvS r   ©Úlowerr   ©r   ÚnameÚkwargsr"   r"   r#   rZ   •   ó   z CrtSigV4Auth._should_sign_headerc                 C   ó@   | j D ]}||jv r|j|= qd|jvrt|jƒ|jd< d S d S ©NÚhost©Ú_PRESIGNED_HEADERS_BLOCKLISTrs   r   rv   ©r   r2   Úhr"   r"   r#   rJ   ˜   ó   

€
ÿz+CrtSigV4Auth._modify_request_before_signingc                 C   ó   |j  d¡S ©Nr   ©rs   r.   ©r   r2   r"   r"   r#   rI   ¢   r™   z!CrtSigV4Auth._get_existing_sha256c                 C   ó   |j  d¡sdS |j dd¡S ©NÚhttpsTÚpayload_signing_enabled©rv   Ú
startswithr-   r.   r¥   r"   r"   r#   rQ   ¥   ó   z(CrtSigV4Auth._should_sha256_sign_payloadc                 C   ó   |d uS r   r"   ©r   rd   r"   r"   r#   rR   ¯   ó   z.CrtSigV4Auth._should_add_content_sha256_headerN)Ú__name__Ú
__module__Ú__qualname__ÚREQUIRES_REGIONrž   r
   rK   ÚAwsSignatureTypeÚHTTP_REQUEST_HEADERSrY   r[   r\   r$   r5   ri   r]   r`   rZ   rJ   rI   rQ   rR   r"   r"   r"   r#   r   %   s     
5

r   c                       ó4   e Zd ZdZdZdd„ Z‡ fdd„Zdd„ Z‡  ZS )ÚCrtS3SigV4AuthFc                 C   ó   d S r   r"   r¥   r"   r"   r#   rI   ¹   ó   z#CrtS3SigV4Auth._get_existing_sha256c                    s°   |j  d¡}t|dd ƒ}|d u ri }| dd ¡}|d ur|S d}|j  di ¡}| d¡}t|tƒr<| d¡dkr<|d	 }|j d
¡rG||jvrIdS |j  dd¡rRdS tƒ  	|¡S )NÚclient_configÚs3r©   úContent-MD5r(   r)   r*   Úheaderr—   r¨   TÚhas_streaming_inputF)
r-   r.   Úgetattrr/   r0   rv   r«   rs   ÚsuperrQ   )r   r2   rº   Ú	s3_configÚsign_payloadÚchecksum_headerr3   r4   ©Ú	__class__r"   r#   rQ   ½   s(   

ÿþz*CrtS3SigV4Auth._should_sha256_sign_payloadc                 C   ó   dS ©NTr"   r®   r"   r"   r#   rR   æ   r¹   z0CrtS3SigV4Auth._should_add_content_sha256_header©	r°   r±   r²   r[   r\   rI   rQ   rR   Ú__classcell__r"   r"   rÄ   r#   r·   ´   s    )r·   c                   @   r   )ÚCrtSigV4AsymAuthTr   c                 C   r   r   r   r   r"   r"   r#   r$   ÷   r%   zCrtSigV4AsymAuth.__init__c           
      C   s  t dƒ | jd u rtƒ ‚tdd�}|  |¡}|  |¡ tjjj	| jj
| jj| jjd�}|  |¡r3t}n|  |¡r@|r=|}nd }nt}|  |¡rMtjjj}ntjjj}tjjtjjj| j|| j| j|| j| j| j||| jd�}|  |¡}tj  ||¡}	|	 !¡  |  "||¡ d S )NÚSIGV4A_SIGNINGFr7   r9   r=   )#r   r   r   r   rI   rJ   r
   rK   rL   rM   rN   rO   rP   r5   r   rQ   r   rR   rS   rT   rU   rV   rW   ÚV4_ASYMMETRICrY   r   r   rZ   r[   r\   r   r]   r^   r_   r`   ra   r"   r"   r#   ri   ý   sP   



ý


ÿ
ô
zCrtSigV4AsymAuth.add_authc           
      C   rj   rk   ru   r‚   r"   r"   r#   r]   3  r‹   z.CrtSigV4AsymAuth._crt_request_from_aws_requestc                 C   rŒ   r   r�   r�   r"   r"   r#   r`   Q  r’   z'CrtSigV4AsymAuth._apply_signing_changesc                 K   r“   r   r”   r–   r"   r"   r#   rZ   W  r™   z$CrtSigV4AsymAuth._should_sign_headerc                 C   rš   r›   r�   rŸ   r"   r"   r#   rJ   Z  r¡   z/CrtSigV4AsymAuth._modify_request_before_signingc                 C   r¢   r£   r¤   r¥   r"   r"   r#   rI   d  r™   z%CrtSigV4AsymAuth._get_existing_sha256c                 C   r&   r'   r,   r1   r"   r"   r#   r5   g  r6   z/CrtSigV4AsymAuth._is_streaming_checksum_payloadc                 C   r¦   r§   rª   r¥   r"   r"   r#   rQ   l  r¬   z,CrtSigV4AsymAuth._should_sha256_sign_payloadc                 C   r­   r   r"   r®   r"   r"   r#   rR   v  r¯   z2CrtSigV4AsymAuth._should_add_content_sha256_headerN)r°   r±   r²   r³   rž   r
   rK   r´   rµ   rY   r[   r\   r$   ri   r]   r`   rZ   rJ   rI   r5   rQ   rR   r"   r"   r"   r#   rÊ   ë   s     
6

rÊ   c                       r¶   )ÚCrtS3SigV4AsymAuthFc                 C   r¸   r   r"   r¥   r"   r"   r#   rI   €  r¹   z'CrtS3SigV4AsymAuth._get_existing_sha256c                    st   |j  d¡}t|dd ƒ}|d u ri }| dd ¡}|d ur|S |j d¡r)d|jvr+dS |j  dd¡r4dS tƒ  |¡S )	Nrº   r»   r©   r¨   r¼   Tr¾   F)r-   r.   r¿   rv   r«   rs   rÀ   rQ   )r   r2   rº   rÁ   rÂ   rÄ   r"   r#   rQ   „  s   
ÿþz.CrtS3SigV4AsymAuth._should_sha256_sign_payloadc                 C   rÆ   rÇ   r"   r®   r"   r"   r#   rR   ¨  r¹   z4CrtS3SigV4AsymAuth._should_add_content_sha256_headerrÈ   r"   r"   rÄ   r#   rÍ   {  s    $rÍ   c                       óF   e Zd ZdZejjjZef‡ fdd„	Z	‡ fdd„Z
‡ fdd„Z‡  ZS )ÚCrtSigV4AsymQueryAuthé  c                    ó   t ƒ  |||¡ || _d S r   ©rÀ   r$   r   ©r   r   r    r!   ÚexpiresrÄ   r"   r#   r$   ±  ó   
zCrtSigV4AsymQueryAuth.__init__c           	         s¤   t ƒ  |¡ |j d¡}|dkr|jd= t|jƒ}t|jdd�}dd„ | ¡ D ƒ}|j	r6| 
t|ƒ¡ d|_	t|ƒ}|}|d |d	 |d
 ||d f}t|ƒ|_d S )Núcontent-typeú0application/x-www-form-urlencoded; charset=utf-8T©Úkeep_blank_valuesc                 S   ó   i | ]	\}}||d  “qS ©r   r"   ©Ú.0ÚkÚvr"   r"   r#   Ú
<dictcomp>Ç  s    zHCrtSigV4AsymQueryAuth._modify_request_before_signing.<locals>.<dictcomp>Ú r   é   é   é   )rÀ   rJ   rs   r.   r   rv   r   r|   rx   ÚdataÚupdater   r   r   )	r   r2   Úcontent_typer„   Úquery_string_partsÚ
query_dictÚnew_query_stringÚpÚnew_url_partsrÄ   r"   r#   rJ   ·  s   
	z4CrtSigV4AsymQueryAuth._modify_request_before_signingc                    óL   t ƒ  ||¡ t|jƒj}t|jƒ}t|d |d |d ||d fƒ|_d S ©Nr   râ   rã   rä   ©rÀ   r`   r   rr   r|   rv   r   ©r   rƒ   r‘   Úsigned_queryrë   rÄ   r"   r#   r`   á  ó   
(	z,CrtSigV4AsymQueryAuth._apply_signing_changes©r°   r±   r²   ÚDEFAULT_EXPIRESr
   rK   r´   ÚHTTP_REQUEST_QUERY_PARAMSrY   r$   rJ   r`   rÉ   r"   r"   rÄ   r#   rÏ   ­  s    
ÿ*rÏ   c                   @   ó(   e Zd ZdZdZdZdd„ Zdd„ ZdS )ÚCrtS3SigV4AsymQueryAuthz¢S3 SigV4A auth using query parameters.
    This signer will sign a request using query parameters and signature
    version 4A, i.e a "presigned url" signer.
    Fc                 C   rÆ   ©NFr"   r¥   r"   r"   r#   rQ   ü  ó   z3CrtS3SigV4AsymQueryAuth._should_sha256_sign_payloadc                 C   rÆ   rø   r"   r®   r"   r"   r#   rR     r¹   z9CrtS3SigV4AsymQueryAuth._should_add_content_sha256_headerN©r°   r±   r²   Ú__doc__r[   r\   rQ   rR   r"   r"   r"   r#   r÷   ò  s    r÷   c                       rÎ   )ÚCrtSigV4QueryAuthrÐ   c                    rÑ   r   rÒ   rÓ   rÄ   r"   r#   r$     rÕ   zCrtSigV4QueryAuth.__init__c                    s¸   t ƒ  |¡ |j d¡}|dkr|jd= t|jƒ}dd„ t|jdd� ¡ D ƒ}|j	r3| 
|j	¡ i |_	|jr@| 
t|ƒ¡ d|_t|ƒ}|}|d |d	 |d
 ||d f}t|ƒ|_d S )NrÖ   r×   c                 S   rÚ   rÛ   r"   rÜ   r"   r"   r#   rà   !  s    ÿÿzDCrtSigV4QueryAuth._modify_request_before_signing.<locals>.<dictcomp>TrØ   rá   r   râ   rã   rä   )rÀ   rJ   rs   r.   r   rv   r   r|   rx   rw   ræ   rå   r   r   r   )r   r2   rç   r„   ré   rê   rë   rì   rÄ   r"   r#   rJ     s*   
ÿü	z0CrtSigV4QueryAuth._modify_request_before_signingc                    rí   rî   rï   rð   rÄ   r"   r#   r`   B  rò   z(CrtSigV4QueryAuth._apply_signing_changesró   r"   r"   rÄ   r#   rü     s    
ÿ0rü   c                   @   rö   )ÚCrtS3SigV4QueryAutha  S3 SigV4 auth using query parameters.
    This signer will sign a request using query parameters and signature
    version 4, i.e a "presigned url" signer.
    Based off of:
    http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html
    Fc                 C   rÆ   rø   r"   r¥   r"   r"   r#   rQ   _  rù   z/CrtS3SigV4QueryAuth._should_sha256_sign_payloadc                 C   rÆ   rø   r"   r®   r"   r"   r#   rR   f  r¹   z5CrtS3SigV4QueryAuth._should_add_content_sha256_headerNrú   r"   r"   r"   r#   rý   S  s    rý   )Úv4zv4-queryÚv4aÚs3v4z
s3v4-queryÚs3v4azs3v4a-queryN)Úior   Úbotocore.authr   r   r   r   r   r   Úbotocore.compatr	   r
   r   r   r   r   Úbotocore.exceptionsr   Úbotocore.useragentr   Úbotocore.utilsr   r   r·   rÊ   rÍ   rÏ   r÷   rü   rý   ÚCRT_AUTH_TYPE_MAPSr"   r"   r"   r#   Ú<module>   s0      7 2EK
ù