
    )Jf4                     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 d dlmZ d dlZd d	lmZ d d
lmZ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"  G d de
j#                  Z$ G d de
j%                  Z& G d de
j%                  Z' G d de
j%                  Z( G d de)          Z*dS )    )settings)authenticateget_user_model)get_current_site)PermissionDenied)models)get_random_string)gettext_lazyN)EmailAddress)filter_users_by_emailget_next_redirect_urlsetup_user_email)context)signals   )get_request_param   )app_settings	providers)get_adapterc                       e Zd Zd ZdS )SocialAppManagerc                     t           j        j        r*t          |          }|                     |j                  S |                                 S )N)	sites__id)allauthr   SITES_ENABLEDr   filteridall)selfrequestsites      _/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/allauth/socialaccount/models.pyon_sitezSocialAppManager.on_site   sA    - 	2#G,,D;;;111xxzz    N)__name__
__module____qualname__r$    r%   r#   r   r      s#            r%   r   c                   ^   e Zd Z e            Z ej         ed          dej	        
                                          Z ej         ed          dd          Z ej         ed          d	
          Z ej         ed          d ed                    Z ej         ed          dd ed                    Z ej         ed          dd ed                    Z ej        ed          Zej        j        r ej        dd          Z G d d          Zd Zd ZdS )	SocialAppprovider   )verbose_name
max_lengthchoiceszprovider ID   T)r.   r/   blankname(   r.   r/   z	client id   zApp ID, or consumer key)r.   r/   	help_textz
secret keyz-API secret, client secret, or consumer secret)r.   r/   r2   r7   keyKey)defaultr2   z
sites.Site)r2   c                   :    e Zd Z ed          Z ed          ZdS )SocialApp.Metazsocial applicationzsocial applicationsN)r&   r'   r(   _r.   verbose_name_pluralr)   r%   r#   Metar<   J   s1        q-..a 566r%   r?   c                     | j         S N)r3   r    s    r#   __str__zSocialApp.__str__N   s
    yr%   c                 d    t           j                            | j                  } |||           S )N)r!   app)r   registry	get_classr,   )r    r!   provider_classs      r#   get_providerzSocialApp.get_providerQ   s/    "+55dmDD~g48888r%   N)r&   r'   r(   r   objectsr   	CharFieldr=   r   rF   
as_choicesr,   provider_idr3   	client_idsecretr8   	JSONFielddictr   r   r   r   ManyToManyFieldsitesr?   rC   rI   r)   r%   r#   r+   r+       s         G  vQz]]"--//  H #&"Q}%%  K
 66rBBBD  Q{^^!-..  I
 VQ|__!CDD	  F &
QuXX#TQQuXX  C  vD999H) A
 '&|4@@@7 7 7 7 7 7 7 7  9 9 9 9 9r%   r+   c                      e Zd Z ej        ej        ej                  Z ej	         e
d          d          Z ej	         e
d          ej                  Z ej         e
d          d          Z ej         e
d	          d
          Z ej         e
d          e          Z G d d          Zd Zd Zd Zd ZddZd ZdS )SocialAccount	on_deleter,   r1   r5   uidz
last loginT)r.   auto_nowzdate joined)r.   auto_now_addz
extra data)r.   r:   c                   >    e Zd ZdZ ed          Z ed          ZdS )SocialAccount.Metar,   rX   zsocial accountzsocial accountsNr&   r'   r(   unique_togetherr=   r.   r>   r)   r%   r#   r?   r\   u   s6        -q)**a 122r%   r?   c                 "    t          |           S )N)account)r   rB   s    r#   r   zSocialAccount.authenticatez   s    D))))r%   c                 $    ddl m}  ||           S )Nr   )socialaccount_user_display)helpersrc   )r    rc   s     r#   rC   zSocialAccount.__str__}   s%    777777))$///r%   c                 N    |                                                                  S rA   )get_provider_accountget_profile_urlrB   s    r#   rg   zSocialAccount.get_profile_url   s     ((**::<<<r%   c                 N    |                                                                  S rA   )rf   get_avatar_urlrB   s    r#   ri   zSocialAccount.get_avatar_url   s     ((**99;;;r%   Nc                     t          | dd           }|r|S t                      }|                    |pt          j        | j                  x}| _        |S )N	_provider)r,   )getattrr   rI   r   r!   r,   rk   )r    r!   r,   adapters       r#   rI   zSocialAccount.get_provider   sa    4d33 	O--$+$8$8&w %9 %
 %
 	
4> r%   c                 P    |                                                      |           S rA   )rI   wrap_accountrB   s    r#   rf   z"SocialAccount.get_provider_account   s"      ""//555r%   rA   )r&   r'   r(   r   
ForeignKeyr   AUTH_USER_MODELCASCADEuserrK   r=   r,   r   UID_MAX_LENGTHrX   DateTimeField
last_logindate_joinedrP   rQ   
extra_datar?   r   rC   rg   ri   rI   rf   r)   r%   r#   rU   rU   V   sm       6X5PPPD  vQz]]  H( &
QuXX,*E  C &%11\??TRRRJ&&&AAm4D4DSWXXXK!!qqMMMJ3 3 3 3 3 3 3 3
* * *0 0 0
= = =< < <   6 6 6 6 6r%   rU   c                   X   e Zd Z ej        eej        dd          Z ej        eej	                  Z
 ej         ed           ed                    Z ej        d ed           ed          	          Z ej        dd ed
                    Z G d d          Zd ZdS )SocialTokenT)rW   r2   nullrV   tokenz/"oauth_token" (OAuth1) or access token (OAuth2))r.   r7   ztoken secretz7"oauth_token_secret" (OAuth1) or refresh token (OAuth2))r2   r.   r7   z
expires at)r2   r{   r.   c                   >    e Zd ZdZ ed          Z ed          ZdS )SocialToken.Meta)rE   ra   zsocial application tokenzsocial application tokensNr^   r)   r%   r#   r?   r~      s6        ,q344a ;<<r%   r?   c                     | j         S rA   )r|   rB   s    r#   rC   zSocialToken.__str__   s
    zr%   N)r&   r'   r(   r   rp   r+   SET_NULLrE   rU   rr   ra   	TextFieldr=   r|   token_secretru   
expires_atr?   rC   r)   r%   r#   rz   rz      s       
&
ISW
X
X
XCfHHHGFQwZZ!EFF  E $6#Q~&&!MNN  L
 &%AAlOO  J= = = = = = = =
    r%   rz   c                       e Zd ZdZdddg fdZd Zd Zed             ZddZ	e
d	             Zd
 Zd Zd Zd Zed             Zed             Zed             Zed             ZdS )SocialLogina&  
    Represents a social user that is in the process of being logged
    in. This consists of the following information:

    `account` (`SocialAccount` instance): The social account being
    logged in. Providers are not responsible for checking whether or
    not an account already exists or not. Therefore, a provider
    typically creates a new (unsaved) `SocialAccount` instance. The
    `User` instance pointed to by the account (`account.user`) may be
    prefilled by the provider for use as a starting point later on
    during the signup process.

    `token` (`SocialToken` instance): An optional access token token
    that results from performing a successful authentication
    handshake.

    `state` (`dict`): The state to be preserved during the
    authentication handshake. Note that this state may end up in the
    url -- do not put any secrets in here. It currently only contains
    the url to redirect to after login.

    `email_addresses` (list of `EmailAddress`): Optional list of
    email addresses retrieved from the provider.
    Nc                 x    |r|j         |j         |k    sJ || _        || _        || _         || _        i | _        d S rA   )ra   r|   rs   email_addressesstate)r    rs   ra   r|   r   s        r#   __init__zSocialLogin.__init__   sM     	E=(EMW,D,D,D,D
	.


r%   c                     || _         |                     |d           t          j                            t
          ||            d S )NT)connectsenderr!   sociallogin)rs   saver   social_account_addedsendr   )r    r!   rs   s      r#   r   zSocialLogin.connect   sP    			'4	((($))T 	* 	
 	
 	
 	
 	
r%   c                     t                      j        t           | j                   | j                  | j        fd| j        D                       }| j        r | j                  |d<   |S )Nc                 &    g | ]} |          S r)   r)   ).0easerialize_instances     r#   
<listcomp>z)SocialLogin.serialize.<locals>.<listcomp>   s%    SSS//33SSSr%   )ra   rs   r   r   r|   )r   r   rQ   ra   rs   r   r   r|   )r    retr   s     @r#   	serializezSocialLogin.serialize   s    (]]=&&t|44##DI..*SSSSd>RSSS	
 
 
 : 	:--dj99CL
r%   c                    t                      j        } |t          |d                   } |t                      |d                   }d|v r |t          |d                   }nd }g }|d         D ](} |t
          |          }|                    |           ) |             }	||	_        ||	_        ||	_	        ||	_
        |d         |	_        |	S )Nra   rs   r|   r   r   )r   deserialize_instancerU   r   rz   r   appendr|   ra   rs   r   r   )
clsdatar   ra   rs   r|   r   r   email_addressr   s
             r#   deserializezSocialLogin.deserialize   s    *}}A&&}d9oFF##N$4$4d6lCCd??((d7mDDEEE() 	2 	2B00rBBM""=1111cee	-M	
r%   Fc                 4   | j         }|                                 || j        _         | j                                         t          j        r1| j        r*| j        | j        _        | j                                         |rdS t          ||| j                   dS )z
        Saves a new account. Note that while the account is new,
        the user may be an existing one (when connecting accounts)
        N)rs   r   ra   r   STORE_TOKENSr|   r   r   )r    r!   r   rs   s       r#   r   zSocialLogin.save   s    
 y		 $ 	 	!%DJJOO 	BDWdD,@AAAAAr%   c                     | j         j        dS t                      j                            | j         j                                                  S )zuWhen `False`, this social login represents a temporary account, not
        yet backed by a database record.
        NF)pk)rs   r   r   rJ   r   existsrB   s    r#   is_existingzSocialLogin.is_existing  sC    
 9<5'..$),.??FFHHHr%   c                 Z    |                                  s|                                  dS dS )zcLook up the existing local user account to which this social login
        points, if any.
        N)_lookup_by_socialaccount_lookup_by_emailrB   s    r#   lookupzSocialLogin.lookup  s:     ,,.. 	$!!#####	$ 	$r%   c                 Z   | j         rJ 	 t          j                            | j        j        | j        j                  }| j        j        |_        || _        | j        j        | _        |	                                 t          j                            t          t          j        |            t           j        r| j        r| j        j        rJ 	 t(          j                            | j        | j        j                  }| j        j        |_        | j        j        r| j        j        |_        | j        j        |_        |	                                 || _        n:# t(          j        $ r( || j        _        | j        	                                 Y nw xY wdS # t          j        $ r Y d S w xY w)Nr]   r   )ra   rE   T)r   rU   rJ   getra   r,   rX   rx   rs   r   r   social_account_updatedr   r   r   r!   r   r   r|   r   rz   rE   r   r   DoesNotExist)r    ats      r#   r   z$SocialLogin._lookup_by_socialaccount  s   #### 	%)).DL4D *  A  <2ALDL)DIFFHHH*//"GO 0    ( &TZ &:=(((&#+// $$*. 0  A #j.AGz. A *.)@#':#8ALFFHHH!"DJJ"/ & & &)*DJ&JOO%%%%%& 4) 	 	 	DD	s7   CF B
E F 4FF FF F*)F*c                     d | j         D             }|D ]y}t                                          | |          s%t          |d          }|rA|d         | _        t
          j        r%|                     t          j	        | j                    d S zd S )Nc                 *    g | ]}|j         	|j        S r)   )verifiedemail)r   es     r#   r   z0SocialLogin._lookup_by_email.<locals>.<listcomp>A  s!    FFFa1:F!'FFFr%   T)prefer_verifiedr   )
r   r   can_authenticate_by_emailr   rs   r   !EMAIL_AUTHENTICATION_AUTO_CONNECTr   r   r!   )r    emailsr   userss       r#   r   zSocialLogin._lookup_by_email@  s    FF4#7FFF 	 	E==::4GG )%FFFE !!H	A =LL$)<<<			 	r%   c                 :    | j                             d          }|S )Nnext)r   r   )r    r!   urls      r#   get_redirect_urlzSocialLogin.get_redirect_urlL  s    jnnV$$
r%   c                     i }t          |          }|r||d<   t          |dd          |d<   t          |dd          |d<   t          |dd          |d<   |S )Nr   processloginscope auth_params)r   r   )r   r!   r   next_urls       r#   state_from_requestzSocialLogin.state_from_requestP  sk    (11 	%$E&M,WiIIi*7GR@@g0-LLmr%   c                 f    |                      |          }t          d          }||f|j        d<   |S )N   socialaccount_state)r   r	   sessionr   r!   r   verifiers       r#   stash_statezSocialLogin.stash_state[  s9    &&w//$R((271B-.r%   c                 n    d|j         vrt                      |j                             d          \  }}|S Nr   r   r   popr   s       r#   unstash_statezSocialLogin.unstash_stateb  s:     77"$$$!/--.CDDxr%   c                     d|j         vrt                      |j                             d          \  }}||k    rt                      |S r   r   )r   r!   r   r   	verifier2s        r#   verify_and_unstash_statez$SocialLogin.verify_and_unstash_statei  sR     77"$$$"?../DEEyy  "$$$r%   )F)r&   r'   r(   __doc__r   r   r   classmethodr   r   propertyr   r   r   r   r   r   r   r   r   r)   r%   r#   r   r      sU        2 !$dB    
 
 

 
 
   [(B B B B$ I I XI$ $ $" " "H
 
 
     [   [   [   [  r%   r   )+django.confr   django.contrib.authr   r   django.contrib.sites.shortcutsr   django.core.exceptionsr   	django.dbr   django.utils.cryptor	   django.utils.translationr
   r=   allauth.app_settingsr   allauth.account.modelsr   allauth.account.utilsr   r   r   allauth.corer   allauth.socialaccountr   utilsr   r   r   r   rm   r   Managerr   Modelr+   rU   rz   objectr   r)   r%   r#   <module>r      s+               < < < < < < < < ; ; ; ; ; ; 3 3 3 3 3 3       1 1 1 1 1 1 6 6 6 6 6 6     / / / / / /         
 !           ) ) ) ) ) ) % % % % % % % % % % % % % %                v~   39 39 39 39 39 39 39 39l=6 =6 =6 =6 =6FL =6 =6 =6@    &,   2A A A A A& A A A A Ar%   