o
    hI                     @   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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mZ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)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z8m9Z9m:Z:m;Z;m<Z< d dl=m>Z>m?Z? d dl@mAZA d dlBmCZC G dd de>ZDG dd de>ZEee"ddddG dd de>ZFee"ddddG dd  d e>ZGG d!d" d"e>ZHG d#d$ d$e>ZIG d%d& d&e>ZJG d'd( d(e>ZKG d)d* d*e>ZLG d+d, d,e>ZMee"d-dddG d.d/ d/e>ZNee"d0dddG d1d2 d2e?ZOG d3d4 d4e>ZPG d5d6 d6e>ZQee"d7dddG d8d9 d9e?ZRd:S );    )
HTTPStatus)method_decorator)app_settings)get_adapter)flows)email_verificationmanage_emailpassword_changepassword_resetpassword_reset_by_code)"send_verification_email_to_address)EmailVerificationProcess)PhoneVerificationStageProcess)EmailVerificationStageLoginStageControllerPhoneVerificationStage)	ratelimit)ImmediateHttpResponseRateLimited)
rate_limit)response)AddEmailInputChangeEmailInputChangePasswordInputChangePhoneInputConfirmLoginCodeInputDeleteEmailInput
LoginInputMarkAsPrimaryEmailInputReauthenticateInputRequestLoginCodeInputRequestPasswordResetInputResendEmailVerificationInputResetPasswordInputResetPasswordKeyInputSignupInputVerifyEmailInputVerifyPhoneInput)APIResponseAuthenticationResponseConflictResponseForbiddenResponseRateLimitResponse)APIViewAuthenticatedAPIView)authkit)ErrorResponsec                   @      e Zd ZeZdd ZdS )RequestLoginCodeViewc                 O   s:   t jjj| j| jj| jjd| jjdd t	| jS )Nemailphone)requestuserr3   r4   )
r   login_by_codeLoginCodeVerificationProcessinitiater5   input_usercleaned_datagetr)   selfr5   argskwargs rB   U/var/www/html/pos/venv/lib/python3.10/site-packages/allauth/headless/account/views.pypostC   s   
zRequestLoginCodeView.postN)__name__
__module____qualname__r    input_classrD   rB   rB   rB   rC   r2   @       r2   c                       s@   e Zd ZeZ fddZdd Z fddZ fddZ  Z	S )	ConfirmLoginCodeViewc                    s\   t |}| | _| jst|S tjj| j| _	| j	s!t|S t
 j|g|R i |S N)r/   AuthenticationStatusget_pending_stagestager*   r   r7   r8   resumeprocesssuperdispatch)r?   r5   r@   rA   auth_status	__class__rB   rC   rR   P   s   

zConfirmLoginCodeView.dispatchc                 O   s   | j d }t||S rK   )rP   finishr)   from_responser?   r5   r@   rA   r   rB   rB   rC   rD   \   s   zConfirmLoginCodeView.postc                    s   t   }| jj|d< |S )Ncode)rQ   get_input_kwargsrP   rY   )r?   rA   rT   rB   rC   rZ   `   s   
z%ConfirmLoginCodeView.get_input_kwargsc                       | j   t |S rK   rP   record_invalid_attemptrQ   handle_invalid_inputr?   r:   rT   rB   rC   r^   e      
z)ConfirmLoginCodeView.handle_invalid_input)
rE   rF   rG   r   rH   rR   rD   rZ   r^   __classcell__rB   rB   rT   rC   rJ   M   s    rJ   login)actionhandle)namec                   @   r1   )	LoginViewc                 O   s8   |j jrt|S | jj}tj||| jj}t	||S rK   )
r6   is_authenticatedr*   r:   r<   r   rb   perform_password_loginr)   rW   )r?   r5   r@   rA   credentialsr   rB   rB   rC   rD   n   s   
zLoginView.postN)rE   rF   rG   r   rH   rD   rB   rB   rB   rC   rf   j   s    rf   signupc                   @   s    e Zd ZdeiZdZdd ZdS )
SignupViewPOSTFc                 O   sp   |j jrt|S t |st|S | j|\}}|s2ztj	j
||| jd}W n	 ty1   Y nw t||S )N)r6   
by_passkey)r6   rg   r*   get_account_adapteris_open_for_signupr+   r:   try_saver   rj   complete_signuprm   r   r)   rW   )r?   r5   r@   rA   r6   resprB   rB   rC   rD   }   s   
zSignupView.postN)rE   rF   rG   r%   rH   rm   rD   rB   rB   rB   rC   rk   x   s    rk   c                   @   s   e Zd Zdd Zdd ZdS )SessionViewc                 O   s   t |S rK   )r)   r>   rB   rB   rC   r=         zSessionView.getc                 O   s   t  }|| t|S rK   )rn   logoutr)   )r?   r5   r@   rA   adapterrB   rB   rC   delete   s   
zSessionView.deleteN)rE   rF   rG   r=   rw   rB   rB   rB   rC   rs      s    rs   c                       sJ   e Zd ZeZ fddZdd Zdef fddZdd	 Zd
d Z	  Z
S )VerifyEmailViewc                    sp   t |tj| _| jstjr|jjst	|S d | _
tjr+tjj|| _
| j
s+t	|S t j|g|R i |S rK   )r   enterr   keyrN   account_settings"EMAIL_VERIFICATION_BY_CODE_ENABLEDr6   rg   r*   rP   r   email_verification_by_coder   rO   rQ   rd   r>   rT   rB   rC   rd      s"   zVerifyEmailView.handlec                 C   s
   d| j iS )NrP   rP   r?   rB   rB   rC   rZ      s   
z VerifyEmailView.get_input_kwargsr:   c                    s   | j r| j   t |S rK   r\   r_   rT   rB   rC   r^      s   
z$VerifyEmailView.handle_invalid_inputc                 O   sp   |j dd}| jd|i| jd}| s#| jr| j  t||dS | jr+| jj}n|jj}t	j
||| jdS )Nzx-email-verification-key rz   r~   r:   )rN   )headersr=   rH   rP   is_validr]   r0   email_addressverificationr   VerifyEmailResponserN   )r?   r5   r@   rA   rz   r:   r   rB   rB   rC   r=      s   

zVerifyEmailView.getc                 O   sT   | j r	| j  }n| jj|}|st|tjdS d }| jr$t	
||}t||S )Nstatus)rP   rV   r:   r   confirmr(   r   INTERNAL_SERVER_ERRORrN   r   login_on_verificationr)   rW   )r?   r5   r@   rA   r   r   rB   rB   rC   rD      s   zVerifyEmailView.post)rE   rF   rG   r&   rH   rd   rZ   r^   r=   rD   ra   rB   rB   rT   rC   rx      s    rx   c                       sB   e Zd ZeZ fddZdd Zdef fddZdd	 Z  Z	S )
VerifyPhoneViewc                    sr   t |tj| _| jrtjj| j| _	n|j
jst|S tjj|| _	| j	s,t|S t j|g|R i |S rK   )r   ry   r   rz   rN   r   phone_verificationr   rO   rP   r6   rg   r*   ChangePhoneVerificationProcessrQ   rd   r>   rT   rB   rC   rd      s   zVerifyPhoneView.handlec                 C   s   | j j| j j| j jdS )N)rY   r6   r4   )rP   rY   r6   r4   r   rB   rB   rC   rZ      s   z VerifyPhoneView.get_input_kwargsr:   c                    r[   rK   r\   r_   rT   rB   rC   r^      r`   z$VerifyPhoneView.handle_invalid_inputc                 O   s*   | j   d }| jr| j }t||S rK   )rP   rV   rN   exitr)   rW   rX   rB   rB   rC   rD      s
   

zVerifyPhoneView.post)
rE   rF   rG   r'   rH   rd   rZ   r^   rD   ra   rB   rB   rT   rC   r      s    r   c                   @      e Zd ZdZdd ZdS )ResendPhoneVerificationCodeViewFc                 O   sd   d }t |tj}|rtjj|}|r|jst	|S z	|
  W t|S  ty1   t| Y S w rK   )r   ry   r   rz   r   r   r   rO   
can_resendr*   resendr   r,   r(   )r?   r5   r@   rA   rP   rN   rB   rB   rC   rD      s   

z$ResendPhoneVerificationCodeView.postNrE   rF   rG   handle_json_inputrD   rB   rB   rB   rC   r      rI   r   c                   @   r   )ResendEmailVerificationCodeViewFc                 O   s\   t jst|S tjj|}|r|jst|S z	|  W t|S  t	y-   t
| Y S w rK   )r{   r|   r*   r   r}   r   rO   r   r   r   r,   r(   )r?   r5   r@   rA   rP   rB   rB   rC   rD     s   

z$ResendEmailVerificationCodeView.postNr   rB   rB   rB   rC   r     rI   r   c                   @   r1   )RequestPasswordResetViewc                 O   sJ   t j| jd| jjd  d}|r|S | j| tjr t	|S t
|S )Nreset_passwordr3   )rc   rz   )r   consume_or_429r5   r:   r<   lowersaver{   PASSWORD_RESET_BY_CODE_ENABLEDr)   r   RequestPasswordResponse)r?   r5   r@   rA   r429rB   rB   rC   rD   #  s   
zRequestPasswordResetView.postN)rE   rF   rG   r!   rH   rD   rB   rB   rB   rC   r      rI   r   reset_password_from_keyc                       sJ   e Zd ZeZdef fddZ fddZdd Zdd	 Zd
d Z	  Z
S )ResetPasswordViewr:   c                    s&   | j rd|jv r| j   t |S )Nrz   )rP   errorsr]   rQ   r^   r_   rT   rB   rC   r^   5  s   
z&ResetPasswordView.handle_invalid_inputc                    sD   d | _ tjrtj| j| _ | j st|S t j	|g|R i |S rK   )
rP   r{   r   r    PasswordResetVerificationProcessrO   r5   r*   rQ   rd   r>   rT   rB   rC   rd   :  s   zResetPasswordView.handlec                 O   s   |j dd}| jr0td|i| jjd}| s#| j  t||dS | j  t	
|| jjS td|i}| s@t||dS t	
||jS )NzX-Password-Reset-Keyr   rz   )rY   r   )r   r=   rP   r$   rY   r   r]   r0   confirm_coder   PasswordResetKeyResponser6   )r?   r5   r@   rA   rz   r:   rB   rB   rC   r=   F  s   

zResetPasswordView.getc                 C   s&   i }| j r|| j j| j jd |S )N)rY   r6   )rP   updaterY   r6   )r?   retrB   rB   rC   rZ   U  s   z"ResetPasswordView.get_input_kwargsc                 O   sP   | j j}tj|| j jd  | jr| j  | j  nt	|| t
| jS )Npassword)r:   r6   r   r
   r   r<   rP   r   rV   finalize_password_resetr)   r5   )r?   r5   r@   rA   r6   rB   rB   rC   rD   [  s   

zResetPasswordView.post)rE   rF   rG   r#   rH   r^   rd   r=   rZ   rD   ra   rB   rB   rT   rC   r   1  s    r   change_passwordc                   @       e Zd ZeZdd Zdd ZdS )ChangePasswordViewc                 O   sX   t | jj| jjd  | jjd }|r!t ||j t	|S t ||j t	|S )Nnew_passwordcurrent_password)
r	   r   r5   r6   r:   r<   r=   finalize_password_setfinalize_password_changer)   )r?   r5   r@   rA   is_setrB   rB   rC   rD   j  s   zChangePasswordView.postc                 C      d| j jiS Nr6   r5   r6   r   rB   rB   rC   rZ   u     z#ChangePasswordView.get_input_kwargsN)rE   rF   rG   r   rH   rD   rZ   rB   rB   rB   rC   r   f  s    r   c                       sn   e Zd ZeeeedZ fddZdd Z	dd Z
dd	 Zd
d Zdd Zdd Z fddZdd Z  ZS )ManageEmailView)rl   PUTDELETEPATCHc                    s   d | _ |jjr|j| _n|jdkrt|S t|| _ | j r"| j js&t|S | j j| _t	j
|d| jd}|r8|S t j|g|R i |S )Nrl   r   rc   r6   )verification_stage_processr6   rg   methodr)   r   rO   
can_changer*   r   r   rQ   rR   )r?   r5   r@   rA   rr   rT   rB   rC   rR     s    


zManageEmailView.dispatchc                 O   s   |   S rK   )_respond_email_listr>   rB   rB   rC   r=     rt   zManageEmailView.getc                 C   s   t | j| j}t| j|S rK   )r   list_email_addressesr5   r6   r   EmailAddressesResponse)r?   addrsrB   rB   rC   r     s   z#ManageEmailView._respond_email_listc                 O   sB   | j r| j j| jjd | jjd |  S tj|| j |  S )Nr3   )r3   account_already_exists)	r   	change_tor:   r<   r   r   r   	add_emailr   r>   rB   rB   rC   rD     s   
zManageEmailView.postc                 O   "   | j jd }tj|| |  S Nr3   )r:   r<   r   r   delete_emailr   r?   r5   r@   rA   addrrB   rB   rC   rw        zManageEmailView.deletec                 O   r   r   )r:   r<   r   r   mark_as_primaryr   r   rB   rB   rC   patch  r   zManageEmailView.patchc                 O   sd   | j jd }| j j }r&d}|jr%z
| j j  d}W n ty$   Y nw nt||}tj||dS )Nr3   FT)verification_sent)	r:   r<   rP   r   r   r   r   r    RequestEmailVerificationResponse)r?   r5   r@   rA   r   rP   sentrB   rB   rC   put  s   
zManageEmailView.putc                    s   | j rtS t  S rK   )r   r   rQ   get_input_classr   rT   rB   rC   r     s   
zManageEmailView.get_input_classc                 C   s   | j r	d| j jiS d| jiS )Nr3   r6   )r   r3   r6   r   rB   rB   rC   rZ     s   
z ManageEmailView.get_input_kwargs)rE   rF   rG   r   r"   r   r   rH   rR   r=   r   rD   rw   r   r   r   rZ   ra   rB   rB   rT   rC   r   y  s    
r   c                       s8   e Zd ZeZ fddZdd Zdd Zdd Z  Z	S )	ManagePhoneViewc                    s   d | _ |jjr|j| _n-|jdkrt|S |jdkr9t|tj}|r)t	
|| _ | j r0| j js4t|S | j j| _tj|d| jd}|rF|S t j|g|R i |S )NGETrl   change_phoner   )r   r6   rg   r   r)   r   ry   r   rz   r   rO   r   r*   r   r   rQ   rR   )r?   r5   r@   rA   rN   rr   rT   rB   rC   rR     s*   



zManagePhoneView.dispatchc                 O   s>   g }t  | jj}|r||d |d d t| j|S )Nr      r4   verified)rn   	get_phoner5   r6   appendr   PhoneNumbersResponse)r?   r5   r@   rA   phone_numbersphone_verifiedrB   rB   rC   r=     s   zManagePhoneView.getc                 O   sV   | j jd }| jr| jj|| j jd n	tjj| j	| t
j| j	|ddgtjdS )Nr4   )r4   r   Fr   r   )r:   r<   r   r   r   r   r   r   r9   r5   r   r   r   ACCEPTED)r?   r5   r@   rA   r4   rB   rB   rC   rD     s"   zManagePhoneView.postc                 C   s*   d }t  | j}|r|d }|| jdS )Nr   )r4   r6   )rn   r   r6   )r?   r4   r   rB   rB   rC   rZ     s
   z ManagePhoneView.get_input_kwargs)
rE   rF   rG   r   rH   rR   r=   rD   rZ   ra   rB   rB   rT   rC   r     s    	r   reauthenticatec                   @   r   )ReauthenticateViewc                 O   s   t j| j t| jS rK   )r   reauthenticationreauthenticate_by_passwordr5   r)   r>   rB   rB   rC   rD     s   
zReauthenticateView.postc                 C   r   r   r   r   rB   rB   rC   rZ     r   z#ReauthenticateView.get_input_kwargsN)rE   rF   rG   r   rH   rD   rZ   rB   rB   rB   rC   r     s    r   N)Shttpr   django.utils.decoratorsr   allauth.accountr   r{   allauth.account.adapterr   rn   allauth.account.internalr   allauth.account.internal.flowsr   r   r	   r
   r   1allauth.account.internal.flows.email_verificationr   9allauth.account.internal.flows.email_verification_by_coder   1allauth.account.internal.flows.phone_verificationr   allauth.account.stagesr   r   r   allauth.corer   allauth.core.exceptionsr   r   allauth.decoratorsr   allauth.headless.accountr   allauth.headless.account.inputsr   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   allauth.headless.base.responser(   r)   r*   r+   r,   allauth.headless.base.viewsr-   r.   allauth.headless.internalr/   *allauth.headless.internal.restkit.responser0   r2   rJ   rf   rk   rs   rx   r   r   r   r   r   r   r   r   r   rB   rB   rB   rC   <module>   sN    L
<(4QA