
    h1                        d dl mZ d dlmZ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	mZ d d	lmZ d
ej,                  v rddlmZ ddlmZ  e       Z G d dej8                        Z G d dej<                        Z G d dej<                        Z  G d dej8                        Z! G d de!      Z" G d dej8                        Z# G d dej8                        Z$ G d dej8                        Z%y)    )settings)authenticateget_user_model)SetPasswordFormPasswordResetForm)
exceptions)	force_str)import_string)gettext_lazy)r   serializers)ValidationErrorallauth   )AllAuthPasswordResetForm)
TokenModelc                       e Zd Z ej                  dd      Z ej                  dd      Z ej                  ddi      Zd Z	d Z
d	 Zd
 Zd Zd Zd Zed        Zed        Zd Zy)LoginSerializerFT)requiredallow_blank
input_typepassword)stylec                 4    t        | j                  d   fi |S )Nrequest)r   context)selfkwargss     [/var/www/html/ranktracker/api/venv/lib/python3.12/site-packages/dj_rest_auth/serializers.pyr   zLoginSerializer.authenticate   s    DLL3>v>>    c                 t    |r|r| j                  ||      }|S t        d      }t        j                  |      )Nemailr   z$Must include "email" and "password".r   _r   r   )r   r"   r   usermsgs        r   _validate_emailzLoginSerializer._validate_email   sA    X$$58$DD
  :;C,,S11r   c                 t    |r|r| j                  ||      }|S t        d      }t        j                  |      )Nusernamer   z'Must include "username" and "password".r#   )r   r*   r   r%   r&   s        r   _validate_usernamez"LoginSerializer._validate_username%   sA    $$h$JD
  =>C,,S11r   c                     |r|r| j                  ||      }|S |r|r| j                  ||      }|S t        d      }t        j                  |      )Nr!   r)   z9Must include either "username" or "email" and "password".r#   )r   r*   r"   r   r%   r&   s         r   _validate_username_emailz(LoginSerializer._validate_username_email.   sd    X$$58$DD  ($$h$JD
  OPC,,S11r   c                    ddl m} |j                  |j                  j                  k(  r| j                  ||      S |j                  |j                  j                  k(  r| j                  ||      S | j                  |||      S )Nr   app_settings)	allauth.accountr0   AUTHENTICATION_METHODAuthenticationMethodEMAILr'   USERNAMEr+   r-   )r   r*   r"   r   r0   s        r   get_auth_user_using_allauthz+LoginSerializer.get_auth_user_using_allauth9   sz    0 --1R1R1X1XX''x88 --1R1R1[1[[**8X>> ,,XuhGGr   c                     |r/	 t         j                  j                  |      j                         }|r| j                  |d|      S y # t         j                  $ r Y +w xY w)N)email__iexact )	UserModelobjectsgetget_usernameDoesNotExistr-   )r   r*   r"   r   s       r   get_auth_user_using_ormz'LoginSerializer.get_auth_user_using_ormG   sc    $,,00u0ERRT 002xHH )) s   .A AAc                     dt         j                  v r	 | j                  |||      S | j                  |||      S # t        j                  $ r! t        d      }t        j                  |      w xY w)z
        Retrieve the auth user from given POST payload by using
        either `allauth` auth scheme or bare Django auth scheme.

        Returns the authenticated user instance if credentials are correct,
        else `None` will be returned
        r   +Unable to log in with provided credentials.)	r   INSTALLED_APPSr6   url_exceptionsNoReverseMatchr$   r   r   r?   )r   r*   r"   r   r&   s        r   get_auth_userzLoginSerializer.get_auth_userS   sv     ///677%RR ++HeXFF "00 6EF 00556s	   : 4A.c                 \    | j                   s t        d      }t        j                  |      y )NzUser account is disabled.)	is_activer$   r   r   )r%   r&   s     r   validate_auth_user_statusz)LoginSerializer.validate_auth_user_statusf   s*    ~~/0C,,S11 r   c                     ddl m} |j                  |j                  j                  k(  rQ| j
                  j                  | j                        }|j                  st        j                  t        d            y y )Nr   r/   r"   zE-mail is not verified.)r1   r0   EMAIL_VERIFICATIONEmailVerificationMethod	MANDATORYemailaddress_setr<   r"   verifiedr   r   r$   )r%   r0   email_addresss      r   "validate_email_verification_statusz2LoginSerializer.validate_email_verification_statusl   sg    0**l.R.R.\.\\ 1155DJJ5GM ))!11!4M2NOO * ]r   c                 H   |j                  d      }|j                  d      }|j                  d      }| j                  |||      }|s t        d      }t        j                  |      | j                  |       dt        j                  v r| j                  |       ||d<   |S )Nr*   r"   r   rA   zdj_rest_auth.registrationr%   )	r<   rE   r$   r   r   rH   r   rB   rQ   )r   attrsr*   r"   r   r%   r&   s          r   validatezLoginSerializer.validatet   s    99Z(		'"99Z(!!(E8<ABC,,S11 	&&t, '(*A*AA33D9fr   N)__name__
__module____qualname__r   	CharFieldr*   
EmailFieldr"   r   r   r'   r+   r-   r6   r?   rE   staticmethodrH   rQ   rT    r   r   r   r      s    ${$$eFH"K""EtDE${$$L*+EFH?	H
G& 2 2
 P Pr   r   c                   $    e Zd ZdZ G d d      Zy)TokenSerializerz%
    Serializer for Token model.
    c                       e Zd ZeZdZy)TokenSerializer.Meta)keyN)rU   rV   rW   r   modelfieldsr[   r   r   Metar_      s    r   rc   N)rU   rV   rW   __doc__rc   r[   r   r   r]   r]      s     r   r]   c                   4    e Zd ZdZed        Z G d d      Zy)UserDetailsSerializerz!
    User model w/o password
    c                 f    dt         j                  vr| S ddlm}  |       j	                  |       } | S )Nzallauth.accountr   )get_adapter)r   rB   allauth.account.adapterrh   clean_username)r*   rh   s     r   validate_usernamez'UserDetailsSerializer.validate_username   s1    H$;$;; O7=//9r   c                      e Zd Zg Z eed      rej                  ej                          eed      rej                  ej                          eed      rej                  d        eed      rej                  d       eZ	dgeZ
dZy)UserDetailsSerializer.MetaUSERNAME_FIELDEMAIL_FIELD
first_name	last_namepkrJ   N)rU   rV   rW   extra_fieldshasattrr:   appendrn   ro   ra   rb   read_only_fieldsr[   r   r   rc   rm      s    
 9./	 8 899m,	 5 569l+-9k*,&&%r   rc   N)rU   rV   rW   rd   rZ   rk   rc   r[   r   r   rf   rf      s%      & &r   rf   c                   |    e Zd ZdZ ej
                         Z ej
                         Z ej                         Z	d Z
y)JWTSerializerz,
    Serializer for JWT authentication.
    c                     t        t        di       }t        |j                  dd            } ||d   | j                        j
                  }|S )z
        Required to allow using custom USER_DETAILS_SERIALIZER in
        JWTSerializer. Defining it here to avoid circular imports
        REST_AUTH_SERIALIZERSUSER_DETAILS_SERIALIZERz.dj_rest_auth.serializers.UserDetailsSerializerr%   )r   )getattrr   r
   r<   r   data)r   objrest_auth_serializersJWTUserDetailsSerializer	user_datas        r   get_userzJWTSerializer.get_user   sU    
 !(2I2 N#0!%%)@$
  -S[$,,OTT	r   N)rU   rV   rW   rd   r   rX   access_tokenrefresh_tokenSerializerMethodFieldr%   r   r[   r   r   rx   rx      s>     );((*L)K))+M,;,,.Dr   rx   c                   T    e Zd ZdZ ej
                         Z ej
                         Zy)JWTSerializerWithExpirationzB
    Serializer for JWT authentication with expiration times.
    N)rU   rV   rW   rd   r   DateTimeFieldaccess_token_expirationrefresh_token_expirationr[   r   r   r   r      s+     8k7798{88:r   r   c                   X    e Zd ZdZ ej
                         ZdZed        Z	d Z
d Zd Zy)PasswordResetSerializerz<
    Serializer for requesting a password reset e-mail.
    Nc                 >    dt         j                  v rt        S t        S )Nr   )r   rB   r   r   r   s    r   password_reset_form_classz1PasswordResetSerializer.password_reset_form_class   s    ///++$$r   c                     i S )z5Override this method to change default e-mail optionsr[   r   s    r   get_email_optionsz)PasswordResetSerializer.get_email_options   s    	r   c                     | j                  | j                        | _        | j                  j                         s)t	        j
                  | j                  j                        |S )N)r}   )r   initial_data
reset_formis_validr   r   errors)r   values     r   validate_emailz&PasswordResetSerializer.validate_email   sM    88d>O>O8P'')--doo.D.DEEr   c                 4   dt         j                  v rddlm} nddlm} | j
                  j                  d      }|j                         t        t         d      ||d}|j                  | j                                 | j                  j                  di | y )Nr   r   default_token_generatorr   DEFAULT_FROM_EMAIL)	use_https
from_emailr   token_generatorr[   )r   rB   allauth.account.formsr   django.contrib.auth.tokensr   r<   	is_securer|   updater   r   save)r   r   r   optss       r   r   zPasswordResetSerializer.save   s~    ///EJ,,""9- !**,!(,@A6	
 	D**,-$t$r   )rU   rV   rW   rd   r   rY   r"   r   propertyr   r   r   r   r[   r   r   r   r      s?     #K""$EJ% %%r   r   c                       e Zd ZdZ ej
                  d      Z ej
                  d      Z ej
                         Z ej
                         Z	e
Zi ZdZdZd Zd Zd Zy)PasswordResetConfirmSerializerz=
    Serializer for confirming a password reset attempt.
       
max_lengthNc                      y Nr[   r   rS   s     r   custom_validationz0PasswordResetConfirmSerializer.custom_validation  s    r   c                    dt         j                  v rddlm} ddlm} nddlm} ddlm} 	 t         ||d               }t        j                  j                  |      | _        |j'                  | j                  |d	         st%        d	dgi      | j)                  |       | j+                  | j                  |
      | _        | j,                  j/                         s)t1        j$                  | j,                  j2                        |S # t        t        t         t        j"                  f$ r t%        ddgi      w xY w)Nr   r   r   )url_str_to_user_pk)urlsafe_base64_decodeuid)rr   zInvalid valuetokenr%   r}   )r   rB   r   r   allauth.account.utilsr   r   django.utils.httpr   r	   r:   _default_managerr<   r%   	TypeError
ValueErrorOverflowErrorr>   r   check_tokenr   set_password_form_classset_password_formr   r   r   )r   rS   r   uid_decoderr   s        r   rT   z'PasswordResetConfirmSerializer.validate  s   ///EOJN	>Ke56C!2266#6>DI '22499eGnM!7_,=">??u%!%!=!= "> "
 %%..0--d.D.D.K.KLL :}i6L6LM 	>!5?*;"<==	>s   9D 2D=c                 6    | j                   j                         S r   )r   r   r   s    r   r   z#PasswordResetConfirmSerializer.save4  s    %%**,,r   )rU   rV   rW   rd   r   rX   new_password1new_password2r   r   r   r   _errorsr%   r   r   rT   r   r[   r   r   r   r     sr     *K))S9M)K))S9M
+


!C!K!!#E-GD8-r   r   c                        e Zd Z ej                  d      Z ej                  d      Z ej                  d      ZeZ	dZ
 fdZd Zd Zd Z xZS )PasswordChangeSerializerr   r   Nc                 B   t        t        dd      | _        t        t        dd      | _        t	        |   |i | | j                  s| j                  j                  d       | j                  j                  d      | _
        t        | j                  dd       | _        y )NOLD_PASSWORD_FIELD_ENABLEDFLOGOUT_ON_PASSWORD_CHANGEold_passwordr   r%   )r|   r   old_password_field_enabledlogout_on_password_changesuper__init__rb   popr   r<   r   r%   )r   argsr   	__class__s      r   r   z!PasswordChangeSerializer.__init__A  s    *12E+
' *115*
& 	$)&)..KKOON+||''	2DLL&$7	r   c                     | j                   | j                  | j                  j                  |       f}t        |      r t	        d      }t        j                  |      |S )NzAYour old password was entered incorrectly. Please enter it again.)r   r%   check_passwordallr$   r   r   )r   r   invalid_password_conditionserr_msgs       r   validate_old_passwordz.PasswordChangeSerializer.validate_old_passwordP  s[    ++II		((//'
# *+[\G--g66r   c                     | j                  | j                  |      | _        | j                  j                         s)t	        j
                  | j                  j                        |S )Nr   )r   r%   r   r   r   r   r   r   s     r   rT   z!PasswordChangeSerializer.validate\  sY    !%!=!= "> "
 %%..0--d.D.D.K.KLLr   c                     | j                   j                          | j                  s$ddlm}  || j
                  | j                         y y )Nr   )update_session_auth_hash)r   r   r   django.contrib.authr   r   r%   )r   r   s     r   r   zPasswordChangeSerializer.savee  s7    ##%--D$T\\499= .r   )rU   rV   rW   r   rX   r   r   r   r   r   r   r   r   rT   r   __classcell__)r   s   @r   r   r   8  sY    (;((C8L)K))S9M)K))S9M-8
>r   r   N)&django.confr   r   r   r   django.contrib.auth.formsr   r   django.urlsr   rC   django.utils.encodingr	   django.utils.module_loadingr
   django.utils.translationr   r$   rest_frameworkr   rest_framework.exceptionsr   rB   formsr   modelsr   r:   
Serializerr   ModelSerializerr]   rf   rx   r   r   r   r   r[   r   r   <module>r      s      < H 4 + 5 6 2 5'''/  	rk,, rjk11  &K77  &FK** 4;- ;+%k44 +%\/-[%;%; /-d1>{55 1>r   