o
    Lfc                     @   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	 d dl
mZ d dlmZ d dlmZmZmZmZ d d	lmZ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 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* d dl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4 d dl5m6Z6m7Z7m8Z8 d dl9m:Z:m;Z; d dl<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZG d dlHmIZI d dlJmKZK d dlLmMZM d dlNmOZO d dlPmQZQmRZR dZSeedddd ZTdUd"d#ZUG d$d% d%eVZWG d&d' d'eVZXG d(d) d)eVZYG d*d+ d+eWeXe!ZZeZ[ Z\G d,d- d-eVZ]eeOd.d/d0d1G d2d3 d3eWe]eXe!Z^e^[ Z_G d4d5 d5eeYeZ`e`[ Zaeed0d1eeOd6d/d0d1ee*d7d8d9 d:d0d1G d;d< d<eXe!Zbeb[ Zceed0d1eeOd=d/d0d1G d>d? d?eXe!Zded[ Zeeed0d1eeOd=d/d0d1G d@dA dAeXe!Zfef[ ZgG dBdC dCeXe!Zheh[ ZiG dDdE dEeZjej[ ZkeeOdFd/d0d1G dGdH dHeXeYe!Zlel[ ZmG dIdJ dJeZnen[ ZoG dKdL dLeeYeZpep[ ZqG dMdN dNeZrer[ ZsG dOdP dPeZtet[ ZuG dQdR dRe!Zveed0d1G dSdT dTevZwew[ Zxd!S )V    )messages)REDIRECT_FIELD_NAME)login_required)get_current_site)PermissionDenied)validate_email)ValidationError)Http404HttpResponseHttpResponsePermanentRedirectHttpResponseRedirect)reversereverse_lazy)method_decorator)never_cache)sensitive_post_parameters)TemplateResponseMixinTemplateViewView)FormView)app_settings)r   signals)get_adapter)reauthentication_required)	AddEmailFormChangePasswordForm	LoginFormReauthenticateFormResetPasswordFormResetPasswordKeyFormSetPasswordForm
SignupFormUserTokenForm)EmailAddressEmailConfirmationEmailConfirmationHMAC)record_authenticationresume_request)complete_signupemit_email_changedget_login_redirect_urlget_next_redirect_urllogout_on_password_changepassthrough_next_redirect_urlperform_loginsend_email_confirmationsync_user_email_addressesurl_str_to_user_pkuser_display)	ratelimit)ImmediateHttpResponse)redirect)
rate_limit)get_form_classget_request_param_password_reset_keyoldpasswordpassword	password1	password2Nc                 C   sJ   t  }|| r#t|tst|tr|d }nd }|j| ||||d}|S )NLocation)formdataredirect_to)r   is_ajax
isinstancer   r   ajax_response)requestresponser?   r@   adapterrA    rH   V/var/www/html/humari/django-venv/lib/python3.10/site-packages/allauth/account/views.py_ajax_responseI   s   


rJ   c                       s$   e Zd Z fddZdd Z  ZS )RedirectAuthenticatedUserMixinc                    sJ   |j jrtjr|  }t|}t||S tt| j	|g|R i |}|S N)
useris_authenticatedr   AUTHENTICATED_LOGIN_REDIRECTSget_authenticated_redirect_urlr   rJ   superrK   dispatch)selfrE   argskwargsrA   rF   	__class__rH   rI   rR   Y   s   

z'RedirectAuthenticatedUserMixin.dispatchc                 C   s   | j }t| j|  |dS )N)urlredirect_field_name)rY   r*   rE   get_success_url)rS   rY   rH   rH   rI   rP   d   s   z=RedirectAuthenticatedUserMixin.get_authenticated_redirect_url)__name__
__module____qualname__rR   rP   __classcell__rH   rH   rV   rI   rK   X   s    rK   c                       sB   e Zd Z fddZdd Zd fdd	Zdd	 Zd
d Z  ZS )AjaxCapableProcessFormViewMixinc                    s<   t t| j|g|R i |}|  }t| j|||  dS N)r?   r@   )rQ   r_   getget_formrJ   rE   _get_ajax_data_if)rS   rE   rT   rU   rF   r?   rV   rH   rI   ra   n   s   
z#AjaxCapableProcessFormViewMixin.getc                 O   sF   |   }| |}| r| |}n| |}t| j|||  dS r`   )r7   rb   is_valid
form_validform_invalidrJ   rE   rc   )rS   rE   rT   rU   
form_classr?   rF   rH   rH   rI   postw   s   

z$AjaxCapableProcessFormViewMixin.postNc                    s.   t | dd }|d u rtt| |}|| _|S )N_cached_form)getattrrQ   r_   rb   ri   )rS   rg   r?   rV   rH   rI   rb      s
   z(AjaxCapableProcessFormViewMixin.get_formc                 C   s   t | j| jr|  S d S rL   )r   rE   rB   get_ajax_datarS   rH   rH   rI   rc      s
   z1AjaxCapableProcessFormViewMixin._get_ajax_data_ifc                 C   s   d S rL   rH   rl   rH   rH   rI   rk      s   z-AjaxCapableProcessFormViewMixin.get_ajax_datarL   )	r[   r\   r]   ra   rh   rb   rc   rk   r^   rH   rH   rV   rI   r_   m   s    	r_   c                   @   s   e Zd Zdd ZdS )LogoutFunctionalityMixinc                 C   s,   t | j}|| jtjd || j d S )Nzaccount/messages/logged_out.txt)r   rE   add_messager   SUCCESSlogout)rS   rG   rH   rH   rI   rp      s
   

zLogoutFunctionalityMixin.logoutN)r[   r\   r]   rp   rH   rH   rH   rI   rm      s    rm   c                       sn   e Zd ZeZdej ZdZe	Z
eee fddZ fddZdd Zd	d
 Zdd Z fddZ  ZS )	LoginViewzaccount/login.Nc                       t t| j|g|R i |S rL   )rQ   rq   rR   rS   rE   rT   rU   rV   rH   rI   rR         zLoginView.dispatchc                    s   t t|  }| j|d< |S )NrE   )rQ   rq   get_form_kwargsrE   rS   rU   rV   rH   rI   ru      s   
zLoginView.get_form_kwargsc                 C      t tjd| jS )Nloginr7   r   FORMSrg   rl   rH   rH   rI   r7         zLoginView.get_form_classc              
   C   sF   |   }z	|j| j|dW S  ty" } z	|jW  Y d }~S d }~ww )Nredirect_url)rZ   rx   rE   r4   rF   )rS   r?   success_urlerH   rH   rI   re      s   zLoginView.form_validc                 C      t | j| jp	| j}|S rL   r+   rE   rY   r~   rS   retrH   rH   rI   rZ         zLoginView.get_success_urlc                    s`   t t| jdi |}t| jtd| j}t| j| j}t| j}|	||| j|t
jd |S )Naccount_signup)
signup_urlsiterY   redirect_field_valueSOCIALACCOUNT_ENABLEDrH   )rQ   rq   get_context_datar-   rE   r   rY   r8   r   updateallauth_app_settingsr   )rS   rU   r   r   r   r   rV   rH   rI   r      s   
	zLoginView.get_context_data)r[   r\   r]   r   rg   r   TEMPLATE_EXTENSIONtemplate_namer~   r   rY   sensitive_post_parameters_mr   r   rR   ru   r7   re   rZ   r   r^   rH   rH   rV   rI   rq      s    
rq   c                       s6   e Zd Zdej Z fddZdd Zdd Z  Z	S )CloseableSignupMixinzaccount/signup_closed.c              
      s`   z|   s
|  W S W n ty  } z	|jW  Y d }~S d }~ww tt| j|g|R i |S rL   )is_openclosedr4   rF   rQ   r   rR   )rS   rE   rT   rU   r   rV   rH   rI   rR      s   
zCloseableSignupMixin.dispatchc                 C      t | j| jS rL   )r   rE   is_open_for_signuprl   rH   rH   rI   r      s   zCloseableSignupMixin.is_openc                 C   s   | j | jd}| jdi |S )N)rE   templaterH   )rE   template_name_signup_closedresponse_class)rS   response_kwargsrH   rH   rI   r      s   zCloseableSignupMixin.closed)
r[   r\   r]   r   r   r   rR   r   r   r^   rH   rH   rV   rI   r      s    r   signup)actionrR   )namec                       sn   e Zd Zdej ZeZeZ	dZ
eee fddZdd Zdd Zd	d
 Z fddZ fddZ  ZS )
SignupViewzaccount/signup.Nc                    rr   rL   )rQ   r   rR   rs   rV   rH   rI   rR      rt   zSignupView.dispatchc                 C   rw   )Nr   ry   rl   rH   rH   rI   r7     r{   zSignupView.get_form_classc                 C   r   rL   r   r   rH   rH   rI   rZ     r   zSignupView.get_success_urlc              
   C   s`   | | j\| _}|r|S zt| j| jtj|  W S  ty/ } z	|jW  Y d }~S d }~ww rL   )	try_saverE   rM   r(   r   EMAIL_VERIFICATIONrZ   r4   rF   )rS   r?   respr   rH   rH   rI   re     s   zSignupView.form_validc                    s   t t| jdi |}|d }| jjd}|r.dg}tjr#|d |D ]}||j	| _
q%t| jtd| j}| j}t| j}	t| j|}
||||
|	tjd |S )Nr?   account_verified_emailemailemail2account_login)	login_urlrY   r   r   r   rH   )rQ   r   r   rE   sessionra   r   SIGNUP_EMAIL_ENTER_TWICEappendfieldsinitialr-   r   rY   r   r8   r   r   r   )rS   rU   r   r?   r   
email_keys	email_keyr   rY   r   r   rV   rH   rI   r     s0   

	zSignupView.get_context_datac                    sZ   t   }| jjd}|r+zt| W n ty   | Y S w ||d< tjr+||d< |S )Nr   r   )	rQ   get_initialrE   GETra   r   r   r   r   )rS   r   r   rV   rH   rI   r   5  s   
zSignupView.get_initial)r[   r\   r]   r   r   r   r!   rg   r   rY   r~   r   r   r   rR   r7   rZ   re   r   r   r^   rH   rH   rV   rI   r      s    
r   c                   @   sh   e Zd Zdej Zdd Zdd Zdd Zdd	 Z	d
d Z
dddZdd Zdd Zdd Zdd ZdS )ConfirmEmailViewzaccount/email_confirm.c                 O   s   z|   | _| | j tjr| j|i |W S W n ty%   d | _Y nw |  }| js;t 	| j
r;t }d|_n| |}t| j
||  dS )Ni  r@   )
get_objectobjectlogout_other_userr   CONFIRM_EMAIL_ON_GETrh   r	   r   r   rB   rE   r
   status_coderender_to_responserJ   rk   )rS   rT   rU   ctxr   rH   rH   rI   ra   I  s   


zConfirmEmailView.getc                 C   s0   | j jjr| j jj|jjkr|   dS dS dS )z
        In the event someone clicks on an email confirmation link
        for one account while logged into another account,
        logout of the currently logged in account.
        N)rE   rM   rN   pkemail_addressuser_idrp   )rS   confirmationrH   rH   rI   r   Y  s   z"ConfirmEmailView.logout_other_userc                 O   s   |    | _}|| j}|s%t| j| jtjdd|jj	i | 
dS | | j t| j| jtjdd|jj	i tjrJ| |}|d urJ|S | 
dS )Nz.account/messages/email_confirmation_failed.txtr   Fz$account/messages/email_confirmed.txtT)r   r   confirmrE   r   rn   r   ERRORr   r   respondr   ro   r   LOGIN_ON_EMAIL_CONFIRMATIONlogin_on_confirm)rS   rT   rU   r   r   r   rH   rH   rI   rh   e  s,   






zConfirmEmailView.postc                 C   s&   |   }|s|  }| |S t|S rL   )get_redirect_urlr   r   r5   )rS   successr}   r   rH   rH   rI   r     s
   
zConfirmEmailView.respondc                 C   sZ   d}t | j| j}|rt|}|jj}||jkr+| jjjr+t| j|t	j
j| jdS dS )a  
        Simply logging in the user may become a security issue. If you
        do not take proper care (e.g. don't purge used email
        confirmations), a malicious person that got hold of the link
        will be able to login over and over again and the user is
        unable to do anything about it. Even restoring their own mailbox
        security will not help, as the links will still work. For
        password reset this is different, this mechanism works only as
        long as the attacker has access to the mailbox. If they no
        longer has access they cannot issue a password request and
        intercept it. Furthermore, all places where the links are
        listed (log files, but even Google Analytics) all of a sudden
        need to be secured. Purging the email confirmation once
        confirmed changes the behavior -- users will not be able to
        repeatedly confirm (in case they forgot that they already
        clicked the mail).

        All in all, opted for storing the user that is in the process
        of signing up in the session to avoid all of the above.  This
        may not 100% work in case the user closes the browser (and the
        session gets lost), but at least we're secure.
        Nr|   )r   rE   unstash_userr1   r   rM   r   is_anonymousr.   r   EmailVerificationMethodNONEr   )rS   r   user_pkuser_pk_strrM   rH   rH   rI   r     s   	z!ConfirmEmailView.login_on_confirmNc                 C   sZ   | j d }t|}|s+|d u r|  }z|j| d}W |S  tjy*   t w |S )Nkeyr   )	rU   r%   from_keyget_querysetra   lowerr$   DoesNotExistr	   )rS   querysetr   emailconfirmationrH   rH   rI   r     s   

zConfirmEmailView.get_objectc                 C   s   t j }|d}|S )Nemail_address__user)r$   objects	all_validselect_related)rS   qsrH   rH   rI   r     s   

zConfirmEmailView.get_querysetc                 C   s<   dt | ji}| jr| jjj|d< dt| jjji|d< |S )Ncan_confirmr   displayrM   )boolr   r   r   r2   rM   r   rH   rH   rI   rk     s   
zConfirmEmailView.get_ajax_datac                 K   sH   |}t | j}||| j| jo| jj d | jr"| jjj|d< |S )N)r   r   r   r   )r   rE   r   r   r   can_set_verifiedr   )rS   rU   r   r   rH   rH   rI   r     s   

z!ConfirmEmailView.get_context_datac                 C   r   rL   )r   rE   #get_email_confirmation_redirect_urlrl   rH   rH   rI   r     s   
z!ConfirmEmailView.get_redirect_urlrL   )r[   r\   r]   r   r   r   ra   r   rh   r   r   r   r   rk   r   r   rH   rH   rH   rI   r   F  s    
 
(	r   manage_emailTc                 C   s   t jS rL   )r   REAUTHENTICATION_REQUIREDrE   rH   rH   rI   <lambda>  s    r   )	allow_getenabledc                       s   e Zd Zejr	dndej ZeZe	dZ
dd Z fddZ fdd	Z fd
dZ fddZdd Zdd Zdd Zdd Z fddZdd Z  ZS )	EmailViewzaccount/email_change.zaccount/email.account_emailc                 C   rw   )N	add_emailry   rl   rH   rH   rI   r7     r{   zEmailView.get_form_classc                    s(   t |j tt| j|g|R i |S rL   )r0   rM   rQ   r   rR   rs   rV   rH   rI   rR     s   
zEmailView.dispatchc                    s   t t|  }| jj|d< |S NrM   )rQ   r   ru   rE   rM   rv   rV   rH   rI   ru     s   zEmailView.get_form_kwargsc                    sd   | | j}t| j}|| jtjdd|jd i tjj	| jj
j| j| jj
|d tt| |S )Nz,account/messages/email_confirmation_sent.txtr   senderrE   rM   r   )saverE   r   rn   r   INFOcleaned_datar   email_addedsendrM   rW   rQ   r   re   )rS   r?   r   rG   rV   rH   rI   re     s   
zEmailView.form_validc                    s   d }d|j v rtt| j|g|R i |}|S |j drQd|j v r)| |}nd|j v r4| |}n
d|j v r>| |}|pEt| 	 }t
|||  d}|S t| j}t
|||  d}|S )N
action_addr   action_sendaction_removeaction_primaryr   )POSTrQ   r   rh   ra   _action_send_action_remove_action_primaryr   rZ   rJ   rc   r~   )rS   rE   rT   rU   resrV   rH   rI   rh     s"   





zEmailView.postc                 C   sX   |j d }zt| W n
 ty   Y d S w z
tjj|j|dW S  tjy+   Y d S w )Nr   )rM   r   )r   r   r   r#   r   get_for_userrM   r   )rS   rE   r   rH   rH   rI   _get_email_address'  s   
zEmailView._get_email_addressc                 O   s*   |  |}|rt| j|j|jd d S d S )Nr   )r   r/   rE   rM   r   )rS   rE   rT   rU   r   rH   rH   rI   r   2  s   

zEmailView._action_sendc                 O   s   |  |}|rKt }||s||tjdd|ji d S |  tj	j
|jj||j|d ||tjdd|ji |d|jd|ji t|  S d S )Nz0account/messages/cannot_delete_primary_email.txtr   r   z"account/messages/email_deleted.txtzaccount/email/email_deleteddeleted_email)r   r   can_delete_emailrn   r   r   r   remover   email_removedr   rM   rW   ro   send_notification_mailr   rZ   )rS   rE   rT   rU   r   rG   rH   rH   rI   r   9  s<   

zEmailView._action_removec                 O   s   |  |}|rS|js tjj|jdd r t |t	j
d d S ztjj|jdd}W n tjy7   d }Y nw |  t }||t	jd t||| t|  S d S )NT)rM   verifiedz-account/messages/unverified_primary_email.txt)rM   primaryz&account/messages/primary_email_set.txt)r   r   r#   r   filterrM   existsr   rn   r   r   ra   r   set_as_primaryro   r)   r   rZ   )rS   rE   rT   rU   r   from_email_addressrG   rH   rH   rI   r   Y  s>   

zEmailView._action_primaryc                    s   t t| jdi |}ttjj| jjd	d |
  fddt D |dtj| jjd tjrL|
tj| jjtj| jjd |S )	N)rM   r   c                    s0   g | ]\}}d | |j pt dk|dqS )email_radio_   )idcheckedemailaddress)r   len).0ir   emailsrH   rI   
<listcomp>  s    z.EmailView.get_context_data.<locals>.<listcomp>r?   )emailaddressesemailaddress_radiosadd_email_formcan_add_email)new_emailaddresscurrent_emailaddressrH   )rQ   r   r   listr#   r   r   rE   rM   order_byr   	enumeratera   r  r   CHANGE_EMAILget_newget_verifiedrS   rU   r   rV   r
  rI   r   ~  s,   
zEmailView.get_context_datac                 C   s>   g }| j jj dD ]}||j|j|j|j	d q|S )Nr   )r  r   r   r   )
rE   rM   emailaddress_setallr  r   r   r   r   r   )rS   r@   r  rH   rH   rI   rk     s   zEmailView.get_ajax_data)r[   r\   r]   r   r  r   r   r   rg   r   r~   r7   rR   ru   re   rh   r   r   r   r   r   rk   r^   rH   rH   rV   rI   r     s"    
 %r   change_passwordc                       b   e Zd Zdej ZeZdd Ze	 fddZ
 fddZdd	 Z fd
dZ fddZ  ZS )PasswordChangeViewzaccount/password_change.c                 C   rw   )Nr  ry   rl   rH   rH   rI   r7     r{   z!PasswordChangeView.get_form_classc                    s2   | j j sttdS t j|g|R i |S )Naccount_set_passwordrE   rM   has_usable_passwordr   r   rQ   rR   rs   rV   rH   rI   rR        zPasswordChangeView.dispatchc                       t   }| jj|d< |S r   rQ   ru   rE   rM   rv   rV   rH   rI   ru        
z"PasswordChangeView.get_form_kwargsc                 C      | j r| j S t | jS rL   r~   r    get_password_change_redirect_urlrE   rl   rH   rH   rI   rZ        z"PasswordChangeView.get_success_urlc                    sl   |   t| j|j t| j}|| jtjd |d| jj t	j
j| jjj| j| jjd t |S )N%account/messages/password_changed.txtzaccount/email/password_changedr   rE   rM   )r   r,   rE   rM   r   rn   r   ro   r   r   password_changedr   rW   rQ   re   )rS   r?   rG   rV   rH   rI   re     s"   
zPasswordChangeView.form_validc                    $   t  jdi |}|d|d< |S )Nr?   password_change_formrH   rQ   r   ra   r  rV   rH   rI   r        z#PasswordChangeView.get_context_data)r[   r\   r]   r   r   r   r   rg   r7   r   rR   ru   rZ   re   r   r^   rH   rH   rV   rI   r    s    
r  c                       r  )PasswordSetViewzaccount/password_set.c                 C   rw   )Nset_passwordry   rl   rH   rH   rI   r7     r{   zPasswordSetView.get_form_classc                    s2   | j j rttdS t j|g|R i |S )Naccount_change_passwordr   rs   rV   rH   rI   rR     r"  zPasswordSetView.dispatchc                    r#  r   r$  rv   rV   rH   rI   ru     r%  zPasswordSetView.get_form_kwargsc                 C   r&  rL   r'  rl   rH   rH   rI   rZ     r)  zPasswordSetView.get_success_urlc                    sd   |   |j}t| j| t| j}|| jtjd tj	j
|j| j|d |d| t |S )Nz!account/messages/password_set.txtr+  zaccount/email/password_set)r   rM   r,   rE   r   rn   r   ro   r   password_setr   rW   r   rQ   re   )rS   r?   rM   rG   rV   rH   rI   re     s   

zPasswordSetView.form_validc                    r-  )Nr?   password_set_formrH   r/  r  rV   rH   rI   r     r0  z PasswordSetView.get_context_data)r[   r\   r]   r   r   r   r    rg   r7   r   rR   ru   rZ   re   r   r^   rH   rH   rV   rI   r1    s    
r1  c                       sJ   e Zd Zdej ZeZedZ	e
Zdd Z fddZ fddZ  ZS )	PasswordResetViewzaccount/password_reset.account_reset_password_donec                 C   rw   )Nreset_passwordry   rl   rH   rH   rI   r7   $  r{   z PasswordResetView.get_form_classc                    s@   t j| jd|jd  d}|r|S || j tt| |S )Nr8  r   )r   r   )	r3   consume_or_429rE   r   r   r   rQ   r6  re   )rS   r?   r429rV   rH   rI   re   '  s   zPasswordResetView.form_validc                    sJ   t t| jdi |}t| jtd| j}|d|d< |d|i |S )Nr   r?   password_reset_formr   rH   )	rQ   r6  r   r-   rE   r   rY   ra   r   )rS   rU   r   r   rV   rH   rI   r   2  s   z"PasswordResetView.get_context_data)r[   r\   r]   r   r   r   r   rg   r   r~   r   rY   r7   re   r   r^   rH   rH   rV   rI   r6    s    
r6  c                   @      e Zd Zdej ZdS )PasswordResetDoneViewzaccount/password_reset_done.Nr[   r\   r]   r   r   r   rH   rH   rH   rI   r=  A      r=  reset_password_from_keyc                       sb   e Zd Zdej ZeZedZ	dZ
dd Z fddZ fdd	Z fd
dZ fddZ  ZS )PasswordResetFromKeyViewz account/password_reset_from_key.$account_reset_password_from_key_donezset-passwordc                 C   rw   )Nr@  ry   rl   rH   rH   rI   r7   Q  s   
z'PasswordResetFromKeyView.get_form_classc           
         s,  || _ || _ttjdt}t |}| j| jks|r`|s&| j j	
td| _||| jdd}| r_|j| _| j jjrP| j jj| jjkrP|   | j| j j	t< tt| j||| jfi |S n"||| jdd}| r| j| j j	t< | j j| j| j}t|S d | _| | jdd}	t| j |	|dS )N
user_token uidb36r   r   T)
token_fail)r?   )rE   r   r7   r   rz   r"   r   rB   reset_url_keyr   ra   INTERNAL_RESET_SESSION_KEYrd   
reset_userrM   rN   r   rp   rQ   rA  rR   pathreplacer5   r   r   rJ   )
rS   rE   rF  r   rU   user_token_form_classrB   
token_formr}   rF   rV   rH   rI   rR   V  s>   
z!PasswordResetFromKeyView.dispatchc                    s<   t t| jdi |}td| jd | jd dd|d< |S )Naccount_reset_password_from_keyrF  r   rE  )rU   
action_urlrH   )rQ   rA  r   r   rU   r  rV   rH   rI   r     s   
z)PasswordResetFromKeyView.get_context_datac                    s&   t t|  }| j|d< | j|d< |S )NrM   temp_key)rQ   rA  ru   rJ  r   rv   rV   rH   rI   ru     s   

z(PasswordResetFromKeyView.get_form_kwargsc                    s   |   t| j}| jr| jj D ]}|j| j|jd q|| jt	j
d tjj| jj| j| jd |d| j tjrHt| j| jtjdS tt| |S )Nr   r*  r+  zaccount/email/password_reset)email_verification)r   r   rE   rJ  r  r  #_delete_login_attempts_cached_emailr   rn   r   ro   r   password_resetr   rW   r   r   LOGIN_ON_PASSWORD_RESETr.   r   rQ   rA  re   )rS   r?   rG   r   rV   rH   rI   re     s2   
z#PasswordResetFromKeyView.form_valid)r[   r\   r]   r   r   r   r   rg   r   r~   rH  r7   rR   r   ru   re   r^   rH   rH   rV   rI   rA  H  s    
,rA  c                   @   r<  )PasswordResetFromKeyDoneViewz%account/password_reset_from_key_done.Nr>  rH   rH   rH   rI   rV    s    rV  c                   @   s:   e Zd Zdej ZeZdd Zdd Z	dd Z
dd	 Zd
S )
LogoutViewzaccount/logout.c                 O   sV   t jr| j|i |S | jjjst|  }t| j|S | 	 }| 
|}t| j|S rL   )r   LOGOUT_ON_GETrh   rE   rM   rN   r5   r   rJ   r   r   )rS   rT   rU   rF   r   rH   rH   rI   ra     s   

zLogoutView.getc                 O   s.   |   }| jjjr|   t|}t| j|S rL   )r   rE   rM   rN   rp   r5   rJ   )rS   rT   rU   rX   rF   rH   rH   rI   rh     s
   
zLogoutView.postc                 K   s(   |}t | j| j}|| j|d |S )N)rY   r   )r8   rE   rY   r   )rS   rU   r   r   rH   rH   rI   r     s   zLogoutView.get_context_datac                 C   s    t | j| jpt| j| jS rL   )r+   rE   rY   r   get_logout_redirect_urlrl   rH   rH   rI   r     s
   zLogoutView.get_redirect_urlN)r[   r\   r]   r   r   r   r   rY   ra   rh   r   r   rH   rH   rH   rI   rW    s    

rW  c                   @   r<  )AccountInactiveViewzaccount/account_inactive.Nr>  rH   rH   rH   rI   rZ    r?  rZ  c                   @   r<  )EmailVerificationSentViewzaccount/verification_sent.Nr>  rH   rH   rH   rI   r[    r?  r[  c                       sX   e Zd ZeZ fddZdd Zdd Zdd Z fd	d
Z	 fddZ
dd Z  ZS )BaseReauthenticateViewc                    s>   |  |}|r	|S | |}|r|S t j|g|R i |S rL   )(_check_reauthentication_method_available_check_ratelimitrQ   rR   )rS   rE   rT   rU   r   rV   rH   rI   rR     s   

zBaseReauthenticateView.dispatchc                 C   s   t j| jd| jjdS )Nreauthenticate)r   rM   )r3   r9  rE   rM   )rS   rE   rH   rH   rI   r^    s
   z'BaseReauthenticateView._check_ratelimitc                    sT   t  | jj}t fdd|D rd S |stdt |d d | j}t|S )Nc                    s   g | ]	}|d   j kqS )rX   )rK  )r  mr   rH   rI   r    s    zSBaseReauthenticateView._check_reauthentication_method_available.<locals>.<listcomp>zReauthentication not availabler   rX   )	r   get_reauthentication_methodsrE   rM   anyr   r-   rY   r   )rS   rE   methodsrX   rH   r   rI   r]    s   z?BaseReauthenticateView._check_reauthentication_method_availablec                 C   s(   t | j| j}|st| j| j}|S rL   )r+   rE   rY   r   r*   )rS   rX   rH   rH   rI   rZ     s   z&BaseReauthenticateView.get_success_urlc                    s.   t | j| jj t| j}|r|S t |S rL   )r&   rE   rM   r'   rQ   re   )rS   r?   rF   rV   rH   rI   re     s
   
z!BaseReauthenticateView.form_validc                    s<   t  jdi |}t| j| j}|| j||  d |S )N)rY   r   reauthentication_alternativesrH   )rQ   r   r8   rE   rY   r   !get_reauthentication_alternatives)rS   rU   r   r   rV   rH   rI   r   %  s   z'BaseReauthenticateView.get_context_datac                 C   sn   t  | jj}g }|D ] }t|}| jj|d krqt| j|d | j|d< || qt	|dd d}|S )NrX   c                 S   s   | d S )NdescriptionrH   )altrH   rH   rI   r   <  s    zJBaseReauthenticateView.get_reauthentication_alternatives.<locals>.<lambda>r   )
r   ra  rE   rM   dictrK  r-   rY   r   sorted)rS   rc  altsmethodrg  rH   rH   rI   re  1  s   z8BaseReauthenticateView.get_reauthentication_alternatives)r[   r\   r]   r   rY   rR   r^  r]  rZ   re   r   re  r^   rH   rH   rV   rI   r\    s    	r\  c                       s2   e Zd ZeZdej Zdd Z fddZ	  Z
S )ReauthenticateViewzaccount/reauthenticate.c                 C   rw   )Nr_  ry   rl   rH   rH   rI   r7   E  r{   z!ReauthenticateView.get_form_classc                    r#  r   r$  r   rV   rH   rI   ru   H  r%  z"ReauthenticateView.get_form_kwargs)r[   r\   r]   r   rg   r   r   r   r7   ru   r^   rH   rH   rV   rI   rl  @  s
    
rl  )NN)ydjango.contribr   django.contrib.authr   django.contrib.auth.decoratorsr   django.contrib.sites.shortcutsr   django.core.exceptionsr   django.core.validatorsr   django.formsr   django.httpr	   r
   r   r   django.urlsr   r   django.utils.decoratorsr   django.views.decorators.cacher   django.views.decorators.debugr   django.views.generic.baser   r   r   django.views.generic.editr   allauthr   r   allauth.accountr   allauth.account.adapterr   allauth.account.decoratorsr   allauth.account.formsr   r   r   r   r   r   r    r!   r"   allauth.account.modelsr#   r$   r%    allauth.account.reauthenticationr&   r'   allauth.account.utilsr(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   allauth.corer3   allauth.core.exceptionsr4   allauth.core.internal.httpr5   allauth.decoratorsr6   allauth.utilsr7   r8   rI  r   rJ   r   rK   r_   rm   rq   as_viewrx   r   r   r   r   confirm_emailr   r   r  password_changer1  r4  r6  rT  r=  password_reset_donerA  password_reset_from_keyrV  password_reset_from_key_donerW  rp   rZ  account_inactiver[  email_verification_sentr\  rl  r_  rH   rH   rH   rI   <module>   s    ,4
'
	8
R 
 >
2
/ 
l&
H