
    f                     (   d dl Z d dl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 dlmZmZ d dlmZ d d	lmZ d d
lmZmZmZ  eedi       j1                  di       j1                  dd      Z eedi       j1                  di       j1                  dd      Z eedi       j1                  di       j1                  dd      Z eedi       j1                  di       j1                  dd      Z eedi       j1                  di       j1                  dd      Z eedi       j1                  di       j1                  dd      ZddZ G d de      Z  ejB                  e       Z" ejB                  e       Z# G d de	      Z$ ee$jK                               Z&y)    N)settings)PermissionDeniedValidationError)csrf_exempt)View)get_adapter)complete_social_loginrender_authentication_error)jwtkit)OAuth2Error)OAuth2AdapterOAuth2CallbackViewOAuth2LoginViewSOCIALACCOUNT_PROVIDERSgoogle	CERTS_URLz*https://www.googleapis.com/oauth2/v1/certsIDENTITY_URLz-https://www.googleapis.com/oauth2/v2/userinfoACCESS_TOKEN_URLz#https://oauth2.googleapis.com/tokenAUTHORIZE_URLz,https://accounts.google.com/o/oauth2/v2/authID_TOKEN_ISSUERzhttps://accounts.google.comFETCH_USERINFOFc                 x    t        j                  |t        t        | j                  t         j
                  |      S )N)
credentialkeys_urlissueraudience
lookup_kidverify_signature)r   verify_and_decoder   r   	client_idlookup_kid_pem_x509_certificate)appr   r   s      g/var/www/cs2snipe.com/venv/lib/python3.12/site-packages/allauth/socialaccount/providers/google/views.py_verify_and_decoder$   ;   s1    ##99)     c                   6    e Zd ZdZeZeZeZ	e
ZeZd Zd Zd Zy)GoogleOAuth2Adapterr   c                 R   d }|j                  d      }|rV| j                  ||      }| j                  rSd|vrO| j                  |j                        }|j                  d      }	|	r!|	|d<   n| j                  |j                        }| j                         j                  ||      }
|
S )Nid_tokenpicture)get_decode_id_tokenfetch_userinfo_fetch_user_infotokenget_providersociallogin_from_response)selfrequestr"   r/   responsekwargsdatar)   infor*   logins              r#   complete_loginz"GoogleOAuth2Adapter.complete_loginN   s    <<
+((h7D""y'<,,U[[9((9-&-DO((5D!!#==gtLr%   c                 8    | j                    }t        |||      S )aB  
        If the token was received by direct communication protected by
        TLS between this library and Google, we are allowed to skip checking the
        token signature according to the OpenID Connect Core 1.0 specification.

        https://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation
        )r   )did_fetch_access_tokenr$   )r2   r"   r)   r   s       r#   r,   z$GoogleOAuth2Adapter._decode_id_token]   s#      $:::!#xBRSSr%   c                     t               j                         j                  | j                  ddj	                  |      i      }|j
                  st        d      |j                         S )NAuthorizationz	Bearer {})headerszRequest to user info failed)r   get_requests_sessionr+   identity_urlformatokr   json)r2   access_tokenresps      r#   r.   z$GoogleOAuth2Adapter._fetch_user_infoh   sa    M!!#S!!(+*<*<\*JK   	 ww;<<yy{r%   N)__name__
__module____qualname__provider_idr   access_token_urlr   authorize_urlr   id_token_issuerr   r@   r   r-   r9   r,   r.    r%   r#   r'   r'   F   s1    K'!M%OL#N	Tr%   r'   c                   0     e Zd Z fdZd Zd Zd Z xZS )LoginByTokenViewc                 0   t               | _        | j                  j                  |t        j                        | _        	 t        |   |      S # t        t        j                  t        t        f$ r"}t        || j
                  |      cY d }~S d }~ww xY w)N)	exception)r   adapterr0   r'   rI   providersuperdispatchr   requestsRequestExceptionr   r   r
   )r2   r3   exc	__class__s      r#   rU   zLoginByTokenView.dispatch{   s    "}11(44
	V7#G,,%%	
 	V /wQTUU	Vs   A #B3B
BBc                     t        d      )N405)r   )r2   r3   s     r#   r+   zLoginByTokenView.get   s     u%%r%   c                     | j                  |       |j                  j                  d      }| j                  j	                  |d|i      }t        ||      S )Nr   r)   )
check_csrfPOSTr+   rS   verify_tokenr	   )r2   r3   argsr5   r   r8   s         r#   postzLoginByTokenView.post   sJ     \\%%l3
**7Z4LM$We44r%   c                     |j                   j                  d      }|st        d      |j                  j                  d      }|st        d      ||k7  rt        d      y )Ng_csrf_tokenzNo CSRF token in Cookie.zNo CSRF token in post body.z&Failed to verify double submit cookie.)COOKIESr+   r   r^   )r2   r3   csrf_token_cookiecsrf_token_bodys       r#   r]   zLoginByTokenView.check_csrf   sb    #OO//? "#=>>!,,**>:"#@AA/"#KLL 0r%   )rF   rG   rH   rU   r+   ra   r]   __classcell__)rY   s   @r#   rO   rO   z   s    V&
5Mr%   rO   )T)'rV   django.confr   django.core.exceptionsr   r   django.views.decorators.csrfr   django.views.genericr   allauth.socialaccount.adapterr   allauth.socialaccount.helpersr	   r
   allauth.socialaccount.internalr   -allauth.socialaccount.providers.oauth2.clientr   ,allauth.socialaccount.providers.oauth2.viewsr   r   r   getattrr+   r   r   r   r   r   r   r$   r'   adapter_viewoauth2_loginoauth2_callbackrO   as_viewlogin_by_tokenrM   r%   r#   <module>rw      s      D 4 % 5 2 E  H/4S2SBC 
 H/4S2SHI  H/4S2S	BC  H/4S2SHI  H/4S2S	9:  H/4S2S	5! -- -` ,++,?@1$112EF$Mt $MN -5578r%   