
    f                         d dl 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  G d	 d
      Z G d de	      Z G d de      ZegZy)    N)EmailAddress)get_adapter)QUERY_EMAIL)
AuthActionProviderAccount)GoogleOAuth2Adapter)OAuth2Error)OAuth2Providerc                       e Zd ZdZdZy)ScopeemailprofileN)__name__
__module____qualname__EMAILPROFILE     j/var/www/cs2snipe.com/venv/lib/python3.12/site-packages/allauth/socialaccount/providers/google/provider.pyr   r      s    EGr   r   c                       e Zd ZdZd Zd Zy)GoogleAccounta  
    The account data can be in two formats. One, originating from
    the /v2/userinfo endpoint:

        {'email': 'john.doe@gmail.com',
         'given_name': 'John',
         'id': '12345678901234567890',
         'locale': 'en',
         'name': 'John',
         'picture': 'https://lh3.googleusercontent.com/a/code',
         'verified_email': True}

    The second, which is the payload of the id_token:

        {'at_hash': '-someHASH',
         'aud': '123-pqr.apps.googleusercontent.com',
         'azp': '123-pqr.apps.googleusercontent.com',
         'email': 'john.doe@gmail.com',
         'email_verified': True,
         'exp': 1707297277,
         'given_name': 'John',
         'iat': 1707293677,
         'iss': 'https://accounts.google.com',
         'locale': 'en',
         'name': 'John',
         'picture': 'https://lh3.googleusercontent.com/a/code',
         'sub': '12345678901234567890'}
    c                 L    | j                   j                  j                  d      S )Nlinkaccount
extra_datagetselfs    r   get_profile_urlzGoogleAccount.get_profile_url/   s    ||&&**622r   c                 L    | j                   j                  j                  d      S )Npicturer   r   s    r   get_avatar_urlzGoogleAccount.get_avatar_url2   s    ||&&**955r   N)r   r   r   __doc__r!   r$   r   r   r   r   r      s    :36r   r   c                   P     e Zd ZdZdZeZeZdZ	d Z
 fdZd Zd Zd Zd	 Z xZS )
GoogleProvidergoogleGoogleTc                 r    t         j                  g}t        r|j                  t         j                         |S )N)r   r   r   appendr   )r    scopes     r   get_default_scopez GoogleProvider.get_default_scope=   s%    LL%r   c                 X    t         |   ||      }|t        j                  k(  rd|d<   |S )Nzselect_account consentprompt)superget_auth_params_from_requestr   REAUTHENTICATE)r    requestactionret	__class__s       r   r1   z+GoogleProvider.get_auth_params_from_requestC   s0    g27FCZ...4CM
r   c                     d|v r|d   S |d   S )Nsubidr   r    datas     r   extract_uidzGoogleProvider.extract_uidI   s    D=;Dzr   c                 x    t        |j                  d      |j                  d      |j                  d            S )Nr   family_name
given_name)r   	last_name
first_name)dictr   r:   s     r   extract_common_fieldsz$GoogleProvider.extract_common_fieldsN   s3    ((7#hh}-xx-
 	
r   c                     g }|j                  d      }|rJt        |j                  d      xs |j                  d            }|j                  t        ||d             |S )Nr   email_verifiedverified_emailT)r   verifiedprimary)r   boolr+   r   )r    r;   r5   r   rG   s        r   extract_email_addressesz&GoogleProvider.extract_email_addressesU   sU    !DHH%56T$((CS:TUHJJ|%(DQR
r   c                 @   ddl m} |j                  d      }|st               j	                  d      	 |j                  | j                  |      }| j                  ||      }|S # t        t        j                  f$ r}t               j	                  d      |d }~ww xY w)Nr   )viewsid_tokeninvalid_token)app
credential)&allauth.socialaccount.providers.googlerL   r   r   validation_error_verify_and_decoderO   r	   requestsRequestExceptionsociallogin_from_response)r    r3   tokenrL   rP   identity_dataelogins           r   verify_tokenzGoogleProvider.verify_token]   s    @YYz*
-00AA	I!44HH 5 M
 ..wF X667 	I-00AqH	Is   A% %B>BB)r   r   r   r9   namer   account_classr   oauth2_adapter_classsupports_token_authenticationr-   r1   r<   rC   rJ   r[   __classcell__)r6   s   @r   r'   r'   6   s<    	BD!M.$(!

r   r'   )rT   allauth.account.modelsr   allauth.socialaccount.adapterr   "allauth.socialaccount.app_settingsr   $allauth.socialaccount.providers.baser   r   ,allauth.socialaccount.providers.google.viewsr   -allauth.socialaccount.providers.oauth2.clientr	   /allauth.socialaccount.providers.oauth2.providerr
   r   r   r'   provider_classesr   r   r   <module>ri      sL     / 5 : L L E J 
"6O "6J4^ 4n ## r   