
    )Jf+                     X   d dl 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 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# 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. d dl/m0Z0 d dl1m2Z2  G d de          Z3e34                                Z5 eed           G d de                       Z6e64                                Z7 eed           G d de                      Z8e84                                Z9 eed           G d d e                      Z:e:4                                Z; eed           G d! d"e                      Z<e<4                                Z= eed           G d# d$e                      Z>e>4                                Z? eed           G d% d&e                      Z@e@4                                ZA eed           G d' d(e                      ZBeB4                                ZCdS ))    N)forms)messages)login_required)Http404HttpResponseRedirect)get_object_or_404)reversereverse_lazy)method_decorator)TemplateView)FormView)app_settings)get_adapter)reauthentication_required)LoginStageController)BaseReauthenticateView)r   signalstotp)ActivateTOTPFormAuthenticateFormDeactivateTOTPForm)Authenticator)RecoveryCodes)AuthenticateStage)is_mfa_enabled)get_form_classc                   L     e Zd ZeZdej        z   Z fdZ fdZ	d Z
d Z xZS )AuthenticateViewzmfa/authenticate.c                 *   t          j        |t          j                  | _        | j        r/t          | j        j        j        t          j	        j
        g          st          t          d                    S  t                      j        |g|R i |S )Naccount_login)r   enterr   keystager   loginuserr   TypeTOTPr   r	   superdispatchselfrequestargskwargs	__class__s       T/home/alex/cs2snipeproduction/venv/lib/python3.11/site-packages/allauth/mfa/views.pyr)   zAuthenticateView.dispatch$   s    )/9J9NOO
z 	BJ!M$6$;#<"
 "
 	B ((@(@AAAuww9$999&999    c                 p    t                                                      }| j        j        j        |d<   |S Nr%   )r(   get_form_kwargsr#   r$   r%   r+   retr/   s     r0   r4   z AuthenticateView.get_form_kwargs,   s.    gg%%''j&+F
r1   c                 B    t          t          j        d| j                  S )Nauthenticater   r   FORMS
form_classr+   s    r0   r   zAuthenticateView.get_form_class1   s    l0.$/RRRr1   c                 \    |                                  | j                                        S )N)saver#   exit)r+   forms     r0   
form_validzAuthenticateView.form_valid4   s!    		z   r1   )__name__
__module____qualname__r   r;   account_settingsTEMPLATE_EXTENSIONtemplate_namer)   r4   r   rA   __classcell__r/   s   @r0   r   r       s        !J'*:*MMM: : : : :    
S S S! ! ! ! ! ! !r1   r   r)   )namec                   <     e Zd ZeZdej        z   Z fdZd Z	 xZ
S )ReauthenticateViewzmfa/reauthenticate.c                 f    t                                                      }| j        j        |d<   |S r3   r(   r4   r,   r%   r5   s     r0   r4   z"ReauthenticateView.get_form_kwargsA   +    gg%%''l'F
r1   c                 B    t          t          j        d| j                  S )Nreauthenticater9   r<   s    r0   r   z!ReauthenticateView.get_form_classF   s    l02BDOTTTr1   )rB   rC   rD   r   r;   rE   rF   rG   r4   r   rH   rI   s   @r0   rL   rL   <   sa        !J),<,OOM    
U U U U U U Ur1   rL   c                   2     e Zd Zdej        z   Z fdZ xZS )	IndexViewz
mfa/index.c                     t                      j        di |}d t          j                            | j        j                  D             }||d<   t          j        |d<   t          | j        j                  |d<   |S )Nc                 B    i | ]}|j         |                                S  )typewrap).0auths     r0   
<dictcomp>z.IndexView.get_context_data.<locals>.<dictcomp>S   s4     
 
 
 Ityy{{
 
 
r1   )r%   authenticatorsMFA_SUPPORTED_TYPESr   rV   )
r(   get_context_datar   objectsfilterr,   r%   r   SUPPORTED_TYPESr   )r+   r.   r6   r\   r/   s       r0   r^   zIndexView.get_context_dataQ   s    &egg&0000
 
%-44$,:K4LL
 
 
 !/%1%A!" .t|/@ A A
r1   rB   rC   rD   rE   rF   rG   r^   rH   rI   s   @r0   rS   rS   M   sF         #3#FFM	 	 	 	 	 	 	 	 	r1   rS   c                   `     e Zd ZeZdej        z   Z fdZ fdZ	 fdZ
d Zd Z fdZ xZS )ActivateTOTPViewzmfa/totp/activate_form.c                     t          |j        t          j        j        g          rt          t          d                    S  t                      j        |g|R i |S )Nmfa_deactivate_totp)	r   r%   r   r&   r'   r   r	   r(   r)   r*   s       r0   r)   zActivateTOTPView.dispatche   s_    ',);)@(ABB 	H'0E(F(FGGGuww9$999&999r1   c                     t                      j        di |}t                      }t          j        |                    | j        j                  |                                |d         j	                  }t          j
        |          }t          j        |                    d                                        d          }d| }|                    |||d           |S )Nr@   utf8zutf-8zdata:image/svg+xml;base64,)totp_svgtotp_svg_data_uritotp_urlrV   )r(   r^   r   r   build_totp_urlget_totp_labelr,   r%   get_totp_issuersecretbuild_totp_svgbase64	b64encodeencodedecodeupdate)	r+   r.   r6   adapterrk   ri   base64_datatotp_data_urir/   s	           r0   r^   z!ActivateTOTPView.get_context_dataj   s    &egg&0000--&""4<#455##%%K
 

 &x00&xv'>'>??FFwOOB[BB

$%2$ 	
 	
 	
 
r1   c                 f    t                                                      }| j        j        |d<   |S r3   rN   r5   s     r0   r4   z ActivateTOTPView.get_form_kwargs~   rO   r1   c                 B    t          t          j        d| j                  S )Nactivate_totpr9   r<   s    r0   r   zActivateTOTPView.get_form_class   s    l0/4?SSSr1   c                 x    t           j        j        t          j        v rt          d          S t          d          S )Nmfa_view_recovery_codes	mfa_index)r   r&   RECOVERY_CODESr   ra   r	   r<   s    r0   get_success_urlz ActivateTOTPView.get_success_url   s3    ,0LLL4555{###r1   c                    t           j                            | j        j        |j                  }t          j        j        t          j
        v rt          j        | j        j                  }nd }||fD ]:}|r6t          j                            t          | j        j        |j                   ;t!          | j                  }|                    | j        t$          j        d           t)                                          |          S )Nsenderr%   authenticatorzmfa/messages/totp_activated.txt)r   r'   activater,   r%   ro   r   r&   r   r   ra   r   r   authenticator_addedsendinstanceget_account_adapteradd_messager   SUCCESSr(   rA   )r+   r@   	totp_authrc_authrZ   rv   r/   s         r0   rA   zActivateTOTPView.form_valid   s    I&&t|'8$+FF	,0LLL#,T\->??GGG( 	 	D +00(*"&- 1   
 &dl33L(*,M	
 	
 	
 ww!!$'''r1   )rB   rC   rD   r   r;   rE   rF   rG   r)   r^   r4   r   r   rA   rH   rI   s   @r0   rd   rd   `   s        !J-0@0SSM: : : : :
    (    
T T T$ $ $
( ( ( ( ( ( ( ( (r1   rd   c                        e Zd ZeZdej        z   Z ed          Z	d Z
 ee           fd            Z fdZd Z fdZ xZS )DeactivateTOTPViewzmfa/totp/deactivate_form.r~   c                    t          t          | j        j        t          j        j                  | _        t          |j        t          j        j        g          st          t          d                    S  | j
        |g|R i |S )Nr%   rW   mfa_activate_totp)r   r   r,   r%   r&   r'   r   r   r   r	   	_dispatch)r+   r,   r-   r.   s       r0   r)   zDeactivateTOTPView.dispatch   s    ."#(
 
 

 gl]-?-D,EFF 	F'0C(D(DEEEt~g7777777r1   c                 >     t                      j        |g|R i |S )zThere's no point to reauthenticate when MFA is not enabled, so the
        `is_mfa_enabled` chheck needs to go first, which is why we cannot slap a
        `reauthentication_required` decorator on the `dispatch` directly.
        )r(   r)   r*   s       r0   r   zDeactivateTOTPView._dispatch   s,      uww9$999&999r1   c                     t                                                      }| j        |d<   |                    di            |S )Nr   data)r(   r4   r   
setdefaultr5   s     r0   r4   z"DeactivateTOTPView.get_form_kwargs   s@    gg%%''#1O
 	vr"""
r1   c                 B    t          t          j        d| j                  S )Ndeactivate_totpr9   r<   s    r0   r   z!DeactivateTOTPView.get_form_class   s    l02CT_UUUr1   c                    | j                                                                          t          j                            | j         j                  }| j         |fD ]5}|r1t          j        	                    t          | j
        j        |           6t          | j
                  }|                    | j
        t          j        d           t                                          |          S )Nr   z!mfa/messages/totp_deactivated.txt)r   rX   
deactivater   r_   delete_dangling_recovery_codesr%   r   authenticator_removedr   r,   r   r   r   r   r(   rA   )r+   r@   r   rZ   rv   r/   s        r0   rA   zDeactivateTOTPView.form_valid   s    !!,,...'FF#
 
 '1 	 	D -22(*"& 3   
 &dl33L(*,O	
 	
 	
 ww!!$'''r1   )rB   rC   rD   r   r;   rE   rF   rG   r
   success_urlr)   r   r   r   r4   r   rA   rH   rI   s   @r0   r   r      s        #J/2B2UUM,{++K8 8 8 /00: : : : 10:    V V V( ( ( ( ( ( ( ( (r1   r   c                   `     e Zd Zej        Zdej        z   Z e	d          Z
 fdZ fdZ xZS )GenerateRecoveryCodesViewzmfa/recovery_codes/generate.r}   c                    t           j                            | j        j        t           j        j                                                   t          j	        | j        j                  }t          | j                  }|                    | j        t          j        d           t          j                            t           | j        j        |j                   t%                                          |          S )Nr   z)mfa/messages/recovery_codes_generated.txtr   )r   r_   r`   r,   r%   r&   r   deleter   r   r   r   r   r   r   authenticator_resetr   r   r(   rA   )r+   r@   r   rv   r/   s       r0   rA   z$GenerateRecoveryCodesView.form_valid   s    $$");)J 	% 	
 	

&(((():;;%dl33L(*,W	
 	
 	
 	#(( t|'8HX 	) 	
 	
 	
 ww!!$'''r1   c                 J    t                      j        di |}g }t          j                            | j        j        t          j        j                  	                                }|r&|
                                                                }t          |          |d<   |S )Nr   unused_code_countrV   )r(   r^   r   r_   r`   r,   r%   r&   r   firstrX   get_unused_codeslen)r+   r.   r6   unused_codesr   r/   s        r0   r^   z*GenerateRecoveryCodesView.get_context_data   s    &egg&0000%-44");)J 5 
 

%'' 	  	C(--//@@BBL#&|#4#4 
r1   )rB   rC   rD   r   Formr;   rE   rF   rG   r
   r   rA   r^   rH   rI   s   @r0   r   r      sv        J25E5XXM,899K( ( ( ( (	 	 	 	 	 	 	 	 	r1   r   c                   :     e Zd ZdZdZ fdZ fdZ fdZ xZS )DownloadRecoveryCodesViewzmfa/recovery_codes/download.txtz
text/plainc                 2   t          t          | j        j        t          j        j                  | _        | j                                                                        | _	        | j	        st                      S  t                      j        |g|R i |S )Nr   )r   r   r,   r%   r&   r   r   rX   r   r   r   r(   r)   r*   s       r0   r)   z"DownloadRecoveryCodesView.dispatch  s    ."#2
 
 

 !.3355FFHH  	99uww9$999&999r1   c                 N     t                      j        di |}| j        |d<   |S )Nr   rV   )r(   r^   r   )r+   r.   r6   r/   s      r0   r^   z*DownloadRecoveryCodesView.get_context_data  s1    &egg&0000"/N
r1   c                 F     t                      j        |fi |}d|d<   |S )Nz)attachment; filename="recovery-codes.txt"zContent-Disposition)r(   render_to_response)r+   contextresponse_kwargsresponser/   s       r0   r   z,DownloadRecoveryCodesView.render_to_response  s1    -577-gIIII*U&'r1   )	rB   rC   rD   rG   content_typer)   r^   r   rH   rI   s   @r0   r   r      st        5ML	: 	: 	: 	: 	:    
        r1   r   c                   2     e Zd Zdej        z   Z fdZ xZS )ViewRecoveryCodesViewzmfa/recovery_codes/index.c                 &    t                      j        di |}t          t          | j        j        t          j        j                  }|                    |	                                
                                t          j        d           |S )Nr   )r   total_countrV   )r(   r^   r   r   r,   r%   r&   r   ru   rX   r   r   RECOVERY_CODE_COUNT)r+   r.   r6   r   r/   s       r0   r^   z&ViewRecoveryCodesView.get_context_data"  s    &egg&0000)"#2
 
 

 	

 - 2 2 4 4 E E G G+? 	
 	
 	
 
r1   rb   rI   s   @r0   r   r     sF        /2B2UUM        r1   r   )Drq   djangor   django.contribr   django.contrib.auth.decoratorsr   django.httpr   r   django.shortcutsr   django.urlsr	   r
   django.utils.decoratorsr   django.views.genericr   django.views.generic.editr   allauth.accountr   rE   allauth.account.adapterr   r   allauth.account.decoratorsr   allauth.account.stagesr   allauth.account.viewsr   allauth.mfar   r   allauth.mfa.adapterallauth.mfa.formsr   r   r   allauth.mfa.modelsr   allauth.mfa.recovery_codesr   allauth.mfa.stagesr   allauth.mfa.utilsr   allauth.utilsr   r   as_viewr8   rL   rQ   rS   indexrd   r{   r   r   r   generate_recovery_codesr   download_recovery_codesr   view_recovery_codesrV   r1   r0   <module>r      s          # # # # # # 9 9 9 9 9 9 5 5 5 5 5 5 5 5 . . . . . . - - - - - - - - 4 4 4 4 4 4 - - - - - - . . . . . . < < < < < < F F F F F F @ @ @ @ @ @ 7 7 7 7 7 7 8 8 8 8 8 8 3 3 3 3 3 3 3 3 3 3 + + + + + +         
 - , , , , , 4 4 4 4 4 4 0 0 0 0 0 0 , , , , , , ( ( ( ( ( (! ! ! ! !x ! ! !2  '')) .z222
U 
U 
U 
U 
U/ 
U 
U 32
U $++-- .z222       32 	 +*===;( ;( ;( ;( ;(x ;( ;( >=;(| !((** .z2224( 4( 4( 4( 4( 4( 4( 324(n %,,.. +*===       >=> 4;;==  +*===       >=4 4;;==  +*===    L   >=& ,3355   r1   