U
    F'd_                     @   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                    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)Zflat|)superr   _make_hash_valuer   r   setupdater   objectsfilterZvalues_listjoinsorted)selfr!   	timestampretr"   Zemails	__class__ Y/var/www/html/crackeverytest/cet_env/lib/python3.8/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;   6   s    

zPasswordVerificationMixin.clean)r3   r4   r5   r;   r6   r1   r1   r/   r2   r7   5   s   r7   c                       s   e Zd Z fddZ  ZS )PasswordFieldc                    sb   | dtj}tj|d|did|d< | dd }|d k	rL||d jd< tt| j	|| 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|| d | _d S )Nnew-passwordrF   )r$   rL   rH   r!   r,   rI   rJ   r/   r1   r2   rH   O   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;   T   s    zSetPasswordField.clean)r3   r4   r5   rH   r;   r6   r1   r1   r/   r2   rL   N   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|| tjtjkrXt	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stt	j
tddd
d}t	jtdd|d}|| jd< t| dddg tjd k	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passwordremember)rG   rW   r$   rR   rH   r   AUTHENTICATION_METHODr   EMAILr   	TextInputr>   
EmailFieldUSERNAME	CharFieldr   USERNAME_EMAILAssertionErrorr   fieldsr   SESSION_REMEMBER)r,   rI   rJ   Zlogin_widgetZlogin_fieldr/   r1   r2   rH   j   sD     

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   s2   zt | d}W n tjk
r,   d}Y nX |S )NTF)r   Zvalidate_emailr   ValidationError)r,   rb   r.   r1   r1   r2   ro      s    

zLoginForm._is_login_emailc                    s   t t|   | jrd S |  }t| jj| jf|}|rB|| _nLt	j
}|t	jjkrz| jd }| |rrt	jj}nt	jj}t| jd|  | jS )Nrb   z%s_password_mismatch)r$   rR   r;   Z_errorsrq   r   rW   Zauthenticater!   r   re   r   rk   r?   ro   rf   ri   r   rt   error_messages)r,   rp   r!   Zauth_methodrb   r/   r1   r2   r;      s"    


zLoginForm.cleanc                 C   s`   |   d}t|| jtj||d}tj}|d kr<| jd }|rP|j	tj
 n|j	d |S )Nr"   )Zemail_verificationredirect_urlr"   rd   r   )rq   r<   r   r!   r   EMAIL_VERIFICATIONrn   r?   ZsessionZ
set_expiryZSESSION_COOKIE_AGE)r,   rW   rv   r"   r.   rd   r1   r1   r2   rb      s    
zLoginForm.login)N)r3   r4   r5   r@   r>   rc   r   ZBooleanFieldrd   r!   ru   rH   rq   rs   ro   r;   rb   r6   r1   r1   r/   r2   rR   Z   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   ry   r1   r1   r1   r2   rx      s   rx   c               
   C   s   t js
tS zt jdd\} }W n$ tk
rD   tdt j Y nX zt| }W n4 tk
r } ztd| |f W 5 d}~X Y nX zt	||}W n& t
k
r   td| |f Y nX 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" classry   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_CLASSrx   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                    sP  | dtj}| dtj| _tjo0tjtjjk| _	d| _
tt| j|| | jd }t |_|jt|j t|j|jjd< ddddd	g}tjrtjtd
tjdtdddd| jd< |rtd| jd _d| jd _n@td| jd _d| jd _d| jd j_| jr$ddddd	g}| js4| jd= t | t!| dd pH| d S )Nemail_requiredusername_requiredFr_   Z	maxlengthr"   email2r8   r9   zE-mail (again)zE-mail address confirmationrZ   rB   r[   r]   r\   TzE-mail (optional)field_order)"rG   r   ZEMAIL_REQUIREDZUSERNAME_REQUIREDr   PREVENT_ENUMERATIONrw   ZEmailVerificationMethodZ	MANDATORYprevent_enumerationaccount_already_existsr$   r   rH   rm   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     sh     

	 zBaseSignupForm.__init__c                 C   s   | j d }t |}|S )Nr_   )r?   r   clean_usernamerP   r1   r1   r2   r   Z  s    
zBaseSignupForm.clean_usernamec                 C   sX   | j d }t |}|rTtjrTz| |}W n$ tjk
rR   | jsH d| _	Y nX |S )Nr"   T)
r?   r   clean_emailr   UNIQUE_EMAILvalidate_unique_emailr   rt   r   r   rP   r1   r1   r2   r   c  s    

zBaseSignupForm.clean_emailc                 C   s   t  |S N)r   r   rP   r1   r1   r2   r   o  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;   r  s    

zBaseSignupForm.cleanc                    sF   t t| }t|dr,t|jr,||| ntdt || d S )Nry   r|   )	r$   r   r   callablery   r   r   r   r{   )r,   rW   r!   Zcustom_formr/   r1   r2   custom_signup{  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*   
=		r   c                       s8   e Zd Z fddZ fddZdd Zdd Z  ZS )	
SignupFormc                    s^   t t| j|| ttddd| jd< tjrDttddd| jd< t| drZt	| | j
 d S )NrS   rM   rU   r8   Password (again)r9   r   )r$   r   rH   r@   r>   rm   r   SIGNUP_PASSWORD_ENTER_TWICEr   r   r   rN   r/   r1   r2   rH     s      
zSignupForm.__init__c              
      s   t t|   t }| }t|| jd t|| jd | jd}|rzt j	||d W n0 t
jk
r } z| d| W 5 d }~X Y nX tjrd| jkrd| jk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   rt   r=   r   r   r>   )r,   UserZ
dummy_userrc   r   r/   r1   r2   r;     s.    zSignupForm.cleanc                 C   sP   | j r| | d S t|}||}||||  | || t||g  |S r   )r   !_send_account_already_exists_mailr   Znew_userZ	save_userr   r   )r,   rW   adapterr!   r1   r1   r2   r{     s    

zSignupForm.savec                 C   sP   t |td}t |td}| jd }|t||||d}t|d|| d S )Naccount_signupZaccount_reset_passwordr"   )rW   current_siter"   
signup_urlpassword_reset_urlz$account/email/account_already_exists)r   r	   r?   r   r   	send_mail)r,   rW   r   r   r"   contextr1   r1   r2   r     s"     
  z,SignupForm._send_account_already_exists_mail)r3   r4   r5   rH   r;   r{   r   r6   r1   r1   r/   r2   r     s   r   c                       s   e Zd Zd fdd	Z  ZS )UserFormNc                    s   || _ tt| j|| 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>  s      z,AddEmailForm.clean_email.<locals>.<listcomp>c                    s   g | ]}|j  jj kr|qS r1   r   r   r   r1   r2   r     s      r   r   r   )r?   r   r   r>   r   r   rt   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   r{     s       zAddEmailForm.saveN)
r3   r4   r5   r   rh   r>   rg   r"   r   r{   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 PasswordrC   New Password (again)c                    s$   t t| j|| | j| jd _d S Nr8   )r$   r   rH   r!   rm   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   rt   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   r{     s    zChangePasswordForm.save)r3   r4   r5   r@   r>   r   rL   r8   r9   rH   r   r{   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|| | j| jd _d S r   )r$   r   rH   r!   rm   rN   r/   r1   r2   rH     s    zSetPasswordForm.__init__c                 C   s   t  | j| jd  d S r   r   r   r1   r1   r2   r{   #  s    zSetPasswordForm.saver3   r4   r5   rL   r>   r8   r@   r9   rH   r{   r6   r1   r1   r/   r2   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 )ResetPasswordFormr\   Tr"   rX   rY   r[   r   c                 C   sH   | j d }t |}t|dd| _| js>tjs>t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   r   r   rt   r>   )r,   r"   r1   r1   r2   r   5  s    
zResetPasswordForm.clean_emailc                 K   s6   | j d }| js| || n| j||| jf| |S )Nr"   )r?   r   _send_unknown_account_mail_send_password_reset_mail)r,   rW   rJ   r"   r1   r1   r2   r{   ?  s
    
zResetPasswordForm.savec                 C   s6   t |td}t||||d}t|d|| d S )Nr   )r   r"   rW   r   zaccount/email/unknown_account)r   r	   r   r   r   )r,   rW   r"   r   r   r1   r1   r2   r   G  s    z,ResetPasswordForm._send_unknown_account_mailc                 K   s   | dt}|D ]t}||}t|}tdt||dd}	t||	}
t|||
|||d}tj	t
jkrrt||d< t|d|| qd S )Ntoken_generatorZaccount_reset_password_from_key)uidb36key)rJ   )r   r!   r   uidr   rW   r_   z account/email/password_reset_key)r<   default_token_generatorZ
make_tokenr   r	   dictr   r   r   re   r   rf   r   r   r   )r,   rW   r"   r   rJ   r   r!   temp_keyr   pathurlr   r1   r1   r2   r   Q  s.    


	  z+ResetPasswordForm._send_password_reset_mailN)r3   r4   r5   r   rh   r>   rg   r"   r   r{   r   r   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                    s@   | dd | _| dd | _tt| j|| | j| jd _d S )Nr!   r   r8   )rG   r!   r   r$   r   rH   rm   rN   r/   r1   r2   rH   y  s    zResetPasswordKeyForm.__init__c                 C   s   t  | j| jd  d S r   r   r   r1   r1   r2   r{     s    zResetPasswordKeyForm.saver   r1   r1   r/   r2   r   t  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k
r:   Y d S X d S )N)r   )r   r   r(   r<   r~   ZDoesNotExist)r,   r   r   r   r1   r1   r2   	_get_user  s    zUserTokenForm._get_userc                    st   t t|  }|dd }|dd }|s:t| jd | || _| jd ks`| j	
| j|spt| jd |S )Nr   r   r   )r$   r   r;   r<   r   rt   ru   r   
reset_userr   Zcheck_token)r,   r?   r   r   r/   r1   r2   r;     s     zUserTokenForm.clean)r3   r4   r5   r   rj   r   r   r   r   r   r>   ru   r   r;   r6   r1   r1   r/   r2   r     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   rx   r   r   r   r   r   r   r   r   r   r   r1   r1   r1   r2   <module>   s>   ,
{.K*M