o
    h1                     @   s  d dl Z d dlZd dlZd dlZd dlZd dlZd dl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mZmZ d dl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 Z#ej$dd Z%ej$dd Z&ej$dd Z'ej$dd Z(ej$dd Z)ej$dd Z*ej$dd Z+ej$dd Z,ej$dd  Z-ej$d!d" Z.ej$d#d$d%d& Z/ej$d'd( Z0ej$d)d* Z1ej$d+d, Z2ej$d-d. Z3ej$d/d0 Z4ej$d1d2 Z5ej$d3d4 Z6ej$d5d6 Z7ej$d7d8 Z8ej$d9d: Z9ej$d;d< Z:ej$d=d> Z;ej$d?d@ Z<ej$dAdB Z=ej$dCdD Z>ej$dEdF Z?ej$d#d$dGdH Z@ej$dIdJ ZAej$dKdL ZBej$dMdN ZCej$dOdP ZDdS )Q    Ncontextmanager)MockPropertyMockpatch)get_user_model)MessageMiddleware)SessionMiddleware)clear_url_cachesset_urlconf)EmailAddress)
user_emailuser_pk_to_url_struser_username)context)statekit)AuthProcessc                 C   sR   |  ddkr%g }|D ]}|jd ds|| q|D ]	}|| qd S d S )Nz--dsztests.headless_only.settingsr   zallauth/headless)	getoptionlocation
startswithappendremove)configitemsremoved_itemsitem r   K/var/www/html/env_mimamsha/lib/python3.10/site-packages/allauth/conftest.pypytest_collection_modifyitems   s   
r   c                 C      |  S Nr   )user_factoryr   r   r   user#      r"   c                 C   s   |  | | S r    )force_login)clientr"   r   r   r   auth_client(   s   
r&   c                  C      dd } | S )Nc                   S   s   t t S r    )struuiduuid4r   r   r   r   f0   s   zpassword_factory.<locals>.fr   r+   r   r   r   password_factory.      r-   c                 C   r   r    r   )r-   r   r   r   user_password6   r#   r/   c                   C      dS )NTr   r   r   r   r   email_verified;      r1   c              
      s(   d d dd|d d dddf
 fdd	}|S )NTFc
                    s   ddl m}
 |st j}| s|r |d} t }| }|dkr$||_n||d u r,n| t|| t	|| p9d |rQ|
  | rQ|rQtjj||  |dd |	rbddlm} |j||  |rl|
 ||| |S )	Nr   get_adapter)username! T)r"   emailverifiedprimaryauth)allauth.account.adapterr4   r)   r*   hexr   passwordset_passwordr   r   saver   objectscreatelowerallauth.mfa.totp.internalr<   TOTPactivategenerate_totp_secret	set_phone)r8   r5   commit
with_emailr1   r?   phonephone_verifiedwith_emailaddress	with_totpr4   Userr"   r<   email_factoryr/   r   r   factoryB   s6   


zuser_factory.<locals>.factoryr   )rR   dbr/   r1   rS   r   rQ   r   r!   @   s   -r!   c                  C   s   ddd} | S )NFc                 S   sT   |d u r| st  j} |  dt  j d}|r$ddd |D }|S | }|S )N@z.orgr7   c                 S   s"   g | ]}t | | gqS r   )randomchoiceupperrD   ).0cr   r   r   
<listcomp>{   s   " z2email_factory.<locals>.factory.<locals>.<listcomp>)r)   r*   r>   joinrD   )r5   r8   
mixed_caser   r   r   rS   t   s   
zemail_factory.<locals>.factory)NNFr   )rS   r   r   r   rR   r   s   
rR   c                  C      t dd } | S )Nc                  s   <    t d} d| _d V  W d    d S 1 sw   Y  d S )NzIallauth.account.internal.flows.reauthentication.did_recently_authenticateTr   return_valuemr   r   r   r+      s   "z"reauthentication_bypass.<locals>.fr   r,   r   r   r   reauthentication_bypass   s   
rd   c                  C   r^   )Nc           
      s   s:   ddl m} ddlm} tdtd}tdc}i ddif|_td	H}td
4}| | jd }t	 }d|j
_||_t	 |_t	 }	d|	_|	|_tdd||iiV  W d    n1 s`w   Y  W d    n1 sow   Y  W d    n1 s~w   Y  W d    d S W d    d S 1 sw   Y  d S )Nr   )websafe_encoder3   z>allauth.mfa.webauthn.internal.auth.WebAuthn.authenticator_data)new_callablez+fido2.server.Fido2Server.authenticate_beginstatedummyz.fido2.server.Fido2Server.authenticate_completez@allauth.mfa.webauthn.internal.auth.parse_authentication_responseidcredential_idresponse
userHandle)fido2.utilsre   allauth.mfa.adapterr4   r   r   ra   %get_public_key_credential_user_entityr"   r   credential_datarj   jsondumps)
authenticatorre   r4   ad_mab_mac_mrc   user_handleauthenticator_databindingr   r   r   r+      sP   

"z)webauthn_authentication_bypass.<locals>.fr   r,   r   r   r   webauthn_authentication_bypass   s   
!rz   c                  C   r^   )Nc                 3   s    t dP}t d3}t |_G  fdddt}|d}||_tddd iid	d
dddgdddV  W d    n1 s@w   Y  W d    d S W d    d S 1 sXw   Y  d S )Nz*fido2.server.Fido2Server.register_completez>allauth.mfa.webauthn.internal.auth.parse_registration_responsec                          e Zd Z fddZdS )zFwebauthn_registration_bypass.<locals>.f.<locals>.FakeAuthenticatorDatac                    s    S r    r   )selfpasswordlessr   r   is_user_verified   s   zWwebauthn_registration_bypass.<locals>.f.<locals>.FakeAuthenticatorData.is_user_verifiedN)__name__
__module____qualname__r   r   r}   r   r   FakeAuthenticatorData       r   s   bindingzcross-platform	credPropsrk123456aocdjusb)attestationObjectclientDataJSON
transportsz
public-key)authenticatorAttachmentclientExtensionResultsri   rawIdrk   type)r   r   ra   bytesrq   rr   )r"   r~   rc_mrc   r   ry   r   r}   r   r+      s4   

"z'webauthn_registration_bypass.<locals>.fr   r,   r   r   r   webauthn_registration_bypass   s   
r   T)autousec                   C   s   t jd  d S r    )r   _request_varsetr   r   r   r   clear_context_request   s   r   c                 c   s.    ddl m} dddii| _|  d V  d S )Nr   )cachedefaultBACKENDz-django.core.cache.backends.locmem.LocMemCache)django.core.cacher   CACHESclear)settingsr   r   r   r   enable_cache   s   
r   c                  C   r^   )Nc                  s   r_   )Nz1allauth.mfa.totp.internal.auth.validate_totp_codeTr`   rb   r   r   r   r+      s
   
"z!totp_validation_bypass.<locals>.fr   r,   r   r   r   totp_validation_bypass   s   
r   c                   C   r0   Nzunittest-serverr   r   r   r   r   provider_id   r2   r   c                   C   r0   r   r   r   r   r   r   openid_connect_provider_id   r2   r   c                  C   r'   )Nc                 S   s8   ddl m} | }t| }|| }| d| }|S )Nr   )app_settings-)allauth.accountr   PASSWORD_RESET_TOKEN_GENERATORr   
make_token)r"   r   token_generatoruidtemp_keykeyr   r   r   r+     s   
z'password_reset_key_generator.<locals>.fr   r,   r   r   r   password_reset_key_generator  s   	r   c                 C      ddddgi}d|i| _ |S )NAPPS	client_idsecretr   r   googleSOCIALACCOUNT_PROVIDERS)r   	gsettingsr   r   r   google_provider_settings     
r   c                 C   r   )Nr   r   r   r   twitterr   )r   	tsettingsr   r   r   twitter_provider_settings  r   r   c                 C   s"   ddl m} |j| |  | S Nr   r;   )rE   r<   rF   rG   rH   )r"   r<   r   r   r   user_with_totp  s   r   c                 C   s   ddl m} |j|  | S r   )#allauth.mfa.recovery_codes.internalr<   RecoveryCodesrG   )r   r<   r   r   r   user_with_recovery_codes%  s   r   c                 C   s.   ddl m} |jj| |jjddi dd}|S )Nr   )AuthenticatorzTest passkeyT)namer~   
credential)r"   r   data)allauth.mfa.modelsr   rB   rC   TypeWEBAUTHN)r"   r   rs   r   r   r   passkey-  s   	r   c                 C   s   | S r    r   )r"   r   r   r   r   user_with_passkey=  r2   r   c                  C   s   ddd} | S )Nc                 [   sR   d}| j }d|p
tji|}|r||d< i }|t g||< ||tj< |  |S )Nr   processnext)sessionr   LOGINtimer   STATES_SESSION_KEYrA   )r%   r   next_urlkwargsstate_idr   rg   statesr   r   r   setupD  s   
z&sociallogin_setup_state.<locals>.setup)NNr   )r   r   r   r   sociallogin_setup_stateB  s   
r   c                    s   G  fddd}| S )Nc                       r{   )z'request_factory.<locals>.RequestFactoryc                    s2     |}tdd | tdd | |S )Nc                 S      d S r    r   requestr   r   r   <lambda>X      z=request_factory.<locals>.RequestFactory.get.<locals>.<lambda>c                 S   r   r    r   r   r   r   r   r   Y  r   )getr	   process_requestr   )r|   pathr   rfr   r   r   V  s   
z+request_factory.<locals>.RequestFactory.getN)r   r   r   r   r   r   r   r   RequestFactoryU  r   r   r   )r   r   r   r   r   request_factoryS  s   r   c                        ddl m   fdd} | S )Nr   email_verification_by_codec                    ^   t d|d jt jt jB t jB d  }t| dr|  }n| j	}| j
 d |ks-J |S )Nz
[0-9a-z]{6}
r   headless_sessioncode)researchbodyIDOTALL	MULTILINEstriphasattrr   r   #EMAIL_VERIFICATION_CODE_SESSION_KEYr%   
mailoutboxr   r   r   r   r   r+   c      

z+get_last_email_verification_code.<locals>.f)allauth.account.internal.flowsr   r,   r   r   r    get_last_email_verification_code_     r   c                     r   )Nr   password_reset_by_codec                    r   )Nz
[0-9a-z]{8}
r   r   r   )r   r   r   r   r   r   r   r   r   r   'PASSWORD_RESET_VERIFICATION_SESSION_KEYr   r   r   r   r+   z  r   z'get_last_password_reset_code.<locals>.f)r   r   r,   r   r   r   get_last_password_reset_codev  r   r   c                    s   t  fdd}|S )Nc                  ;   s     fdd}i }|   D ]\}}t |rt |||< t || q|  d V  |   D ]\}}||v r?t |||  q.t | q.|  d S )Nc               
      sL   t    jddddddddd	f
D ]} | tjv rttj|   qtd  d S )
Nzallauth.account.urlszallauth.urlszallauth.mfa.urlszallauth.mfa.base.urlszallauth.headless.urlszallauth.headless.base.urlsz#allauth.headless.socialaccount.urlsz"allauth.headless.usersessions.urlszallauth.headless.mfa.urls)r
   ROOT_URLCONFsysmodules	importlibreloadr   )urlconfr   r   r   reload_urlconf  s    
z:settings_impacting_urls.<locals>.f.<locals>.reload_urlconf)r   r   getattrsetattrdelattr)kvr  
old_valueskvr  r   r   r+     s   

z"settings_impacting_urls.<locals>.fr   )r   r+   r   r  r   settings_impacting_urls  s   !r  c                  c   s     ddl m}  d V  |   d S Nr   
phone_stub)tests.commonr  r   r  r   r   r   clear_phone_stub  s   r  c                  C   s   ddl m}  | jS r  )r  r  
sms_outboxr  r   r   r   r    s   r  c                  C   r'   )Nc                   S   s   dt dddS )Nz+31   l    d(	 010)rV   randintr   r   r   r   r+     s   zphone_factory.<locals>.fr   r,   r   r   r   phone_factory  r.   r  c                 C   r   r    r   )r  r   r   r   rL     r#   rL   c                 C   s    ddl m} | | |d | S )Nr   r3   T)r=   r4   rI   )r"   rL   r4   r   r   r   user_with_phone  s   r  )Er   rq   rV   r   r   r   r)   
contextlibr   unittest.mockr   r   r   django.contrib.authr   "django.contrib.messages.middlewarer   "django.contrib.sessions.middlewarer	   django.urlsr
   r   pytestallauth.account.modelsr   allauth.account.utilsr   r   r   allauth.corer   allauth.socialaccount.internalr   .allauth.socialaccount.providers.base.constantsr   r   fixturer"   r&   r-   r/   r1   r!   rR   rd   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  rL   r  r   r   r   r   <module>   s    






1


&

!


















&



