o
    h}                     @   s  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 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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%m&Z& d dl'm(Z(m)Z) d dl*m+Z+ d dl,m-Z-m.Z. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5 ddl6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z< G dd de	Z=e0> Z?G dd dZ@G dd dejAZBG dd  d eBZCG d!d" d"ejDZEG d#d$ d$e  ZFG d%d& d&eFZGG d'd( d(ejDZHG d)d* d*eHZIG d+d, d,e@eHZJG d-d. d.e@eHZKG d/d0 d0ejDZLG d1d2 d2e@ejDZMG d3d4 d4ejDZNG d5d6 d6ejDZOG d7d8 d8ejDZPG d9d: d:ejDZQG d;d< d<eQZRG d=d> d>eQZSG d?d@ d@eQZTG dAdB dBeQZUG dCdD dDejDZVdES )F    )Optional)forms)REDIRECT_FIELD_NAMEget_user_modelpassword_validation)PasswordResetTokenGenerator)
exceptions
validators)TemplateDoesNotExist)render_to_string)NoReverseMatchreverse)	mark_safe)gettextgettext_lazypgettext)LoginMethod)flows)base_signup_form_class)LOGIN_SESSION_KEY)compare_code)EmailVerificationStage)context	ratelimit)headed_redirect_response)get_username_max_lengthset_form_field_order   )app_settings)get_adapter)EmailAddressLogin)filter_users_by_emailsetup_user_emailsync_user_email_addressesurl_str_to_user_pk
user_emailuser_usernamec                          e Zd Z fddZ  ZS )%EmailAwarePasswordResetTokenGeneratorc                    sd   t  ||}t| t|}t|r|gng }|tjj|dj	ddd |d
t|7 }|S )NuseremailT)flat|)super_make_hash_valuer$   r&   setupdater    objectsfiltervalues_listjoinsorted)selfr+   	timestampretr,   emails	__class__ P/var/www/html/env_mimamsha/lib/python3.10/site-packages/allauth/account/forms.pyr0   )   s   z6EmailAwarePasswordResetTokenGenerator._make_hash_value)__name__
__module____qualname__r0   __classcell__r>   r>   r<   r?   r)   (       r)   c                       r(   )PasswordVerificationMixinc                    sB   t   }|d}|d}|r|r||kr| dtd |S )N	password1	password2*You must type the same password each time.)r/   cleanget	add_error_)r8   cleaned_datarF   rG   r<   r>   r?   rI   9   s   


zPasswordVerificationMixin.clean)r@   rA   rB   rI   rC   r>   r>   r<   r?   rE   8   rD   rE   c                       r(   )PasswordFieldc                    sf   | dtj}tj|d|did|d< | dd }|d ur&||d jd< tt| j	|i | d S )Nrender_valueplaceholderlabel)rO   attrswidgetautocomplete)
popr   PASSWORD_INPUT_RENDER_VALUEr   PasswordInputrJ   rR   r/   rN   __init__)r8   argskwargsrO   rT   r<   r>   r?   rX   C   s   
zPasswordField.__init__r@   rA   rB   rX   rC   r>   r>   r<   r?   rN   B   rD   rN   c                       s(   e Zd Z fddZ fddZ  ZS )SetPasswordFieldc                    s4   d|d< | dt  t j|i | d | _d S )Nnew-passwordrT   	help_text)
setdefaultr   "password_validators_help_text_htmlr/   rX   r+   r8   rY   rZ   r<   r>   r?   rX   R   s   
zSetPasswordField.__init__c                    s"   t  |}t j|| jd}|S )Nr*   )r/   rI   r   clean_passwordr+   r8   valuer<   r>   r?   rI   Z   s   zSetPasswordField.clean)r@   rA   rB   rX   rI   rC   r>   r>   r<   r?   r\   Q   s    r\   c                       s   e Zd ZeedddZejedddZdZ	 fdd	Z
d
d Zdd ZdefddZdd Z fddZdee dee fddZdefddZd"ddZdd Zd d! Z  ZS )#	LoginFormPasswordcurrent-passwordrQ   rT   zRemember MeFrQ   requiredNc                    s  | dd | _t j|i | t }tjtjhkr/t	j
tdddd}t	jtd|d}nAtjtjhkrMt	jtdd	dd}t	jtd|t d
}n#tjtjhkr[|jdd}nt	j|  ddd}t	jtdd|d}|| jd< t| g d tjd ur| jd= |   d S )NrequestEmail addressr,   rP   rT   rR   EmailrQ   rS   Usernameusername)rQ   rS   
max_lengthTrj   zfield labelr!   login)ru   passwordrememberrw   )rU   rk   r/   rX   r   r   LOGIN_METHODSr   EMAILr   
EmailInputrL   
EmailFieldUSERNAME	TextInput	CharFieldr   PHONEphone_form_field_get_login_field_placeholderr   fieldsr   SESSION_REMEMBER_setup_password_field)r8   rY   rZ   adapterlogin_widgetlogin_fieldr<   r>   r?   rX   f   sD   


zLoginForm.__init__c                 C   s   t j}t|dksJ |tjtjtjhsJ t|dkr$td}|S |tjtjhkr2td}|S |tjtjhkr@td}|S |tjtjhkrNtd}|S t	|)Nr      zUsername, email or phonezUsername or emailzUsername or phonezEmail or phone)
r   rx   lenissubsetr   r|   ry   r   rL   
ValueError)r8   methodsrP   r>   r>   r?   r      s*   	z&LoginForm._get_login_field_placeholderc                 C   s   t jd}|s| jd= d S ztdt j | jd _W d S  ty%   Y nw ztd}W n
 t	y6   Y d S w t
d}td| d| d| jd _d S )	NrF   rv   z!account/password_reset_help_text.account_reset_passwordzForgot your password?z	<a href="z">z</a>)r   SIGNUP_FIELDSrJ   r   r   TEMPLATE_EXTENSIONr^   r
   r   r   rL   r   )r8   password_field	reset_url
forgot_txtr>   r>   r?   r      s*   zLoginForm._setup_password_fieldreturnc                 C   s^   | j d }tj|}i }|||< tjtjv r!|tjkr!||tj< | j d}|r-||d< |S )z_
        Provides the credentials required to authenticate the user for
        login.
        ru   rv   )	rM   r   ru   derive_login_methodr   r|   r   rx   rJ   )r8   ru   methodcredentialsrv   r>   r>   r?   user_credentials   s   


zLoginForm.user_credentialsc                 C   s   | j d }| S )Nru   )rM   strip)r8   ru   r>   r>   r?   clean_login   s   
zLoginForm.clean_loginc                    sF   t    | jr
d S |  }d|v r| |S | |d|dS )Nrv   r,   phone)r/   rI   _errorsr   _clean_with_password_clean_without_passwordrJ   )r8   r   r<   r>   r?   rI      s   

zLoginForm.cleanr,   r   c                 C   s   i }|r||d< |r||d< |s|  dt d | j	S t|}| s@dD ]}|j|p0g }|D ]}|  d| q3q'| j	S |j| _| j	S )zr
        If we don't have a password field, we need to replicate the request-login-code
        behavior.
        r,   r   ru   invalid_login)r   r,   )
rK   r   validation_errorRequestLoginCodeFormis_validerrorsrJ   _userr+   rM   )r8   r,   r   dataformfieldr   errorr>   r>   r?   r      s$   
z!LoginForm._clean_without_passwordr   c                 C   s   t | j}|j| jfi |}|r0t||dd}tjtj|r'|	d|| _
|| _| jS tjj| jd d}|	d|j )Nr,   r+   r,   too_many_login_attemptsru   )ru   z%s_password_mismatch)r   rk   authenticater!   rJ   r   ru   is_login_rate_limitedr   r   _loginr+   r   rM   rd   )r8   r   r   r+   ru   login_methodr>   r>   r?   r      s   

zLoginForm._clean_with_passwordc                 C   s,   |   }d|v r| |||S | |||S )Nrv   )r   _login_with_password_login_by_code)r8   rk   redirect_urlr   r>   r>   r?   ru     s   zLoginForm.loginc                 C   sV   t | dd }|d}|d}tjjj||||d d }|r%i }||t< td|dS )Nr+   r   r,   )rk   r+   r   r,   account_confirm_login_code)query)getattrrJ   r   login_by_codeLoginCodeVerificationProcessinitiater   r   )r8   rk   r   r   r+   r   r,   r   r>   r>   r?   r     s   

zLoginForm._login_by_codec                 C   sZ   | j }||_tj|||}tj}|d u r| jd }|r%|j	tj
 |S |j	d |S )Nrw   r   )r   r   r   ru   perform_password_loginr   r   rM   session
set_expirySESSION_COOKIE_AGE)r8   rk   r   r   ru   r:   rw   r>   r>   r?   r     s   
zLoginForm._login_with_passwordN)r@   rA   rB   rN   rL   rv   r   BooleanFieldrw   r+   rX   r   r   dictr   r   rI   r   strr   r   ru   r   r   rC   r>   r>   r<   r?   re   `   s    '
re   c                       s   e Zd ZejedejejedddddZ	ej
ejdeddddd	Z fd
dZdd Zdd Zdd Zdd Zdd Z fddZdd Zdd Zdd Z  ZS )BaseSignupFormrq   rr   rm   rn   )rQ   
min_lengthrS   r,   rl   typerP   rT   rS   c           
         s  |  || _d| _t j|i | | jd }t |_|j	t
|j t|j|jjd< | jd}|rNtjtd|d tjdtdd	d
d| jd< | jd}|r|d ritd| jd _d| jd _ntd| jd _d| jd _d| jd j_n| jd= | jd}|r|d rtd| jd _d| jd _ntd| jd _d| jd _d| jd j_n| jd= | jd}t|| _|rt }|jtd|d d| jd< t| j }	t| t| dd p|	 d S )NFrr   	maxlengthemail2zEmail (again)rj   r,   zEmail address confirmationr   rP   rn   rQ   rj   rS   ro   TzEmail (optional)rq   zUsername (optional)r   Phoneri   field_order)_get_signup_fields_signup_fieldsaccount_already_existsr/   rX   r   r   rs   r	   appendMaxLengthValidatorr   rS   rR   rJ   r   r{   rL   r}   r   rQ   rj   is_requiredbool_has_phone_fieldr   r   listkeysr   r   )
r8   rY   rZ   username_fieldr   r,   rr   r   r   default_field_orderr<   r>   r?   rX   >  sb   



zBaseSignupForm.__init__c                 C   s   t j}d|v r'|d}|std|d|d< |d}|r'|d |d< d|v r>|d}|s7td|d|d< |S )	Nemail_requiredr,   z(email required but not listed as a fieldrj   r   username_requiredrr   z+username required but not listed as a field)r   r   rJ   r   ImproperlyConfiguredrU   )r8   rZ   signup_fieldsr,   r   rr   r>   r>   r?   r   z  s&   


z!BaseSignupForm._get_signup_fieldsc                 C   s0   | j d }|s| jd d s|S t |}|S )Nrr   rj   )rM   r   r   clean_usernamerc   r>   r>   r?   r     s
   
zBaseSignupForm.clean_usernamec                 C   s2   | j d  }t |}|rtjr| |}|S )Nr,   )rM   lowerr   clean_emailr   UNIQUE_EMAILvalidate_unique_emailrc   r>   r>   r?   r     s
   

zBaseSignupForm.clean_emailc                 C   s   | j d  }|S )Nr   )rM   r   rc   r>   r>   r?   clean_email2  s   zBaseSignupForm.clean_email2c                 C   sJ   t  }tj|}|du rn|du r|d|d u sJ d| _||S )NTFemail_taken)r   r   manage_emailassess_unique_emailr   r   r   )r8   rd   r   
assessmentr>   r>   r?   r     s   

z$BaseSignupForm.validate_unique_emailc                    sP   t t|  }d| jv r&|d}|d}|r&|r&||kr&| dtd |S )Nr   r,   z'You must type the same email each time.)r/   r   rI   r   rJ   rK   rL   )r8   rM   r,   r   r<   r>   r?   rI     s   


zBaseSignupForm.cleanc                 C   s   |  || d S r   )signup)r8   rk   r+   r>   r>   r?   custom_signup  s   zBaseSignupForm.custom_signupc                 C   sL   | j r| jd }tj||}d}tj|jt< ||fS | 	|}d}||fS )zTry and save the user. This can fail in case of a conflict on the
        email address, in that case we will send an "account already exists"
        email and return a standard "email verification sent" response.
        r,   N)
r   rM   r   r   prevent_enumerationr   keyr   r   save)r8   rk   r,   respr+   r>   r>   r?   try_save  s   

zBaseSignupForm.try_savec                 C   s   | j d}| jrt|t }||}||||  | jr.| j d}|r.|||d | 	|| t
|||rBt|dg |S g  |S )Nr,   r   F)r,   )rM   rJ   r   r   r   new_user	save_userr   	set_phoner   r#   r    )r8   rk   r,   r   r+   r   r>   r>   r?   r     s   
zBaseSignupForm.save)r@   rA   rB   r   r~   rL   r   USERNAME_MIN_LENGTHr}   rr   r{   r,   rX   r   r   r   r   r   rI   r   r   r   rC   r>   r>   r<   r?   r   ,  s4    
<	r   c                       s4   e Zd Z fddZ fddZ fddZ  ZS )
SignupFormc                    s   | dd| _t j|i | | jd}| js?|r?ttddt	 |d d| j
d< d| jv r?ttd	d|d d
| j
d< t| drJt| | j tj}|rdtjddtjdddddd| j
|< d S d S )N
by_passkeyFrF   rf   r]   rj   )rQ   rT   r^   rj   rG   Password (again))rQ   rT   rj   r    z$position: absolute; right: -99999px;z-1nope)styletabindexrT   rn   )rj   rQ   rS   )rU   r   r/   rX   r   rJ   rN   rL   r   r`   r   hasattrr   r   r   SIGNUP_FORM_HONEYPOT_FIELDr   r~   r}   )r8   rY   rZ   password1_fieldhoneypot_field_namer<   r>   r?   rX     s>   


zSignupForm.__init__c                    s>   t j}|r| j| rd}t }||d}||fS t |S )z
        override of parent class method that adds additional catching
        of a potential bot filling out the honeypot field and returns a
        'fake' email verification response if honeypot was filled out
        N)r   r   rM   r   respond_email_verification_sentr/   r   )r8   rk   r   r+   r   r   r<   r>   r?   r     s   
zSignupForm.try_savec              
      s   t    t }| }t|| jd t|| jd | jd}|rIz
t j||d W n t	j
yH } z| d| W Y d }~nd }~ww d| jv rjd| jv rjd| jv rj| jd | jd krj| dtd | jS )Nrr   r,   rF   r*   rG   rH   )r/   rI   r   r'   rM   rJ   r&   r   rb   r   ValidationErrorrK   r   rL   )r8   User
dummy_userrv   er<   r>   r?   rI     s,   



zSignupForm.clean)r@   rA   rB   rX   r   rI   rC   r>   r>   r<   r?   r     s    #r   c                       s   e Zd Zd fdd	Z  ZS )UserFormNc                    s    || _ tt| j|i | d S r   )r+   r/   r   rX   )r8   r+   rY   rZ   r<   r>   r?   rX   8  s   zUserForm.__init__r   r[   r>   r>   r<   r?   r   7  s    r   c                   @   sB   e Zd ZejeddejdeddddZdd	 Zd
d Z	dS )AddEmailFormro   Tr,   rl   r   rn   r   c                    s   ddl m}  jd  }t }||}t|} fdd|D } fdd|D }|r2|d|r?tj	r?tj
s?|dtj jsM|d	tj|jj jj| jd
 |S )Nr   )signalsr,   c                    s   g | ]}|j  jj kr|qS r>   pkr+   .0ur8   r>   r?   
<listcomp>M      z,AddEmailForm.clean_email.<locals>.<listcomp>c                    s   g | ]}|j  jj kr|qS r>   r  r  r  r>   r?   r  N  r	  duplicate_emailr   max_email_addresses)senderr,   r+   )allauth.accountr  rM   r   r   r   r"   r   r   r   PREVENT_ENUMERATIONr    r3   can_add_emailr+   MAX_EMAIL_ADDRESSES
_add_emailsendr=   )r8   r  rd   r   userson_this_accounton_diff_accountr>   r  r?   r   F  s4   


zAddEmailForm.clean_emailc                 C   sb   t jrt| j| jd d}|| |S t jr#tj|| j| jd S tjj	|| j| jd ddS )Nr,   r   T)confirm)
r   "EMAIL_VERIFICATION_BY_CODE_ENABLEDr    r+   rM   send_confirmationCHANGE_EMAILr3   add_new_email	add_email)r8   rk   email_addressr>   r>   r?   r   g  s   
zAddEmailForm.saveN)
r@   rA   rB   r   r{   rL   r}   r,   r   r   r>   r>   r>   r?   r   =  s    !r   c                       sX   e Zd ZeedddZeeddZeeddZ fddZ	d	d
 Z
dd Z  ZS )ChangePasswordFormzCurrent Passwordrg   rh   New PasswordrQ   New Password (again)c                    (   t t| j|i | | j| jd _d S NrF   )r/   r  rX   r+   r   ra   r<   r>   r?   rX   ~     zChangePasswordForm.__init__c                 C   s*   | j | jdst d| jd S )Noldpasswordenter_current_password)r+   check_passwordrM   rJ   r   r   r  r>   r>   r?   clean_oldpassword  s   
z$ChangePasswordForm.clean_oldpasswordc                 C      t j| j| jd  d S r"  r   password_changechange_passwordr+   rM   r  r>   r>   r?   r        zChangePasswordForm.save)r@   rA   rB   rN   rL   r$  r\   rF   rG   rX   r'  r   rC   r>   r>   r<   r?   r  w  s    r  c                       @   e Zd ZeeddZeeddZ fddZdd Z	  Z
S )SetPasswordFormrf   r  r   c                    r!  r"  )r/   r.  rX   r+   r   ra   r<   r>   r?   rX     r#  zSetPasswordForm.__init__c                 C   r(  r"  r)  r  r>   r>   r?   r     r,  zSetPasswordForm.saver@   rA   rB   r\   rL   rF   rN   rG   rX   r   rC   r>   r>   r<   r?   r.    s
    r.  c                   @   sJ   e Zd ZejeddejdedddddZdd	 Zd
e	fddZ
dS )ResetPasswordFormro   Tr,   rl   r   rn   r   c                 C   sL   | j d  }t |}t|ddd| _| js!tjs!t d| j d S )Nr,   T	is_activeprefer_verifiedunknown_email)	rM   r   r   r   r"   r  r   r  r   )r8   r,   r>   r>   r?   r     s   
zResetPasswordForm.clean_emailr   c                 K   s\   | j d }tjrtjjj|| jr| jd nd |d |S |dt	}tj
||| j| |S )Nr,   r   )rk   r+   r,   token_generator)rM   r   PASSWORD_RESET_BY_CODE_ENABLEDr   password_reset_by_code PasswordResetVerificationProcessr   r  rJ   default_token_generatorpassword_resetrequest_password_reset)r8   rk   rZ   r,   r5  r>   r>   r?   r     s   


zResetPasswordForm.saveN)r@   rA   rB   r   r{   rL   r}   r,   r   r   r   r>   r>   r>   r?   r0    s    r0  c                       r-  )ResetPasswordKeyFormr  r  r   c                    s@   | dd | _| dd | _t j|i | | j| jd _d S )Nr+   temp_keyrF   )rU   r+   r=  r/   rX   r   ra   r<   r>   r?   rX     s   zResetPasswordKeyForm.__init__c                 C   r(  r"  )r   r:  reset_passwordr+   rM   r  r>   r>   r?   r     r,  zResetPasswordKeyForm.saver/  r>   r>   r<   r?   r<    s
    r<  c                       s<   e Zd Ze Ze ZdZeZ	dd Z
 fddZ  ZS )UserTokenFormNc              	   C   s:   t  }zt|}|jj|dW S  t|jfy   Y d S w )N)r  )r   r%   r3   rJ   r   DoesNotExist)r8   uidb36r   r  r>   r>   r?   	_get_user  s   zUserTokenForm._get_userc                    sn   t t|  }|dd }|dd }t }|s|d| || _| jd u s0| j	| j|s5|d|S )NrA  r   invalid_password_reset)
r/   r?  rI   rJ   r   r   rB  
reset_userr5  check_token)r8   rM   rA  r   r   r<   r>   r?   rI     s   

zUserTokenForm.clean)r@   rA   rB   r   r~   rA  r   rD  r9  r5  rB  rI   rC   r>   r>   r<   r?   r?    s    r?  c                       s4   e Zd ZeedddZ fddZdd Z  ZS )ReauthenticateFormrf   rg   rh   c                    "   | d| _t j|i | d S )Nr+   )rU   r+   r/   rX   ra   r<   r>   r?   rX        zReauthenticateForm.__init__c                 C   s,   | j d}t | j|st d|S )Nrv   incorrect_password)rM   rJ   r   reauthenticater+   r   )r8   rv   r>   r>   r?   rb     s   z!ReauthenticateForm.clean_password)	r@   rA   rB   rN   rL   rv   rX   rb   rC   r>   r>   r<   r?   rF    s    rF  c                       sV   e Zd ZejejedddddZ fddZ fdd	Z	d
d Z
dd Z  ZS )r   rl   r,   rm   rn   r   c                    s   t  j|i | tjtjv | _tjtjv | _| jr.t	 }|j
| j d| jd< d| jd _| jr<| js>| jd d S d S d S )Nrt   r   Fr,   )r/   rX   r   ry   r   rx   
_has_emailr   
_has_phoner   r   r   rj   rU   r8   rY   rZ   r   r<   r>   r?   rX     s   zRequestLoginCodeForm.__init__c                    s:   t   }t }|d}|d}|r|r|d|S )Nr   r,   select_only_one)r/   rI   r   rJ   r   )r8   rM   r   r   r,   r<   r>   r?   rI     s   



zRequestLoginCodeForm.cleanc                 C   sZ   t  }| jd }|r+||| _| jstjs|dtjt	j
d| ds+|d|S )Nr   unknown_phonerequest_login_codeactionr   r   )r   rM   get_user_by_phoner   r   r  r   r   consumer   rk   r   )r8   r   r   r>   r>   r?   clean_phone  s   


z RequestLoginCodeForm.clean_phonec                 C   sn   t  }| jd }t|ddd}tjs|s|dtjtj	d|
 ds)|d|r2|d | _|S d | _|S )	Nr,   Tr1  r4  rP  rQ  r   r   )r   rM   r"   r   r  r   r   rT  r   rk   r   r   )r8   r   r,   r  r>   r>   r?   r   (  s   


z RequestLoginCodeForm.clean_email)r@   rA   rB   r   r{   rz   rL   r,   rX   rI   rU  r   rC   r>   r>   r<   r?   r     s    		r   c                       sH   e Zd ZejedejedddddZ fddZdd	 Z	  Z
S )
BaseConfirmCodeFormCodezone-time-coderm   rn   rp   c                    rG  )Ncode)rU   rX  r/   rX   ra   r<   r>   r?   rX   ?  rH  zBaseConfirmCodeForm.__init__c                 C   s*   | j d}t|| jdst d|S )NrX  )actualexpectedincorrect_code)rM   rJ   r   rX  r   r   )r8   rX  r>   r>   r?   
clean_codeC  s   zBaseConfirmCodeForm.clean_code)r@   rA   rB   r   r~   rL   r}   rX  rX   r\  rC   r>   r>   r<   r?   rV  7  s    rV  c                   @      e Zd ZdS )ConfirmLoginCodeFormNr@   rA   rB   r>   r>   r>   r?   r^  J      r^  c                   @   r]  ) ConfirmEmailVerificationCodeFormNr_  r>   r>   r>   r?   ra  N  r`  ra  c                   @   r]  )ConfirmPasswordResetCodeFormNr_  r>   r>   r>   r?   rb  R  r`  rb  c                   @   r]  )VerifyPhoneFormNr_  r>   r>   r>   r?   rc  V  r`  rc  c                       s$   e Zd Z fddZdd Z  ZS )ChangePhoneFormc                    s:   | d| _t j|i | t }|jdd| jd< d S )Nr   Trt   )rU   r   r/   rX   r   r   r   rM  r<   r>   r?   rX   [  s   zChangePhoneForm.__init__c                 C   s$   | j d }|| jkrt d|S )Nr   same_as_current)rM   r   r   r   )r8   r   r>   r>   r?   rU  a  s   

zChangePhoneForm.clean_phone)r@   rA   rB   rX   rU  rC   r>   r>   r<   r?   rd  Z  s    rd  N)Wtypingr   djangor   django.contrib.authr   r   r   django.contrib.auth.tokensr   django.corer   r	   django.template.exceptionsr
   django.template.loaderr   django.urlsr   r   django.utils.safestringr   django.utils.translationr   r   rL   r   allauth.account.app_settingsr   allauth.account.internalr   %allauth.account.internal.flows.signupr   !allauth.account.internal.stagekitr    allauth.account.internal.textkitr   allauth.account.stagesr   allauth.corer   r   allauth.core.internal.httpkitr   allauth.utilsr   r   r   r   r   r   modelsr    r!   utilsr"   r#   r$   r%   r&   r'   r)   PASSWORD_RESET_TOKEN_GENERATORr9  rE   r~   rN   r\   Formre   r   r   r   r   r  r.  r0  r<  r?  rF  r   rV  r^  ra  rb  rc  rd  r>   r>   r>   r?   <module>   s`     

 M 7U:%!>