o
    hPF                     @   s$  d dl 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 Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Z d*d+ Z!d,d- Z"d.d/ Z#d0d1 Z$d2d3 Z%d4d5 Z&d6d7 Z'dS )8    N)
HTTPStatus)patch)reverse)assertTemplateUsed)EmailAddress)get_adapter)SocialAccount)AuthProcessc                 C   s0   d|_ | j|dddtjdd}t|d d S )NF+headless:socialaccount:redirect_to_providerdummyzhttps://unsafe.org/hackprovidercallback_urlprocessdata'socialaccount/authentication_error.html)HEADLESS_ONLYpostr	   LOGINr   clientheadless_reversedbsettingsresp r   j/var/www/html/env_mimamsha/lib/python3.10/site-packages/allauth/headless/socialaccount/tests/test_views.pytest_bad_redirect   s   r   c                 C   s0   | j |dddtjdd}|jtjksJ d S )Nr
   r   /r   r   )r   r	   r   status_coder   FOUND)r   r   r   r   r   r   r   test_valid_redirect   s   r"   c                 C   sP   | j |dddtjdd}t|ddr|jtjksJ d S |jtjks&J d S )Nr
   unknownr   r   r   r   F)r   r	   r   getattrr    r   r!   OKr   r   r   r   test_unknown_provider_redirect(   s   r&   c              	   C   s   t jj||dd}t jj||dd}| |d}| }|d tjks&J t|d dks0J | j|d|j	|j
dd	d
}|jtjksGJ | tjdddddg|ddddgdks`J t jj|jd rlJ t jj|jd sxJ d S )Np123userr   uidp456'headless:socialaccount:manage_providersstatusr      r   accountapplication/jsonr   content_typezUnittest ServerzUnittest client_idz=https://unittest.example.com/.well-known/openid-configurationprovider_redirectprovider_token)	client_idopenid_configuration_urlflowsidnamedisplayr   r*   )r-   r   )pk)r   objectscreategetjsonr   r%   lendeleter   r*   r    filterr=   exists)auth_clientr)   r   provider_idaccount_to_delaccount_to_keepr   r   r   r   r   test_manage_providers7   sB   rJ   c                 C   sN   | j |d|dddd}|jtjksJ | tjdddgd	ks%J d S )
Nr,   r#   r/   r1   r2   account_not_foundzUnknown account.codemessager-   errors)rC   r    r   BAD_REQUESTrA   )rF   r)   r   rG   r   r   r   r   test_disconnect_bad_request^   s   
rR   c                 C   s   |   |jdgd | | tjj|d|d}| j|d||jddd}|jt	j
ks/J | t	j
d	d
dgdks?J d S )Npassword)update_fields123r)   r*   r   r,   r/   r1   r2   no_passwordz$Your account has no password set up.rL   rO   )set_unusable_passwordsaveforce_loginr   r>   r?   rC   r*   r    r   rQ   rA   )rF   r)   r   rG   r0   r   r   r   r   test_disconnect_not_allowedk   s   

r[   c                 C   s`   t dddd}| j|ddd|itjdd	d
}|jtjks"J tj	j
ddd s.J d S )N{   a@b.comTr9   emailemail_verified%headless:socialaccount:provider_tokenr   id_tokenr   tokenr   r1   r2   r_   verified)rA   dumpsr   r	   r   r    r   r%   r   r>   rD   rE   )r   r   r   rb   r   r   r   r   test_valid_token~   "   rh   c                 C   sj   | j |ddd|d d d dtjdd	d
}|jtjks J | }|tjddddgdks3J d S )Nra   googler   APPSr   r6   rb   r6   rc   r1   r2   zInvalid token.invalid_tokenrd   )rN   rM   paramrO   )r   r	   r   r    r   rQ   rA   )r   r   r   google_provider_settingsr   r   r   r   r   test_invalid_token   s"   
rp   c                 C   s   d|_ |d ddd dddd	}td
|d) | j|ddd|d d d dtjddd}|jtjks:J W d    d S 1 sEw   Y  d S )N	mandatoryrk   
client_id2secret2)r6   secretzuid-from-id-tokenr]   T)subr_   r`   z?allauth.socialaccount.providers.google.views._verify_and_decode)return_valuera   rj   r   r   r6   rl   rc   r1   r2   )	ACCOUNT_EMAIL_VERIFICATIONappendr   r   r	   r   r    r   r%   )r   r   r   ro   r   user_factoryrb   r   r   r   r   test_valid_token_multiple_apps   s*   "rz   c                 C   s"   d|_ | td}t|d dS )zlAuthentication errors use the regular "Third-Party Login Failure"
    template if headless is not used.
    Fgoogle_callbackr   N)r   r@   r   r   )r   r   ro   r   r   r   r   r   #test_auth_error_no_headless_request   s   r|   c                 C   s:   || ddd}|  tdd|  }|d dksJ dS )	zaAuthentication errors redirect to the next URL with ?error params for
    headless requests.
    T/fooheadlessnextr{   ?state=location&/foo?error=unknown&error_process=loginN)r@   r   )r   r   ro   sociallogin_setup_statestater   r   r   r    test_auth_error_headless_request   s   r   c                 C   s2   d| _ ddi| _|td}|d dksJ dS )Authentication errors redirect to a fallback error URL for headless-only,
    in case no next can be recovered from the state.
    Tsocialaccount_login_error/3rdparty/failurer{   r   zDhttp://testserver/3rdparty/failure?error=unknown&error_process=loginNr   HEADLESS_FRONTEND_URLSr@   r   )r   r   r   ro   r   r   r   r   7test_auth_error_no_headless_state_request_headless_only   s   
r   c                 C   sJ   ||ddd}d| _ ddi| _|tdd|  }|d d	ks#J d
S )r   Tr}   r~   r   r   r{   r   r   r   Nr   )r   r   r   ro   r   r   r   r   r   r   4test_auth_error_headless_state_request_headless_only   s
   
r   c                 C   s   t dddd}td$}d|_| j|ddd	|itjd
dd}|jtj	ks*J W d    n1 s4w   Y  t
jjddd rEJ d S )Nr\   r]   Tr^   Lallauth.socialaccount.adapter.DefaultSocialAccountAdapter.is_open_for_signupFra   r   rb   rc   r1   r2   re   )rA   rg   r   rv   r   r	   r   r    r   	FORBIDDENr   r>   rD   rE   )r   r   r   rb   iofsr   r   r   r   test_token_signup_closed   s.   r   c                 C   sL  d|_ d|_d|_d}td|i}| j|ddd|itjd	d
d}|jt	j
ks+J dd | d d D d }|d dksBJ | |d}|jt	jksQJ | g dddgddd|dddddt	jdksnJ | j|dddid
d}|jt	j
ksJ dd | d d D d }|d dksJ tjjdd  sJ d S )!Nrq   TFrU   r9   ra   r   rb   rc   r1   r2   c                 S      g | ]	}| d r|qS 
is_pendingr@   .0fr   r   r   
<listcomp>(      z(test_provider_signup.<locals>.<listcomp>r   r8   r   provider_signup&headless:socialaccount:provider_signupDummyr4   r5   )r8   r9   r:   r;   r)   )r<   has_usable_password)r_   r0   r)   )r   r-   r_   r]   c                 S   r   r   r   r   r   r   r   r   F  r   verify_email)r_   )rw   ACCOUNT_EMAIL_REQUIREDACCOUNT_USERNAME_REQUIREDrA   rg   r   r	   r   r    r   UNAUTHORIZEDr@   r%   r   r>   rD   rE   )r   r   r   r   account_uidrb   r   pending_flowr   r   r   test_provider_signup  sZ   	r   c                 C   s   d|_ d|_d|_tddi}| j|ddd|itjd	d
d}|jt	j
ks)J dd | d d D d }|d dks@J td}d|_| j|dddid
d}W d    n1 s^w   Y  |jt	jkskJ d S )Nrq   TFr9   r\   ra   r   rb   rc   r1   r2   c                 S   r   r   r   r   r   r   r   r   `  r   z&test_signup_closed.<locals>.<listcomp>r   r8   r   r   r   r   r_   r]   )rw   r   r   rA   rg   r   r	   r   r    r   r   r   rv   r   )r   r   r   r   rb   r   r   r   r   r   r   test_signup_closedK  s@   r   c                 C   sn   ||dddd}|j tdd|  ddid	}|jtjks J |d
 dks(J tjj| ddd s5J d S )Nconnectr}   Tr   r   r   dummy_authenticater   r9   r\   r   r   r   rU   r(   )	r   r   r    r   r!   r   r>   rD   rE   )r)   rF   r   r   r   r   r   r   r   r   test_connectp  s   r   c                 C   sZ   d|_ ||dddd}|jtdd|  ddid	}|jtjks#J |d
 dks+J d S )NTr   r}   r   r   r   r9   r\   r   r   z:/foo?error=reauthentication_required&error_process=connect)!ACCOUNT_REAUTHENTICATION_REQUIREDr   r   r    r   r!   )r)   rF   r   r   r   r   r   r   r   r   r   &test_connect_reauthentication_required  s   r   c           	      C   s   | }t jj|ddd ||tjddd}|jtdd|  d	d
id}|jtj	ks-J |d dks5J t jj
| ddd rBJ d S )NrU   r   rV   r}   Tr   r   r   r9   r\   r   r   z0/foo?error=connected_other&error_process=connectr(   )r   r>   r?   r	   CONNECTr   r   r    r   r!   rD   rE   )	r)   ry   rF   r   r   r   
other_userr   r   r   r   r   test_connect_already_connected  s"   

r   c                 C   s`   t dddd}|j|ddd|itjdd	d
}|jtjks"J tj	j
d| d s.J d S )Nr\   r]   Tr^   ra   r   rb   rc   r1   r2   rU   r*   r)   )rA   rg   r   r	   r   r    r   r%   r   r>   rD   rE   )r)   rF   r   r   rb   r   r   r   r   test_token_connect  ri   r   c                 C   s   | }t jj|ddd tdddd}|j|ddd	|itjd
dd}t jjd| d	 r2J |j
tjks:J | tjdddgdksJJ d S )NrU   r   rV   r\   r]   Tr^   ra   rb   rc   r1   r2   r   connected_otherzDThe third-party account is already connected to a different account.rL   rO   )r   r>   r?   rA   rg   r   r	   r   rD   rE   r    r   rQ   )r)   rF   r   r   ry   r   rb   r   r   r   r   $test_token_connect_already_connected  s4   r   c                 C   s,   | j |dddidd}|jtjksJ d S )Nr   r_   r]   r1   r2   )r   r    r   CONFLICTr   r   r   r    test_provider_signup_not_pending  s   r   c              	   C   s   t  d |}tdddd}tdQ td4}ddi|_| j|d	||jj|d
t	j
ddd}|jtjks;J tjjdd sFJ W d    n1 sPw   Y  W d    d S W d    d S 1 shw   Y  d S )Nr\   r]   Tr^   z]allauth.socialaccount.providers.openid_connect.views.OpenIDConnectOAuth2Adapter.openid_configz7allauth.socialaccount.internal.jwtkit.verify_and_decoderu   rU   ra   )r6   rb   rc   r1   r2   )r*   )r   get_providerrA   rg   r   rv   r   appr6   r	   r   r    r   r%   r   r>   rD   rE   )r   r   r   openid_connect_provider_idr   rb   vadr   r   r   r   test_valid_openid_connect_token  s8   

"r   )(rA   httpr   unittest.mockr   django.urlsr   pytest_django.assertsr   allauth.account.modelsr   allauth.socialaccount.adapterr   allauth.socialaccount.modelsr   .allauth.socialaccount.providers.base.constantsr	   r   r"   r&   rJ   rR   r[   rh   rp   rz   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s@    '	9%%