o
    h                  	   @   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mZ d dl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 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*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z8 d dl9m:Z:m;Z; d dl<m=Z= d dl>m?Z?m@Z@mAZAmBZBmCZCmDZD d dlEmFZFmGZGmHZH d dlImJZJmKZKmLZLmMZM d dlNmOZO d dlPmQZQ d dlRmSZS d dlTmUZU d dlVmWZW d dlXmYZY d dlZm[Z[ dZ\eed d!d"d#Z]G d$d% d%eBeCe?eZ^e^_ Z`G d&d' d'eCe@eBe?eZaea_ ZbG d(d) d)eaZcec_ Zdee:d*d+G d,d- d-eBeAeZeee_ Zfeed*d+eeYd.d/d*d+G d0d1 d1e?eZgeg_ Zheed*d+eeYd2d/d*d+G d3d4 d4e?eBeZiei_ Zjeed*d+eeYd2d/d*d+G d5d6 d6e?eBeZkek_ Zlee:d*d+G d7d8 d8eBe?eZmem_ Znee:d*d+G d9d: d:eZoeo_ ZpeeYd;d/d*d+ee:d*d+G d<d= d=e?eBeAeZqeq_ Zree:d*d+G d>d? d?eZses_ ZteeYd;d/d*d+ee:d*d+G d@dA dAeBeZueu_ ZvG dBdC dCeBeZwew_ ZxG dDdE dEeBeAeZyey_ Zzee:d*d+G dFdG dGeZ{e{_ Z|ee:d*d+G dHdI dIeZ}G dJdK dKeBeZ~ee:d*d+dLdM ZG dNdO dOeBeZeed*d+G dPdQ dQeZe_ ZG dRdS dSeCeBeZe_ ZdTdU Zee;eKje dVd*d+G dWdX dXeBeZe_ ZG dYdZ dZeBeZee;eMjd[dVd*d+G d\d] d]eZG d^d_ d_eZee:d*d+d`da Zeed*d+eeYdbd/d*d+G dcdd ddeZe_ ZdeS )f    )messages)login_required)get_current_site)PermissionDenied)validate_email)FormValidationError)Http404HttpResponseHttpResponseRedirect)reversereverse_lazy)method_decorator)cached_property)never_cache)sensitive_post_parameters)TemplateView)FormViewapp_settings)get_adapter)AddEmailFormChangeEmailFormChangePasswordFormChangePhoneForm ConfirmEmailVerificationCodeFormConfirmLoginCodeFormConfirmPasswordResetCodeForm	LoginFormReauthenticateFormRequestLoginCodeFormResetPasswordFormResetPasswordKeyFormSetPasswordForm
SignupFormUserTokenFormVerifyPhoneForm)flows)login_not_requiredlogin_stage_required)"send_verification_email_to_address)AjaxCapableProcessFormViewMixinCloseableSignupMixinLogoutFunctionalityMixinNextRedirectMixinRedirectAuthenticatedUserMixin_ajax_response)EmailAddressEmailConfirmationget_emailconfirmation_model)EmailVerificationStageLoginByCodeStageLoginStageControllerPhoneVerificationStage)user_display)	ratelimit)ImmediateHttpResponse)redirect)RateLimited)
rate_limit)get_form_class_password_reset_keyoldpasswordpassword	password1	password2c                       sx   e Zd ZeZdej ZdZe	e
dde	eee	e fddZ fddZd	d
 Zdd Z fddZ  ZS )	LoginViewzaccount/login.Nloginactionc                    s0   t jr|jdkrt t j|g|R i |S )NGET)allauth_app_settingsSOCIALACCOUNT_ONLYmethodr   superdispatchselfrequestargskwargs	__class__ L/var/www/html/pos/venv/lib/python3.10/site-packages/allauth/account/views.pyrM   X   s   zLoginView.dispatchc                    s   t   }| j|d< |S )NrP   )rL   get_form_kwargsrP   rO   rR   rS   rU   rV   rW   a      

zLoginView.get_form_kwargsc                 C      t tjd| jS )NrE   r>   r   FORMS
form_classrO   rU   rU   rV   r>   f      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)get_success_urlrE   rP   r:   response)rO   formr`   erU   rU   rV   
form_validi   s   zLoginView.form_validc              	      s   d}t jrddlm} |j}t jdi |}d }t js#| t	d}t
| j}|||t jt jtj|d tjrE| t	d}||d< |S )	NFr   r   account_signup)
signup_urlsiteSOCIALACCOUNT_ENABLEDrJ   LOGIN_BY_CODE_ENABLEDPASSKEY_LOGIN_ENABLEDaccount_request_login_coderequest_login_code_urlrU   )rI   MFA_ENABLEDallauth.mfar   rk   rL   get_context_datarJ   passthrough_next_urlr   r   rP   updateri   rj   )rO   rR   passkey_login_enabledmfa_settingsretrg   rh   rm   rS   rU   rV   rp   p   s0   

zLoginView.get_context_data)__name__
__module____qualname__r   r]   r   TEMPLATE_EXTENSIONtemplate_namesuccess_urlr   r=   r(   sensitive_post_parameters_mr   rM   rW   r>   re   rp   __classcell__rU   rU   rS   rV   rD   N   s    
rD   c                       st   e Zd Zdej ZeZee	ddee
eee fddZdd Zdd	 Z fd
dZ fddZ  ZS )
SignupViewzaccount/signup.signuprF   c                    s   t  j|g|R i |S N)rL   rM   rN   rS   rU   rV   rM      s   zSignupView.dispatchc                 C   rZ   )Nr   r[   r^   rU   rU   rV   r>      r_   zSignupView.get_form_classc              
   C   sj   | | j\| _}|r|S z|  }tjj| j| j||jdW S  ty4 } z	|j	W  Y d }~S d }~ww )N)userr`   
by_passkey)
try_saverP   r   ra   r'   r   complete_signupr   r:   rb   )rO   rc   respr`   rd   rU   rU   rV   re      s   zSignupView.form_validc              
      s   t  jdi |}d}tjrddlm} |j}|d }| jj	d}|r<dg}dtj
v r1|d |D ]}||j| _q3| td}	| td	}
d }|rU| td
}t| j}||	|
||tjtj|d |S )NFr   r   rc   account_verified_emailemailemail2account_loginrf   account_signup_by_passkey)	login_urlrg   signup_by_passkey_urlrh   ri   rJ   PASSKEY_SIGNUP_ENABLEDrU   )rL   rp   rI   rn   ro   r   r   rP   sessiongetSIGNUP_FIELDSappendfieldsinitialrq   r   r   rr   ri   rJ   )rO   rR   ru   passkey_signup_enabledrt   rc   r   
email_keys	email_keyr   rg   r   rh   rS   rU   rV   rp      s@   


zSignupView.get_context_datac                    s^   t   }| jjd}|r-zt| W n ty   | Y S w ||d< dtjv r-||d< |S )Nr   r   )	rL   get_initialrP   rH   r   r   r   r   r   )rO   r   r   rS   rU   rV   r      s   

zSignupView.get_initial)rv   rw   rx   r   ry   rz   r$   r]   r   r=   r(   r|   r   rM   r>   re   rp   r   r}   rU   rU   rS   rV   r~      s    
$r~   c                       s&   e Zd Zdej Z fddZ  ZS )SignupByPasskeyViewzaccount/signup_by_passkey.c                    s   t   }d|d< |S )NTr   )rL   rW   rO   ru   rS   rU   rV   rW      s   
z#SignupByPasskeyView.get_form_kwargs)rv   rw   rx   r   ry   rz   rW   r}   rU   rU   rS   rV   r      s    
r   rM   )namec                       sh   e Zd Zdej Zdd Zdd Zdd Zdd	 Z	dddZ
dd Zdd Z fddZdd Z  Z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  data)
get_objectobjectlogout_other_userr   CONFIRM_EMAIL_ON_GETpostr	   rp   r   is_ajaxrP   r
   status_coderender_to_responser0   get_ajax_data)rO   rQ   rR   ctxr   rU   rU   rV   r      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)rP   r   is_authenticatedpkemail_addressuser_idlogout)rO   confirmationrU   rU   rV   r   	  s   z"ConfirmEmailView.logout_other_userc                 O   sN   |    | _}tj| j|\}}|r|S |s| dS | | j | dS )NFT)r   r   r'   email_verificationverify_email_and_resumerP   respondr   )rO   rQ   rR   verificationr   rb   rU   rU   rV   r     s   

zConfirmEmailView.postc                 C   s&   |   }|s|  }| |S t|S r   )get_redirect_urlrp   r   r;   )rO   successr`   r   rU   rU   rV   r   "  s
   
zConfirmEmailView.respondNc                 C   s(   | j d }t }||}|st |S )Nkey)rR   r3   from_keyr	   )rO   querysetr   modelemailconfirmationrU   rU   rV   r   )  s   

zConfirmEmailView.get_objectc                 C   s   t j }|d}|S )Nemail_address__user)r2   objects	all_validselect_related)rO   qsrU   rU   rV   get_queryset1  rY   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   displayr   )boolr   r   r   r8   r   r   rU   rU   rV   r   6  s   
zConfirmEmailView.get_ajax_datac                    sV   t  jdi |}t| j}||| j| jo| jj d | jr)| jjj|d< |S )N)rh   r   r   r   rU   )	rL   rp   r   rP   rr   r   r   can_set_verifiedr   )rO   rR   r   rh   rS   rU   rV   rp   ?  s   

z!ConfirmEmailView.get_context_datac                 C   s$   |   }|st| j| jj}|S r   )get_next_urlr   rP   #get_email_verification_redirect_urlr   r   rO   urlrU   rU   rV   r   N  s   
z!ConfirmEmailView.get_redirect_urlr   )rv   rw   rx   r   ry   rz   r   r   r   r   r   r   r   rp   r   r}   rU   rU   rS   rV   r      s    

	r   manage_emailrF   c                       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dd Z  ZS )	EmailViewzaccount/email_change.zaccount/email.account_emailc                 C   rZ   )N	add_emailr[   r^   rU   rU   rV   r>   c  r_   zEmailView.get_form_classc                    s.   d| _ tj|j t j|g|R i |S )NF)_did_send_verification_emailr'   r   sync_user_email_addressr   rL   rM   rN   rS   rU   rV   rM   f  s   zEmailView.dispatchc                    s   t t|  }| jj|d< |S Nr   )rL   r   rW   rP   r   rX   rS   rU   rV   rW   k  s   zEmailView.get_form_kwargsc                    s"   t j| j| d| _t |S )NT)r'   r   r   rP   r   rL   re   rO   rc   rS   rU   rV   re   p  s   zEmailView.form_validc                    s   d }d|j v rt j|g|R i |}|S |j drOd|j v r'| |}nd|j v r2| |}n
d|j v r<| |}|pCt|  }t	||| 
 d}|S t| j}t	||| 
 d}|S )N
action_addr   action_sendaction_removeaction_primaryr   )POSTrL   r   r   _action_send_action_remove_action_primaryr   ra   r0   _get_ajax_data_ifr{   )rO   rP   rQ   rR   resrS   rU   rV   r   u  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   )r   r   )r   r   r   r1   r   get_for_userr   DoesNotExist)rO   rP   r   rU   rU   rV   _get_email_address  s   
zEmailView._get_email_addressc                 O   sB   |  |}d}|rt| j|}|| _tjr|rttdS d S d S )NFaccount_email_verification_sent)r   r*   rP   r   r   "EMAIL_VERIFICATION_BY_CODE_ENABLEDr   r   )rO   rP   rQ   rR   r   did_send_verification_emailrU   rU   rV   r     s   
zEmailView._action_sendc                 O   0   |  |}|rtj||rt|  S d S d S r   )r   r'   r   delete_emailr   ra   rO   rP   rQ   rR   r   rU   rU   rV   r        
zEmailView._action_removec                 O   r   r   )r   r'   r   mark_as_primaryr   ra   r   rU   rU   rV   r     r   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)r   r   c                    s0   g | ]\}}d | |j pt dk|dqS )email_radio_   )idcheckedemailaddress)primarylen).0ir   emailsrU   rV   
<listcomp>  s    z.EmailView.get_context_data.<locals>.<listcomp>rc   )emailaddressesemailaddress_radiosadd_email_formcan_add_email)new_emailaddresscurrent_emailaddressrU   )rL   r   rp   listr1   r   filterrP   r   order_byrr   	enumerater   r   r   CHANGE_EMAILget_newget_verifiedrO   rR   ru   rS   r   rV   rp     s,   
zEmailView.get_context_datac                 C   s>   g }| j jj dD ]}||j|j|j|j	d q|S )Nr   )r   r   verifiedr   )
rP   r   emailaddress_setallr   r   r   r   r   r   )rO   r   r   rU   rU   rV   r     s   zEmailView.get_ajax_datac                 C   s   | j r
tjr
tdS | jS )Nr   )r   r   r   r   r{   r^   rU   rU   rV   ra     s   zEmailView.get_success_url)rv   rw   rx   r   r   ry   rz   r   r]   r   r{   r>   rM   rW   re   r   r   r   r   r   rp   r   ra   r}   rU   rU   rS   rV   r   Z  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   rZ   )Nr  r[   r^   rU   rU   rV   r>     r_   z!PasswordChangeView.get_form_classc                    s2   | j j sttdS t j|g|R i |S )Naccount_set_passwordrP   r   has_usable_passwordr   r   rL   rM   rN   rS   rU   rV   rM        zPasswordChangeView.dispatchc                       t   }| jj|d< |S r   rL   rW   rP   r   rX   rS   rU   rV   rW        
z"PasswordChangeView.get_form_kwargsc                 C      t  | jS r   r    get_password_change_redirect_urlrP   r^   rU   rU   rV   get_default_success_url     z*PasswordChangeView.get_default_success_urlc                    &   |   tj| j|j t |S r   )saver'   password_changefinalize_password_changerP   r   rL   re   r   rS   rU   rV   re        zPasswordChangeView.form_validc                    $   t  jdi |}|d|d< |S )Nrc   password_change_formrU   rL   rp   r   r   rS   rU   rV   rp        z#PasswordChangeView.get_context_data)rv   rw   rx   r   ry   rz   r   r]   r>   r|   rM   rW   r  re   rp   r}   rU   rU   rS   rV   r    s    
r  c                       r  )PasswordSetViewzaccount/password_set.c                 C   rZ   )Nset_passwordr[   r^   rU   rU   rV   r>     r_   zPasswordSetView.get_form_classc                    s2   | j j rttdS t j|g|R i |S )Naccount_change_passwordr  rN   rS   rU   rV   rM     r  zPasswordSetView.dispatchc                    r  r   r	  rX   rS   rU   rV   rW   #  r
  zPasswordSetView.get_form_kwargsc                 C   r  r   r  r^   rU   rU   rV   r  (  r  z'PasswordSetView.get_default_success_urlc                    r  r   )r  r'   r  finalize_password_setrP   r   rL   re   r   rS   rU   rV   re   +  r  zPasswordSetView.form_validc                    r  )Nrc   password_set_formrU   r  r   rS   rU   rV   rp   0  r  z PasswordSetView.get_context_data)rv   rw   rx   r   ry   rz   r#   r]   r>   r|   rM   rW   r  re   rp   r}   rU   rU   rS   rV   r    s    
r  c                       sR   e Zd Zdej ZeZedZ	 fddZ
dd Z fddZ fd	d
Z  ZS )PasswordResetViewzaccount/password_reset.account_reset_password_donec                    s   t jst  S | tdS )N#account_confirm_password_reset_code)r   PASSWORD_RESET_BY_CODE_ENABLEDrL   ra   rq   r   r^   rS   rU   rV   ra   A  s   
z!PasswordResetView.get_success_urlc                 C   rZ   )Nreset_passwordr[   r^   rU   rU   rV   r>   F  r_   z PasswordResetView.get_form_classc                    s<   t j| jd|jd  d}|r|S || j t |S )Nr"  r   )rG   r   )r9   consume_or_429rP   cleaned_datalowerr  rL   re   )rO   rc   r429rS   rU   rV   re   I  s   zPasswordResetView.form_validc                    s@   t  jdi |}| td}|d|d< |d|i |S )Nr   rc   password_reset_formr   rU   )rL   rp   rq   r   r   rr   )rO   rR   ru   r   rS   rU   rV   rp   T  s
   z"PasswordResetView.get_context_data)rv   rw   rx   r   ry   rz   r!   r]   r   r{   ra   r>   re   rp   r}   rU   rU   rS   rV   r  ;  s    
r  c                   @      e Zd Zdej ZdS )PasswordResetDoneViewzaccount/password_reset_done.Nrv   rw   rx   r   ry   rz   rU   rU   rU   rV   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 )PasswordResetFromKeyView account/password_reset_from_key.$account_reset_password_from_key_donezset-passwordc                 C   rZ   Nr,  r[   r^   rU   rU   rV   r>   v     
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 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)rc   )rP   r   r>   r   r\   r%   r   r   reset_url_keyr   r   INTERNAL_RESET_SESSION_KEYis_valid
reset_userr   r   r   r   rL   rM   rq   pathreplacer;   r   rp   r0   )
rO   rP   r5  r   rR   user_token_form_classr   
token_formr`   rb   rS   rU   rV   rM   {  s:   z!PasswordResetFromKeyView.dispatchc                    s8   t  jdi |}td| jd | jd dd|d< |S )Naccount_reset_password_from_keyr5  r   r4  )rR   
action_urlrU   )rL   rp   r   rR   r   rS   rU   rV   rp     s   
z)PasswordResetFromKeyView.get_context_datac                    s"   t   }| j|d< | j|d< |S )Nr   temp_key)rL   rW   r:  r   rX   rS   rU   rV   rW     s   


z(PasswordResetFromKeyView.get_form_kwargsc                    s.   |   tj| j| j}|r|S t |S r   )r  r'   password_resetfinalize_password_resetrP   r:  rL   re   rO   rc   r   rS   rU   rV   re     s   z#PasswordResetFromKeyView.form_valid)rv   rw   rx   r   ry   rz   r"   r]   r   r{   r7  r>   rM   rp   rW   re   r}   rU   rU   rS   rV   r-  i  s    
,r-  c                   @   r(  )PasswordResetFromKeyDoneViewz%account/password_reset_from_key_done.Nr*  rU   rU   rU   rV   rE    s    rE  c                       s^   e Zd Zdej ZeZedZ	 fddZ
dd Z fddZ fd	d
Z fddZ  ZS )CompletePasswordResetViewr.   account_password_reset_completedc                    sV   t jj|| _| jst| tdS | jj	ds!ttdS t
 j|fi |S )Naccount_reset_passwordcode_confirmedr   )r'   password_reset_by_code PasswordResetVerificationProcessresume_processr   rq   r   stater   rL   rM   )rO   rP   rR   rS   rU   rV   rM     s   z"CompletePasswordResetView.dispatchc                 C   rZ   r0  r[   r^   rU   rU   rV   r>     r1  z(CompletePasswordResetView.get_form_classc                    s"   t  jdi |}td|d< |S )Naccount_complete_password_resetr@  rU   )rL   rp   r   r   rS   rU   rV   rp     s   z*CompletePasswordResetView.get_context_datac                    r  r   )rL   rW   rM  r   rX   rS   rU   rV   rW     r
  z)CompletePasswordResetView.get_form_kwargsc                    s&   |   | j }|r|S t |S r   )r  rM  finishrL   re   rD  rS   rU   rV   re     s
   
z$CompletePasswordResetView.form_valid)rv   rw   rx   r   ry   rz   r"   r]   r   r{   rM   r>   rp   rW   re   r}   rU   rU   rS   rV   rF    s    
rF  c                       sf   e Zd Zdej ZeZee	 fddZ
dd Z fddZ fdd	Zd
d Z fddZ  ZS )ConfirmPasswordResetCodeViewz$account/confirm_password_reset_code.c                    sV   t jj|| _| jsttdS | jjdrttdS t	 j
|g|R i |S )Nr   rI  rO  )r'   rJ  rK  rL  rM  r   r   rN  r   rL   rM   rN   rS   rU   rV   rM     s   z%ConfirmPasswordResetCodeView.dispatchc                 C   rZ   )Nconfirm_password_reset_coder[   r^   rU   rU   rV   r>     r1  z+ConfirmPasswordResetCodeView.get_form_classc                    r  NcoderL   rW   rM  rT  r   rS   rU   rV   rW     r
  z,ConfirmPasswordResetCodeView.get_form_kwargsc                    s2   t  jdi |}| jjd |d< |d |d< |S )Nr   rc   verify_formrU   )rL   rp   rM  rN  r   rS   rU   rV   rp     s   z-ConfirmPasswordResetCodeView.get_context_datac                 C   s   | j   t| tdS )NrO  )rM  confirm_coder   rq   r   r   rU   rU   rV   re   $  s   
z'ConfirmPasswordResetCodeView.form_validc                    sP   | j  }|rt |S t| j}|j| jtj|j	d d t
| tdS Ntoo_many_login_attemptsmessager   )rM  record_invalid_attemptrL   form_invalidr   rP   add_messager   ERRORerror_messagesr   rq   r   rO   rc   attempts_leftadapterrS   rU   rV   r]  *  s   

z)ConfirmPasswordResetCodeView.form_invalid)rv   rw   rx   r   ry   rz   r   r]   r   r(   rM   r>   rW   rp   re   r]  r}   rU   rU   rS   rV   rQ    s    rQ  c                   @   s.   e Zd Zdej 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 r   )r   LOGOUT_ON_GETr   rP   r   r   r;   r   r0   rp   r   )rO   rQ   rR   rb   r   rU   rU   rV   r   =  s   

zLogoutView.getc                 O   s$   |   }|   t|}t| j|S r   )r   r   r;   r0   rP   )rO   rQ   rR   r   rb   rU   rU   rV   r   G  s   zLogoutView.postc                 C   s   |   pt| j| jS r   )r   r   rP   get_logout_redirect_urlr^   rU   rU   rV   r   M  s   zLogoutView.get_redirect_urlN)	rv   rw   rx   r   ry   rz   r   r   r   rU   rU   rU   rV   rd  :  s
    

rd  c                   @   r(  )AccountInactiveViewzaccount/account_inactive.Nr*  rU   rU   rU   rV   rg  V  r+  rg  c                   @   r(  )EmailVerificationSentViewzaccount/verification_sent.Nr*  rU   rU   rU   rV   rh  ^  r+  rh  c                       s   e Zd Zdej ZeZ fddZe	dd Z
dd Zdd	 Zd
d Z fddZ fddZdd Zdd Zdd Zdd Zdd Z fddZ  ZS ) ConfirmEmailVerificationCodeViewz(account/confirm_email_verification_code.c                    s   t |tj| _tjj|| _	| j	od| j	j
v}| j	r%|jjr3| js3|s3tt|jjr/dS dS t j|g|R i |S )Nr   r   r   )r6   enterr4   r   stager'   email_verification_by_codeEmailVerificationProcessrL  rM  rN  r   is_anonymousr   r   rL   rM   )rO   rP   rQ   rR   verification_is_fakerS   rU   rV   rM   i  s*   	
z)ConfirmEmailVerificationCodeView.dispatchc                 C   H   | j jd}dg}| jjr|d | jjr|d ||vr"d}|S NrG   verifychangeresend)rP   r   r   rM  
can_changer   
can_resendrO   rG   valid_actionsrU   rU   rV   _action     

z(ConfirmEmailVerificationCodeView._actionc                 C   (   | j dkr	|  S | j dkrtS |  S Nrs  rt  ry  _get_change_form_classr   _get_verify_form_classr^   rU   rU   rV   r>     
   

z/ConfirmEmailVerificationCodeView.get_form_classc                 C   s   t S r   )r   r^   rU   rU   rV   r~    s   z7ConfirmEmailVerificationCodeView._get_change_form_classc                 C   rZ   )Nconfirm_email_verification_coder[   r^   rU   rU   rV   r    r1  z7ConfirmEmailVerificationCodeView._get_verify_form_classc                    sV   t   }| jdkr	 |S | jdkr)| jr| jjnd|d< | jj|d< | jj|d< |S )Nrs  rr  r3  rT  r   r   )rL   rW   ry  rM  rT  r   r   r   rS   rU   rV   rW     s   


z0ConfirmEmailVerificationCodeView.get_form_kwargsc                    s   t  jd
i |}| jj|d< | jj|d< | jjd |d< | jr"d ntd|d< | jdkr<|d |d< | 	  |d	< |S | 
  |d< |d |d	< |S )Nru  rv  r   r   
cancel_urlrs  rc   change_formrV  rU   )rL   rp   rM  ru  rv  rN  rk  r   ry  r  r~  r   rS   rU   rV   rp     s   
z1ConfirmEmailVerificationCodeView.get_context_datac                 C   2   | j dkr
| |S | j dkr| |S | |S r|  ry  _change_form_valid_resend_form_valid_verify_form_validr   rU   rU   rV   re     
   




z+ConfirmEmailVerificationCodeView.form_validc                 C   sT   t  }z| j  W n ty    |j| jtj|jd d Y nw t	| 
tdS )Nrate_limitedrZ  r   )r   rM  rt  r<   r^  rP   r   r_  r`  r   rq   r   rO   rc   rc  rU   rU   rV   r    s   
z3ConfirmEmailVerificationCodeView._resend_form_validc                 C   (   | j |jd |j t| tdS )Nr   r   )rM  	change_tor$  account_already_existsr   rq   r   r   rU   rU   rV   r       z3ConfirmEmailVerificationCodeView._change_form_validc                 C   sj   | j  }| jr|s| j S | j S |  }|r	 t
|S |s)td}t
|S t| j	|}t
|S )Nr   )rM  rP  rk  abortexitr   r   r   rP   r   r   )rO   rc   r   r   rU   rU   rV   r    s    



z3ConfirmEmailVerificationCodeView._verify_form_validc                 C      | j dkr
| |S | |S Nrs  ry  _change_form_invalid_verify_form_invalidr   rU   rU   rV   r]       


z-ConfirmEmailVerificationCodeView.form_invalidc                    sJ   | j  }|rt |S t| j}|j| jtj|j	d d t
tdS rX  )rM  r\  rL   r]  r   rP   r^  r   r_  r`  r   r   ra  rS   rU   rV   r    s   

z5ConfirmEmailVerificationCodeView._verify_form_invalid)rv   rw   rx   r   ry   rz   r   r]   rM   r   ry  r>   r~  r  rW   rp   re   r  r  r  r]  r  r}   rU   rU   rS   rV   ri  c  s$    

ri  c                 C   s   t jr	t | S t | S r   )r   r   ri  as_viewrh  rP   rU   rU   rV   email_verification_sent  s   r  c                       sT   e Zd 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 r   )(_check_reauthentication_method_available_check_ratelimitrL   rM   )rO   rP   rQ   rR   r   rS   rU   rV   rM     s   

zBaseReauthenticateView.dispatchc                 C   s   t j| jd| jjdS )Nreauthenticate)rG   r   )r9   r#  rP   r   )rO   rP   rU   rU   rV   r    s
   z'BaseReauthenticateView._check_ratelimitc                    sP   t  | jj}t fdd|D rd S |std| |d d }t|S )Nc                    s   g | ]	}|d   j kqS )r   )r;  )r   mr  rU   rV   r     s    zSBaseReauthenticateView._check_reauthentication_method_available.<locals>.<listcomp>zReauthentication not availabler   r   )r   get_reauthentication_methodsrP   r   anyr   rq   r   )rO   rP   methodsr   rU   r  rV   r    s   z?BaseReauthenticateView._check_reauthentication_method_availablec                 C   s   t | j| j}|S r   )r   rP   get_login_redirect_urlr   rU   rU   rV   r    s   z.BaseReauthenticateView.get_default_success_urlc                    s"   t j| j}|r|S t |S r   )r'   reauthenticationresume_requestrP   rL   re   )rO   rc   rb   rS   rU   rV   re     s   z!BaseReauthenticateView.form_validc                    s(   t  jdi |}|d|  i |S )Nreauthentication_alternativesrU   )rL   rp   rr   !get_reauthentication_alternativesr   rS   rU   rV   rp      s   z'BaseReauthenticateView.get_context_datac                 C   sh   t  | jj}g }|D ]}t|}| jj|d krq| |d |d< || qt|dd d}|S )Nr   c                 S   s   | d S )NdescriptionrU   )altrU   rU   rV   <lambda>2  s    zJBaseReauthenticateView.get_reauthentication_alternatives.<locals>.<lambda>)r   )	r   r  rP   r   dictr;  rq   r   sorted)rO   r  altsrK   r  rU   rU   rV   r  )  s   z8BaseReauthenticateView.get_reauthentication_alternatives)rv   rw   rx   rM   r  r  r  re   rp   r  r}   rU   rU   rS   rV   r    s    		r  c                       s>   e Zd ZeZdej Zdd Z fddZ	 fddZ
  ZS )ReauthenticateViewzaccount/reauthenticate.c                 C   rZ   )Nr  r[   r^   rU   rU   rV   r>   ;  r_   z!ReauthenticateView.get_form_classc                    r  r   r	  r   rS   rU   rV   rW   >  r
  z"ReauthenticateView.get_form_kwargsc                    s   t j| j t |S r   )r'   r  reauthenticate_by_passwordrP   rL   re   r   rS   rU   rV   re   C  s   zReauthenticateView.form_valid)rv   rw   rx   r   r]   r   ry   rz   r>   rW   re   r}   rU   rU   rS   rV   r  6  s    
r  c                       sF   e Zd ZeZdej Zdd Z fddZ	dd Z
 fdd	Z  ZS )
RequestLoginCodeViewzaccount/request_login_code.c                 C   rZ   )Nrequest_login_coder[   r^   rU   rU   rV   r>   O  r_   z#RequestLoginCodeView.get_form_classc                    s6   t jjj| j|j|jd|jdd t 	|S )Nr   phone)rP   r   r   r  )
r'   login_by_codeLoginCodeVerificationProcessinitiaterP   _userr$  r   rL   re   r   rS   rU   rV   re   R  s   

zRequestLoginCodeView.form_validc                 C   s(   | j jjrd S td}| td}|S )Naccount_confirm_login_code)rP   r   r   r   rq   r   r   rU   rU   rV   ra   [  s
   
z$RequestLoginCodeView.get_success_urlc                    s.   t  jdi |}t| j}|d|i |S )Nrh   rU   )rL   rp   r   rP   rr   rO   rR   ru   rh   rS   rU   rV   rp   b  s   
z%RequestLoginCodeView.get_context_data)rv   rw   rx   r    r]   r   ry   rz   r>   re   ra   rp   r}   rU   rU   rS   rV   r  K  s    
	r  c                   C   s   t jrdS dS )Nrl   r   )r   rj   rU   rU   rU   rV   _login_by_code_urlnamel  s
   r  )rk  redirect_urlnamec                       sf   e Zd ZeZdej Zee	 fddZ
dd Z fddZdd	 Z fd
dZ fddZ  ZS )ConfirmLoginCodeViewzaccount/confirm_login_code.c                    sH   |j | _tjj| j| _| jsttt	 S t
 j|g|R i |S r   )_login_stagerk  r'   r  r  rL  rM  r   r   r  rL   rM   rN   rS   rU   rV   rM     s   zConfirmLoginCodeView.dispatchc                 C   rZ   )Nconfirm_login_coder[   r^   rU   rU   rV   r>     r_   z#ConfirmLoginCodeView.get_form_classc                    r  rS  rU  rX   rS   rU   rV   rW     r
  z$ConfirmLoginCodeView.get_form_kwargsc                 C   s   |   }| j|S r   )r   rM  rP  )rO   rc   r`   rU   rU   rV   re     s   zConfirmLoginCodeView.form_validc                    s`   | j  }|rt |S t| j}|j| jtj|j	d d t
t| j jd r,t S dS )NrY  rZ  initiated_by_userr   )rM  r\  rL   r]  r   rP   r^  r   r_  r`  r   r   rN  r  ra  rS   rU   rV   r]    s$   


z!ConfirmLoginCodeView.form_invalidc                    sT   t  jdi |}t| j}| jjd}| jjd}|||||d d |S )Nr   r  rc   )rh   r   r  rV  rU   )rL   rp   r   rP   rM  rN  r   rr   )rO   rR   ru   rh   r   r  rS   rU   rV   rp     s   
z%ConfirmLoginCodeView.get_context_data)rv   rw   rx   r   r]   r   ry   rz   r   r   rM   r>   rW   re   r]  rp   r}   rU   rU   rS   rV   r  v  s    
	r  c                       s   e Zd ZeZdej Zedd Z	dd Z
dd Zdd	 Z fd
dZdd Zdd Zdd Zdd Zdd Z fddZ fddZ fddZ  ZS )_BaseVerifyPhoneViewz(account/confirm_phone_verification_code.c                 C   rp  rq  )rP   r   r   processru  r   rv  rw  rU   rU   rV   ry    rz  z_BaseVerifyPhoneView._actionc                 C   r{  r|  r}  r^   rU   rU   rV   r>     r  z#_BaseVerifyPhoneView.get_form_classc                 C   s   t tjdtS Nchange_phone)r>   r   r\   r   r^   rU   rU   rV   r~    r  z+_BaseVerifyPhoneView._get_change_form_classc                 C   rZ   )Nverify_phoner[   r^   rU   rU   rV   r    r_   z+_BaseVerifyPhoneView._get_verify_form_classc                    sh   t   }| jdkr| jj|d< | jj|d< |S | jdkr 	 |S | jj|d< | jj|d< | jj|d< |S )Nrs  r  r   rt  rT  )rL   rW   ry  r  r  r   rT  rX   rS   rU   rV   rW     s   


z$_BaseVerifyPhoneView.get_form_kwargsc                 C   r  r|  r  r   rU   rU   rV   re     r  z_BaseVerifyPhoneView.form_validc                 C   sT   z| j   W n ty    t }|j| jtj|jd d Y nw t	| 
tdS )Nr  rZ  account_verify_phone)r  rt  r<   r   r^  rP   r   r_  r`  r   rq   r   r  rU   rU   rV   r    s   
z'_BaseVerifyPhoneView._resend_form_validc                 C   r  )Nr  r  )r  r  r$  r  r   rq   r   r   rU   rU   rV   r    r  z'_BaseVerifyPhoneView._change_form_validc                 C   s   | j   | |S r   )r  rP  respond_process_succeededr   rU   rU   rV   r    s   

z'_BaseVerifyPhoneView._verify_form_validc                 C   r  r  r  r   rU   rU   rV   r]    r  z!_BaseVerifyPhoneView.form_invalidc                    s   t  |S r   )rL   r]  r   rS   rU   rV   r       z)_BaseVerifyPhoneView._change_form_invalidc                    s.   | j  }|rt |S | j   | |S r   )r  r\  rL   r]  r  respond_process_failed)rO   rc   rb  rS   rU   rV   r    s
   


z)_BaseVerifyPhoneView._verify_form_invalidc                    s   t  jdi |}| jj|d< | jj|d< t| j}| jdkr-|d |d< |   |d< n| 	  |d< |d |d< |
|| jj| jd |S )	Nru  rv  rs  rc   r  rV  )rh   r  rG   rU   )rL   rp   r  ru  rv  r   rP   ry  r  r~  rr   r  r  rS   rU   rV   rp     s    

z%_BaseVerifyPhoneView.get_context_data)rv   rw   rx   r&   r]   r   ry   rz   r   ry  r>   r~  r  rW   re   r  r  r  r]  r  r  rp   r}   rU   rU   rS   rV   r    s$    
r  r   c                       s4   e Zd Zee fddZdd Zdd Z  ZS )_VerifyPhoneSignupViewc                    sD   |j | _tjj| j| _| js| j S t j	|g|R i |S r   )
r  rk  r'   phone_verificationPhoneVerificationStageProcessrL  r  r  rL   rM   rN   rS   rU   rV   rM   1  s   
z_VerifyPhoneSignupView.dispatchc                 C   s
   | j  S r   )rk  r  r   rU   rU   rV   r  ;  s   
z0_VerifyPhoneSignupView.respond_process_succeededc                 C   s.   t | j}|j| jtj|jd d | j S )NrY  rZ  )r   rP   r^  r   r_  r`  rk  r  r  rU   rU   rV   r  >  s   

z-_VerifyPhoneSignupView.respond_process_failed)	rv   rw   rx   r   r   rM   r  r  r}   rU   rU   rS   rV   r  *  s
    	r  c                       s@   e Zd Zee fddZdd Zdd Z fddZ  Z	S )	_VerifyPhoneChangeViewc                    s<   t jj|| _| jsttdS t j|g|R i |S Naccount_change_phone)	r'   r  ChangePhoneVerificationProcessrL  r  r   r   rL   rM   rN   rS   rU   rV   rM   I  s   z_VerifyPhoneChangeView.dispatchc                 C      t tdS r  r   r   r   rU   rU   rV   r  R  r  z0_VerifyPhoneChangeView.respond_process_succeededc                 C   r  r  r  r   rU   rU   rV   r  U  r  z-_VerifyPhoneChangeView.respond_process_failedc                    s(   t  jdi |}|dtdi |S )Nr  r  rU   )rL   rp   rr   r   r   rS   rU   rV   rp   X  s   z'_VerifyPhoneChangeView.get_context_data)
rv   rw   rx   r   r   rM   r  r  rp   r}   rU   rU   rS   rV   r  H  s    r  c                 C   s    | j jr
t | S t | S r   )r   r   r  r  r  r  rU   rU   rV   r  ^  s   r  r  c                       sR   e Zd Zdej ZeZedZ	dd Z
 fddZ fddZ fd	d
Z  ZS )ChangePhoneViewzaccount/phone_change.r  c                 C   rZ   r  r[   r^   rU   rU   rV   r>   l  r_   zChangePhoneView.get_form_classc                    s   t   }t | jj| _| jjddkr-| jr-| jd s-d| jd i|d< d |d< n| jr5| jd nd |d< | jj|d< |S )NrG   rr  r   r  r   r   r   )	rL   rW   r   	get_phonerP   r   _phone_verifiedr   r   r   rS   rU   rV   rW   o  s   

zChangePhoneView.get_form_kwargsc                    s$   t jj| j|jd  t |S )Nr  )r'   r  r  r  rP   r$  rL   re   r   rS   rU   rV   re     s   zChangePhoneView.form_validc                    s>   t  jdi |}d }d}| jr| j\}}|||d |S )NF)r  phone_verifiedrU   )rL   rp   r  rr   )rO   rR   ru   r  r  rS   rU   rV   rp     s   
z ChangePhoneView.get_context_data)rv   rw   rx   r   ry   rz   r   r]   r   r{   r>   rW   re   rp   r}   rU   rU   rS   rV   r  e  s    
r  N)django.contribr   django.contrib.auth.decoratorsr   django.contrib.sites.shortcutsr   django.core.exceptionsr   django.core.validatorsr   django.formsr   r   django.httpr	   r
   r   django.urlsr   r   django.utils.decoratorsr   django.utils.functionalr   django.views.decorators.cacher   django.views.decorators.debugr   django.views.generic.baser   django.views.generic.editr   allauthr   rI   allauth.accountallauth.account.adapterr   allauth.account.formsr   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   allauth.account.internalr'   #allauth.account.internal.decoratorsr(   r)   1allauth.account.internal.flows.email_verificationr*   allauth.account.mixinsr+   r,   r-   r.   r/   r0   allauth.account.modelsr1   r2   r3   allauth.account.stagesr4   r5   r6   r7   allauth.account.utilsr8   allauth.corer9   allauth.core.exceptionsr:   allauth.core.internal.httpkitr;   allauth.core.ratelimitr<   allauth.decoratorsr=   allauth.utilsr>   r8  r|   rD   r  rE   r~   r   r   signup_by_passkeyr   confirm_emailr   r   r  r  r  password_setr  rB  r)  password_reset_doner-  password_reset_from_keyrE  password_reset_from_key_donerF  complete_password_resetrQ  rR  rd  r   rg  account_inactiverh  ri  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  rU   rU   rU   rV   <module>   s   H 
@
U	
a
 

"
"
"


W


-6

 


<
<o


.