o
    Lfb                     @   s  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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 ddl m!Z! ddlm"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ G dd deZ,e- Z.G dd de/Z0G dd dej1Z2G dd de2Z3G dd dej4Z5G dd dej4Z6dd Z7G d d! d!e7 Z8G d"d# d#e8Z9G d$d% d%ej4Z:G d&d' d'e:Z;G d(d) d)e0e:Z<G d*d+ d+e0e:Z=G d,d- d-ej4Z>G d.d/ d/e0ej4Z?G d0d1 d1ej4Z@G d2d3 d3ej4ZAd4S )5    )import_module)forms)password_validation)PasswordResetTokenGenerator)
exceptions
validators)NoReverseMatchreverse)	mark_safe)gettextgettext_lazypgettext)record_authentication   )build_absolute_uriget_username_max_lengthset_form_field_order   )app_settings)get_adapter)AuthenticationMethod)EmailAddress)
assess_unique_emailfilter_users_by_emailget_user_modelperform_loginsetup_user_emailsync_user_email_addressesurl_str_to_user_pk
user_emailuser_pk_to_url_struser_usernamec                          e Zd Z fddZ  ZS )%EmailAwarePasswordResetTokenGeneratorc                    sh   t t| ||}t| t|}t|r|gng }|tjj	|dj
ddd |dt|7 }|S )NuseremailT)flat|)superr#   _make_hash_valuer   r   setupdater   objectsfiltervalues_listjoinsorted)selfr%   	timestampretr&   emails	__class__ V/var/www/html/humari/django-venv/lib/python3.10/site-packages/allauth/account/forms.pyr*   %   s   
z6EmailAwarePasswordResetTokenGenerator._make_hash_value)__name__
__module____qualname__r*   __classcell__r8   r8   r6   r9   r#   $       r#   c                       r"   )PasswordVerificationMixinc                    sF   t t|  }|d}|d}|r!|r!||kr!| dtd |S )N	password1	password2*You must type the same password each time.)r)   r?   cleanget	add_error_)r2   cleaned_datar@   rA   r6   r8   r9   rC   7   s   

zPasswordVerificationMixin.clean)r:   r;   r<   rC   r=   r8   r8   r6   r9   r?   6   r>   r?   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)rI   attrswidgetautocomplete)
popr   PASSWORD_INPUT_RENDER_VALUEr   PasswordInputrD   rL   r)   rH   __init__)r2   argskwargsrI   rN   r6   r8   r9   rR   A   s   
zPasswordField.__init__r:   r;   r<   rR   r=   r8   r8   r6   r9   rH   @   r>   rH   c                       s(   e Zd Z fddZ fddZ  ZS )SetPasswordFieldc                    s(   d|d< t t| j|i | d | _d S )Nnew-passwordrN   )r)   rV   rR   r%   r2   rS   rT   r6   r8   r9   rR   P   s   
zSetPasswordField.__init__c                    s&   t t| |}t j|| jd}|S )Nr$   )r)   rV   rC   r   clean_passwordr%   r2   valuer6   r8   r9   rC   U   s   zSetPasswordField.clean)r:   r;   r<   rR   rC   r=   r8   r8   r6   r9   rV   O   s    rV   c                       s   e Zd ZeedddZejedddZdZ	eded	ed
dZ
 fddZdd Zdd Zdd Z fddZdddZ  ZS )	LoginFormPasswordcurrent-passwordrK   rN   zRemember MeF)rK   requiredNz#This account is currently inactive.z@The email address and/or password you specified are not correct.z;The username and/or password you specified are not correct.)account_inactiveemail_password_mismatchusername_password_mismatchc                    sD  | dd | _tt| j|i | tjtjkr-t	j
tdddd}t	jtd|d}n:tjtjkrJt	jtdd	dd}t	jtd|t d
}ntjtjksRJ t	jtdddd}t	jtdd|d}|| jd< t| g d tjd ur|| jd= ztd}W n
 ty   Y d S w td}td| d| d| jd _d S )NrequestEmail addressr&   rJ   rN   rL   EmailrK   rM   Usernameusername)rK   rM   
max_lengthzUsername or emailzfield labelLoginlogin)rn   passwordrememberrp   account_reset_passwordzForgot your password?z	<a href="z">z</a>ro   )rO   rd   r)   r\   rR   r   AUTHENTICATION_METHODr   EMAILr   
EmailInputrF   
EmailFieldUSERNAME	TextInput	CharFieldr   USERNAME_EMAILr   fieldsr   SESSION_REMEMBERr	   r   r
   	help_text)r2   rS   rT   login_widgetlogin_field	reset_url
forgot_txtr6   r8   r9   rR   j   sP   


zLoginForm.__init__c                 C   sf   i }| j d }tjtjkr||d< ntjtjkr||d< n| |r&||d< ||d< | j d |d< |S )z_
        Provides the credentials required to authenticate the user for
        login.
        rn   r&   rk   ro   )rG   r   rr   r   rs   rv   _is_login_email)r2   credentialsrn   r8   r8   r9   user_credentials   s   



zLoginForm.user_credentialsc                 C   s   | j d }| S )Nrn   )rG   strip)r2   rn   r8   r8   r9   clean_login   s   
zLoginForm.clean_loginc                 C   s0   z
t | d}W |S  tjy   d}Y |S w )NTF)r   validate_emailr   ValidationError)r2   rn   r4   r8   r8   r9   r      s   
zLoginForm._is_login_emailc                    s   t t|   | jrd S |  }t| jj| jfi |}|r%|| _| jS t	j
}|t	jjkrA| jd }| |r=t	jj}nt	jj}t| jd|  )Nrn   z%s_password_mismatch)r)   r\   rC   _errorsr   r   rd   authenticater%   r   rr   r   ry   rG   r   rs   rv   r   r   error_messages)r2   r   r%   auth_methodrn   r6   r8   r9   rC      s"   


zLoginForm.cleanc                    s   |     fdddD }t|fddi| t|| jtj| dd}tj}|d u r1| jd }|r<|j	
tj |S |j	
d	 |S )
Nc                    s    i | ]}| v r|  |qS r8   )rD   ).0fieldr   r8   r9   
<dictcomp>   s
    
z#LoginForm.login.<locals>.<dictcomp>)r&   rk   methodro   r&   )email_verificationredirect_urlr&   rp   r   )r   r   r   r%   r   EMAIL_VERIFICATIONrD   r{   rG   session
set_expirySESSION_COOKIE_AGE)r2   rd   r   
extra_datar4   rp   r8   r   r9   rn      s(   

zLoginForm.loginN)r:   r;   r<   rH   rF   ro   r   BooleanFieldrp   r%   r   rR   r   r   r   rC   rn   r=   r8   r8   r6   r9   r\   [   s$    
-r\   c                   @   s   e Zd Zdd ZdS )_DummyCustomSignupFormc                 C   s   dS )zL
        Invoked at signup time to complete the signup of the user.
        Nr8   r2   rd   r%   r8   r8   r9   signup   s   z_DummyCustomSignupForm.signupN)r:   r;   r<   r   r8   r8   r8   r9   r      s    r   c               
   C   s   t jstS zt jdd\} }W n ty   tdt j w zt| }W n ty; } z	td| |f d}~ww zt	||}W n t
yS   td| |f w t|ds^td|S )	a  
    Currently, we inherit from the custom form, if any. This is all
    not very elegant, though it serves a purpose:

    - There are two signup forms: one for local accounts, and one for
      social accounts
    - Both share a common base (BaseSignupForm)

    - Given the above, how to put in a custom signup form? Which form
      would your custom form derive from, the local or the social one?
    .r   z!%s does not point to a form classz#Error importing form class %s: "%s"Nz(Module "%s" does not define a "%s" classr   zLThe custom signup form must offer a `def signup(self, request, user)` method)r   SIGNUP_FORM_CLASSr   rsplit
ValueErrorr   ImproperlyConfiguredr   ImportErrorgetattrAttributeErrorhasattr)	fc_modulefc_classnamemodefc_classr8   r8   r9   _base_signup_form_class   s:   


r   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 fddZdd Zdd Z  ZS )BaseSignupFormrj   rk   rf   rg   )rK   
min_lengthrM   r&   re   typerJ   rN   )rM   c                    s,  | dtj}| dtj| _d| _tt| j|i | | j	d }t
 |_|jt|j t|j|jjd< g d}tjrUtjtdtjdtd	d
dd| j	d< |rftd| j	d _d| j	d _ntd| j	d _d| j	d _d| j	d j_| jrg d}| js| j	d= t| t| dd p| d S )Nemail_requiredusername_requiredFrk   	maxlength)r&   email2rk   r@   rA   zEmail (again)r&   zEmail address confirmationr   rJ   rg   ri   r   rh   TzEmail (optional))rk   r&   r   r@   rA   field_order)rO   r   EMAIL_REQUIREDUSERNAME_REQUIREDr   account_already_existsr)   r   rR   rz   r   rl   r   appendMaxLengthValidatorstrrM   rL   SIGNUP_EMAIL_ENTER_TWICEr   ru   rF   rw   r   rK   r`   is_requiredr   r   )r2   rS   rT   r   username_fielddefault_field_orderr6   r8   r9   rR   %  sF   

	zBaseSignupForm.__init__c                 C   s   | j d }t |}|S )Nrk   )rG   r   clean_usernamerZ   r8   r8   r9   r   [  s   
zBaseSignupForm.clean_usernamec                 C   s.   | j d }t |}|rtjr| |}|S Nr&   )rG   r   clean_emailr   UNIQUE_EMAILvalidate_unique_emailrZ   r8   r8   r9   r   d  s
   


zBaseSignupForm.clean_emailc                 C   sL   t  }t|}|du rn|du rt|jd |d u sJ d| _||S )NTFemail_taken)r   r   r   r   r   r   r   )r2   r[   adapter
assessmentr8   r8   r9   r   k  s   
z$BaseSignupForm.validate_unique_emailc                    sL   t t|  }tjr$|d}|d}|r$|r$||kr$| dtd |S )Nr&   r   z'You must type the same email each time.)r)   r   rC   r   r   rD   rE   rF   )r2   rG   r&   r   r6   r8   r9   rC   y  s   

zBaseSignupForm.cleanc                 C   s   |  || d S r   )r   r   r8   r8   r9   custom_signup  s   zBaseSignupForm.custom_signupc                 C   sN   | j r| jd }t }|| d}||d}||fS | |}d}||fS )zTry and save te 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   rG   r    send_account_already_exists_mailrespond_email_verification_sentsave)r2   rd   r&   r   r%   respr8   r8   r9   try_save  s   


zBaseSignupForm.try_save)r:   r;   r<   r   rx   rF   r   USERNAME_MIN_LENGTHrw   rk   ru   r&   rR   r   r   r   rC   r   r   r=   r8   r8   r6   r9   r     s.    
6		r   c                       s0   e Zd Z fddZ fddZdd Z  ZS )
SignupFormc                    sl   t t| j|i | ttddt d| jd< tj	r'ttddd| jd< t
| dr4t| | j d S d S )	Nr]   rW   )rK   rN   r|   r@   Password (again)r_   rA   r   )r)   r   rR   rH   rF   r   "password_validators_help_text_htmlrz   r   SIGNUP_PASSWORD_ENTER_TWICEr   r   r   rX   r6   r8   r9   rR     s   
zSignupForm.__init__c              
      s   t t|   t }| }t|| jd t|| jd | jd}|rKz
t j	||d W n t
jyJ } z| d| W Y d }~nd }~ww tjrjd| jv rjd| jv rj| jd | jd krj| dtd | jS )Nrk   r&   r@   r$   rA   rB   )r)   r   rC   r   r!   rG   rD   r   r   rY   r   r   rE   r   r   rF   )r2   User
dummy_userro   r   r6   r8   r9   rC     s.   

zSignupForm.cleanc                 C   sj   | j d}| jrt|t }||}||||  | || t|||r0t	|dg |S g  |S )Nr&   )r&   )
rG   rD   r   r   r   new_user	save_userr   r   r   )r2   rd   r&   r   r%   r8   r8   r9   r     s   
zSignupForm.save)r:   r;   r<   rR   rC   r   r=   r8   r8   r6   r9   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   rR   )r2   r%   rS   rT   r6   r8   r9   rR     s   zUserForm.__init__r   rU   r8   r8   r6   r9   r     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 )AddEmailFormrh   Tr&   re   r   rg   rK   r`   rM   c                    s   ddl m}  jd }t }||}tdtdd}t|} fdd|D } fd	d|D }|r;t|d
 |rMt	j
dkrMt	jrMt|jd tj js^t|d t	j |jj jj| jd |S )Nr   )signalsr&   z;This email address is already associated with this account.z,You cannot add more than %d email addresses.)this_accountmax_email_addressesc                    s   g | ]}|j  jj kr|qS r8   pkr%   r   ur2   r8   r9   
<listcomp>      z,AddEmailForm.clean_email.<locals>.<listcomp>c                    s   g | ]}|j  jj kr|qS r8   r   r   r   r8   r9   r     r   r   strictr   r   )senderr&   r%   )allauth.accountr   rG   r   r   rF   r   r   r   r   PREVENT_ENUMERATIONr   r   r   r-   can_add_emailr%   MAX_EMAIL_ADDRESSES
_add_emailsendr7   )r2   r   r[   r   errorsuserson_this_accounton_diff_accountr8   r   r9   r     s<   


zAddEmailForm.clean_emailc                 C   s:   t jrtj|| j| jd S tjj|| j| jd ddS )Nr&   T)confirm)r   CHANGE_EMAILr   r-   add_new_emailr%   rG   	add_email)r2   rd   r8   r8   r9   r     s   zAddEmailForm.saveN)
r:   r;   r<   r   ru   rF   rw   r&   r   r   r8   r8   r8   r9   r     s    $r   c                       s^   e Zd ZeedddZeede dZ	eeddZ
 fdd	Zd
d Zdd Z  ZS )ChangePasswordFormzCurrent Passwordr^   r_   New PasswordrK   r|   New Password (again)rK   c                    (   t t| j|i | | j| jd _d S Nr@   )r)   r   rR   r%   rz   rX   r6   r8   r9   rR        zChangePasswordForm.__init__c                 C   s0   | j | jdstt jd | jd S )Noldpasswordenter_current_password)r%   check_passwordrG   rD   r   r   r   r   r   r8   r8   r9   clean_oldpassword  s
   

z$ChangePasswordForm.clean_oldpasswordc                 C      t  | j| jd  d S r   r   set_passwordr%   rG   r   r8   r8   r9   r   $     zChangePasswordForm.save)r:   r;   r<   rH   rF   r   rV   r   r   r@   rA   rR   r   r   r=   r8   r8   r6   r9   r     s    r   c                       sF   e Zd Zeede dZeeddZ	 fddZ
dd Z  ZS )	SetPasswordFormr]   r   r   r   c                    r   r   )r)   r  rR   r%   rz   rX   r6   r8   r9   rR   /  r   zSetPasswordForm.__init__c                 C   r   r   r  r   r8   r8   r9   r   3  r  zSetPasswordForm.save)r:   r;   r<   rV   rF   r   r   r@   rH   rA   rR   r   r=   r8   r8   r6   r9   r  (  s    r  c                   @   sT   e Zd ZejeddejdedddddZdd	 Zd
d Z	dd Z
dd ZdS )ResetPasswordFormrh   Tr&   re   r   rg   r   c                 C   sN   | j d }t |}t|ddd| _| js"tjs"tt j	d | j d S )Nr&   T)	is_activeprefer_verifiedunknown_email)
rG   r   r   r   r   r   r   r   r   r   )r2   r&   r8   r8   r9   r   D  s   

zResetPasswordForm.clean_emailc                 K   sB   | j d }| jstjr| || |S | j||| jfi | |S r   )rG   r   r   EMAIL_UNKNOWN_ACCOUNTS_send_unknown_account_mail_send_password_reset_mail)r2   rd   rT   r&   r8   r8   r9   r   L  s   
zResetPasswordForm.savec                 C   s,   t |td}||d}t d|| d S )Naccount_signup)rd   
signup_urlzaccount/email/unknown_account)r   r	   r   	send_mail)r2   rd   r&   r  contextr8   r8   r9   r
  U  s
   z,ResetPasswordForm._send_unknown_account_mailc                 K   s~   | dt}|D ]4}||}t|}| d| }	t |	}
||
|||d}tjtj	kr4t
||d< t d|| qd S )Ntoken_generator-)r%   password_reset_urluidkeyrd   rk   z account/email/password_reset_key)rD   default_token_generator
make_tokenr    r   get_reset_password_from_key_urlr   rr   r   rs   r!   r  )r2   rd   r&   r   rT   r  r%   temp_keyr  r  urlr  r8   r8   r9   r  ]  s    
z+ResetPasswordForm._send_password_reset_mailN)r:   r;   r<   r   ru   rF   rw   r&   r   r   r
  r  r8   r8   r8   r9   r  7  s    	r  c                       s@   e Zd ZeeddZeeddZ fddZdd Z	  Z
S )ResetPasswordKeyFormr   r   r   c                    sD   | dd | _| dd | _tt| j|i | | j| jd _d S )Nr%   r  r@   )rO   r%   r  r)   r  rR   rz   rX   r6   r8   r9   rR   {  s   zResetPasswordKeyForm.__init__c                 C   r   r   r  r   r8   r8   r9   r     r  zResetPasswordKeyForm.save)r:   r;   r<   rV   rF   r@   rH   rA   rR   r   r=   r8   r8   r6   r9   r  w  s
    r  c                       sH   e Zd Ze Ze ZdZeZ	de
diZdd Z fddZ  ZS )UserTokenFormNtoken_invalidz%The password reset token was invalid.c              	   C   s:   t  }zt|}|jj|dW S  t|jfy   Y d S w )N)r   )r   r   r-   rD   r   DoesNotExist)r2   uidb36r   r   r8   r8   r9   	_get_user  s   zUserTokenForm._get_userc                    st   t t|  }|dd }|dd }|st| jd | || _| jd u s0| j	
| j|s8t| jd |S )Nr  r  r  )r)   r  rC   rD   r   r   r   r  
reset_userr  check_token)r2   rG   r  r  r6   r8   r9   rC     s   zUserTokenForm.clean)r:   r;   r<   r   rx   r  r  r   r  r  rF   r   r  rC   r=   r8   r8   r6   r9   r    s    r  c                       s4   e Zd ZeedddZ fddZdd Z  ZS )ReauthenticateFormr]   r^   r_   c                    s"   | d| _t j|i | d S )Nr%   )rO   r%   r)   rR   rX   r6   r8   r9   rR     s   zReauthenticateForm.__init__c                 C   s2   | j d}t | j|stt jd |S )Nro   incorrect_password)rG   rD   r   reauthenticater%   r   r   r   )r2   ro   r8   r8   r9   rY     s   
z!ReauthenticateForm.clean_password)	r:   r;   r<   rH   rF   ro   rR   rY   r=   r8   r8   r6   r9   r"    s    r"  N)B	importlibr   djangor   django.contrib.authr   django.contrib.auth.tokensr   django.corer   r   django.urlsr   r	   django.utils.safestringr
   django.utils.translationr   r   rF   r   allauth.account.authenticationr   utilsr   r   r    r   r   r   r   modelsr   r   r   r   r   r   r   r   r   r    r!   r#   PASSWORD_RESET_TOKEN_GENERATORr  objectr?   rx   rH   rV   Formr\   r   r   r   r   r   r   r   r  r  r  r  r"  r8   r8   r8   r9   <module>   sF    0
 	( :7@%