
    pge6                         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dS )    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dS )AioRequestSignerNc                 >   K   |                      ||           d {V S N)sign)selfoperation_namerequestkwargss       3lib/python3.11/site-packages/aiobotocore/signers.pyhandlerzAioRequestSigner.handler   s.      
 YY~w777777777    standardc           	        K   |}|| j         }|| j        }|                     |||j                   d {V }| j                            d                    | j                                        |          ||| j         || |           d {V  |t          j
        k    r|||d}	|||	d<   |j                            di           }
|s |
                    d          r|
d         |	d<   |
                    d          r|
d         |	d<   	  | j        di |	 d {V }n*# t          $ r}|d	k    rt          |
          |d }~ww xY w|                    |           d S d S )Nzbefore-sign.{}.{})r   signing_nameregion_namesignature_versionrequest_signerr   )r   r   r   expiressigningregionr   r   r   r    )_region_name_signing_name_choose_signercontext_event_emitteremitformat_service_id	hyphenizebotocoreUNSIGNEDget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!%o11)R@@O' BO,?,?,I,I B(7(A}%"">22 I)8)H~&3T3==f========/   :--:*;    G MM'"""""/ 21s   D 
E)EEc                 ^  K   ddd}|                     |d          }|                     d          p| j        }|                     di           }|                     d| j                  }|                     d| j                  }	|t          j        ur|                    |          s||z  }| j                            d		                    | j
                                        |          ||	||
           d {V \  }
}|*|}|t          j        ur|                    |          s||z  }|S )Nz-presign-postz-query)presign-postpresign-url 	auth_typer   r   r    zchoose-signer.{}.{})r   r   r   r&   )r.   _signature_versionr$   r#   r,   r-   endswithr'   emit_until_responser)   r*   r+   )r   r   r1   r&   signing_type_suffix_mapsuffixr   r   r   r   r   responses               r   r%   zAioRequestSigner._choose_signerT   sy     +##
 #
 ),,\2>> $KK44O8O++i,,{{>43EFFkk(D,=>>X%666%..v66 7 '"&"5"I"I!(( **,,n  &#/ #J #
 #
 
 
 
 
 
 
  ( "):::)226:: ; "V+!  r   c                   K   || j         }t          j        j                            |          }|t          |          |j        du r5d }| j        | j                                         d {V } ||          }|S d }| j	        | j	        
                                 d {V }||d<   |j        r/| j        t          j                                        ||d<   ||d<    |di |}|S )Nr!   Tcredentialsr   service_namer"   )r<   r,   r5   AUTH_TYPE_MAPSr.   r   REQUIRES_TOKEN_auth_tokenget_frozen_token_credentialsget_frozen_credentialsREQUIRES_REGIONr#   
exceptionsNoRegionError)	r   r   r   r   r   clsfrozen_tokenr5   frozen_credentialss	            r   r/   z"AioRequestSigner.get_auth_instance}   s>      $ $ 7m*../@AA;."3    %%L+%)%5%F%F%H%HHHHHHH3|$$DK!('>>@@@@@@@@  !3} 	2 ()77999$/F=!%1F>"s}}V}}r     c                    K   t          |          }|                     |||d||           d {V  |                                 |j        S )Nr9   )r	   r   prepareurl)r   request_dictr   r2   r   r   r   s          r   generate_presigned_urlz'AioRequestSigner.generate_presigned_url   su       (55ii
 
 	
 	
 	
 	
 	
 	
 	
 	{r   )NN)Nr   NNr   )rQ   NN)	__name__
__module____qualname__r   r   r%   r/   get_authrV   r"   r   r   r   r      s        8 8 8 8 8# 8# 8# 8#t'! '! '!T <@   D !H      r   r   c                     t           | d<   d S )Ngenerate_db_auth_token)r\   class_attributesr   s     r   add_generate_db_auth_tokenr_          1G-...r   c                    K   |}|| j         j        }d|d}ddi |dd}d}| | d	| }	t          ||	           | j                            d||d
d           d{V }
|
t          |          d         S )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   rU   r   r2   r   )metar   r
   _request_signerrV   len)r   
DBHostnamePort
DBUsernameRegionr    paramsrU   schemeendpoint_urlpresigned_urls              r   r\   r\      s      ( F~&  F  L F1j11411L|444.EE ! F        M V''r   c                       e Zd Z	 	 	 	 ddZdS )AioS3PostPresignerNrQ   c                   K   |i }|g }i }t           j                                         }|t          j        |          z   }|                    t          j        j                  |d<   g |d<   |D ]}	|d                             |	           t          |          }
||
j	        d<   ||
j	        d<   | j
                            d|
|d           d {V  |
j        |dS )	N)seconds
expiration
conditionszs3-presign-post-fieldszs3-presign-post-policy	PutObjectr8   )rT   fields)datetimeutcnow	timedeltastrftimer,   r5   ISO8601appendr	   r&   rn   r   rT   )r   rU   r   r}   r2   r   policydatetime_nowexpire_date	conditionr   s              r   generate_presigned_postz*AioS3PostPresigner.generate_presigned_post   s#      >FJ   (//11"X%7
%K%K%KK*33HM4IJJ|  "|# 	3 	3I< ''	2222 (554:014:01"''+~
 
 	
 	
 	
 	
 	
 	
 	
 {f555r   )NNrQ   N)rW   rX   rY   r   r"   r   r   ry   ry      s6         $6 $6 $6 $6 $6 $6r   ry   c                     t           | d<   d S )NrV   )rV   r]   s     r   add_generate_presigned_urlr     r`   r   rQ   c                 F  K   |}|}|i }|}|}dt          |           d}	| j        }
	 | j        |         }n# t          $ r t	          |          w xY w| j        j                            |          }|                     |||	           d{V }t          j
        |                    dd                    }|                     |||	|            d{V \  }}|                     ||||	|d	
           d{V }|||d<   |
                    |||           d{V S )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   rv   r&   ri   set_user_agent_headerrk   )rU   r2   r   )r   rn   _PY_TO_OP_NAMEKeyErrorr   rm   service_modelr   _emit_api_paramsr   is_arnr.   _resolve_endpoint_ruleset_convert_to_request_dictrV   )r   ClientMethodParams	ExpiresIn
HttpMethodclient_methodrt   r2   http_methodr&   r   r   r   bucket_is_arnrv   additional_headersrU   s                    r   rV   rV     s     , !MF~JK":4@@ G
 )NB,]; B B B&=AAAAB i-==nMMO((' )        F
 $VZZ"%=%=>>M-1-K-K#00	 .L . . ( ( ( ( ( ($L$ 66'!"# 7        L !,X  66!% 7         s	   7 Ac                     t           | d<   d S )Nr   )r   r]   s     r   add_generate_presigned_postr   j  s    2I.///r   c           	      "  K   |}|}|}|}	|}
|i }n|                                 }|	g }	dt          |           d}t          | j                  }| j        j                            d          }|                     d|i||           d {V }t          j	        |
                    dd                    }|                     ||||            d {V \  }}|                     |||||d	           d {V }|	                    d
|i           |                    d          r/|	                    dd|d t          d                    g           n|	                    d|i           ||d<   |                    |||	|
           d {V S )NTr   CreateBucketr   r   r:   r   Fr   bucketz${filename}zstarts-withz$keykey)rU   r   r}   r2   )copyr   ry   rn   rm   r   r   r   r   r   r.   r   r   r   r=   ro   r   )r   r   KeyFields
Conditionsr   r   r   r   r}   r2   r&   post_presignerr   rt   r   rv   r   rU   s                      r   r   r   n  s\      F
CFJJ~
 #:4@@ G
 ((<==N i-==nMMO((f%' )        F
 $VZZ"%=%=>>M-1-K-K#00	 .L . . ( ( ( ( ( ($L$ 66'!"# 7        L x())) ||M"" (=&#6K]9K9K8K6K2LMNNNN5#,''' F5M77!	 8         r   r   )NrQ   N)NNrQ   )r   r,   botocore.authbotocore.exceptionsr   botocore.signersr   r   r   r   r   r	   r
   botocore.utilsr   r   r_   r\   ry   r   rV   r   r   r"   r   r   <module>r      s         8 8 8 8 8 8                  % $ $ $ $ $b b b b b} b b bJH H H
 045( 5( 5( 5(p%6 %6 %6 %6 %6 %6 %6 %6PH H H
 AEH H H HVJ J J
 @DC C C C C Cr   