
    /Jfb                     b   d dl Z 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 d dlmZ d dlmZ  G d de          Z G d	 d
e          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          ZeeeeeeedZdS )    N)BytesIO)SIGNED_HEADERS_BLACKLIST"STREAMING_UNSIGNED_PAYLOAD_TRAILERUNSIGNED_PAYLOAD
BaseSigner_get_body_as_dict_host_from_url)HTTPHeadersawscrtparse_qsurlsplit
urlunsplit)NoCredentialsError)percent_encode_sequencec                       e Zd ZdZg dZej        j        j        Z	dZ
dZd Zd Zd Zd Zd Zd Zd	 Zd
 Zd Zd ZdS )CrtSigV4AuthTAuthorizationz
X-Amz-DateX-Amz-Content-SHA256zX-Amz-Security-Tokenc                 >    || _         || _        || _        d | _        d S Ncredentials_service_name_region_name_expiration_in_secondsselfr   service_nameregion_names       T/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/botocore/crt/auth.py__init__zCrtSigV4Auth.__init__*   (    &)'&*###    c                     |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	algorithms       r!   _is_streaming_checksum_payloadz+CrtSigV4Auth._is_streaming_checksum_payload0   T    "?..z2>>$(()<==	)T**Oy}}T/B/Bi/OOr$   c                    | j         t                      t          j                                                            t          j        j                  }|                     |          }|                     |           t          j
        j                            | j         j        | j         j        | j         j                  }|                     |          rt"          }n$|                     |          r|r|}n
d }nt&          }|                     |          rt          j
        j        j        }nt          j
        j        j        }t          j
                            t          j
        j        j        | j        || j        | j        || j        | j        | j         ||| j!                  }| "                    |          }t          j
        #                    ||          }	|	$                                 | %                    ||           d S N)tzinfo)access_key_idsecret_access_keysession_token)r3   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   datetimeutcnowreplacetimezoneutc_get_existing_sha256_modify_request_before_signingr   authAwsCredentialsProvider
new_static
access_key
secret_keytokenr4   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   r1   datetime_nowexisting_sha256r=   explicit_payloadbody_headersigning_configcrt_requestfutures
             r!   add_authzCrtSigV4Auth.add_auth5   s   #$&&&  (//1199$( : 
 

 33G<<++G444%{ALL*5".9*0  M  
  
 ..w77 	0A--g66 	0 (#2  #'  /112BCC 	C3I K !+=BK55k58/!5$&#7"&"=&*&E.$/"&"= 6 
 
 88AA--k>JJ##G[99999r$   c                 ~   t          |j                  }|j        r|j        nd}|j        rfg }|j                                        D ].\  }}t          |          }|                    | d|            /|dz   d                    |          z   }n|j        r| d|j         }t          j
                            |j                                                  }d }|j        r1t          |j        d          r|j        }nt          |j                  }t          j
                            |j        |||          }	|	S N/=?&seek)methodpathheadersbody_streamr   urlru   paramsitemsstrappendjoinqueryr   httpHttpHeadersrv   bodyhasattrr   HttpRequestrt   
r   aws_request	url_partscrt_patharrayparamvaluecrt_headerscrt_body_streamrj   s
             r!   r`   z*CrtSigV4Auth._crt_request_from_aws_requestn   T   [_--	%.^<9>> 	7E + 2 8 8 : : 1 1uE

////0000#~7HH_ 	7"66Y_66Hk--k.A.G.G.I.IJJ  	<{'00 <"-"2")+*:";";k--%'	 . 
 
 r$   c                 \    t          j        t          |j                            |_        d S r   r
   
from_pairslistrv   r   r   signed_crt_requests      r!   rc   z#CrtSigV4Auth._apply_signing_changes   ,    )4#+,,
 
r$   c                 8    |                                 t          vS r   lowerr   r   namekwargss      r!   r]   z CrtSigV4Auth._should_sign_header       zz||#;;;r$   c                     | j         D ]}||j        v r|j        |= d|j        vrt          |j                  |j        d<   d S d S Nhost_PRESIGNED_HEADERS_BLOCKLISTrv   r	   ry   r   r1   hs      r!   rM   z+CrtSigV4Auth._modify_request_before_signing   _     2 	' 	'AGO##OA&((&4W[&A&AGOF### )(r$   c                 6    |j                             d          S Nr   rv   r-   r   r1   s     r!   rL   z!CrtSigV4Auth._get_existing_sha256       ""#9:::r$   c                 p    |j                             d          sdS |j                            dd          S NhttpsTpayload_signing_enabledry   
startswithr,   r-   r   s     r!   rT   z(CrtSigV4Auth._should_sha256_sign_payload   :    {%%g.. 	4
 ""#<dCCCr$   c                 
    |d uS r    r   rg   s     r!   rU   z.CrtSigV4Auth._should_add_content_sha256_header       t++r$   N)__name__
__module____qualname__REQUIRES_REGIONr   r   rN   AwsSignatureTypeHTTP_REQUEST_HEADERSr\   r^   r_   r"   r4   rl   r`   rc   r]   rM   rL   rT   rU   r   r$   r!   r   r      s        O$ $ $  k2GO!!%+ + +P P P
7: 7: 7:r  <
 
 
< < <B B B; ; ;D D D, , , , ,r$   r   c                   2     e Zd ZdZdZd Z fdZd Z xZS )CrtS3SigV4AuthFc                     d S r   r   r   s     r!   rL   z#CrtS3SigV4Auth._get_existing_sha256       tr$   c                 ,   |j                             d          }t          |dd           }|i }|                    dd           }||S d}|j                             di           }|                    d          }t          |t                    r!|                    d          dk    r|d	         }|j                            d
          r	||j        vrdS |j                             dd          rdS t                      	                    |          S )Nclient_configs3r   Content-MD5r'   r(   r)   headerr   r   Thas_streaming_inputF)
r,   r-   getattrr.   r/   ry   r   rv   superrT   )	r   r1   r   	s3_configsign_payloadchecksum_headerr2   r3   	__class__s	           r!   rT   z*CrtS3SigV4Auth._should_sha256_sign_payload   s%     ++O<<M466	 I !}}%>EE# ("?..z2>>$(()<==	i&& 	09==+>+>(+J+J'/O&&w//	go554 ?4e<< 	5 ww227;;;r$   c                     dS NTr   r   s     r!   rU   z0CrtS3SigV4Auth._should_add_content_sha256_header   r   r$   	r   r   r   r^   r_   rL   rT   rU   __classcell__r   s   @r!   r   r      sc        "!&  '< '< '< '< '<R      r$   r   c                       e Zd ZdZg dZej        j        j        Z	dZ
dZd Zd Zd Zd Zd Zd Zd	 Zd
 Zd Zd ZdS )CrtSigV4AsymAuthTr   c                 >    || _         || _        || _        d | _        d S r   r   r   s       r!   r"   zCrtSigV4AsymAuth.__init__   r#   r$   c                    | j         t                      t          j                                                            t          j        j                  }|                     |          }|                     |           t          j
        j                            | j         j        | j         j        | j         j                  }|                     |          rt"          }n$|                     |          r|r|}n
d }nt&          }|                     |          rt          j
        j        j        }nt          j
        j        j        }t          j
                            t          j
        j        j        | j        || j        | j        || j        | j        | j         ||| j!                  }| "                    |          }t          j
        #                    ||          }	|	$                                 | %                    ||           d S r7   )&r   r   rG   rH   rI   rJ   rK   rL   rM   r   rN   rO   rP   rQ   rR   rS   r4   r   rT   r   rU   rV   rW   rX   rY   rZ   V4_ASYMMETRICr\   r   r   r]   r^   r_   r   r`   ra   rb   rc   rd   s
             r!   rl   zCrtSigV4AsymAuth.add_auth   s   #$&&&  (//1199$( : 
 

 33G<<++G444%{ALL*5".9*0  M  
  
 ..w77 	0A--g66 	0 (#2  #'  /112BCC 	C3I K !+=BK55k5C/!5$&#7"&"=&*&E.$/"&"= 6 
 
 88AA--k>JJ##G[99999r$   c                 ~   t          |j                  }|j        r|j        nd}|j        rfg }|j                                        D ].\  }}t          |          }|                    | d|            /|dz   d                    |          z   }n|j        r| d|j         }t          j
                            |j                                                  }d }|j        r1t          |j        d          r|j        }nt          |j                  }t          j
                            |j        |||          }	|	S rn   rx   r   s
             r!   r`   z.CrtSigV4AsymAuth._crt_request_from_aws_request3  r   r$   c                 \    t          j        t          |j                            |_        d S r   r   r   s      r!   rc   z'CrtSigV4AsymAuth._apply_signing_changesQ  r   r$   c                 8    |                                 t          vS r   r   r   s      r!   r]   z$CrtSigV4AsymAuth._should_sign_headerW  r   r$   c                     | j         D ]}||j        v r|j        |= d|j        vrt          |j                  |j        d<   d S d S r   r   r   s      r!   rM   z/CrtSigV4AsymAuth._modify_request_before_signingZ  r   r$   c                 6    |j                             d          S r   r   r   s     r!   rL   z%CrtSigV4AsymAuth._get_existing_sha256d  r   r$   c                     |j                             di           }|                    d          }t          |t                    o|                    d          dk    S r&   r+   r0   s       r!   r4   z/CrtSigV4AsymAuth._is_streaming_checksum_payloadg  r5   r$   c                 p    |j                             d          sdS |j                            dd          S r   r   r   s     r!   rT   z,CrtSigV4AsymAuth._should_sha256_sign_payloadl  r   r$   c                 
    |d uS r   r   r   s     r!   rU   z2CrtSigV4AsymAuth._should_add_content_sha256_headerv  r   r$   N)r   r   r   r   r   r   rN   r   r   r\   r^   r_   r"   rl   r`   rc   r]   rM   rL   r4   rT   rU   r   r$   r!   r   r      s        O$ $ $  k2GO!!%+ + +7: 7: 7:r  <
 
 
< < <B B B; ; ;P P P
D D D, , , , ,r$   r   c                   2     e Zd ZdZdZd Z fdZd Z xZS )CrtS3SigV4AsymAuthFc                     d S r   r   r   s     r!   rL   z'CrtS3SigV4AsymAuth._get_existing_sha256  r   r$   c                 \   |j                             d          }t          |dd           }|i }|                    dd           }||S |j                            d          r	d|j        vrdS |j                             dd          rdS t                                          |          S )	Nr   r   r   r   r   Tr   F)r,   r-   r   ry   r   rv   r   rT   )r   r1   r   r   r   r   s        r!   rT   z.CrtS3SigV4AsymAuth._should_sha256_sign_payload  s      ++O<<M466	 I !}}%>EE# &&w//	GO334 ?4e<< 	5 ww227;;;r$   c                     dS r   r   r   s     r!   rU   z4CrtS3SigV4AsymAuth._should_add_content_sha256_header  r   r$   r   r   s   @r!   r   r   {  sc        "!&  "< "< "< "< "<H      r$   r   c                   \     e Zd ZdZej        j        j        Zef fd	Z	 fdZ
 fdZ xZS )CrtSigV4AsymQueryAuth  c                 \    t                                          |||           || _        d S r   r   r"   r   r   r   r   r    expiresr   s        r!   r"   zCrtSigV4AsymQueryAuth.__init__  /     	lK@@@&-###r$   c                    t                                          |           |j                            d          }|dk    r|j        d= t	          |j                  }t          |j        d          }d |                                D             }|j	        r)|
                    t          |                     d|_	        t          |          }|}|d         |d         |d	         ||d
         f}t          |          |_        d S )Ncontent-type0application/x-www-form-urlencoded; charset=utf-8Tkeep_blank_valuesc                 &    i | ]\  }}||d          S r   r   .0kvs      r!   
<dictcomp>zHCrtSigV4AsymQueryAuth._modify_request_before_signing.<locals>.<dictcomp>  s"    EEE$!Qa1EEEr$    r            )r   rM   rv   r-   r   ry   r   r   r{   dataupdater   r   r   )
r   r1   content_typer   query_string_parts
query_dictnew_query_stringpnew_url_partsr   s
            r!   rM   z4CrtSigV4AsymQueryAuth._modify_request_before_signing  s   ..w777 **>::MMM/ W[))	 &ioNNNEE*<*B*B*D*DEEE
 < 	 /88999GL2:>> 1qtQqT+;QqTB //r$   c                    t                                          ||           t          |j                  j        }t          |j                  }t          |d         |d         |d         ||d         f          |_        d S Nr   r   r   r   r   rc   r   ru   r   ry   r   r   r   r   signed_queryr   r   s        r!   rc   z,CrtSigV4AsymQueryAuth._apply_signing_changes  q    &&{4FGGG 2 788>[_%% %adAaD!A$ad%KLLr$   r   r   r   DEFAULT_EXPIRESr   rN   r   HTTP_REQUEST_QUERY_PARAMSr\   r"   rM   rc   r   r   s   @r!   r   r     s        Ok2LO ?N. . . . . .(0 (0 (0 (0 (0TM M M M M M M M Mr$   r   c                   &    e Zd ZdZdZdZd Zd ZdS )CrtS3SigV4AsymQueryAuthzS3 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                     dS NFr   r   s     r!   rT   z3CrtS3SigV4AsymQueryAuth._should_sha256_sign_payload  	    
 ur$   c                     dS r  r   r   s     r!   rU   z9CrtS3SigV4AsymQueryAuth._should_add_content_sha256_header      ur$   Nr   r   r   __doc__r^   r_   rT   rU   r   r$   r!   r  r    sJ          #!&      r$   r  c                   \     e Zd ZdZej        j        j        Zef fd	Z	 fdZ
 fdZ xZS )CrtSigV4QueryAuthr   c                 \    t                                          |||           || _        d S r   r   r   s        r!   r"   zCrtSigV4QueryAuth.__init__  r   r$   c                 ^   t                                          |           |j                            d          }|dk    r|j        d= t	          |j                  }d t          |j        d                                          D             }|j	        r!|
                    |j	                   i |_	        |j        r)|
                    t          |                     d|_        t          |          }|}|d         |d         |d	         ||d
         f}t          |          |_        d S )Nr   r   c                 &    i | ]\  }}||d          S r   r   r   s      r!   r   zDCrtSigV4QueryAuth._modify_request_before_signing.<locals>.<dictcomp>!  s2     
 
 
1 qt
 
 
r$   Tr   r   r   r   r   r   )r   rM   rv   r-   r   ry   r   r   r{   rz   r   r   r   r   r   )	r   r1   r   r   r   r   r   r  r   s	           r!   rM   z0CrtSigV4QueryAuth._modify_request_before_signing  s:   ..w777 **>::MMM/ W[))	
 
 4  egg	
 
 

 > 	 gn---GN < 	 /88999GL2:>> 1qtQqT+;QqTB //r$   c                    t                                          ||           t          |j                  j        }t          |j                  }t          |d         |d         |d         ||d         f          |_        d S r  r  r  s        r!   rc   z(CrtSigV4QueryAuth._apply_signing_changesB  r  r$   r  r   s   @r!   r  r    s        Ok2LO ?N. . . . . ..0 .0 .0 .0 .0`M M M M M M M M Mr$   r  c                   &    e Zd ZdZdZdZd Zd ZdS )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                     dS r  r   r   s     r!   rT   z/CrtS3SigV4QueryAuth._should_sha256_sign_payload_  r  r$   c                     dS r  r   r   s     r!   rU   z5CrtS3SigV4QueryAuth._should_add_content_sha256_headerf  r  r$   Nr  r   r$   r!   r  r  S  sJ          #!&      r$   r  )v4zv4-queryv4as3v4z
s3v4-querys3v4azs3v4a-query)rG   ior   botocore.authr   r   r   r   r   r	   botocore.compatr
   r   r   r   r   botocore.exceptionsr   botocore.utilsr   r   r   r   r   r   r  r  r  CRT_AUTH_TYPE_MAPSr   r$   r!   <module>r(     sw                         P O O O O O O O O O O O O O 2 2 2 2 2 2 2 2 2 2 2 2P, P, P, P, P,: P, P, P,f4 4 4 4 4\ 4 4 4nP, P, P, P, P,z P, P, P,f/ / / / /) / / /dBM BM BM BM BM, BM BM BMJ    3   ,HM HM HM HM HM HM HM HMV    +   6 !%*    r$   