
    qh                     h    S r SSKJr  SSKJr  SSKJrJr  SSKJ	r	   " S S	\	5      r
 " S
 S\
5      rg)z
Weixin OAuth2 backend
    )	urlencode)	HTTPError   )AuthCanceledAuthUnknownError   )
BaseOAuth2c                   f    \ rS rSrSrSrSrSrSrS/r	Sr
S	S
/rS rS rSS jrSS jrS rS rSrg)WeixinOAuth2   z#Weixin OAuth authentication backendweixinopenidz,https://open.weixin.qq.com/connect/qrconnect1https://api.weixin.qq.com/sns/oauth2/access_tokensnsapi_loginF)nicknameusername)
headimgurlprofile_image_urlc                     U R                  S5      (       a  UR                  SS5      nOUR                  SS5      nUUR                  SS5      S.$ )zTReturn user details from Weixin. API URL is:
https://api.weixin.qq.com/sns/userinfo
DOMAIN_AS_USERNAMEdomain r   r   )r   r   )settingget)selfresponser   s      M/var/www/html/env/lib/python3.13/site-packages/social_core/backends/weixin.pyget_user_detailsWeixinOAuth2.get_user_details   sO     <<,--||Hb1H||J3H !)lB!?
 	
    c                     U R                  SUUS   S   S.S9nUR                  S5      nU(       a#  UR                  S5      R                  S5      US'   U$ )	Nz&https://api.weixin.qq.com/sns/userinfor   r   )access_tokenr   )paramsr   raw_unicode_escapezutf-8)get_jsonr   encodedecode)r   r"   argskwargsdatar   s         r   	user_dataWeixinOAuth2.user_data)   sd    }}4 , ,X6  
 88J''/CDKKGTDr    Nc                     U R                  5       u  p#X R                  U5      S.nU R                  (       a  U(       a  XS'   U R                  (       a  U R                  US'   U$ )N)appidredirect_uristateresponse_type)get_key_and_secretget_redirect_uriSTATE_PARAMETERRESPONSE_TYPE)r   r0   r.   secretr#   s        r   auth_paramsWeixinOAuth2.auth_params7   sU    //1 2G2G2NOE#7O&*&8&8F?#r    c                     U R                  5       u  p#SU R                  R                  SS5      UUU R                  U5      S.$ )Nauthorization_codecoder   )
grant_typer;   r.   r6   r/   )r2   r*   r   r3   r   r0   r.   r6   s       r   auth_complete_params!WeixinOAuth2.auth_complete_params@   sE    //1.IIMM&"- 11%8
 	
r    c                 4    U R                  5       u  pEUSUUS.$ )Nrefresh_token)rA   r<   r.   r6   )r2   )r   tokenr(   r)   r.   r6   s         r   refresh_token_params!WeixinOAuth2.refresh_token_paramsJ   s(    //1")	
 	
r    c                    U R                  U R                  5         U R                  U R                  U R	                  U R                  5       5      U R                  5       U R                  S9nSU;   a  [        U 5      eU R                  U5        U R                  " US   /UQ7SU0UD6$ ! [         a3  nUR                  R                  S:X  a  [        XR                  S9ee SnAf[         a    [        U 5      ef = f)2Completes login process, must return user instancer*   headersmethod  )r   Nerrcoder"   r   process_errorr*   request_access_tokenACCESS_TOKEN_URLr>   validate_stateauth_headersACCESS_TOKEN_METHODr   r   status_coder   KeyErrorr   do_authr   r(   r)   r   errs        r   auth_completeWeixinOAuth2.auth_completeS   s    499%	)00%%..t/B/B/DE))+//	 1 H  t$$8$||^$
:>
/7
BH
 	
  	||''3."4,,?? 	)"4((	)s   AB+ +
C<5.C##C< N)__name__
__module____qualname____firstlineno____doc__nameID_KEYAUTHORIZATION_URLrO   DEFAULT_SCOPEREDIRECT_STATE
EXTRA_DATAr   r+   r7   r>   rC   rX   __static_attributes__rZ   r    r   r   r      sS    -DFFJ#$MN +J




r    r   c                   H    \ rS rSrSrSrSrSrSrSr	S r
SS
 jrS rS rSrg	)WeixinOAuth2APPk   zK
Weixin OAuth authentication backend

Can't use in web, only in weixin app
	weixinappr   z3https://open.weixin.qq.com/connect/oauth2/authorizer   Fc                     U R                   (       d  U R                  (       aY  U R                  S-   nU R                  R	                  U5      nUc+  U R                  5       nU R                  R                  X5        OS nU R                  U5      nUR                  U R                  5       5        UR                  U R                  5       5        [        [        UR                  5       5      5      nSR                  U R                  S-   U-   5      $ )N_statez{}#wechat_redirect?)r4   re   ra   strategysession_getstate_tokensession_setr7   updateget_scope_argumentauth_extra_argumentsr   sorteditemsformatrc   )r   ra   r0   r#   s       r   auth_urlWeixinOAuth2APP.auth_urlx   s    4#6#6 99x'DMM--d3E}((*))$6E!!%(d--/0d//126&,,.12#**4+A+AC+G&+PQQr    Nc                 h    U R                  5       u  p#SU R                  R                  SS5      UUS.$ )Nr:   r;   r   )r<   r;   r.   r6   )r2   r*   r   r=   s       r   r>   $WeixinOAuth2APP.auth_complete_params   s7    //1.IIMM&"-	
 	
r    c                     g r[   rZ   )r   s    r   rP   WeixinOAuth2APP.validate_state   s    r    c                    U R                  U R                  5         U R                  U R                  U R	                  U R                  5       5      U R                  5       U R                  S9nSU;   a  [        U 5      eU R                  U5        U R                  " US   /UQ7SU0UD6$ ! [         a+  nUR                  R                  S:X  a  [        U 5      ee SnAf[         a    [        U 5      ef = f)rF   rG   rJ   NrK   r"   r   rL   rV   s        r   rX   WeixinOAuth2APP.auth_complete   s    499%	)00%%..t/B/B/DE))+//	 1 H  t$$8$||^$
:>
/7
BH
 	
  	||''3."4(( 	)"4((	)s   AB+ +
C45&CC4rZ   r[   )r\   r]   r^   r_   r`   ra   rb   rc   rO   re   ry   r>   rP   rX   rg   rZ   r    r   ri   ri   k   s9     DFMJNR*

r    ri   N)r`   urllib.parser   requestsr   
exceptionsr   r   oauthr	   r   ri   rZ   r    r   <module>r      s5    #  7 Z
: Z
zD
l D
r    