
     ha                     8   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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y)    )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                       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y)CrtSigV4AuthTAuthorizationz
X-Amz-DateX-Amz-Content-SHA256zX-Amz-Security-Tokenc                 <    || _         || _        || _        d | _        y Ncredentials_service_name_region_name_expiration_in_secondsselfr   service_nameregion_names       m/home/developers/rajanand/mypropertyqr-fmb-refixing-v2/venv/lib/python3.12/site-packages/botocore/crt/auth.py__init__zCrtSigV4Auth.__init__1   "    &)'&*#    c                     |j                   j                  di       }|j                  d      }t        |t              xr |j                  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_payload7   J    "??..z2>$(()<=	)T*Oy}}T/Bi/OOr&   c                 J   | j                   
t               t        d      }| j                  |      }| j	                  |       t
        j                  j                  j                  | j                   j                  | j                   j                  | j                   j                        }| j                  |      rt        }n| j                  |      r|r|}n	d }nt        }| j!                  |      r%t
        j                  j"                  j$                  }n$t
        j                  j"                  j&                  }t
        j                  j)                  t
        j                  j*                  j,                  | j.                  || j0                  | j2                  || j4                  | j6                  | j8                  ||| j:                        }| j=                  |      }t
        j                  j?                  ||      }	|	jA                          | jC                  ||       y )NFremove_tzinfoaccess_key_idsecret_access_keysession_tokenr5   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tokenr6   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    r3   datetime_nowexisting_sha256rA   explicit_payloadbody_headersigning_configcrt_requestfutures
             r#   add_authzCrtSigV4Auth.add_auth<   s   #$&&+%@ 33G<++G4%{{AALL**55"..99**00  M  
 ..w7A--g6#2 #' /112BC33II  !++==BBK55kk5588//!5$$&&#77"&"="=&*&E&E.$/"&"="= 6 
 88A--k>J##G[9r&   c                    t        |j                        }|j                  r|j                  nd}|j                  r]g }|j                  j	                         D ]&  \  }}t        |      }|j                  | d|        ( |dz   dj                  |      z   }n|j                  r| d|j                   }t        j                  j                  |j                  j	                               }d }|j                  r8t        |j                  d      r|j                  }nt        |j                        }t        j                  j!                  |j"                  |||      }	|	S N/=?&seek)methodpathheadersbody_streamr   urlrt   paramsitemsstrappendjoinqueryr   httpHttpHeadersru   bodyhasattrr   HttpRequestrs   
r    aws_request	url_partscrt_patharrayparamvaluecrt_headerscrt_body_streamri   s
             r#   r_   z*CrtSigV4Auth._crt_request_from_aws_requestq   6   [__-	%.^^9>>E + 2 2 8 8 : 1uE
waw/01  #~7H__"1Y__$56Hkk--k.A.A.G.G.IJ {''0"-"2"2")+*:*:";kk--%%'	 . 
 r&   c                 ^    t        j                  t        |j                              |_        y r   r
   
from_pairslistru   r    r   signed_crt_requests      r#   rb   z#CrtSigV4Auth._apply_signing_changes   $    )44#++,
r&   c                 .    |j                         t        vS r   lowerr   r    namekwargss      r#   r\   z CrtSigV4Auth._should_sign_header       zz|#;;;r&   c                     | j                   D ]  }||j                  v s|j                  |=   d|j                  vr#t        |j                        |j                  d<   y y Nhost_PRESIGNED_HEADERS_BLOCKLISTru   r	   rx   r    r3   hs      r#   rL   z+CrtSigV4Auth._modify_request_before_signing   [     22 	'AGOO#OOA&	' (&4W[[&AGOOF# )r&   c                 8    |j                   j                  d      S Nr   ru   r/   r    r3   s     r#   rK   z!CrtSigV4Auth._get_existing_sha256       ""#9::r&   c                 r    |j                   j                  d      sy|j                  j                  dd      S NhttpsTpayload_signing_enabledrx   
startswithr.   r/   r   s     r#   rS   z(CrtSigV4Auth._should_sha256_sign_payload   1    {{%%g.
 ""#<dCCr&   c                 
    |d uS r    r    rf   s     r#   rT   z.CrtSigV4Auth._should_add_content_sha256_header       t++r&   N)__name__
__module____qualname__REQUIRES_REGIONr   r   rM   AwsSignatureTypeHTTP_REQUEST_HEADERSr[   r]   r^   r$   r6   rk   r_   rb   r\   rL   rK   rS   rT   r   r&   r#   r   r   %   sh    O$  kk22GGO!!%+P
3:j<
<B;D,r&   r   c                   2     e Zd ZdZdZd Z fdZd Z xZS )CrtS3SigV4AuthFc                      y r   r   r   s     r#   rK   z#CrtS3SigV4Auth._get_existing_sha256       r&   c                    |j                   j                  d      }t        |dd       }|i }|j                  dd       }||S d}|j                   j                  di       }|j                  d      }t        |t              r|j                  d      dk(  r|d	   }|j
                  j                  d
      r||j                  vry|j                   j                  dd      ryt        | %  |      S )Nclient_configs3r   Content-MD5r)   r*   r+   headerr   r   Thas_streaming_inputF)
r.   r/   getattrr0   r1   rx   r   ru   superrS   )	r    r3   r   	s3_configsign_payloadchecksum_headerr4   r5   	__class__s	           r#   rS   z*CrtS3SigV4Auth._should_sha256_sign_payload   s      ++O<M46	 I !}}%>E# ("??..z2>$(()<=	i&9==+>(+J'/O&&w/goo5 ??4e< w27;;r&   c                      yNTr   r   s     r#   rT   z0CrtS3SigV4Auth._should_add_content_sha256_header   r   r&   	r   r   r   r]   r^   rK   rS   rT   __classcell__r   s   @r#   r   r      s    "!&'<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y)CrtSigV4AsymAuthTr   c                 <    || _         || _        || _        d | _        y r   r   r   s       r#   r$   zCrtSigV4AsymAuth.__init__   r%   r&   c                 `   t        d       | j                  
t               t        d      }| j	                  |      }| j                  |       t        j                  j                  j                  | j                  j                  | j                  j                  | j                  j                        }| j                  |      rt        }n| j                  |      r|r|}n	d }nt         }| j#                  |      r%t        j                  j$                  j&                  }n$t        j                  j$                  j(                  }t        j                  j+                  t        j                  j,                  j.                  | j0                  || j2                  | j4                  || j6                  | j8                  | j:                  ||| j<                        }| j?                  |      }t        j                  jA                  ||      }	|	jC                          | jE                  ||       y )NSIGV4A_SIGNINGFr9   r;   r?   )#r   r   r   r   rK   rL   r   rM   rN   rO   rP   rQ   rR   r6   r   rS   r   rT   rU   rV   rW   rX   rY   V4_ASYMMETRICr[   r   r   r\   r]   r^   r   r_   r`   ra   rb   rc   s
             r#   rk   zCrtSigV4AsymAuth.add_auth   s   ,-#$&&+%@ 33G<++G4%{{AALL**55"..99**00  M  
 ..w7A--g6#2 #' /112BC33II  !++==BBK55kk55CC//!5$$&&#77"&"="=&*&E&E.$/"&"="= 6 
 88A--k>J##G[9r&   c                    t        |j                        }|j                  r|j                  nd}|j                  r]g }|j                  j	                         D ]&  \  }}t        |      }|j                  | d|        ( |dz   dj                  |      z   }n|j                  r| d|j                   }t        j                  j                  |j                  j	                               }d }|j                  r8t        |j                  d      r|j                  }nt        |j                        }t        j                  j!                  |j"                  |||      }	|	S rm   rw   r   s
             r#   r_   z.CrtSigV4AsymAuth._crt_request_from_aws_request3  r   r&   c                 ^    t        j                  t        |j                              |_        y r   r   r   s      r#   rb   z'CrtSigV4AsymAuth._apply_signing_changesQ  r   r&   c                 .    |j                         t        vS r   r   r   s      r#   r\   z$CrtSigV4AsymAuth._should_sign_headerW  r   r&   c                     | j                   D ]  }||j                  v s|j                  |=   d|j                  vr#t        |j                        |j                  d<   y y r   r   r   s      r#   rL   z/CrtSigV4AsymAuth._modify_request_before_signingZ  r   r&   c                 8    |j                   j                  d      S r   r   r   s     r#   rK   z%CrtSigV4AsymAuth._get_existing_sha256d  r   r&   c                     |j                   j                  di       }|j                  d      }t        |t              xr |j                  d      dk(  S r(   r-   r2   s       r#   r6   z/CrtSigV4AsymAuth._is_streaming_checksum_payloadg  r7   r&   c                 r    |j                   j                  d      sy|j                  j                  dd      S r   r   r   s     r#   rS   z,CrtSigV4AsymAuth._should_sha256_sign_payloadl  r   r&   c                 
    |d uS r   r   r   s     r#   rT   z2CrtSigV4AsymAuth._should_add_content_sha256_headerv  r   r&   N)r   r   r   r   r   r   rM   r   r   r[   r]   r^   r$   rk   r_   rb   r\   rL   rK   r6   rS   rT   r   r&   r#   r   r      sh    O$  kk22GGO!!%+4:l<
<B;P
D,r&   r   c                   2     e Zd ZdZdZd Z fdZd Z xZS )CrtS3SigV4AsymAuthFc                      y r   r   r   s     r#   rK   z'CrtS3SigV4AsymAuth._get_existing_sha256  r   r&   c                 4   |j                   j                  d      }t        |dd       }|i }|j                  dd       }||S |j                  j	                  d      rd|j
                  vry|j                   j                  dd      ryt        |   |      S )	Nr   r   r   r   r   Tr   F)r.   r/   r   rx   r   ru   r   rS   )r    r3   r   r   r   r   s        r#   rS   z.CrtS3SigV4AsymAuth._should_sha256_sign_payload  s      ++O<M46	 I !}}%>E# &&w/GOO3 ??4e< w27;;r&   c                      yr   r   r   s     r#   rT   z4CrtS3SigV4AsymAuth._should_add_content_sha256_header  r   r&   r   r   s   @r#   r   r   {  s    "!&"<Hr&   r   c                   z     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                 6    t         |   |||       || _        y r   r   r$   r   r    r   r!   r"   expiresr   s        r#   r$   zCrtSigV4AsymQueryAuth.__init__       	lK@&-#r&   c                    t         |   |       |j                  j                  d      }|dk(  r|j                  d= t	        |j
                        }t        |j                  d      }|j                         D ci c]  \  }}||d    }}}|j                  r!|j                  t        |             d|_	        t        |      }|}	|	d   |	d   |	d   ||	d	   f}
t        |
      |_        y c c}}w 
Nzcontent-typez0application/x-www-form-urlencoded; charset=utf-8T)keep_blank_valuesr             )r   rL   ru   r/   r   rx   r   r~   rz   dataupdater   r   r   )r    r3   content_typer   query_string_partskv
query_dictnew_query_stringpnew_url_partsr   s              r#   rL   z4CrtSigV4AsymQueryAuth._modify_request_before_signing  s    .w7 **>:MM/ W[[)	 &iooN*<*B*B*DE$!Qa1gE
E << /89GL2:> 1qtQqT+;QqTB /1 Fs   =C.c                     t         |   ||       t        |j                        j                  }t        |j
                        }t        |d   |d   |d   ||d   f      |_        y Nr   r   r   r   r   rb   r   rt   r~   rx   r   r    r   r   signed_queryr   r   s        r#   rb   z,CrtSigV4AsymQueryAuth._apply_signing_changes  a    &{4FG 2 7 78>>[__% %adAaD!A$ad%KLr&   r   r   r   DEFAULT_EXPIRESr   rM   r   HTTP_REQUEST_QUERY_PARAMSr[   r$   rL   rb   r   r   s   @r#   r   r     s:    Okk22LLO ?N.(0TM Mr&   r   c                   $    e Zd ZdZdZdZd Zd Zy)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                      yNFr   r   s     r#   rS   z3CrtS3SigV4AsymQueryAuth._should_sha256_sign_payload      
 r&   c                      yr  r   r   s     r#   rT   z9CrtS3SigV4AsymQueryAuth._should_add_content_sha256_header      r&   Nr   r   r   __doc__r]   r^   rS   rT   r   r&   r#   r  r    s     #!&r&   r  c                   z     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                 6    t         |   |||       || _        y r   r   r   s        r#   r$   zCrtSigV4QueryAuth.__init__  r   r&   c                 @   t         
|   |       |j                  j                  d      }|dk(  r|j                  d= t	        |j
                        }t        |j                  d      j                         D ci c]  \  }}||d    }}}|j                  r"|j                  |j                         i |_	        |j                  r!|j                  t        |             d|_        t        |      }|}|d   |d   |d   ||d	   f}	t        |	      |_        y c c}}w r   )r   rL   ru   r/   r   rx   r   r~   rz   ry   r   r   r   r   r   )r    r3   r   r   r   r   r   r   r   r   r   s             r#   rL   z0CrtSigV4QueryAuth._modify_request_before_signing  s   .w7 **>:MM/ W[[)	 !4eg	
1 qtG

 
 >>gnn-GN << /89GL2:> 1qtQqT+;QqTB /?
s   ;Dc                     t         |   ||       t        |j                        j                  }t        |j
                        }t        |d   |d   |d   ||d   f      |_        y r   r   r   s        r#   rb   z(CrtSigV4QueryAuth._apply_signing_changesB  r   r&   r  r   s   @r#   r  r    s:    Okk22LLO ?N..0`M Mr&   r  c                   $    e Zd ZdZdZdZd Zd Zy)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                      yr  r   r   s     r#   rS   z/CrtS3SigV4QueryAuth._should_sha256_sign_payload_  r  r&   c                      yr  r   r   s     r#   rT   z5CrtS3SigV4QueryAuth._should_add_content_sha256_headerf  r
  r&   Nr  r   r&   r#   r  r  S  s     #!&r&   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#   <module>r!     s       3 2 2L,: L,^4\ 4nM,z M,`/) /dBM, BMJ3 ,HM HMV+ 6 !%* r&   