
    h%                        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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mZ d dlmZ d dlmZ d dlm Z m!Z!  G d dejF                        Z$ G d dejJ                        Z& G d d      Z' G d de'e&      Z( G d dejJ                        Z) G d dejJ                        Z* G d dejJ                        Z+y# e"$ r	  e"d      w xY w)     )get_user_model)ValidationError)HttpRequest)NoReverseMatch)gettext_lazy)	HTTPError)serializers)reverse)app_settings)get_adapter)setup_user_email)complete_social_login)SocialAccount)AuthProcess)email_address_existsget_username_max_lengthz,allauth needs to be added to INSTALLED_APPS.c                   $    e Zd ZdZ G d d      Zy)SocialAccountSerializerzB
    serialize allauth SocialAccounts for use with a REST API
    c                       e Zd ZeZdZy)SocialAccountSerializer.Meta)idprovideruid
last_logindate_joinedN)__name__
__module____qualname__r   modelfields     h/var/www/html/ranktracker/api/venv/lib/python3.12/site-packages/dj_rest_auth/registration/serializers.pyMetar      s    
r"   r$   N)r   r   r   __doc__r$   r!   r"   r#   r   r      s    
 
r"   r   c                       e Zd Z ej                  dd      Z ej                  dd      Z ej                  dd      Zd Zd Z	d Z
d Zy)	SocialLoginSerializerFT)requiredallow_blankc                 t    | j                   j                  d      }t        |t              s|j                  }|S )Nrequest)contextget
isinstancer   _request)selfr+   s     r#   _get_requestz"SocialLoginSerializer._get_request+   s0    ,,""9-';/&&Gr"   c                 ^    | j                         }|j                  ||||      }||_        |S )a  
        :param adapter: allauth.socialaccount Adapter subclass.
            Usually OAuthAdapter or Auth2Adapter
        :param app: `allauth.socialaccount.SocialApp` instance
        :param token: `allauth.socialaccount.SocialToken` instance
        :param response: Provider's response for OAuth1. Not used in the
        :returns: A populated instance of the
            `allauth.socialaccount.SocialLoginView` instance
        )response)r1   complete_logintoken)r0   adapterappr5   r3   r+   social_logins          r#   get_social_loginz&SocialLoginSerializer.get_social_login1   s9     ##%--gsEH-U"r"   c                     t        |dd       | _        | j                  s/	 t        |j                  dz   | j	                               | _        y y # t
        $ r t        j                  t        d            w xY w)Ncallback_url	_callback)viewnamer+   zDefine callback_url in view)	getattrr;   r
   provider_idr1   r   r	   r   _)r0   viewadapter_classs      r#   set_callback_urlz&SocialLoginSerializer.set_callback_url@   sz    #D.$?  $+*66D --/%! ! " !1134 s   -A (A7c                    | j                   j                  d      }| j                         }|st        j                  t        d            t        |dd       }|st        j                  t        d             ||      }|j                         j                  |      }|j                  d      }|j                  d      }|r!d|i}	|}
|j                  d      }|r?||	d<   n8|r| j                  ||       t        |d	d       | _
        | j                  st        j                  t        d
            |j                         }|j                  |      }| j                  ||j                  |j                  |j                  |j                  | j                   ||j"                  |j$                  |j&                  
      }|j)                  |      }
|
d   }d|i}	dd|j*                  fD ]  }||
v s|
|   |	|<    nt        j                  t        d            |j-                  |	      }||_        	 | j1                  ||||
      }t3        ||       |j6                  st8        j:                  rft=               j>                  jA                  |jB                  jD                        jG                         }|rt        j                  t        d            |jI                          |jK                  |d       |jL                  jB                  |d<   |S # t4        $ r t        j                  t        d            w xY w)NrA   z2View is not defined, pass it as a context variablerB   zDefine adapter_class in viewaccess_tokencodeid_token)rA   rB   client_classzDefine client_class in view)scope_delimiterheaders
basic_authrefresh_tokenz2Incorrect input. access_token or code is required.zIncorrect value)emailz4User is already registered with this e-mail address.T)connectuser)'r,   r-   r1   r	   r   r@   r>   get_providerget_apprC   rH   	get_scope	client_idsecretaccess_token_methodaccess_token_urlr;   rI   rJ   rK   get_access_tokenexpires_in_keyparse_tokenr7   r9   r   r   is_existingallauth_settingsUNIQUE_EMAILr   objectsfilterrO   rM   existslookupsaveaccount)r0   attrsrA   r+   rB   r6   r7   rE   rF   tokens_to_parser5   rG   r   scopeclientkeysocial_tokenloginaccount_existss                      r#   validatezSocialLoginSerializer.validateO   s'   ||'##%--FG   ot<--a0N.OPP(""$,,W5
 yy0yy -|<O Eyy,H.6
+ !!t=!I 'nd CD$$!1134  ++-H&&w/E&&

++((!! ' 7 7"-- ' F ++D1E 0L-|<O (W5K5KL 6%<+0:OC(6 --FG  **?;	D))'3eLE!'51   
  ,,!/!1!9!9!@!@**** "A "&(  "%55PQ  LLNJJwJ-**f/  	D--a0A.BCC	Ds   6 L (L>N)r   r   r   r	   	CharFieldrE   rF   rG   r1   r9   rC   rk   r!   r"   r#   r'   r'   &   sS    (;((%TJL ;  %TBD${$$eFH`r"   r'   c                        e Zd Z fdZ xZS )SocialConnectMixinc                 `    t        |   |i |}t        j                  |j                  d<   |S )z
        Set the social login process state to connect rather than login
        Refer to the implementation of get_social_login in base class and to the
        allauth.socialaccount.helpers module complete_social_login function.
        process)superr9   r   CONNECTstate)r0   argskwargsr8   	__class__s       r#   r9   z#SocialConnectMixin.get_social_login   s5     w/@@(3(;(;9%r"   )r   r   r   r9   __classcell__)rv   s   @r#   rn   rn      s     r"   rn   c                       e Zd Zy)SocialConnectSerializerN)r   r   r   r!   r"   r#   ry   ry      s    r"   ry   c                      e Zd Z ej                   e       ej                  ej                        Z	 ej                  ej                        Z ej                  d      Z ej                  d      Zd Zd Zd Zd Zd	 Zd
 Zd Zy)RegisterSerializer)
max_length
min_lengthr(   r(   T)
write_onlyc                 8    t               j                  |      }|S N)r   clean_username)r0   usernames     r#   validate_usernamez$RegisterSerializer.validate_username   s    =//9r"   c                     t               j                  |      }t        j                  r+|r)t	        |      rt        j                  t        d            |S )Nz6A user is already registered with this e-mail address.)r   clean_emailr[   r\   r   r	   r   r@   )r0   rM   s     r#   validate_emailz!RegisterSerializer.validate_email   sK    ))%0((-e4!11NO  r"   c                 4    t               j                  |      S r   )r   clean_password)r0   passwords     r#   validate_password1z%RegisterSerializer.validate_password1   s    }++H55r"   c                 X    |d   |d   k7  rt        j                  t        d            |S )N	password1	password2z%The two password fields didn't match.)r	   r   r@   )r0   datas     r#   rk   zRegisterSerializer.validate   s0    [ 11--a0W.XYYr"   c                      y r   r!   )r0   r+   rO   s      r#   custom_signupz RegisterSerializer.custom_signup   s    r"   c                     | j                   j                  dd      | j                   j                  dd      | j                   j                  dd      dS )Nr    r   rM   )r   r   rM   )validated_datar-   )r0   s    r#   get_cleaned_dataz#RegisterSerializer.get_cleaned_data   sN    ++//
B?,,00bA((,,Wb9
 	
r"   c                    t               }|j                  |      }| j                         | _        |j	                  ||| d      }	 |j                  | j                  d   |       |j                          | j                  ||       t        ||g        |S # t        $ r.}t        j                  t        j                  |            d }~ww xY w)NF)commitr   )rO   )detail)r   new_userr   cleaned_data	save_userr   DjangoValidationErrorr	   r   as_serializer_errorra   r   r   )r0   r+   r6   rO   excs        r#   ra   zRegisterSerializer.save   s    -( 113  $U C	""4#4#4[#A"M
 			7D)$+ % 	--"66s; 	s    B 	C!)C

CN)r   r   r   r	   rl   r   r[   USERNAME_MIN_LENGTHUSERNAME_REQUIREDr   
EmailFieldEMAIL_REQUIREDrM   r   r   r   r   r   rk   r   r   ra   r!   r"   r#   r{   r{      s    ${$$*,#77!33H
 #K"",<,K,KLE%%%6I%%%6I6

r"   r{   c                   .    e Zd Z ej                         Zy)VerifyEmailSerializerN)r   r   r   r	   rl   rg   r!   r"   r#   r   r      s    
+


!Cr"   r   c                   F    e Zd Z ej                  ej                        Zy)!ResendEmailVerificationSerializerr~   N)r   r   r   r	   r   r[   r   rM   r!   r"   r#   r   r      s    "K"",<,K,KLEr"   r   N),django.contrib.authr   django.core.exceptionsr   r   django.httpr   django.urls.exceptionsr   django.utils.translationr   r@   requests.exceptionsr   rest_frameworkr	   rest_framework.reverser
   allauth.accountr   r[   allauth.account.adapterr   allauth.account.utilsr   allauth.socialaccount.helpersr   allauth.socialaccount.modelsr   $allauth.socialaccount.providers.baser   allauth.utilsr   r   ImportErrorModelSerializerr   
Serializerr'   rn   ry   r{   r   r   r!   r"   r#   <module>r      s    . K # 1 6 ) & *	F@36C:@K

k99 
 IK22 IX	 		02G 	7// 7t"K22 "M(>(> M]  F
D
EEFs   ,C C,