
    MgF                        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Zd dlZd dlm	Z	 d dl
mZ d dlmZmZ d dlmZ d dlmZmZmZmZmZmZmZmZmZ d dlmZmZmZmZ d dl m!Z!m"Z"m#Z# d d	lm$Z$  ejJ                  e&      Z'd
Z(dZ)dZ*dZ+g dZ,dZ-dZ.d Z/d Z0 G d d      Z1 G d de1      Z2 G d de1      Z3 G d de1      Z4 G d de1      Z5 G d de5      Z6 G d d e6      Z7 G d! d"e7      Z8 G d# d$e7      Z9 G d% d&e5      Z: G d' d(e:      Z; G d) d*e5      Z< G d+ d,e1      Z= G d- d.e=      Z> G d/ d0e=      Z? G d1 d2e2      Z@d3 ZAe3e4e4e=e>e?e<e7e9e8e@d4ZBerd d5lCmDZD eBj                  eD       neBj                  e5e:e6e;d6       d7d8d9d:d;ZFy)<    N)Mapping
formatdate)sha1sha256)
itemgetter)	HAS_CRTHTTPHeadersencodebytesensure_unicodeparse_qsquoteunquoteurlsplit
urlunsplit)NoAuthTokenErrorNoCredentialsErrorUnknownSignatureVersionError UnsupportedSignatureVersionError)is_valid_ipv6_endpoint_urlnormalize_url_pathpercent_encode_sequence)MD5_AVAILABLE@e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855i   z%Y-%m-%dT%H:%M:%SZz%Y%m%dT%H%M%SZ)expectz
user-agentzx-amzn-trace-idzUNSIGNED-PAYLOADz"STREAMING-UNSIGNED-PAYLOAD-TRAILERc                     t        |       }|j                  }t        |       rd| d}ddd}|j                  9|j                  |j	                  |j
                        k7  rd||j                  fz  }|S )N[]P   i  )httphttpsz%s:%d)r   hostnamer   portgetscheme)url	url_partshostdefault_portss       [E:\wamp.anq\www\apps\calme\nutritwin\resources\nutritwin\Lib\site-packages\botocore/auth.py_host_from_urlr+   K   s{    
 ID!#&4&{M ~~!>>]..y/?/?@@dINN33DK    c                     | j                   }t        |t              r&t        j                  |j                  d            }|S t        |t              rt        j                  |      }|S Nutf-8)data
isinstancebytesjsonloadsdecodestr)requestr0   s     r*   _get_body_as_dictr8   ^   sT    
 <<D$zz$++g./ K 
D#	zz$Kr,   c                       e Zd ZdZdZd Zy)
BaseSignerFc                     t        d      )Nadd_auth)NotImplementedErrorselfr7   s     r*   r<   zBaseSigner.add_autho   s    !*--r,   N)__name__
__module____qualname__REQUIRES_REGIONREQUIRES_TOKENr<    r,   r*   r:   r:   k   s    ON.r,   r:   c                       e Zd ZdZ	 d Zy)TokenSignerTc                     || _         y N)
auth_token)r?   rJ   s     r*   __init__zTokenSigner.__init__y   s	    $r,   N)r@   rA   rB   rD   rK   rE   r,   r*   rG   rG   s   s    N%r,   rG   c                   "    e Zd ZdZd Zd Zd Zy)	SigV2Authz+
    Sign a request with Signature V2.
    c                     || _         y rI   credentialsr?   rP   s     r*   rK   zSigV2Auth.__init__   
    &r,   c                 P   t         j                  d       t        |j                        }|j                  }t        |      dk(  rd}|j                   d|j                   d| d}t        j                  | j                  j                  j                  d      t              }g }t        |      D ]d  }|dk(  r	t        ||         }	t!        |j                  d      d	      }
t!        |	j                  d      d
	      }|j#                  |
 d|        f dj%                  |      }||z  }t         j                  d|       |j'                  |j                  d             t)        j*                  |j-                               j/                         j1                  d      }||fS )Nz$Calculating signature using v2 auth.r   /
r/   	digestmod	Signature safez-_~=&zString to sign: %s)loggerdebugr   r&   pathlenmethodnetlochmacnewrP   
secret_keyencoder   sortedr6   r   appendjoinupdatebase64	b64encodedigeststripr5   )r?   r7   paramssplitr`   string_to_signlhmacpairskeyvalue
quoted_keyquoted_valueqsb64s                 r*   calc_signaturezSigV2Auth.calc_signature   se   ;<%zzt9>D#NN+2ell^2dV2F''..w76
 &>C k!s$Eszz'2<J g!6UCLLLJ<q78 " XXe_")>:^**734u||~.446==gFCyr,   c                    | j                   
t               |j                  r|j                  }n|j                  }| j                   j                  |d<   d|d<   d|d<   t        j                  t        t        j                               |d<   | j                   j                  r| j                   j                  |d<   | j                  ||      \  }}||d<   |S )	NAWSAccessKeyId2SignatureVersion
HmacSHA256SignatureMethod	TimestampSecurityTokenrX   )rP   r   r0   rp   
access_keytimestrftimeISO8601gmtimetokenr{   )r?   r7   rp   ry   	signatures        r*   r<   zSigV2Auth.add_auth   s     #$&&<<\\F ^^F#'#3#3#>#> %(!"$0 !"mmGT[[]C{!!&*&6&6&<&<F?#++GV<I'{r,   N)r@   rA   rB   __doc__rK   r{   r<   rE   r,   r*   rM   rM   }   s    '8r,   rM   c                       e Zd Zd Zd Zy)	SigV3Authc                     || _         y rI   rO   rQ   s     r*   rK   zSigV3Auth.__init__   rR   r,   c                    | j                   
t               d|j                  v r|j                  d= t        d      |j                  d<   | j                   j                  r>d|j                  v r|j                  d= | j                   j                  |j                  d<   t        j                  | j                   j                  j                  d      t              }|j                  |j                  d   j                  d             t        |j                               j                         }d| j                   j                   d|j                  d       }d	|j                  v r|j                  d	= ||j                  d	<   y )
NDateTusegmtX-Amz-Security-Tokenr/   rV   zAWS3-HTTPS AWSAccessKeyId=z ,Algorithm=HmacSHA256,Signature=zX-Amzn-Authorization)rP   r   headersr   r   rd   re   rf   rg   r   rk   r   rn   ro   r   r5   )r?   r7   new_hmacencoded_signaturer   s        r*   r<   zSigV3Auth.add_auth   sL   #$&&W__$'",D"9!!%8OO$:;6:6F6F6L6LGOO2388''..w76
 	/66w?@'(9:@@B()9)9)D)D(E F..?.F.Fw.O-PR 	 "W__4 672;./r,   N)r@   rA   rB   rK   r<   rE   r,   r*   r   r      s    '<r,   r   c                       e Zd ZdZdZd Zd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 Zd Zd Zd Zd Zd Zd Zd Zd Zy)	SigV4Authz+
    Sign a request with Signature V4.
    Tc                 .    || _         || _        || _        y rI   )rP   _region_name_service_namer?   rP   service_nameregion_names       r*   rK   zSigV4Auth.__init__   s    & ()r,   c                     |r:t        j                  ||j                  d      t              j	                         }|S t        j                  ||j                  d      t              j                         }|S r.   )rd   re   rg   r   	hexdigestrn   )r?   ru   msghexsigs        r*   _signzSigV4Auth._sign   s[    ((3

7 3V<FFHC 
 ((3

7 3V<CCEC
r,   c                     t               }|j                  j                         D ]#  \  }}|j                         }|t        vs|||<   % d|vrt        |j                        |d<   |S )zk
        Select the headers from the request that need to be included
        in the StringToSign.
        r(   )r
   r   itemslowerSIGNED_HEADERS_BLACKLISTr+   r&   )r?   r7   
header_mapnamerv   lnames         r*   headers_to_signzSigV4Auth.headers_to_sign   si    
 !]
"??002KD%JJLE44$)
5! 3 # "0!<Jvr,   c                     |j                   r| j                  |j                         S | j                  t        |j                              S rI   )rp   _canonical_query_string_params_canonical_query_string_urlr   r&   r>   s     r*   canonical_query_stringz SigV4Auth.canonical_query_string   s:    
 >>66w~~FF33HW[[4IJJr,   c           	      :   g }t        |t              r|j                         }|D ]7  \  }}|j                  t	        |d      t	        t        |      d      f       9 g }t        |      D ]  \  }}|j                  | d|         dj                  |      }|S )Nz-_.~rZ   r\   r]   )r1   r   r   ri   r   r6   rh   rj   )r?   rp   key_val_pairsru   rv   sorted_key_valsr   s          r*   r   z(SigV4Auth._canonical_query_string_params  s    fg&\\^F JC  s(%E
*HI !  !/JC""cU!E7#34 0!$/!:%%r,   c                 .   d}|j                   rg }|j                   j                  d      D ]*  }|j                  d      \  }}}|j                  ||f       , g }t	        |      D ]  \  }}|j                  | d|         dj                  |      }|S )NrY   r]   r\   )queryrq   	partitionri   rh   rj   )	r?   partsr   r   pairru   _rv   r   s	            r*   r   z%SigV4Auth._canonical_query_string_url  s    !#;;M))#. $s 3Q$$c5\2 / !O %]3
U&&#aw'78 4%(XXo%>"%%r,   c                      g }t        t        |            }|D ]J  }dj                   fd|j                  |      D              }|j	                  | dt        |              L dj                  |      S )a  
        Return the headers that need to be included in the StringToSign
        in their canonical form by converting all header keys to lower
        case, sorting them in alphabetical order and then joining
        them into a string, separated by newlines.
        ,c              3   @   K   | ]  }j                  |        y wrI   )_header_value).0vr?   s     r*   	<genexpr>z.SigV4Auth.canonical_headers.<locals>.<genexpr>1  s!      /K!""1%/Ks   :rU   )rh   setrj   get_allri   r   )r?   r   r   sorted_header_namesru   rv   s   `     r*   canonical_headerszSigV4Auth.canonical_headers'  sz     $S%9:&CHH />/F/Fs/K E NNcU!N5$9#:;<	 '
 yy!!r,   c                 @    dj                  |j                               S )N )rj   rq   )r?   rv   s     r*   r   zSigV4Auth._header_value7  s     xx&&r,   c                 Z    t        d t        |      D              }dj                  |      S )Nc              3   X   K   | ]"  }|j                         j                          $ y wrI   )r   ro   )r   ns     r*   r   z+SigV4Auth.signed_headers.<locals>.<genexpr>@  s      I4Hq*4Hs   (*;)rh   r   rj   )r?   r   r   s      r*   signed_headerszSigV4Auth.signed_headers?  s&    IC4HIIxx  r,   c                     |j                   j                  di       }|j                  d      }t        |t              xr |j                  d      dk(  S )Nchecksumrequest_algorithmintrailer)contextr$   r1   dict)r?   r7   checksum_context	algorithms       r*   _is_streaming_checksum_payloadz(SigV4Auth._is_streaming_checksum_payloadC  sJ    "??..z2>$(()<=	)T*Oy}}T/Bi/OOr,   c                    | j                  |      rt        S | j                  |      st        S |j                  }|rt        |d      r|j                         }t        j                  |j                  t              }t               }t        |d      D ]  }|j                  |        |j                         }|j                  |       |S |rt        |      j                         S t         S )Nseekr,   )r   "STREAMING_UNSIGNED_PAYLOAD_TRAILER_should_sha256_sign_payloadUNSIGNED_PAYLOADbodyhasattrtell	functoolspartialreadPAYLOAD_BUFFERr   iterrk   r   r   EMPTY_SHA256_HASH)r?   r7   request_bodypositionread_chunksizer   chunkhex_checksums           r*   payloadzSigV4Auth.payloadH  s    ..w75511': $#||GL&9#((*H&..!!>N xHnc2& 3#--/Lh' ,'1133$$r,   c                 r    |j                   j                  d      sy|j                  j                  dd      S )Nr!   Tpayload_signing_enabled)r&   
startswithr   r$   r>   s     r*   r   z%SigV4Auth._should_sha256_sign_payloadb  s1    {{%%g.
 ""#<dCCr,   c                 @   |j                   j                         g}| j                  t        |j                        j
                        }|j                  |       |j                  | j                  |             | j                  |      }|j                  | j                  |      dz          |j                  | j                  |             d|j                  v r|j                  d   }n| j                  |      }|j                  |       dj                  |      S )NrU   X-Amz-Content-SHA256)rb   upper_normalize_url_pathr   r&   r`   ri   r   r   r   r   r   r   rj   )r?   r7   crr`   r   body_checksums         r*   canonical_requestzSigV4Auth.canonical_requestl  s    nn""$%''(=(B(BC
		$
		$--g67..w7
		$((9D@A
		$%%o67!W__4#OO,BCM LL1M
		- yy}r,   c                 2    t        t        |      d      }|S )Nz/~rZ   )r   r   )r?   r`   normalized_paths      r*   r   zSigV4Auth._normalize_url_path{  s     24 8tDr,   c                 "   | j                   j                  g}|j                  |j                  d   dd        |j                  | j                         |j                  | j
                         |j                  d       dj                  |      S N	timestampr      aws4_requestrT   )rP   r   ri   r   r   r   rj   r?   r7   scopes      r*   r   zSigV4Auth.scope  sp    !!,,-W__[1!A67T&&'T''(^$xxr,   c                     g }|j                  |j                  d   dd        |j                  | j                         |j                  | j                         |j                  d       dj	                  |      S r   )ri   r   r   r   rj   r   s      r*   credential_scopezSigV4Auth.credential_scope  sa    W__[1!A67T&&'T''(^$xxr,   c                    dg}|j                  |j                  d          |j                  | j                  |             |j                  t        |j	                  d            j                                dj                  |      S )z
        Return the canonical StringToSign as well as a dict
        containing the original version of all headers that
        were included in the StringToSign.
        AWS4-HMAC-SHA256r   r/   rU   )ri   r   r   r   rg   r   rj   )r?   r7   r   stss       r*   rr   zSigV4Auth.string_to_sign  sl     ""

7??;/0

4((12

6+227;<FFHIyy~r,   c                 P   | j                   j                  }| j                  d| j                         |j                  d   dd       }| j                  || j
                        }| j                  || j                        }| j                  |d      }| j                  ||d      S )NAWS4r   r   r   r   T)r   )rP   rf   r   rg   r   r   r   )r?   rr   r7   ru   k_datek_region	k_service	k_signings           r*   r   zSigV4Auth.signature  s    ))C5\!!#W__[%A!A%F
 ::fd&7&78JJx););<	JJy.9	zz)^z>>r,   c                    | j                   
t               t        j                  j                         }|j	                  t
              |j                  d<   | j                  |       | j                  |      }t        j                  d       t        j                  d|       | j                  ||      }t        j                  d|       | j                  ||      }t        j                  d|       | j                  ||       y )Nr   z$Calculating signature using v4 auth.zCanonicalRequest:
%szStringToSign:
%szSignature:
%s)rP   r   datetimeutcnowr   SIGV4_TIMESTAMPr   _modify_request_before_signingr   r^   r_   rr   r   _inject_signature_to_request)r?   r7   datetime_nowr   rr   r   s         r*   r<   zSigV4Auth.add_auth  s    #$&&((//1'3'<'<_'M$ 	++G4 227;;<,.?@,,W6GH(.9NN>7;	%y1))'9=r,   c                     d| j                  |       g}| j                  |      }|j                  d| j                  |              |j                  d|        dj	                  |      |j
                  d<   |S )NzAWS4-HMAC-SHA256 Credential=zSignedHeaders=z
Signature=z, Authorization)r   r   ri   r   rj   r   )r?   r7   r   auth_strr   s        r*   r  z&SigV4Auth._inject_signature_to_request  s~    24::g3F2GHI..w7T00ABC	
 	*YK01+/99X+>(r,   c                    d|j                   v r|j                   d= | j                  |       | j                  j                  r>d|j                   v r|j                   d= | j                  j                  |j                   d<   |j                  j                  dd      s/d|j                   v r|j                   d= t        |j                   d<   y y )Nr  r   r   Tr   )r   _set_necessary_date_headersrP   r   r   r$   r   r>   s     r*   r  z(SigV4Auth._modify_request_before_signing  s    goo-0((1!!%8OO$:;6:6F6F6L6LGOO23""#<dC%8OO$:;6FGOO23 Dr,   c                    d|j                   v r|j                   d= t        j                  j                  |j                  d   t              }t        t        t        j                  |j                                           |j                   d<   d|j                   v r|j                   d= y y d|j                   v r|j                   d= |j                  d   |j                   d<   y )Nr   r   
X-Amz-Date)
r   r
  strptimer   r  r   intcalendartimegm	timetuple)r?   r7   datetime_timestamps      r*   r  z%SigV4Auth._set_necessary_date_headers  s     W__$'!)!2!2!;!;,o" '1HOO$6$@$@$BCD'GOOF# w.OOL1 / w.OOL1,3OOK,HGOOL)r,   N)F)r@   rA   rB   r   rC   rK   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rr   r   r<   r  r  r  rE   r,   r*   r   r      s     O* K&"& " '!P
%4D
?>$GIr,   r   c                   .     e Zd Z fdZ fdZd Z xZS )S3SigV4Authc                     t         |   |       d|j                  v r|j                  d= | j                  |      |j                  d<   y )Nr   )superr  r   r   r?   r7   	__class__s     r*   r  z*S3SigV4Auth._modify_request_before_signing  sA    .w7!W__4 6726,,w2G./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   zContent-MD5r   r   r   headerr   r!   Thas_streaming_inputF)
r   r$   getattrr1   r   r&   r   r   r   r   )	r?   r7   r$  	s3_configsign_payloadchecksum_headerr   r   r"  s	           r*   r   z'S3SigV4Auth._should_sha256_sign_payload  s      ++O<M46	 I !}}%>E# ("??..z2>$(()<=	i&9==+>(+J'/O&&w/goo5 ??4e< w27;;r,   c                     |S rI   rE   r?   r`   s     r*   r   zS3SigV4Auth._normalize_url_path      r,   )r@   rA   rB   r  r   r   __classcell__r"  s   @r*   r  r    s    H'<Rr,   r  c                   6     e Zd ZdZ fdZ fdZ fdZ xZS )S3ExpressAuthTc                6    t         |   |||       || _        y rI   )r   rK   _identity_cache)r?   rP   r   r   identity_cacher"  s        r*   rK   zS3ExpressAuth.__init__  s     	lK@-r,   c                 $    t         |   |       y rI   )r   r<   r!  s     r*   r<   zS3ExpressAuth.add_auth"  s    !r,   c                     t         |   |       d|j                  vr#| j                  j                  |j                  d<   d|j                  v r|j                  d= y y )Nzx-amz-s3session-tokenr   )r   r  r   rP   r   r!  s     r*   r  z,S3ExpressAuth._modify_request_before_signing%  sU    .w7"'//97;7G7G7M7MGOO34!W__4 67 5r,   )r@   rA   rB   REQUIRES_IDENTITY_CACHErK   r<   r  r/  r0  s   @r*   r2  r2    s    "."8 8r,   r2  c                       e Zd ZdZd Zy)S3ExpressPostAuthTc                    t         j                   j                         }|j                  t              |j                  d<   i }|j                  j                  dd       |j                  d   }i }g }|j                  j                  dd       &|j                  d   }|j                  dd       |d   }||d<   d|d<   | j                  |      |d<   |j                  d   |d<   |j                  ddi       |j                  d| j                  |      i       |j                  d|j                  d   i       | j                  j                  @| j                  j                  |d	<   |j                  d	| j                  j                  i       t        j                  t        j                  |      j                  d
            j                  d
      |d<   | j!                  |d   |      |d<   ||j                  d<   ||j                  d<   y )Nr   s3-presign-post-fieldss3-presign-post-policy
conditionsr  x-amz-algorithmx-amz-credential
x-amz-dateX-Amz-S3session-Tokenr/   policyx-amz-signaturer
  r  r   r  r   r$   r   ri   rP   r   rl   rm   r3   dumpsrg   r5   r   r?   r7   r  fieldsrC  r>  s         r*   r<   zS3ExpressPostAuth.add_auth1  s   ((//1'3'<'<_'M$??7>J__%=>F
??7>J__%=>Fzz,-9#L1
)|$6 !%)ZZ%8!"&{;|,.@AB-tzz'/BCD<)EFG!!-.2.>.>.D.DF*+($*:*:*@*@A
 "++JJv%%g.

&/ 	x %)NN6(3CW$M !4:014:01r,   N)r@   rA   rB   r8  r<   rE   r,   r*   r:  r:  .  s    "';r,   r:  c                   D     e Zd ZdZdZed fd
Zd Zd Zd Zd Z	 xZ
S )	S3ExpressQueryAuthi,  T)expiresc                :    t         |   ||||       || _        y )N)r5  r   rK   _expires)r?   rP   r   r   r5  rK  r"  s         r*   rK   zS3ExpressQueryAuth.__init___  s,     	)	 	 	
  r,   c                 N   |j                   j                  d      }d}||k(  r|j                   d= | j                  | j                  |            }d| j	                  |      |j
                  d   | j                  |d}| j                  j                  | j                  j                  |d<   t        |j                        }t        |j                  d      }|j                         D 	ci c]  \  }}	||	d	    }
}}	|j                  r"|
j                  |j                         i |_        d
}|j                   r!|
j                  t#        |             d
|_        |
rt%        |
      dz   }| t%        |       }|}|d	   |d   |d   ||d   f}t'        |      |_
        y c c}	}w )Ncontent-type0application/x-www-form-urlencoded; charset=utf-8r  r   zX-Amz-AlgorithmzX-Amz-Credentialr  zX-Amz-ExpireszX-Amz-SignedHeadersrB  Tkeep_blank_valuesr   rY   r]            r   r$   r   r   r   r   rN  rP   r   r   r&   r   r   r   rp   rk   r0   r8   r   r   )r?   r7   content_typeblocklisted_content_typer   auth_paramsr'   query_string_partskr   
query_dictoperation_paramsnew_query_stringpnew_url_partss                  r*   r  z1S3ExpressQueryAuth._modify_request_before_signingp  s    **>:> 	! 33/
 ,,T-A-A'-JK  2 $

7 3!//+6!]]#1
 !!-373C3C3I3IK/0 W[[)	 &iooN*<*B*B*DE*D$!Qa1g*D
E>>gnn-GN << /89GL6zBSH !8!E FG 	 1qtQqT+;QqTB /A F   ,F!c                 4    |xj                   d| z  c_         y Nz&X-Amz-Signature=r&   r?   r7   r   s      r*   r  z/S3ExpressQueryAuth._inject_signature_to_request       	*9+66r,   c                     |S rI   rE   r-  s     r*   r   z&S3ExpressQueryAuth._normalize_url_path  r.  r,   c                     t         S rI   r   r>   s     r*   r   zS3ExpressQueryAuth.payload  
    
  r,   )r@   rA   rB   DEFAULT_EXPIRESr8  rK   r  r  r   r   r/  r0  s   @r*   rJ  rJ  [  s-    O"   "?0B7 r,   rJ  c                   2     e Zd ZdZef fd	Zd Zd Z xZS )SigV4QueryAuth  c                 6    t         |   |||       || _        y rI   rM  )r?   rP   r   r   rK  r"  s        r*   rK   zSigV4QueryAuth.__init__  s     	lK@r,   c                 N   |j                   j                  d      }d}||k(  r|j                   d= | j                  | j                  |            }d| j	                  |      |j
                  d   | j                  |d}| j                  j                  | j                  j                  |d<   t        |j                        }t        |j                  d      }|j                         D 	ci c]  \  }}	||	d	    }
}}	|j                  r"|
j                  |j                         i |_        d
}|j                   r!|
j                  t#        |             d
|_        |
rt%        |
      dz   }| t%        |       }|}|d	   |d   |d   ||d   f}t'        |      |_
        y c c}	}w )NrP  rQ  r  r   rR  r   TrS  r   rY   r]   rU  rV  rW  rX  )r?   r7   rY  blacklisted_content_typer   r[  r'   r\  r]  r   r^  r_  r`  ra  rb  s                  r*   r  z-SigV4QueryAuth._modify_request_before_signing  s    **>:> 	! 33/
 ,,T-A-A'-JK  2 $

7 3!//+6!]]#1
 !!-262B2B2H2HK./ W[[)	 &iooN*<*B*B*DE*D$!Qa1g*D
E>>gnn-GN << /89GL6zBSH !8!E FG 	 1qtQqT+;QqTB /A Frc  c                 4    |xj                   d| z  c_         y re  rf  rg  s      r*   r  z+SigV4QueryAuth._inject_signature_to_request  rh  r,   )r@   rA   rB   rm  rK   r  r  r/  r0  s   @r*   ro  ro    s    O ?N ?0B7r,   ro  c                       e Zd ZdZd Zd Zy)S3SigV4QueryAutha  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

    c                     |S rI   rE   r-  s     r*   r   z$S3SigV4QueryAuth._normalize_url_path   r.  r,   c                     t         S rI   rk  r>   s     r*   r   zS3SigV4QueryAuth.payload$  rl  r,   N)r@   rA   rB   r   r   r   rE   r,   r*   rv  rv    s    	 r,   rv  c                       e Zd ZdZd Zy)S3SigV4PostAuthz
    Presigns a s3 post

    Implementation doc here:
    http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-UsingHTTPPOST.html
    c                    t         j                   j                         }|j                  t              |j                  d<   i }|j                  j                  dd       |j                  d   }i }g }|j                  j                  dd       &|j                  d   }|j                  dd       |d   }||d<   d|d<   | j                  |      |d<   |j                  d   |d<   |j                  ddi       |j                  d| j                  |      i       |j                  d|j                  d   i       | j                  j                  @| j                  j                  |d	<   |j                  d	| j                  j                  i       t        j                  t        j                  |      j                  d
            j                  d
      |d<   | j!                  |d   |      |d<   ||j                  d<   ||j                  d<   y )Nr   r<  r=  r>  r  r?  r@  rA  x-amz-security-tokenr/   rC  rD  rE  rG  s         r*   r<   zS3SigV4PostAuth.add_auth4  s   ((//1'3'<'<_'M$??7>J__%=>F
??7>J__%=>Fzz,-9#L1
)|$6 !%)ZZ%8!"&{;|,.@AB-tzz'/BCD<)EFG!!--1-=-=-C-CF)*5t7G7G7M7MNO "++JJv%%g.

&/ 	x %)NN6(3CW$M !4:014:01r,   Nr@   rA   rB   r   r<   rE   r,   r*   rz  rz  ,  s    %;r,   rz  c                   b    e Zd Zg dZddZd Zd Zd Zd ZddZ		 dd	Z
	 dd
Zd Zd Zd Zy)
HmacV1Auth)$
accelerateaclcorsdefaultObjectAcllocationlogging
partNumberrC  requestPaymenttorrent
versioning	versionIdversionswebsiteuploadsuploadIdzresponse-content-typezresponse-content-languagezresponse-expireszresponse-cache-controlzresponse-content-dispositionzresponse-content-encodingdelete	lifecycletaggingrestorestorageClassnotificationreplicationr  	analyticsmetrics	inventoryselectzselect-typezobject-lockNc                     || _         y rI   rO   r   s       r*   rK   zHmacV1Auth.__init__  rR   r,   c                 *   t        j                  | j                  j                  j	                  d      t
              }|j                  |j	                  d             t        |j                               j                         j                  d      S )Nr/   rV   )rd   re   rP   rf   rg   r   rk   r   rn   ro   r5   )r?   rr   r   s      r*   sign_stringzHmacV1Auth.sign_string  sk    88''..w74
 	--g678??,-335<<WEEr,   c                 ,   g d}g }d|v r|d= | j                         |d<   |D ]_  }d}|D ]B  }|j                         }||   ||k(  s|j                  ||   j                                d}D |rO|j                  d       a dj	                  |      S )N)content-md5rP  dater   FTrY   rU   )	_get_dater   ri   ro   rj   )r?   r   interesting_headershoiihfoundru   lks           r*   canonical_standard_headersz%HmacV1Auth.canonical_standard_headers  s    EW..*%BEYY[3<+bJJws|1134 E	 
 

2 & yy~r,   c                 P   g }i }|D ]T  }|j                         }||   |j                  d      s+dj                  d |j                  |      D              ||<   V t	        |j                               }|D ]  }|j                  | d||            dj                  |      S )Nx-amz-r   c              3   <   K   | ]  }|j                           y wrI   )ro   )r   r   s     r*   r   z6HmacV1Auth.canonical_custom_headers.<locals>.<genexpr>  s      2+?a	+?s   r   rU   )r   r   rj   r   rh   keysri   )r?   r   r  custom_headersru   r  sorted_header_keyss          r*   canonical_custom_headersz#HmacV1Auth.canonical_custom_headers  s    CBs|'==*), 2+2??3+?2 *N2&	  $N$7$7$9:%CJJ#as 3456 &yy~r,   c                 H    t        |      dk(  r|S |d   t        |d         fS )z(
        TODO: Do we need this?
        rU  r   )ra   r   )r?   nvs     r*   	unquote_vzHmacV1Auth.unquote_v  s+     r7a<IqE72a5>**r,   c                    ||}n|j                   }|j                  r|j                  j                  d      }|D cg c]  }|j                  dd       }}|D cg c]%  }|d   | j                  v s| j	                  |      ' }}t        |      dkD  rR|j                  t        d             |D cg c]  }dj                  |       }}|dz  }|dj                  |      z  }|S c c}w c c}w c c}w )Nr]   r\   rU  r   )ru   ?)	r`   r   rq   QSAOfInterestr  ra   sortr   rj   )r?   rq   	auth_pathbufqsaas         r*   canonical_resourcezHmacV1Auth.canonical_resource  s      C**C;;++##C(C,/0Cq1773?CC0+.+.a!A$$:L:L2Lq!3   3x!|Z]+,/0Cqsxx{C0s
sxx}$
 1
 1s   C*C/3C/5C4c                     |j                         dz   }|| j                  |      dz   z  }| j                  |      }|r||dz   z  }|| j                  ||      z  }|S )NrU   r  )r   r  r  r  )r?   rb   rq   r   rK  r  csr  s           r*   canonical_stringzHmacV1Auth.canonical_string  so     \\^d"
d--g6==66w?.4''B
d%%ey%AA	r,   c                     | j                   j                  r|d= | j                   j                  |d<   | j                  ||||      }t        j	                  d|        | j                  |      S )Nr|  r  zStringToSign:
)rP   r   r  r^   r_   r  )r?   rb   rq   r   rK  r  rr   s          r*   get_signaturezHmacV1Auth.get_signature  sx     !!./.2.>.>.D.DG*+..E7i / 
 	~&678//r,   c                 J   | j                   t        t        j                  d       t	        |j
                        }t        j                  d|j                          | j                  |j                  ||j                  |j                        }| j                  ||       y )Nz(Calculating signature using hmacv1 auth.zHTTP request method: r  )rP   r   r^   r_   r   r&   rb   r  r   r  _inject_signature)r?   r7   rq   r   s       r*   r<   zHmacV1Auth.add_auth  s    #$$?@%,W^^,<=>&&NNE7??g>O>O ' 
	 	w	2r,   c                     t        d      S )NTr   r   r?   s    r*   r  zHmacV1Auth._get_date  s    &&r,   c                     d|j                   v r|j                   d= d| j                  j                   d| }||j                   d<   y )Nr  zAWS r   )r   rP   r   )r?   r7   r   auth_headers       r*   r  zHmacV1Auth._inject_signature  sI    goo- 0T--8899+F+6(r,   )NNrI   )r@   rA   rB   r  rK   r  r  r  r  r  r  r  r<   r  r  rE   r,   r*   r  r  \  sN    %MN'F"+6 ?C	 ?C
0	3'7r,   r  c                   *    e Zd ZdZdZefdZd Zd Zy)HmacV1QueryAuthz
    Generates a presigned request for s3.

    Spec from this document:

    http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html
    #RESTAuthenticationQueryStringAuth

    rp  c                      || _         || _        y rI   )rP   rN  )r?   rP   rK  s      r*   rK   zHmacV1QueryAuth.__init__  s    &r,   c                 z    t        t        t        j                         t        | j                        z               S rI   )r6   r  r   rN  r  s    r*   r  zHmacV1QueryAuth._get_date  s&    3tyy{S%77899r,   c                    i }| j                   j                  |d<   ||d<   |j                  D ]R  }|j                         }|dk(  r|j                  d   |d<   +|j	                  d      s|dv sA|j                  |   ||<   T t        |      }t        |j                        }|d   r
|d    d| }|d	   |d
   |d   ||d   f}t        |      |_        y )Nr}   rX   r   Expiresr  )r  rP     r]   r   rU  rV  rW  )	rP   r   r   r   r   r   r   r&   r   )	r?   r7   r   r^  
header_keyr  r`  ra  rb  s	            r*   r  z!HmacV1QueryAuth._inject_signature  s    
'+'7'7'B'B
#$"+
;!//J!!#B V#(/(?
9% x(B 3 - ")!4
2 *  3:> W[[!Q4 #$A$q)9(:;1qtQqT+;QqTB /r,   N)r@   rA   rB   r   rm  rK   r  r  rE   r,   r*   r  r    s      O,;  :0r,   r  c                       e Zd ZdZd Zy)HmacV1PostAuthz
    Generates a presigned post for s3.

    Spec from this document:

    http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingHTTPPOST.html
    c                    i }|j                   j                  dd       |j                   d   }i }g }|j                   j                  dd       &|j                   d   }|j                  dd       |d   }||d<   | j                  j                  |d<   | j                  j                  @| j                  j                  |d<   |j                  d| j                  j                  i       t        j                  t        j                  |      j                  d            j                  d      |d<   | j                  |d         |d<   ||j                   d<   ||j                   d<   y )	Nr<  r=  r>  r}   r|  r/   rC  r   )r   r$   rP   r   r   ri   rl   rm   r3   rF  rg   r5   r  )r?   r7   rH  rC  r>  s        r*   r<   zHmacV1PostAuth.add_authC  sX   ??7>J__%=>F
??7>J__%=>Fzz,-9#L1
)|#'#3#3#>#> !!--1-=-=-C-CF)*5t7G7G7M7MNO "++JJv%%g.

&/ 	x #..vh/?@{4:014:01r,   Nr}  rE   r,   r*   r  r  :  s    ;r,   r  c                       e Zd ZdZd Zy)
BearerAuthz
    Performs bearer token authorization by placing the bearer token in the
    Authorization header as specified by Section 2.1 of RFC 6750.

    https://datatracker.ietf.org/doc/html/rfc6750#section-2.1
    c                     | j                   
t               d| j                   j                   }d|j                  v r|j                  d= ||j                  d<   y )NzBearer r  )rJ   r   r   r   )r?   r7   r  s      r*   r<   zBearerAuth.add_authj  sR    ??""$$ 5 567goo-0+6(r,   Nr}  rE   r,   r*   r  r  b  s    7r,   r  c                     | D ];  }|dk(  rt         |   c S |t         v rt         |   }|t        v s-|c S t        |       t        |       )Nsmithy.api#noAuth)signature_version)AUTH_TYPE_TO_SIGNATURE_VERSIONAUTH_TYPE_MAPSr   r   )
auth_trait	auth_typer  s      r*   resolve_auth_typer  t  sZ    	++1)<<88 >y I N2((.KK   +Z
HHr,   )v2v3v3httpsr%  zs3-queryzs3-presign-postzs3v4-presign-postzv4-s3expresszv4-s3express-queryzv4-s3express-presign-postbearer)CRT_AUTH_TYPE_MAPS)v4zv4-querys3v4z
s3v4-queryr  v4ar  none)zaws.auth#sigv4zaws.auth#sigv4azsmithy.api#httpBearerAuthr  )Grl   r  r
  r   rd   r3   r  r   collections.abcr   email.utilsr   hashlibr   r   operatorr   botocore.compatr	   r
   r   r   r   r   r   r   r   botocore.exceptionsr   r   r   r   botocore.utilsr   r   r   r   	getLoggerr@   r^   r   r   r   r  r   r   r   r+   r8   r:   rG   rM   r   r   r  r2  r:  rJ  ro  rv  rz  r  r  r  r  r  r  botocore.crt.authr  rk   r  rE   r,   r*   <module>r     s           # "   
 
 
   * 
		8	$ G  
" 
 & %I "&
. .%* %:
 :z<
 <8JI
 JIZ3) 3l8K 8**; *;Ze  e PN7Y N7b ~  0-;i -;`f7 f7R20j 20j%;Z %;P7 7$
I 

%(!,!2 4,-&*		
 !)	" r,   