
    'wf:                         d dl Z d dlZd dlZd dlmZ d dlmZmZmZm	Z	m
Z
mZmZ d dlmZ  G d de      Zd Z	 ddZ G d	 d
e      Zd Z	 ddZd Z	 ddZy)    N)UnknownClientMethodError)RequestSignerS3PostPresignerUnknownSignatureVersionError UnsupportedSignatureVersionError_should_use_global_endpointcreate_request_objectprepare_request_dict)	ArnParserc                   H    e Zd ZddZ	 	 	 	 ddZd Z	 	 ddZeZ	 	 	 d	dZy)
AioRequestSignerNc                 B   K   | j                  ||       d {   S 7 wN)sign)selfoperation_namerequestkwargss       g/home/panchajanya/Development/work/volatility3/venv/lib/python3.12/site-packages/aiobotocore/signers.pyhandlerzAioRequestSigner.handler   s     
 YY~w7777s   c           	      `  K   |}|| j                   }|| j                  }| j                  |||j                         d {   }| j                  j                  dj                  | j                  j                         |      ||| j                   || |       d {    |t        j                  k7  r|||d}	|||	d<   |j                  j                  di       }
|s|
j                  d      r|
d   |	d<   |
j                  d      r|
d   |	d<   |
j                  d	      r|
d	   |	d	<   |
j                  d
      | j                  |	|
d
   |
d          	  | j                  di |	 d {   }|j!                  |       y y 7 B7 7 # t        $ r}|dk7  rt        |      |d }~ww xY ww)Nzbefore-sign.{}.{})r   signing_nameregion_namesignature_versionrequest_signerr   )r   r   r   expiressigningregionr   r   request_credentialsidentity_cache	cache_keystandardr    )_region_name_signing_name_choose_signercontext_event_emitteremitformat_service_id	hyphenizebotocoreUNSIGNEDget_resolve_identity_cacheget_auth_instancer   r   add_auth)r   r   r   r   signing_type
expires_inr   explicit_region_namer   r   signing_contextauthes                r   r   zAioRequestSigner.sign   s      +++K--L"&"5"5L'//#
 

 !!&&&&  **,n %))/) ' 

 
	
 
	
  1 11 ,*%6F
 %$.y!%oo11)R@O'O,?,?,I(7(A}%"">2)8)H~&""#890?)1,- ""#34@,,#$45#K0
3T33=f== MM'"C 2#


	
H >/ :-:*;  Gs[   ?F.FAF.FB7F.F
 +F,F
 0F.F.F
 
	F+F&&F++F.c                 `  K   ddd}|j                  |d      }|j                  d      xs | j                  }|j                  di       }|j                  d| j                        }|j                  d| j                        }	|t        j
                  ur|j                  |      s||z  }| j                  j                  d	j                  | j                  j                         |      ||	||
       d {   \  }
}|*|}|t        j
                  ur|j                  |      s||z  }|S 7 5w)Nz-presign-postz-query)presign-postpresign-url 	auth_typer   r   r   zchoose-signer.{}.{})r   r   r   r(   )r0   _signature_versionr&   r%   r.   r/   endswithr)   emit_until_responser+   r,   r-   )r   r   r4   r(   signing_type_suffix_mapsuffixr   r   r   r   r   responses               r   r'   zAioRequestSigner._choose_signer^   s?    +##
 ),,\2> $KK4O8O8O++i,{{>43E3EFkk(D,=,=>X%6%66%..v6'"&"5"5"I"I!((  **,n &#/ #J #
 
  ( "):)::)226:!V+!  )
s   C4D.6D,76D.c                   K   || j                   }t        j                  j                  j	                  |      }|t        |      |j                  du r:d }| j                  "| j                  j                          d {   } ||      }|S |xs | j                  }	t        |dd       du r&|d   }
|d   }|
j                  |       d {   }	|d= d }|	|	j                          d {   }||d<   |j                  r4| j                  t        j                  j!                         ||d<   ||d<    |d	i |}|S 7 7 t7 Ww)
Nr#   TREQUIRES_IDENTITY_CACHEr    r!   credentialsr   service_namer$   )r?   r.   r8   AUTH_TYPE_MAPSr0   r   REQUIRES_TOKEN_auth_tokenget_frozen_token_credentialsgetattrget_credentialsget_frozen_credentialsREQUIRES_REGIONr%   
exceptionsNoRegionError)r   r   r   r   r   r   clsfrozen_tokenr8   rG   cachekeyfrozen_credentialss                r   r2   z"AioRequestSigner.get_auth_instance   sl     $ $ 7 7mm**../@A;."3  %L+%)%5%5%F%F%HH|$DK)>T->->3148D@+,E%C % 5 5c ::K{#!"'2'I'I'K!K 2}  ())7799$/F=!%1F>"}V}+  I ;
 "Ls8   A?EE AEEE,E-AEEEc                    K   t        |      }| j                  |||d||       d {    |j                          |j                  S 7  w)Nr<   )r	   r   prepareurl)r   request_dictr   r5   r   r   r   s          r   generate_presigned_urlz'AioRequestSigner.generate_presigned_url   sU      (5ii
 	
 	
 	{{	
s   %A
A!A
)NN)Nr"   NN)  NN)	__name__
__module____qualname__r   r   r'   r2   get_authr]   r$       r   r   r      sG    8 B#H'!Z  )X !H rc   r   c                     t         | d<   y )Ngenerate_db_auth_token)re   class_attributesr   s     r   add_generate_db_auth_tokenrh          1G-.rc   c                    K   |}|| j                   j                  }d|d}ddi |dd}d}| | d	| }	t        ||	       | j                  j	                  d||d
d       d{   }
|
t        |      d S 7 w)a  Generates an auth token used to connect to a db with IAM credentials.

    :type DBHostname: str
    :param DBHostname: The hostname of the database to connect to.

    :type Port: int
    :param Port: The port number the database is listening on.

    :type DBUsername: str
    :param DBUsername: The username to log in as.

    :type Region: str
    :param Region: The region the database is in. If None, the client
        region will be used.

    :return: A presigned url which can be used as an auth token.
    Nconnect)ActionDBUser/r=   GET)url_pathquery_stringheadersbodymethodzhttps://:i  zrds-db)r   r\   r   r5   r   )metar   r
   _request_signerr]   len)r   
DBHostnamePort
DBUsernameRegionr   paramsr\   schemeendpoint_urlpresigned_urls              r   re   re      s     ( F~&& F L FXj\4&1L|4..EE ! F  M V''s   A"A9$A7%A9c                       e Zd Z	 	 	 	 ddZy)AioS3PostPresignerNc                   K   |i }|g }i }t         j                   j                         }|t        j                  |      z   }|j                  t        j
                  j                        |d<   g |d<   |D ]  }	|d   j                  |	        t        |      }
||
j                  d<   ||
j                  d<   | j                  j                  d|
|d       d {    |
j                  |dS 7 w)	N)seconds
expiration
conditionszs3-presign-post-fieldszs3-presign-post-policy	PutObjectr;   )r[   fields)datetimeutcnow	timedeltastrftimer.   r8   ISO8601appendr	   r(   rw   r   r[   )r   r\   r   r   r5   r   policydatetime_nowexpire_date	conditionr   s              r   generate_presigned_postz*AioS3PostPresigner.generate_presigned_post  s     >FJ   ((//1"X%7%7
%KK*33HMM4I4IJ|  "|# 	3I< ''	2	3 (54:014:01""''+~
 	
 	
 {{f55		
s   CC0C.C0)NNr^   N)r_   r`   ra   r   r$   rc   r   r   r     s     $6rc   r   c                     t         | d<   y )Nr]   )r]   rf   s     r   add_generate_presigned_urlr   /  ri   rc   c                 L  K   |}|}|i }|}|}dt        |       d}	| j                  }
	 | j                  |   }| j
                  j                  j                  |      }| j                  |||	       d{   }t        j                  |j                  dd            }| j                  |||	|        d{   \  }}}| j                  ||||	|d	
       d{   }|||d<   |
j                  |||       d{   S # t        $ r t	        |      w xY w7 7 e7 D7 #w)ax  Generate a presigned url given a client, its method, and arguments

    :type ClientMethod: string
    :param ClientMethod: The client method to presign for

    :type Params: dict
    :param Params: The parameters normally passed to
        ``ClientMethod``.

    :type ExpiresIn: int
    :param ExpiresIn: The number of seconds the presigned url is valid
        for. By default it expires in an hour (3600 seconds)

    :type HttpMethod: string
    :param HttpMethod: The http method to use on the generated url. By
        default, the http method is whatever is used in the method's model.

    :returns: The presigned url
    NTis_presign_requestuse_global_endpoint)method_name
api_paramsoperation_modelr(   Bucketr=   ignore_signing_regionFr   r   r   r(   rr   set_user_agent_headerrt   )r\   r5   r   )r   rw   _PY_TO_OP_NAMEKeyErrorr   rv   service_modelr   _emit_api_paramsr   is_arnr0   _resolve_endpoint_ruleset_convert_to_request_dictr]   )r   ClientMethodParams	ExpiresIn
HttpMethodclient_methodr}   r5   http_methodr(   r   r   r   bucket_is_arnr   additional_headers
propertiesr\   s                     r   r]   r]   3  s    , !MF~JK":4@G
 ))NB,,]; ii--==nMO((' )  F
 $$VZZ"%=>M
 ,,#00	 -  		 66'!"# 7  L !,X  66!% 7   G  B&=AAB	s^   'D$D <D$5D6AD$8D9"D$D "D$>D"?D$DD$D$ D$"D$c                     t         | d<   y )Nr   )r   rf   s     r   add_generate_presigned_postr     s    2I./rc   c           	        K   |}|}|}|}	|}
|i }n|j                         }|	g }	dt        |       d}t        | j                        }| j                  j
                  j                  d      }| j                  d|i||       d {   }t        j                  |j                  dd            }| j                  ||||        d {   \  }}}| j                  |||||d	       d {   }|	j                  d
|i       |j                  d      r"|	j                  dd|d t        d        g       n|	j                  d|i       ||d<   |j!                  |||	|
       d {   S 7 7 7 7 
w)NTr   CreateBucketr   r   r=   r   Fr   bucketz${filename}zstarts-withz$keyrW   )r\   r   r   r5   )copyr   r   rw   rv   r   r   r   r   r   r0   r   r   r   r@   rx   r   )r   r   KeyFields
Conditionsr   r   rW   r   r   r5   r(   post_presignerr   r}   r   r   r   r   r\   s                       r   r   r     s     F
CFJJ~
 #:4@G
 ((<(<=N ii--==nMO((f%' )  F
 $$VZZ"%=>M
 ,,#00	 -  		 66'!"# 7  L x() ||M"=&#6K]9K8K2LMN5#,' F5M77!	 8   O	,sJ   BE5E-AE5
E/"E5-E1.A:E5(E3)E5/E51E53E5r   )Nr^   N)NNr^   )r   r.   botocore.authbotocore.exceptionsr   botocore.signersr   r   r   r   r   r	   r
   botocore.utilsr   r   rh   re   r   r   r]   r   r   r$   rc   r   <module>r      sy       8   %v} vrH
 045(p%6 %6PH
 AEL^J
 @DGrc   