
    i                     X   S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r	SSKJr  SSKJr  \R                  4S jr\R                   R"                  4S jrS r " S	 S
\	R&                  5      r " S S\	R*                  R,                  5      r " S S5      r\" SSS9S 5       rg)z"OAuth helper functions and classes    N   )text)cachec                 L   ^ SR                  U4S j[        U 5       5       5      $ )z-Generate a nonce value with 'size' characters c              3   P   >#    U  H  n[         R                  " T5      v   M     g 7fN)randomchoice).0_alphabets     =/app/mltbenv/lib/python3.13/site-packages/gallery_dl/oauth.py	<genexpr>nonce.<locals>.<genexpr>   s     @Kq6==**Ks   #&)joinrange)sizer   s    `r   noncer      s    77@E$K@@@    c                     U" U S5      $ )z0Quote 'value' according to the OAuth1.0 standard~ )valuequotes     r   r   r      s    r   c                  2    SR                  S U  5       5      $ )z*Concatenate 'args' as expected by OAuth1.0&c              3   8   #    U  H  n[        U5      v   M     g 7fr	   )r   r   items     r   r   concat.<locals>.<genexpr>&   s     1DDE$KKDs   r   )argss    r   concatr$   $   s    881D111r   c                   *    \ rS rSrSr SS jrS rSrg)OAuth1Session)   z2Extension to requests.Session to support OAuth 1.0Nc                 d    [         R                  R                  U 5        [        XX45      U l        g r	   )requestsSession__init__OAuth1Clientauthselfconsumer_keyconsumer_secrettokentoken_secrets        r   r+   OAuth1Session.__init__,   s*     	!!$' 
	r   c                 v    SUR                   ;   a)  UR                   S	 UR                  U R                  5        g g )NAuthorization)headersprepare_authr-   )r/   prepared_requestresponses      r   rebuild_authOAuth1Session.rebuild_auth5   s6    .666 ((9))$))4 7r   )r-   NN)__name__
__module____qualname____firstlineno____doc__r+   r;   __static_attributes__r   r   r   r&   r&   )   s    < +/
5r   r&   c                   0    \ rS rSrSr SS jrS rS rSrg)	r,   ;   zOAuth1.0a authenticationNc                 4    Xl         X l        X0l        X@l        g r	   r0   r1   r2   r3   r.   s        r   r+   OAuth1Client.__init__>   s     ).
(r   c           
         SU R                   4S[        S5      4SS[        [        [        R                  " 5       5      5      4S/nU R
                  (       a  UR                  SU R
                  45        U R                  X5      nUR                  SU45        S	S
R                  S U 5       5      -   UR                  S'   U$ )Noauth_consumer_keyoauth_nonce   )oauth_signature_methodz	HMAC-SHA1oauth_timestamp)oauth_versionz1.0oauth_tokenoauth_signaturezOAuth ,c              3   <   #    U  H  u  pUS -   U-   S-   v   M     g7f)z=""Nr   )r   keyr   s      r   r   (OAuth1Client.__call__.<locals>.<genexpr>T   s$      ?E7CC$J$|s   r6   )
r0   r   strinttimer2   appendgenerate_signaturer   r7   )r/   requestoauth_params	signatures       r   __call__OAuth1Client.__call__F   s    !4#4#45E"I&3C		$4 56$
 ::

 ;<++GB	.	:;+3chh ?E7C?E 7E ,E( r   c                    UR                   R                  S5      u  p4nUR                  5       n[        R                  " U5      R                  5        H*  u  pgUR                  [        U5      [        U5      45        M,     UR                  5         SR                  S U 5       5      n[        UR                  X55      R                  5       n[        U R                  U R                  =(       d    S5      R                  5       n[        R                   " Xh["        R$                  5      R'                  5       n	[        [(        R*                  " U	5      SS R-                  5       5      $ )z Generate 'oauth_signature' value?r   c              3   D   #    U  H  nS R                  U5      v   M     g7f)=Nr"   r   s     r   r   2OAuth1Client.generate_signature.<locals>.<genexpr>a   s     ;FD$Fs    r   N)url	partitioncopyr   parse_queryitemsrZ   r   sortr   r$   methodencoder1   r3   hmacnewhashlibsha1digestbinascii
b2a_base64decode)
r/   r\   paramsrg   r   queryrU   r   messager^   s
             r   r[   OAuth1Client.generate_signatureY   s    --c2**51779JCMM5:uU|45 :;F;;4;;=T))4+<+<+BCJJLHHS7<<8??A	X((3CR8??ABBr   rG   r=   )	r>   r?   r@   rA   rB   r+   r_   r[   rC   r   r   r   r,   r,   ;   s    " +/)&Cr   r,   c                   ,    \ rS rSrSrSrSrS rS rSr	g)	OAuth1APIj   z,Base class for OAuth1.0 based API interfacesNc                 \   UR                   U l         Xl        UR                  SU R                  5      nUR                  SU R                  5      nUR                  S5      nUR                  S5      nX R                  :X  a  SOSnUb  US:X  a  UR
                  U4n[        U5      u  pEU(       aJ  U(       aC  U(       a<  U(       a5  U R                   R                  SU5        [        X#XE5      U l	        S U l
        g U R                   R                  S	U5        UR                  U l	        X l
        g )
Nzapi-keyz
api-secretzaccess-tokenzaccess-token-secretdefaultcustomr   z Using %s OAuth1.0 authenticationzUsing %s api_key authentication)log	extractorconfigAPI_KEY
API_SECRETcategory_token_cachedebugr&   sessionapi_key)r/   r   r   
api_secretr2   r3   key_typerU   s           r   r+   OAuth1API.__init__o   s    =="""9dll;%%lDOOD
  0 ''(=> '<< 79X=EW,%%w/C".s"3EzeHHNN=xH(U:DLDLHHNN<hG$,,DL"Lr   c                 d    S US'   U R                   US'   U R                  R                  " U40 UD6$ )Nfatalr   )r   r   r\   )r/   rg   kwargss      r   r\   OAuth1API.request   s3    w LLy~~%%c4V44r   )r   r   r   r   )
r>   r?   r@   rA   rB   r   r   r+   r\   rC   r   r   r   r|   r|   j   s    6GJ#05r   r|   l    w )maxagekeyargc                     g)Nr=   r   )rU   s    r   r   r      s    r   )rB   ro   rY   r
   stringrq   rt   urllib.parseurllibr)   requests.authr   r   r   ascii_lettersr   parser   r$   r*   r&   r-   AuthBaser,   r|   r   r   r   r   <module>r      s    )             -- A
 ||)) 
2
5H$$ 5$,C8==)) ,C^ 5  5F k!$ %r   