a
    j_T                     @   s  d dl mZ d dl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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( G dd deZ)e) Z*G dd de+Z,G dd dej-Z.G dd de.Z/G dd dej0Z1G dd dej0Z2dd Z3G d d! d!e3 Z4G d"d# d#e4Z5G d$d% d%ej0Z6G d&d' d'e6Z7G d(d) d)e,e6Z8G d*d+ d+e,e6Z9G d,d- d-ej0Z:G d.d/ d/e,ej0Z;G d0d1 d1ej0Z<dS )2    )absolute_importN)import_module)forms)PasswordResetTokenGenerator)get_current_site)
exceptions
validators)reverse)gettextgettext_lazypgettext   )build_absolute_uriget_username_max_lengthset_form_field_order   )app_settings)get_adapter)AuthenticationMethod)EmailAddress)	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                       s   e Zd Z fddZ  ZS )%EmailAwarePasswordResetTokenGeneratorc                    sd   t t| ||}t| t|jr*|jgng }|tjj	|dj
ddd |dt|7 }|S )NuseremailT)Zflat|)superr   _make_hash_valuer   setr"   updater   objectsfilterZvalues_listjoinsorted)selfr!   	timestampretZemails	__class__ M/var/www/html/Ranjet/env/lib/python3.9/site-packages/allauth/account/forms.pyr%   $   s    
z6EmailAwarePasswordResetTokenGenerator._make_hash_value)__name__
__module____qualname__r%   __classcell__r1   r1   r/   r2   r   #   s   r   c                       s   e Zd Z fddZ  ZS )PasswordVerificationMixinc                    sF   t t|  }|d}|d}|rB|rB||krB| dtd |S )N	password1	password2*You must type the same password each time.)r$   r7   cleanget	add_error_)r,   cleaned_datar8   r9   r/   r1   r2   r;   5   s    

zPasswordVerificationMixin.clean)r3   r4   r5   r;   r6   r1   r1   r/   r2   r7   4   s   r7   c                       s   e Zd Z fddZ  ZS )PasswordFieldc                    sf   | dtj}tj|d|did|d< | dd }|d urL||d jd< tt| j	|i | d S )Nrender_valueplaceholderlabel)rA   attrswidgetautocomplete)
popr   ZPASSWORD_INPUT_RENDER_VALUEr   ZPasswordInputr<   rD   r$   r@   __init__)r,   argskwargsrA   rF   r/   r1   r2   rH   ?   s    
zPasswordField.__init__r3   r4   r5   rH   r6   r1   r1   r/   r2   r@   >   s   r@   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-passwordrF   )r$   rL   rH   r!   r,   rI   rJ   r/   r1   r2   rH   N   s    zSetPasswordField.__init__c                    s&   t t| |}t j|| jd}|S )Nr    )r$   rL   r;   r   clean_passwordr!   r,   valuer/   r1   r2   r;   S   s    zSetPasswordField.clean)r3   r4   r5   rH   r;   r6   r1   r1   r/   r2   rL   M   s   rL   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rC   rF   zRemember MeF)rC   requiredNz#This account is currently inactive.zAThe e-mail address and/or password you specified are not correct.z;The username and/or password you specified are not correct.)Zaccount_inactiveZemail_password_mismatchZusername_password_mismatchc                    s   | dd | _tt| j|i | tjtjkr\t	j
dtdddd}t	jtd|d}nttjtjkrt	j
tdd	d
d}t	jtd|t d}n:tjtjksJ 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= d S )Nrequestr"   E-mail addresstyperB   rF   rD   E-mailrC   rE   UsernameusernamerB   rF   )rC   rE   
max_lengthzUsername or e-mailzfield labelZLoginlogin)rb   passwordrememberrd   )rG   rW   r$   rR   rH   r   AUTHENTICATION_METHODr   EMAILr   	TextInputr>   
EmailFieldUSERNAME	CharFieldr   USERNAME_EMAILr   fieldsr   SESSION_REMEMBER)r,   rI   rJ   Zlogin_widgetZlogin_fieldr/   r1   r2   rH   i   sB    


zLoginForm.__init__c                 C   sf   i }| j d }tjtjkr$||d< n0tjtjkr:||d< n| |rL||d< ||d< | j d |d< |S )z_
        Provides the credentials required to authenticate the user for
        login.
        rb   r"   r_   rc   )r?   r   re   r   rf   ri   _is_login_email)r,   credentialsrb   r1   r1   r2   user_credentials   s    



zLoginForm.user_credentialsc                 C   s   | j d }| S )Nrb   )r?   strip)r,   rb   r1   r1   r2   clean_login   s    
zLoginForm.clean_loginc                 C   s0   zt | d}W n tjy*   d}Y n0 |S )NTF)r   Zvalidate_emailr   ValidationError)r,   rb   r.   r1   r1   r2   rn      s    

zLoginForm._is_login_emailc                    s   t t|   | jrd S |  }t| jj| jfi |}|rF|| _nLt	j
}|t	jjkr~| jd }| |rvt	jj}nt	jj}t| jd|  | jS )Nrb   z%s_password_mismatch)r$   rR   r;   Z_errorsrp   r   rW   Zauthenticater!   r   re   r   rk   r?   rn   rf   ri   r   rs   error_messages)r,   ro   r!   Zauth_methodrb   r/   r1   r2   r;      s"    


zLoginForm.cleanc                 C   s`   |   d}t|| jtj||d}tj}|d u r<| jd }|rP|j	tj
 n|j	d |S )Nr"   )Zemail_verificationredirect_urlr"   rd   r   )rp   r<   r   r!   r   ZEMAIL_VERIFICATIONrm   r?   ZsessionZ
set_expiryZSESSION_COOKIE_AGE)r,   rW   ru   r"   r.   rd   r1   r1   r2   rb      s    
zLoginForm.login)N)r3   r4   r5   r@   r>   rc   r   ZBooleanFieldrd   r!   rt   rH   rp   rr   rn   r;   rb   r6   r1   r1   r/   r2   rR   Y   s"   
%rR   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.
        Nr1   )r,   rW   r!   r1   r1   r2   signup   s    z_DummyCustomSignupForm.signupN)r3   r4   r5   rw   r1   r1   r1   r2   rv      s   rv   c               
   C   s   t js
tS zt jdd\} }W n" tyB   tdt j Y n0 zt| }W n6 ty } ztd| |f W Y d}~n
d}~0 0 zt	||}W n$ t
y   td| |f Y n0 t|dst|drtd	t n
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" classrw   saveLThe custom signup form must offer a `def signup(self, request, user)` methodz7The custom signup form must implement a "signup" method)r   ZSIGNUP_FORM_CLASSrv   rsplit
ValueErrorr   ZImproperlyConfiguredr   ImportErrorgetattrAttributeErrorhasattrwarningswarnDeprecationWarning)Z	fc_moduleZfc_classnamemodeZfc_classr1   r1   r2   _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 fddZ  ZS )BaseSignupFormr^   r_   r`   r[   )rC   Z
min_lengthrE   r"   rX   rY   )rE   c                    s*  | dtj}| dtj| _tt| j|i | | jd }t	 |_
|jt|j
 t|j
|jjd< g d}tjrtjtdtjdtdd	d
d| jd< |rtd| jd _d| jd _n8t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_requiredr_   Z	maxlength)r"   email2r_   r8   r9   zE-mail (again)r"   zE-mail address confirmationrZ   rB   r[   r]   r   r\   TzE-mail (optional)F)r_   r"   r   r8   r9   field_order)rG   r   ZEMAIL_REQUIREDZUSERNAME_REQUIREDr   r$   r   rH   rl   r   ra   r   appendZMaxLengthValidatorstrrE   rD   SIGNUP_EMAIL_ENTER_TWICEr   rh   r>   rg   r
   rC   rV   Zis_requiredr   r~   )r,   rI   rJ   r   Zusername_fieldZdefault_field_orderr/   r1   r2   rH     sD    

	zBaseSignupForm.__init__c                 C   s   | j d }t |}|S )Nr_   )r?   r   clean_usernamerP   r1   r1   r2   r   Q  s    
zBaseSignupForm.clean_usernamec                 C   s.   | j d }t |}|r*tjr*| |}|S )Nr"   )r?   r   clean_emailr   UNIQUE_EMAILvalidate_unique_emailrP   r1   r1   r2   r   V  s
    


zBaseSignupForm.clean_emailc                 C   s   t  |S N)r   r   rP   r1   r1   r2   r   ]  s    z$BaseSignupForm.validate_unique_emailc                    sL   t t|  }tjrH|d}|d}|rH|rH||krH| dtd |S )Nr"   r   z'You must type the same email each time.)r$   r   r;   r   r   r<   r=   r>   )r,   r?   r"   r   r/   r1   r2   r;   `  s    

zBaseSignupForm.cleanc                    sF   t t| }t|dr,t|jr,||| ntdt || d S )Nrw   rz   )	r$   r   r   callablerw   r   r   r   ry   )r,   rW   r!   Zcustom_formr/   r1   r2   custom_signupi  s    
zBaseSignupForm.custom_signup)r3   r4   r5   r   rj   r>   r   ZUSERNAME_MIN_LENGTHrg   r_   rh   r"   rH   r   r   r   r;   r   r6   r1   r1   r/   r2   r   
  s*   
5	r   c                       s0   e Zd Z fddZ fddZdd Z  ZS )
SignupFormc                    s`   t t| j|i | ttddd| jd< tjrFttdd| jd< t| dr\t	| | j
 d S )	NrS   rM   rU   r8   Password (again)rC   r9   r   )r$   r   rH   r@   r>   rl   r   SIGNUP_PASSWORD_ENTER_TWICEr   r   r   rN   r/   r1   r2   rH   y  s    
zSignupForm.__init__c              
      s   t t|   t }t|| jd t|| jd | jd}|rzt j	||d W n2 t
jy } z| d| W Y d }~n
d }~0 0 tjrd| jv rd| jv r| jd | jd kr| dtd | jS )Nr_   r"   r8   r    r9   r:   )r$   r   r;   r   r   r?   r<   r   r   rO   r   rs   r=   r   r   r>   )r,   Z
dummy_userrc   r   r/   r1   r2   r;     s,    "zSignupForm.cleanc                 C   s<   t |}||}||||  | || t||g  |S r   )r   Znew_userZ	save_userr   r   )r,   rW   adapterr!   r1   r1   r2   ry     s    
zSignupForm.save)r3   r4   r5   rH   r;   ry   r6   r1   r1   r/   r2   r   x  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   rH   )r,   r!   rI   rJ   r/   r1   r2   rH     s    zUserForm.__init__)NrK   r1   r1   r/   r2   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 )AddEmailFormr\   Tr"   rX   r   r[   rC   rV   rE   c                    s    j d }t |}tdtdtdd}t|} fdd|D } fdd|D }|rlt|d	 |rtjrt|d
 t	j
 jst|d tj |S )Nr"   z<This e-mail address is already associated with this account.z?This e-mail address is already associated with another account.z-You cannot add more than %d e-mail addresses.)this_accountdifferent_accountmax_email_addressesc                    s   g | ]}|j  jj kr|qS r1   pkr!   .0ur,   r1   r2   
<listcomp>      z,AddEmailForm.clean_email.<locals>.<listcomp>c                    s   g | ]}|j  jj kr|qS r1   r   r   r   r1   r2   r     r   r   r   r   )r?   r   r   r>   r   r   rs   r   r   r   r(   Zcan_add_emailr!   ZMAX_EMAIL_ADDRESSES)r,   rQ   errorsusersZon_this_accountZon_diff_accountr1   r   r2   r     s,    
	
zAddEmailForm.clean_emailc                 C   s   t jj|| j| jd ddS )Nr"   T)Zconfirm)r   r(   Z	add_emailr!   r?   )r,   rW   r1   r1   r2   ry     s    zAddEmailForm.saveN
r3   r4   r5   r   rh   r>   rg   r"   r   ry   r1   r1   r1   r2   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 PasswordrT   rU   New Passwordr   New Password (again)c                    s(   t t| j|i | | j| jd _d S Nr8   )r$   r   rH   r!   rl   rN   r/   r1   r2   rH     s    zChangePasswordForm.__init__c                 C   s,   | j | jds"ttd| jd S )Noldpasswordz"Please type your current password.)r!   Zcheck_passwordr?   r<   r   rs   r>   r   r1   r1   r2   clean_oldpassword  s    z$ChangePasswordForm.clean_oldpasswordc                 C   s   t  | j| jd  d S r   r   Zset_passwordr!   r?   r   r1   r1   r2   ry     s    zChangePasswordForm.save)r3   r4   r5   r@   r>   r   rL   r8   r9   rH   r   ry   r6   r1   r1   r/   r2   r     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 )SetPasswordFormrS   r   r   c                    s(   t t| j|i | | j| jd _d S r   )r$   r   rH   r!   rl   rN   r/   r1   r2   rH     s    zSetPasswordForm.__init__c                 C   s   t  | j| jd  d S r   r   r   r1   r1   r2   ry     s    zSetPasswordForm.saver3   r4   r5   rL   r>   r8   r@   r9   rH   ry   r6   r1   r1   r/   r2   r     s   r   c                   @   sD   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S )ResetPasswordFormr\   Tr"   rX   rY   r[   r   c                 C   sB   | j d }t |}t|dd| _| js8ttd| j d S )Nr"   T)Z	is_activez6The e-mail address is not assigned to any user account)r?   r   r   r   r   r   rs   r>   )r,   r"   r1   r1   r2   r   
  s    
zResetPasswordForm.clean_emailc                 K   s   t |}| jd }|dt}| jD ]h}||}tdtt||dd}t	||}	|||	|d}
t
jtjkrzt||
d< t|d||
 q$| jd S )	Nr"   token_generatorZaccount_reset_password_from_key)uidb36key)rJ   )current_siter!   Zpassword_reset_urlrW   r_   z account/email/password_reset_key)r   r?   r<   default_token_generatorr   Z
make_tokenr	   dictr   r   r   re   r   rf   r   r   Z	send_mail)r,   rW   rJ   r   r"   r   r!   temp_keypathurlcontextr1   r1   r2   ry     s*    



zResetPasswordForm.saveNr   r1   r1   r1   r2   r     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   r8   )rG   r!   r   r$   r   rH   rl   rN   r/   r1   r2   rH   <  s    zResetPasswordKeyForm.__init__c                 C   s   t  | j| jd  d S r   r   r   r1   r1   r2   ry   B  s    zResetPasswordKeyForm.saver   r1   r1   r/   r2   r   7  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y8   Y d S 0 d S )N)r   )r   r   r(   r<   r|   ZDoesNotExist)r,   r   ZUserr   r1   r1   r2   	_get_userR  s    zUserTokenForm._get_userc                    st   t t|  }|dd }|dd }|s:t| jd | || _| jd u s`| j	
| j|spt| jd |S )Nr   r   r   )r$   r   r;   r<   r   rs   rt   r   
reset_userr   Zcheck_token)r,   r?   r   r   r/   r1   r2   r;   Z  s    zUserTokenForm.clean)r3   r4   r5   r   rj   r   r   r   r   r   r>   rt   r   r;   r6   r1   r1   r/   r2   r   F  s   r   )=
__future__r   r   	importlibr   Zdjangor   Zdjango.contrib.auth.tokensr   Zdjango.contrib.sites.shortcutsr   Zdjango.corer   r   Zdjango.urlsr	   Zdjango.utils.translationr
   r   r>   r   utilsr   r   r    r   r   r   r   Zmodelsr   r   r   r   r   r   r   r   r   r   r   r   objectr7   rj   r@   rL   ZFormrR   rv   r   r   r   r   r   r   r   r   r   r   r1   r1   r1   r2   <module>   s>   ,
{.n2*;