
    f:                        d dl mZmZmZmZ d dlmZ d dlmZ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Zd d	lm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m!Z!m"Z" d dl#m$Z$ d dl%m&Z& d dl'm(Z( ejR                  s ed       G d dejT                        Z+ G d dejX                        Z- G d dejX                        Z. G d dejX                        Z/ G d d      Z0y)    )AnyDictListOptional)settings)authenticateget_user_model)get_current_site)ImproperlyConfiguredPermissionDenied)models)gettext_lazyN)app_settings)EmailAddress)filter_users_by_emailget_next_redirect_urlsetup_user_emailcontext)r   	providerssignals)get_adapter)statekit)get_request_paramzAallauth.socialaccount not installed, yet its models are imported.c                       e Zd Zd Zy)SocialAppManagerc                     t         j                  j                  r't        |      }| j	                  |j
                        S | j                         S )N)	sites__id)allauthr   SITES_ENABLEDr
   filteridall)selfrequestsites      W/var/www/cs2snipe.com/venv/lib/python3.12/site-packages/allauth/socialaccount/models.pyon_sitezSocialAppManager.on_site    s<    --#G,D;;;11xxz    N)__name__
__module____qualname__r(    r)   r'   r   r      s    r)   r   c                      e Zd Z e       Z ej                   ed      d      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y)	SocialAppprovider   verbose_name
max_lengthzprovider ID   T)r3   r4   blankname(   z	client id   zApp ID, or consumer key)r3   r4   	help_textz
secret keyz-API secret, client secret, or consumer secret)r3   r4   r6   r:   keyKey)defaultr6   z
sites.Site)r6   c                   ,    e Zd Z ed      Z ed      Zy)SocialApp.Metazsocial applicationzsocial applicationsN)r*   r+   r,   _r3   verbose_name_pluralr-   r)   r'   Metar?   P   s    -. 56r)   rB   c                     | j                   S N)r7   r$   s    r'   __str__zSocialApp.__str__T   s    yyr)   c                 h    t         j                  j                  | j                        } |||       S )N)r%   app)r   registry	get_classr0   )r$   r%   provider_classs      r'   get_providerzSocialApp.get_providerW   s)    "++55dmmDg488r)   N)r*   r+   r,   r   objectsr   	CharFieldr@   r0   provider_idr7   	client_idsecretr;   	JSONFielddictr   r   r   r    ManyToManyFieldsitesrB   rF   rL   r-   r)   r'   r/   r/   '   s'    G  vz]H #&""}%K
 66rBD   {^-.I
 V|_CD	F &

uX#TQuXC  vD9H))
 '&&|4@7 7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y)SocialAccount	on_deleter0   r5   r2   uidz
last loginT)r3   auto_nowzdate joined)r3   auto_now_addz
extra data)r3   r=   c                   0    e Zd ZdZ ed      Z ed      Zy)SocialAccount.Metar0   rZ   zsocial accountzsocial accountsNr*   r+   r,   unique_togetherr@   r3   rA   r-   r)   r'   rB   r^   {   s    -)* 12r)   rB   c                     t        |       S )N)account)r   rE   s    r'   r   zSocialAccount.authenticate   s    D))r)   c                     ddl m}  ||       S )N   )socialaccount_user_display)helpersrf   )r$   rf   s     r'   rF   zSocialAccount.__str__   s    7)$//r)   c                 >    | j                         j                         S rD   )get_provider_accountget_profile_urlrE   s    r'   rj   zSocialAccount.get_profile_url   s    ((*::<<r)   c                 >    | j                         j                         S rD   )ri   get_avatar_urlrE   s    r'   rl   zSocialAccount.get_avatar_url   s    ((*99;;r)   Nc                     t        | dd       }|r|S t               }|j                  |xs t        j                  | j
                        x}| _        |S )N	_provider)r0   )getattrr   rL   r   r%   r0   rn   )r$   r%   r0   adapters       r'   rL   zSocialAccount.get_provider   sV    4d3O-$+$8$8&w %9 %
 	
4> r)   c                 @    | j                         j                  |       S rD   )rL   wrap_accountrE   s    r'   ri   z"SocialAccount.get_provider_account   s      "//55r)   rD   )r*   r+   r,   r   
ForeignKeyr   AUTH_USER_MODELCASCADEuserrN   r@   r0   r   UID_MAX_LENGTHrZ   DateTimeField
last_logindate_joinedrR   rS   
extra_datarB   r   rF   rj   rl   rL   ri   r-   r)   r'   rW   rW   \   s    6X55PD  vz]H( &

uX,*E*EC &%%1\?TRJ&&&&Am4DSWXK!!!qMJ3 3
*0
=<6r)   rW   c                   Z   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y)SocialTokenT)rY   r6   nullrX   tokenz/"oauth_token" (OAuth1) or access token (OAuth2))r3   r:   ztoken secretz7"oauth_token_secret" (OAuth1) or refresh token (OAuth2))r6   r3   r:   z
expires at)r6   r~   r3   c                   0    e Zd ZdZ ed      Z ed      Zy)SocialToken.Meta)rH   rc   zsocial application tokenzsocial application tokensNr`   r-   r)   r'   rB   r      s    ,34 ;<r)   rB   c                 N    | j                   j                  d| j                  dS )Nz ())_metar3   pkrE   s    r'   rF   zSocialToken.__str__   s     JJ33TWW==r)   N)r*   r+   r,   r   rs   r/   SET_NULLrH   rW   ru   rc   	TextFieldr@   r   token_secretrx   
expires_atrB   rF   r-   r)   r'   r}   r}      s    
&

ISW
XCfHGFwZEFE $6##~&MNL
 &%%AlOJ= =
>r)   r}   c            	          e Zd ZU dZeed<   ee   ed<   ee	   ed<   e
ed<   ee   ed<   	 	 	 	 ddee   dee   deee	      fdZdd
Zed	efd       Zd	e
eef   fdZede
eef   d	d fd       Zdded	dfdZed	efd       ZddZd	efdZddZddZddZd	ee   fdZed	e
eef   fd       Zeddee
eef      d	efd       Zed	ee
eef      fd       Zy)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.
    rc   r   email_addressesstate_did_authenticate_by_emailNc                     |r|j                   |j                   |k(  sJ || _        || _        |r|| _         |r|ng | _        i | _        y rD   )rc   r   rv   r   r   )r$   rv   rc   r   r   s        r'   __init__zSocialLogin.__init__   sM     ==(EMMW,DDD
	"DL2Ar
r)   returnc                    || _         | j                  |d       t        j                  j	                  t
        ||        t               j                  d| j                   | j                  | j                  j                         d       y )NT)connectsenderr%   socialloginz%socialaccount/email/account_connected)rc   r0   r   )
rv   saver   social_account_addedsendr   r   send_notification_mailrc   rL   )r$   r%   rv   s      r'   r   zSocialLogin.connect   sv    			'4	($$))T 	* 	
 	,,3II<< LL557 	- 	
r)   c                 J    t        | j                  j                  d            S )Nheadless)boolr   getrE   s    r'   is_headlesszSocialLogin.is_headless   s    DJJNN:.//r)   c                 (   t               j                  }t         || j                         || j                        | j
                  | j                  D cg c]
  } ||       c}      }| j                  r || j                        |d<   |S c c}w )N)rc   rv   r   r   r   )r   serialize_instancerS   rc   rv   r   r   r   )r$   r   earets       r'   	serializezSocialLogin.serialize   sy    (]==&t||4#DII.**>B>R>RS/3S	
 ::-djj9CL
	 Ts   Bdatac                 R   t               j                  } |t        |d         } |t               |d         }d|v r |t        |d         }nd }g }|d   D ]   } |t
        |      }|j                  |       "  |        }	||	_        ||	_        ||	_	        ||	_
        |d   |	_        |	S )Nrc   rv   r   r   r   )r   deserialize_instancerW   r	   r}   r   appendr   rc   rv   r   r   )
clsr   r   rc   rv   r   r   r   email_addressr   s
             r'   deserializezSocialLogin.deserialize  s    *}AA&}d9oF#N$4d6lCd?(d7mDEE() 	2B0rBM""=1	2 e	-M	
r)   r   c                 h   | j                   }|j                          || j                  _         | j                  j                          t        j                  rA| j
                  r5| j                  | j
                  _        | j
                  j                          |ryt        ||| j                         y)z
        Saves a new account. Note that while the account is new,
        the user may be an existing one (when connecting accounts)
        N)rv   r   rc   r   STORE_TOKENSr   r   r   )r$   r%   r   rv   s       r'   r   zSocialLogin.save  sw    
 yy		 $$!%DJJJJOOWdD,@,@Ar)   c                     | j                   j                  yt               j                  j	                  | j                   j                        j                         S )zuWhen `False`, this social login represents a temporary account, not
        yet backed by a database record.
        F)r   )rv   r   r	   rM   r!   existsrE   s    r'   is_existingzSocialLogin.is_existing,  sC    
 99<<''..$)),,.?FFHHr)   c                 T    d| _         | j                         s| j                          yy)zcLook up the existing local user account to which this social login
        points, if any.
        N)r   _lookup_by_socialaccount_lookup_by_emailrE   s    r'   lookupzSocialLogin.lookup5  s)     +/',,.!!# /r)   c                    | j                   rJ 	 t        j                  j                  | j                  j
                  | j                  j                        }| j                  j                  |_        || _        | j                  j                  | _        |j                          t        j                  j                  t        t        j                  |        | j!                          y# t        j"                  $ r Y yw xY w)Nr_   r   TF)r   rW   rM   r   rc   r0   rZ   r{   rv   r   r   social_account_updatedr   r   r   r%   _store_tokenDoesNotExist)r$   as     r'   r   z$SocialLogin._lookup_by_socialaccount=  s    ####	%%))..DLL4D4D * A  <<22ALDL))DIFFH**//"GOO 0  )) 		s   CC+ +D Dc                    t         j                  r| j                  sy | j                  j                  rJ | j                  j                  }|r|j                  sd }	 t
        j                  j                  | j                  |      }| j                  j                  |_        | j                  j                  r| j                  j                  |_	        | j                  j                  |_
        |j                          || _        y # t
        j                  $ rI | j                  | j                  _        || j                  _        | j                  j                          Y y w xY w)N)rc   rH   )r   r   r   r   rH   r}   rM   r   rc   r   r   r   r   )r$   rH   ts      r'   r   zSocialLogin._store_tokenP  s    ((

::==  jjnnsvvC	##''#'FAjj&&AGzz&& "&!8!8::00ALFFHDJ'' 	!%DJJ DJJNJJOO	s   B)D AE#"E#c                     | j                   D cg c]  }|j                  s|j                   }}|D ]?  }t               j	                  | |      st        |d      }|s.|d   | _        || _         y  y c c}w )NT)prefer_verifiedr   )r   verifiedemailr   can_authenticate_by_emailr   rv   r   )r$   eemailsr   userss        r'   r   zSocialLogin._lookup_by_emailh  st    #'#7#7Fa1::!''FF 	E=::4G)%FE!!H	27/	 Gs
   A6A6c                     ddl m} | j                  rZ ||| j                  | j                         t        j
                  r+| j                  t        j                  | j                         y y y )Nr   )wipe_password)	9allauth.socialaccount.internal.flows.email_authenticationr   r   rv   r   !EMAIL_AUTHENTICATION_AUTO_CONNECTr   r   r%   )r$   r%   r   s      r'   _accept_loginzSocialLogin._accept_logins  sQ    	
 **'499d.M.MN==W__dii8 > +r)   c                 <    | j                   j                  d      }|S )Nnext)r   r   )r$   r%   urls      r'   get_redirect_urlzSocialLogin.get_redirect_url}  s    jjnnV$
r)   c                     i }t        |      }|r||d<   t        |dd      |d<   t        |dd      |d<   t        |dd      |d<   |S )zM
        TODO: Deprecated! To be integrated with provider.redirect()
        r   processloginscope auth_params)r   r   )r   r%   r   next_urls       r'   state_from_requestzSocialLogin.state_from_request  s\    
 (1$E&M,WiIi*7GR@g0-Lmr)   c                 T    || j                  |      }t        j                  ||      S rD   )r   r   stash_stater   r%   r   s      r'   r   zSocialLogin.stash_state  s*    =**73E##GU33r)   c                 H    t        j                  |      }|
t               |S rD   )r   unstash_last_stater   r   s      r'   unstash_statezSocialLogin.unstash_state  s%    ++G4="$$r)   )NNNN)r   N)FrD   ) r*   r+   r,   __doc__rW   __annotations__r   r}   r   r   r   strr   r   propertyr   r   r   r   classmethodr   r   r   r   r   r   r   r   r   r   r   r   r-   r)   r'   r   r      s   2 K  ,''K (- +/'+8< -( $	
 "$|"45 
  0T 0 0
4S> 
 tCH~ -  (BT Bd B$ IT I I$$ &0	98C=  DcN   4$sCx.)A 4S 4 4 xS#X'?  r)   r   )1typingr   r   r   r   django.confr   django.contrib.authr   r	   django.contrib.sites.shortcutsr
   django.core.exceptionsr   r   	django.dbr   django.utils.translationr   r@   allauth.app_settingsr   r   allauth_settingsallauth.account.modelsr   allauth.account.utilsr   r   r   allauth.corer   allauth.socialaccountr   r   allauth.socialaccount.adapterr   allauth.socialaccount.internalr   allauth.utilsr   SOCIALACCOUNT_ENABLEDManagerr   Modelr/   rW   r}   r   r-   r)   r'   <module>r      s    , ,   < ; I  6  4 / 
 ! B B 5 3 + --
K 
v~~ 29 29j=6FLL =6@>&,, >2f fr)   