o
    ˷eW                     @   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                          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__ L/var/www/ideatree/venv/lib/python3.10/site-packages/allauth/account/forms.pyr'   $   s   
z6EmailAwarePasswordResetTokenGenerator._make_hash_value)__name__
__module____qualname__r'   __classcell__r5   r5   r3   r6   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_)r/   cleaned_datar=   r>   r3   r5   r6   r@   6   s   

zPasswordVerificationMixin.clean)r7   r8   r9   r@   r:   r5   r5   r3   r6   r<   5   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)rF   attrswidgetautocomplete)
popr   PASSWORD_INPUT_RENDER_VALUEr   PasswordInputrA   rI   r&   rE   __init__)r/   argskwargsrF   rK   r3   r5   r6   rO   @   s   
zPasswordField.__init__r7   r8   r9   rO   r:   r5   r5   r3   r6   rE   ?   r;   rE   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-passwordrK   )r&   rS   rO   r"   r/   rP   rQ   r3   r5   r6   rO   O   s   
zSetPasswordField.__init__c                    s&   t t| |}t j|| jd}|S )Nr!   )r&   rS   r@   r   clean_passwordr"   r/   valuer3   r5   r6   r@   T   s   zSetPasswordField.clean)r7   r8   r9   rO   r@   r:   r5   r5   r3   r6   rS   N   s    rS   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rH   rK   zRemember MeF)rH   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.)account_inactiveemail_password_mismatch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}n:tjtjkrKt	j
tdd	d
d}t	jtd|t d}ntjtjksSJ 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 d S )Nrequestr#   E-mail addresstyperG   rK   rI   E-mailrH   rJ   UsernameusernamerG   rK   )rH   rJ   
max_lengthzUsername or e-mailzfield labelLoginlogin)rm   passwordrememberro   )rL   ra   r&   rY   rO   r   AUTHENTICATION_METHODr   EMAILr   	TextInputrC   
EmailFieldUSERNAME	CharFieldr   USERNAME_EMAILr   fieldsr   SESSION_REMEMBER)r/   rP   rQ   login_widgetlogin_fieldr3   r5   r6   rO   j   sB   


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.
        rm   r#   ri   rn   )rD   r   rp   r   rq   rt   _is_login_email)r/   credentialsrm   r5   r5   r6   user_credentials   s   



zLoginForm.user_credentialsc                 C   s   | j d }| S )Nrm   )rD   strip)r/   rm   r5   r5   r6   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)r/   rm   r1   r5   r5   r6   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|  )Nrm   z%s_password_mismatch)r&   rY   r@   _errorsr}   r   ra   authenticater"   r   rp   r   rv   rD   r{   rq   rt   r   r   error_messages)r/   r|   r"   auth_methodrm   r3   r5   r6   r@      s"   


zLoginForm.cleanc                 C   sb   |   d}t|| jtj||d}tj}|d u r| jd }|r)|j	tj
 |S |j	d |S )Nr#   )email_verificationredirect_urlr#   ro   r   )r}   rA   r   r"   r   EMAIL_VERIFICATIONrx   rD   session
set_expirySESSION_COOKIE_AGE)r/   ra   r   r#   r1   ro   r5   r5   r6   rm      s    
zLoginForm.loginN)r7   r8   r9   rE   rC   rn   r   BooleanFieldro   r"   r   rO   r}   r   r{   r@   rm   r:   r5   r5   r3   r6   rY   Z   s$    
%rY   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.
        Nr5   )r/   ra   r"   r5   r5   r6   signup   s   z_DummyCustomSignupForm.signupN)r7   r8   r9   r   r5   r5   r5   r6   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skt|drftd	t |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   saveLThe custom signup form must offer a `def signup(self, request, user)` methodz7The custom signup form must implement a "signup" method)r   SIGNUP_FORM_CLASSr   rsplit
ValueErrorr   ImproperlyConfiguredr   ImportErrorgetattrAttributeErrorhasattrwarningswarnDeprecationWarning)	fc_modulefc_classnamemodefc_classr5   r5   r6   _base_signup_form_class   sF   



	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 )BaseSignupFormrh   ri   rj   re   )rH   
min_lengthrJ   r#   rb   rc   )rJ   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rRtjtdtjdtdd	d
d| jd< |rctd| jd _d| jd _ntd| jd _d| jd _d| jd j_| jrg d}| js| jd= t| t| dd p| d S )Nemail_requiredusername_requiredri   	maxlength)r#   email2ri   r=   r>   zE-mail (again)r#   zE-mail address confirmationrd   rG   re   rg   r   rf   TzE-mail (optional)F)ri   r#   r   r=   r>   field_order)rL   r   EMAIL_REQUIREDUSERNAME_REQUIREDr   r&   r   rO   rw   r   rk   r   appendMaxLengthValidatorstrrJ   rI   SIGNUP_EMAIL_ENTER_TWICEr   rs   rC   rr   r
   rH   r]   is_requiredr   r   )r/   rP   rQ   r   username_fielddefault_field_orderr3   r5   r6   rO     sD   

	zBaseSignupForm.__init__c                 C   s   | j d }t |}|S )Nri   )rD   r   clean_usernamerW   r5   r5   r6   r   R  s   
zBaseSignupForm.clean_usernamec                 C   s.   | j d }t |}|rtjr| |}|S Nr#   )rD   r   clean_emailr   UNIQUE_EMAILvalidate_unique_emailrW   r5   r5   r6   r   W  s
   


zBaseSignupForm.clean_emailc                 C   s   t  |S r   )r   r   rW   r5   r5   r6   r   ^  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   r@   r   r   rA   rB   rC   )r/   rD   r#   r   r3   r5   r6   r@   a  s   

zBaseSignupForm.cleanc                    sH   t t| }t|drt|jr||| d S tdt || d S )Nr   r   )	r&   r   r   callabler   r   r   r   r   )r/   ra   r"   custom_formr3   r5   r6   custom_signupj  s   
zBaseSignupForm.custom_signup)r7   r8   r9   r   ru   rC   r   USERNAME_MIN_LENGTHrr   ri   rs   r#   rO   r   r   r   r@   r   r:   r5   r5   r3   r6   r     s,    
5	r   c                       s0   e Zd Z fddZ fddZdd Z  ZS )
SignupFormc                    sf   t t| j|i | ttddd| jd< tjr$ttddd| jd< t| dr1t	| | j
 d S d S )NrZ   rT   r\   r=   Password (again)r>   r   )r&   r   rO   rE   rC   rw   r   SIGNUP_PASSWORD_ENTER_TWICEr   r   r   rU   r3   r5   r6   rO   z  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 )Nri   r#   r=   r!   r>   r?   )r&   r   r@   r   r   rD   rA   r   r   rV   r   r   rB   r   r   rC   )r/   User
dummy_userrn   r   r3   r5   r6   r@     s.   

zSignupForm.cleanc                 C   s<   t |}||}||||  | || t||g  |S r   )r   new_user	save_userr   r   )r/   ra   adapterr"   r5   r5   r6   r     s   
zSignupForm.save)r7   r8   r9   rO   r@   r   r:   r5   r5   r3   r6   r   y  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   rO   )r/   r"   rP   rQ   r3   r5   r6   rO     s   zUserForm.__init__r   rR   r5   r5   r3   r6   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 )AddEmailFormrf   Tr#   rb   r   re   rH   r]   rJ   c                    s    j d }t |}tdtdtdd}t|} fdd|D } fdd|D }|r6t|d	 |rBtjrBt|d
 t	j
 jsSt|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 r5   pkr"   .0ur/   r5   r6   
<listcomp>      z,AddEmailForm.clean_email.<locals>.<listcomp>c                    s   g | ]}|j  jj kr|qS r5   r   r   r   r5   r6   r     r   r   r   r   )rD   r   r   rC   r   r   r   r   r   r   r*   can_add_emailr"   MAX_EMAIL_ADDRESSES)r/   rX   errorsuserson_this_accounton_diff_accountr5   r   r6   r     s,   
	
zAddEmailForm.clean_emailc                 C   s   t jj|| j| jd ddS )Nr#   T)confirm)r   r*   	add_emailr"   rD   )r/   ra   r5   r5   r6   r     s   zAddEmailForm.saveN)
r7   r8   r9   r   rs   rC   rr   r#   r   r   r5   r5   r5   r6   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 Passwordr[   r\   New PasswordrH   New Password (again)c                    (   t t| j|i | | j| jd _d S Nr=   )r&   r   rO   r"   rw   rU   r3   r5   r6   rO        zChangePasswordForm.__init__c                 C   s,   | j | jdsttd| jd S )Noldpasswordz"Please type your current password.)r"   check_passwordrD   rA   r   r   rC   r   r5   r5   r6   clean_oldpassword  s   
z$ChangePasswordForm.clean_oldpasswordc                 C      t  | j| jd  d S r   r   set_passwordr"   rD   r   r5   r5   r6   r        zChangePasswordForm.save)r7   r8   r9   rE   rC   r   rS   r=   r>   rO   r   r   r:   r5   r5   r3   r6   r     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 )SetPasswordFormrZ   r   r   c                    r   r   )r&   r   rO   r"   rw   rU   r3   r5   r6   rO     r   zSetPasswordForm.__init__c                 C   r   r   r   r   r5   r5   r6   r     r   zSetPasswordForm.saver7   r8   r9   rS   rC   r=   rE   r>   rO   r   r:   r5   r5   r3   r6   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 )ResetPasswordFormrf   Tr#   rb   rc   re   r   c                 C   sH   | j d }t |}t|dd| _| jstjstt	d| j d S )Nr#   T)	is_activez6The e-mail address is not assigned to any user account)
rD   r   r   r   r   r   PREVENT_ENUMERATIONr   r   rC   )r/   r#   r5   r5   r6   r     s   

zResetPasswordForm.clean_emailc                 K   s<   | j d }| js| || |S | j||| jfi | |S r   )rD   r   _send_unknown_account_mail_send_password_reset_mail)r/   ra   rQ   r#   r5   r5   r6   r     s   
zResetPasswordForm.savec                 C   s6   t |td}t||||d}t|d|| d S )Naccount_signup)current_siter#   ra   
signup_urlzaccount/email/unknown_account)r   r	   r   r   	send_mail)r/   ra   r#   r   contextr5   r5   r6   r      s   z,ResetPasswordForm._send_unknown_account_mailc                 K   s   | dt}|D ]6}||}tdtt||dd}t||}	t|||	|d}
tj	t
jkr5t||
d< t|d||
 qd S )Ntoken_generatoraccount_reset_password_from_key)uidb36key)rQ   )r   r"   password_reset_urlra   ri   z account/email/password_reset_key)rA   default_token_generator
make_tokenr	   dictr   r   r   r   rp   r   rq   r   r   r   )r/   ra   r#   r   rQ   r   r"   temp_keypathurlr   r5   r5   r6   r   *  s&   

z+ResetPasswordForm._send_password_reset_mailN)r7   r8   r9   r   rs   rC   rr   r#   r   r   r   r   r5   r5   r5   r6   r      s    

r   c                       r   )ResetPasswordKeyFormr   r   r   c                    sD   | dd | _| dd | _tt| j|i | | j| jd _d S )Nr"   r   r=   )rL   r"   r   r&   r  rO   rw   rU   r3   r5   r6   rO   O  s   zResetPasswordKeyForm.__init__c                 C   r   r   r   r   r5   r5   r6   r   U  r   zResetPasswordKeyForm.saver   r5   r5   r3   r6   r  J  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*   rA   r   DoesNotExist)r/   r   r   r   r5   r5   r6   	_get_usere  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  r@   rA   r   r   r   r  
reset_userr   check_token)r/   rD   r   r   r3   r5   r6   r@   m  s   zUserTokenForm.clean)r7   r8   r9   r   ru   r   r   r  r   r   rC   r   r  r@   r:   r5   r5   r3   r6   r  Y  s    r  )=
__future__r   r   	importlibr   djangor   django.contrib.auth.tokensr   django.contrib.sites.shortcutsr   django.corer   r   django.urlsr	   django.utils.translationr
   r   rC   r   utilsr   r   r    r   r   r   r   modelsr   r   r   r   r   r   r   r   r   r   r    r   objectr<   ru   rE   rS   FormrY   r   r   r   r   r   r   r   r   r   r  r  r5   r5   r5   r6   <module>   s@    ,
{.n5*J