
    qh                        S r SSKJr  SSKrSSKJr  SSKJr  SSKJrJ	r	  SSK
JrJr  SS	KJr  S
SKJr  S
SKJr  SS jr " S S\5      r " S S\5      r " S S\5      rg)z
VK.com OpenAPI, OAuth2 and Iframe application OAuth2 backends, docs at:
    https://python-social-auth.readthedocs.io/en/latest/backends/vk.html
    )annotationsN)md5)time)Anycast   )AuthExceptionAuthTokenRevoked)parse_qs   )BaseAuth)
BaseOAuth2c                R    [        U R                  S5      5      R                  5       $ )z~
Calculates signature using md5.

https://dev.vk.com/en/api/open-api/getting-started#Authorization%20on%20the%20Remote%20Side
zutf-8)r   encode	hexdigest)payloads    I/var/www/html/env/lib/python3.13/site-packages/social_core/backends/vk.pyvk_sigr      s!     w~~g&'1133    c                  >    \ rS rSrSrSrSrS rS rS r	S r
S	 rS
rg)VKontakteOpenAPI   z%VK.COM OpenAPI authentication backendz
vk-openapiidc                    UR                  S5      =(       d    SnU R                  UR                  SS/5      S   UR                  SS/5      S   S9u  p4n[        U5      S:X  a  US   OUSUUUS.$ )	z'Return user details from VK.com requestnickname 
first_namer   	last_namer   r   r   usernameemailfullnamer   r   )getget_user_nameslen)selfresponser   r#   r   r   s         r   get_user_details!VKontakteOpenAPI.get_user_details"   s    <<
+1r*.*=*=||L2$7:ll;5a8 +> +
'i
 +.h-1*<( $"
 	
r   c                    U R                   $ Ndata)r'   access_tokenargskwargss       r   	user_dataVKontakteOpenAPI.user_data1   s    yyr   c                    U R                  S5      U R                  S.nU R                  SS5      nU R                  R                  X!S9$ )zLReturns local VK authentication page, not necessary for
VK to authenticate.
APP_ID)	VK_APP_IDVK_COMPLETE_URL
LOCAL_HTMLzvkontakte.html)tplcontext)settingredirect_uristrategyrender_html)r'   ctx
local_htmls      r   	auth_htmlVKontakteOpenAPI.auth_html4   sK    
 h/#00
 \\,0@A
}}((Z(EEr   c                
  ^ U R                   R                  SU R                  S5      -   5      nSU R                  ;  d  U(       d  [	        S5      e[        U5      mSR                  U4S jS 5       5      nU R                  5       u  pV[        XF-   5      nUTS   :w  d  [        TS	   5      [        5       :  a  [	        S
5      eUR                  X R                  TS   5      S.5        U R                   R                  " U0 UD6$ )zHPerforms check of authentication in VKontakte, returns User if
succeededvk_app_r5   r   z&VK.com authentication is not completedr   c              3  8   >#    U  H  oS -   TU   -   v   M     g7f=N ).0itemmappings     r   	<genexpr>1VKontakteOpenAPI.auth_complete.<locals>.<genexpr>G   s       
3U43J&3U   )expiremidsecretsidsigrO   z*VK.com authentication failed: Invalid HashrP   )backendr(   )r=   session_getr;   r.   
ValueErrorr   joinget_key_and_secretr   intr   updater2   authenticate)	r'   r0   r1   session_value	check_strkeyrQ   hashrK   s	           @r   auth_completeVKontakteOpenAPI.auth_complete?   s     11)dll8>T2TUtyy EFF=)GG 
3U
 
	 --/i()75>!S):%;df%DIJJ$NN75>4RST}}))4:6::r   c                    g)zVK.com does not require visiting server url in order
to do authentication, so auth_xxx methods are not needed to be called.
Their current implementation is just an exampleFrH   )r'   s    r   uses_redirectVKontakteOpenAPI.uses_redirectS   s     r   rH   N)__name__
__module____qualname____firstlineno____doc__nameID_KEYr)   r2   rA   r`   rc   __static_attributes__rH   r   r   r   r      s)    /DF
	F;(r   r   c                  F    \ 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rg)VKOAuth2Z   zVKOAuth2 authentication backendz	vk-oauth2r   zhttps://oauth.vk.com/authorizez!https://oauth.vk.com/access_token)r   r   )
expires_inexpiresc                    U R                  UR                  S5      UR                  S5      S9u  p#nUR                  S5      UR                  SS5      UUUS.$ )z'Return user details from VK.com accountr   r   r   screen_namer"   r   r    )r%   r$   )r'   r(   r#   r   r   s        r   r)   VKOAuth2.get_user_detailsc   sb    *.*=*=||L1X\\+=V +> +
'i !]3\\'2. $"
 	
r   c                   SSSSS/U R                  S/ 5      QnSR                  [        U5      5      nU R                  SUUS	.5      nU(       aX  UR	                  S
5      (       aB  US
   nUR	                  SS5      nUR	                  S5      S:X  a  [        X5      e[        X5      eU(       a4  [        SUR	                  S5      5      S   n	U	R	                  S5      U	S'   U	$ 0 $ )zLoads user data from servicer   r   rs   r   photo
EXTRA_DATA,z	users.get)r/   fieldserror	error_msgzUnknown error
error_code   zlist[dict[str, str | None]]r(   r   
user_photo)r;   rW   setvk_apir$   r
   r	   r   )
r'   r/   r0   r1   request_datary   r(   rz   msgr.   s
             r   r2   VKOAuth2.user_datap   s     
 \\,+
 #l+,;; , 
 W--W%E))K9Cyy&!+&t11**5x||J7OPQRSD!%'!2DK	r   c                n  ^ U R                  SS5      TS'   ST;  a_  U R                  5       u  p4ST;  a  UTS'   UTS'   STS'   S	n[        U4S
 jT 5       5      n[        SR	                  U5      U-   5      TS'   OSU-   n U R                  UTS9$ ! [        [        [        [        [        4 a     gf = f)zX
Calls VK.com OpenAPI method, check:
    https://vk.com/apiclub
    http://goo.gl/yLcaa
API_VERSIONz5.131vr/   api_idmethodjsonformatzhttps://api.vk.com/api.phpc              3  8   >#    U  H  oS -   TU   -   v   M     g7frF   rH   )rI   rJ   r.   s     r   rL   "VKOAuth2.vk_api.<locals>.<genexpr>   s     IDDs
T$Z 7DrN   r   rS   zhttps://api.vk.com/method/)paramsN)r;   rX   sortedr   rW   get_json	TypeErrorKeyErrorOSErrorrV   
IndexError)r'   r   r.   r^   rQ   url
param_lists     `    r   r   VKOAuth2.vk_api   s     LL8S	%113KCt#!$X#DN#DN.CIDIIJ !4v!=>DK.7C	==T=228Wj*E 		s   B B43B4rH   N)r   strr.   zdict[str, str]returnzdict[Any, Any] | None)re   rf   rg   rh   ri   rj   rk   AUTHORIZATION_URLACCESS_TOKEN_URLrw   r)   r2   r   rl   rH   r   r   rn   rn   Z   s6    )DF8: 9:J
Br   rn   c                  "    \ rS rSrSrSrS rSrg)VKAppOAuth2   z)VK.com Application Authentication supportzvk-appc                V  ^  Sn[        U 4S jU 5       5      (       d  g T R                  R                  S5      nT R                  5       u  pVU(       aF  [	        SR                  UT R                  R                  S5      U/5      5      nXt:w  a  [        S5      eT R                  S5      nT R                  R                  S5      n	Ubh  [        U5      nUS:X  a  T R                  R                  S	5      n
O*US
:X  a$  T R                  SSU	05      R                  SS5      n
[        W
5      (       d  g T T T R                  R                  5       T R                  U	0S.nUS   R                  [        R                  " US   S   5      S   S   5        T R                  R                   " U0 UD6$ )N)is_app_user	viewer_idr/   r   c              3  @   >#    U  H  oTR                   ;   v   M     g 7fr,   r-   )rI   paramr'   s     r   rL   ,VKAppOAuth2.auth_complete.<locals>.<genexpr>   s     C?%DII%?s   auth_key_r   z.VK.com authentication failed: invalid auth keyUSERMODEr   r   r   	isAppUseruser_idr(   r   )authrT   requestr(   r   
api_result)allr.   r$   rX   r   rW   rV   r;   rY   r   r=   r   rk   rZ   r   loadsr[   )r'   r0   r1   required_paramsr   r^   rQ   	check_key
user_checkr   is_user	auth_datas   `           r   r`   VKAppOAuth2.auth_complete   s|   PC?CCC99==, --/sxxdiimmK.H&(QRSI$ !QRR\\*-
))--,!ZJQ))--6q++kIw3GHLL w<< }}113W	
	 	*$$JJy+L9::FqI	
 }}))4=9==r   rH   N)re   rf   rg   rh   ri   rj   r`   rl   rH   r   r   r   r      s    3D&>r   r   )r   r   r   r   )ri   
__future__r   r   hashlibr   r   typingr   r   
exceptionsr	   r
   utilsr   baser   oauthr   r   r   rn   r   rH   r   r   <module>r      sT   
 #     8   4;x ;|Oz Od+>( +>r   