
    E0j;                         d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZ ddlmZmZ d d	lmZ d d
lmZ d dlmZ d Zd Zd Zd Zd Z G d de           ZdS )    N)default_backend)hashes)padding)load_pem_private_key)
quote_plusquote   )hash_sm3Sm3)Client)STREAM_CLASS)TeaModelc                 t    | | S t          | t                    rt          | d          S t          |           S )Nutf-8encoding)
isinstancebytesstr)vals    h/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/alibabacloud_openapi_util/client.pyto_strr      s<    
{
#u 3))))3xx    c                    |                     d          sd|z  }|                    d          sd|z  }t          |d t                                }|                    | t          j                    t          j                              S )Ns   -----BEGIN RSA PRIVATE KEY-----s"   -----BEGIN RSA PRIVATE KEY-----
%ss   -----END RSA PRIVATE KEY-----s    %s
-----END RSA PRIVATE KEY-----)passwordbackend)	
startswithendswithr   r   signr   PKCS1v15r   SHA256)	plaintextsecretkeys      r   rsa_signr%      s    ?@@ A7&@??;<< ?5>
vo>O>O
P
P
PC88Iw/116=??CCCr   c                 \   |                     d          }|                      d          } |dk    r2t          j        | |t          j                                                  S |dk    r-t          j        | |t                                                    S |dk    rt          ||           S d S )Nr   ACS3-HMAC-SHA256ACS3-HMAC-SM3ACS3-RSA-SHA256)encodehmacnewhashlibsha256digestr   r%   )r#   source	sign_types      r   signature_methodr2   )   s    ]]7##F]]7##F&&&x77>>@@@	o	%	%x,,33555	'	'	'''' 
(	'r   c                 :   | t          |           dk    rdS g }|                                 D ]\  }}||                    |           |                                 d}|D ]/}t	          | |         dd          }|| d}n| d| d}||z  }0|d d         S )	Nr    ~r   safer   &=)lenitemsappendsortr   )query
canon_keyskvquery_stringr$   valuess           r   get_canonical_query_stringrF   4   s    }E

arJ ! !1=a   OOL  eCjsW====			AA!!!!!Ar   c                    g }i }|                                  D ]\  }}||                                |vr_|                    |                                           t          |                                          g||                                <   |||                                                             t          |                                                     |                                 d}|D ]7}d                    t          ||                             }| d| d}||z  }8|d                    |          fS )Nr4   ,:
;)r<   lowerr=   r   stripr>   joinsorted)	headersr@   tmp_headersrA   rB   canonical_headersr$   header_entryrE   s	            r   get_canonicalized_headersrT   H   s5   JK A A1=wwyy
**!!!'')),,,*0))//*;*;)<AGGII&&AGGII&--fQiioo.?.?@@@OO  xx{3'7 8 899%%\%%%Qchhz2222r   c                      e Zd ZdZed             Zed             Zed             Zed             Zed             Z	ed             Z
ed             Zed	             Zed
             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             ZdS )r   z"
    This is for OpenApi Util
    c                     t                               |                                           }|                    |           dS )z
        Convert all params of body other than type of readable into content

        @param body: source Model

        @param content: target Model

        @return: void
        N)r   _except_streamto_mapfrom_map)bodycontentbody_maps      r   convertzClient.converta   s9     ((77"""""r   c                    t          | t                    r;i }|                                 D ]"\  }}t                              |          ||<   #|S t          | t
                    rjg }| D ]c}|2t                              |          }||                    |           6|                    t                              |                     d|S t          | t                    rd S | S N)r   dictr<   r   rW   listr=   r   )r   resultrA   rB   iitems         r   rW   zClient._except_streamo   s    c4   	F		 5 51"11!44q		MT"" 	F < <=!0033D'd+++MM&"7"7":":;;;;M\** 	4
r   c                     g }| D ],}|                     d          r|                    |           -t          |          }d}|D ]}||d| |         dz  }|S )Nzx-acs-r4   rI   rJ   )r   r=   rO   )rP   r@   rA   canon_headers       r   _get_canonicalized_headersz!Client._get_canonicalized_headers   s    
 	% 	%A||H%% %!!!$$$J''
 	8 	8AGAJJJ77LLr   c                     t          |          dk    r| S d| z  }t          t          |                    }|D ]/}||         %||         dk    rd|z  }n|d||         d}||z  }0|d d         S )Nr   z%s?r4   z%s&r9   r8   r:   )r;   rO   ra   )pathnamer?   resource
query_listr$   rE   s         r   _get_canonicalized_resourcez"Client._get_canonicalized_resource   s    u::??O8#DKK((
 	 	CSz%:##AA$'CCs4AA}r   c           
      @   | j         | j        | j        | j        f\  }}}}|                    d          dn|                    d          }|                    d          dn|                    d          }|                    d          dn|                    d          }|                    d          dn|                    d          }|d|d|d|d|d
}	t
                              |          }
t
                              ||          }|	|
z   |z   }|S )z
        Get the string to be signed according to request

        @param request:  which contains signed messages

        @return: the signed string
        acceptNr4   zcontent-md5zcontent-typedaterJ   )methodri   rP   r?   getr   rg   rl   )requestrp   ri   rP   r?   rn   content_md5content_typero   headercanon_headerscanon_resourcesign_strs                r   get_string_to_signzClient.get_string_to_sign   s#    ,3>7;KW_^e^k+k('5{{8,,4'++h:O:O#KK66>bbGKKP]D^D^$[[88@rrgkkR`FaFa[[((0rrgkk&6I6I+166666;;;VZVZVZ[99'BB;;HeLLM)N:r   c                    t          j        |                    d          |                     d          t          j                                                  }t          j        |                              d          }|S )z
        Get signature according to stringToSign, secret

        @type string_to_sign: str
        @param string_to_sign:  the signed string

        @type secret: str
        @param secret: accesskey secret

        @return: the signature
        r   )	r+   r,   r*   r-   sha1r/   base64	b64encodedecode)string_to_signr#   hash_val	signatures       r   get_roasignaturezClient.get_roasignature   se     8FMM'22N4I4I'4R4RT[T`aahhjj$X..55g>>	r   c                    |d S t          |t                    r=|                                D ]&\  }}t                              | d|||           'd S t          |t
                    rO|                                                                D ]&\  }}t                              | d|||           'd S t          |t          t          f          r;t          |          D ])\  }}t                              | d|dz   ||           *d S | 
                    d          r
| dd          } t          |t                    rt          |d          || <   d S t          |t                    st          |          || <   d S d S )N.r	   r   r   )r   r`   r<   r   _object_handlerr   rX   ra   tuple	enumerater   r   r   r   )r$   rD   outrA   rB   indexr   s          r   r   zClient._object_handler   s   =FeT"" 	& C C1&&###qq'91cBBBBC Cx(( 	&,,.. C C1&&###qq'91cBBBBC Ce}-- 		&'.. M M
s&&###uqyy'A3LLLLM M ~~c"" !""g%'' &uw777C|44 &u::C& &r   c                     i }| rt                               d| |           t          j        t          j        |                    S )z
        Parse filter into a form string

        @type filter: dict
        @param filter: object

        @return: the string
        r4   )r   r   Utilto_form_stringanyify_map_value)filterrb   s     r   to_formzClient.to_form   sL      	7""2vv666"!&))
 
 	
r   c                  d    t           j                                                             d          S )zF
        Get timestamp

        @return: the timestamp string
        z%Y-%m-%dT%H:%M:%SZ)datetimeutcnowstrftime r   r   get_timestampzClient.get_timestamp   s(      ''))223GHHHr   c                 F    i }| rt                               d| |           |S )z
        Parse filter into a object which's type is map[string]string

        @type filter: dict
        @param filter: query param

        @return: the object
        r4   )r   r   )r   out_dicts     r   r?   zClient.query   s.      	9""2vx888r   c           
      H   |                                  }t          |                                          }|                                 d}|D ];}||         1|dt	          |dd           dt	          ||         dd           z  }<| dt          |d	d         dd           }t          j        t          |dz   d
          t          |d
          t          j
                  }|                                }	t          t          j        |	          d
          }
|
S )aU  
        Get signature according to signedParams, method and secret

        @type signed_params: dict
        @param signed_params: params which need to be signed

        @type method: str
        @param method: http method e.g. GET

        @type secret: str
        @param secret: AccessKeySecret

        @return: the signature
        r4   Nr8   r5   r   r6   r9   z&%2F&r	   r   )	digestmod)copyra   keysr>   r   r   r+   r,   r   r-   r{   r/   r   r|   r}   )signed_paramsrp   r#   queriesr   canonicalized_query_stringrA   r   digest_maker
hash_bytes
signed_strs              r   get_rpcsignaturezClient.get_rpcsignature  sO      $$&&GLLNN##		%'" 	a 	aAqz%* /a%g2V2V2V /a /a16wqzV]1^1^1^/a /a a* #qq4Nqrr4RY\gn)o)o)oqqxfslW E E E %nw G G G*1,8 8 8 "((**
)*55HHH
r   c                    | dS |dk    rt                               || i          S |dk    r(d                    t          t          |                     S |dk    r(d                    t          t          |                     S |dk    r(d	                    t          t          |                     S |d
k    r,t          j        t                               |                     S dS )a  
        Parse array into a string with specified style

        @type array: any
        @param array: the array

        @type prefix: str
        @param prefix: the prefix string

        @param style: specified style e.g. repeatList

        @return: the string
        Nr4   
repeatListsimplerH   spaceDelimited pipeDelimited|json)r   _flat_repeat_listrN   mapr   r   to_jsonstring_parse_to_dict)arrayprefixstyles      r   $array_to_string_with_specified_stylez+Client.array_to_string_with_specified_style*  s     =2L  ++VUO<<<h88CUOO,,,&&&88CUOO,,,o%%88CUOO,,,f__%f&;&;E&B&BCCC2r   c                    i }| rt                               d| |           g }t          |          }|D ]E}t          |d          }t          ||         d          }|                    |dz   |z              Fd                    |          S )Nr4   r   r   r9   z&&)r   r   rO   r   r=   rN   )dicr?   lqrc   rA   rB   s          r   r   zClient._flat_repeat_listI  s     	3""2sE2225MM 	" 	"A1w///A58g666AHHQWq[!!!!yy||r   c                     	 t                               |           }t          j        |          S # t          $ r Y dS w xY w)z)
        Transform input as map.
        N)r   r   r   deepcopy	TypeError)inprb   s     r   parse_to_mapzClient.parse_to_mapW  sL    
	**3//F=((( 	 	 	FF	s   -0 
>>c                 N   t          | t                    rci }|                                 D ]J\  }}t          |t          t          t          f          rt
                              |          ||<   E|||<   K|S t          | t                    rng }| D ]g}t          |t          t          t          f          r.|                    t
                              |                     R|                    |           h|S t          | t                    r|                                 S d S r_   )	r   r`   r<   ra   r   r   r   r=   rX   )r   rb   rA   rB   rc   s        r   r   zClient._parse_to_dictb  s   c4   	 F		 " "1a$h!788 " & 5 5a 8 8F1II !F1IIMT"" 		 F % %a$h!788 %MM&"7"7":":;;;;MM!$$$$MX&& 	 ::<<	  	 r   c                     |dk    r:|                      d          }|dxx         dz  cc<   d                    |          } |r|dk    rdS | S )aX  
        If endpointType is internal, use internal endpoint
        If serverUse is true and endpointType is accelerate, use accelerate endpoint
        Default return endpoint
        @param server_use whether use accelerate endpoint
        @param endpoint_type value must be internal or accelerate
        @return the final endpoint
        internalr   r   z	-internal
acceleratezoss-accelerate.aliyuncs.com)splitrN   )endpoint
server_useendpoint_type	str_splits       r   get_endpointzClient.get_endpointw  sd     J&& s++IaLLLK'LLLxx	**H 	1-<7700r   c                     |dk    s|dk    r&t          j        |                                           S |dk    rt          |           S d S )Nr'   r)   r(   )r-   r.   r/   r
   )rawr1   s     r   hashzClient.hash  sT    ***i;L.L.L>#&&--////))C==  *)r   c                 X    | r't          j        |                               d          S d S )Nr   )binasciib2a_hexr~   )r   s    r   
hex_encodezClient.hex_encode  s3     	9#C((//888	9 	9r   c                    | j         r| j         nd}t          | j                  }t          | j                  \  }}| j         d| d| d| d| d| }	| dt                              t                              |		                    d          |                     }
t                              t          ||
|                    }| d| d| d| }|S )N/rJ   r   z Credential=z,SignedHeaders=z,Signature=)ri   rF   r?   rT   rP   rp   r   r   r   r*   r2   )rr   r1   payloadakr#   canonical_uricanonicalized_querycanonicalized_headerssigned_headerscanonical_requeststr_to_signr   auths                r   get_authorizationzClient.get_authorization  s    ,3,<E((#8GG0I'/0Z0Z-~&~ ) ),) )2) )  5) )  .	) )
  ') ) #ttf&7&7DUD\D\]dDeDegp8q8q&r&rtt%%&6v{I&V&VWW	bbbbNbbW`bbr   c                 &    t          | dd          S )Nz/~r   r6   r   )paths    r   get_encode_pathzClient.get_encode_path  s    Tw7777r   c                 &    t          | dd          S )Nr5   r   r6   r   )params    r   get_encode_paramzClient.get_encode_param  s    Uw7777r   c                 *   | | S t          | t                    r6g }| D ]/}|                    t                              |                     0|S t          | t
                    r|                                 }i }|                                D ]\  }}t          |t                    rgt          |t
                    sRi }|                                D ]5\  }}t                              |          |dt          |           d| <   6|||<   t                              |          ||<   |S t          | t                    rNi }|                                 D ]5\  }}t                              |          |dt          |           d| <   6|S | S )a#  
        Transform a map to a flat style map where keys are prefixed with length info.
        Map keys are transformed from "key" to "#length#key" format.

        @param obj: the input object (can be a TeaModel, list, dict, or other types)
        @return: the transformed object.
        N#)
r   ra   r=   r   map_to_flat_styler   rX   r<   r`   r;   )	objrb   rd   obj_mapr$   rD   flat_map	entry_keyentry_values	            r   r   zClient.map_to_flat_style  s    ;Jc4   	F > >f66t<<====MX&& 	jjllGF%mmoo B B
UeT** B:eX3N3N B!H27++-- k k.	;EKE]E]^iEjEj!AS^^!A!Ai!A!ABB"*F3KK"(":":5"A"AF3KKMT"" 	H!iikk Q Q
U171I1I%1P1P-SXX----..O
r   N)__name__
__module____qualname____doc__staticmethodr]   rW   rg   rl   ry   r   r   r   r   r?   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   \   st         # # \#   \( 	 	 \	   \   \*   \  & & \&* 
 
 \
  I I \I   \ " " \"H   \<   \   \     \ (   \& ! ! \! 9 9 \9   \" 8 8 \8 8 8 \8 " " \" " "r   r   )!r   r   r-   r+   r|   r   cryptography.hazmat.backendsr   cryptography.hazmat.primitivesr   )cryptography.hazmat.primitives.asymmetricr   ,cryptography.hazmat.primitives.serializationr   urllib.parser   r   sm3r
   r   alibabacloud_tea_util.clientr   r   
Tea.streamr   	Tea.modelr   r   r%   r2   rF   rT   objectr   r   r   <module>r      su         8 8 8 8 8 8 1 1 1 1 1 1 = = = = = = M M M M M M * * * * * * * *         7 7 7 7 7 7 # # # # # #        D D D( ( (  (3 3 3(x x x x xV x x x x xr   