a
    xdz[                     @   sR  d dl Z d dlmZ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 d dlmZ d dlmZmZ d d	lmZmZmZ zd d
l mZ W n ey   dZY n0 G dd deeZG dd deZG dd deeZG dd deZG dd deeZG dd deZ G dd deZ!G dd deeZ"G dd deeZ#G dd deZ$G dd  d eZ%G d!d" d"eeZ&G d#d$ d$e&Z'G d%d& d&e&Z(G d'd( d(e&Z)G d)d* d*e&Z*G d+d, d,eZ+G d-d. d.eZ,G d/d0 d0eZ-G d1d2 d2eZ.G d3d4 d4eeZ/G d5d6 d6eZ0G d7d8 d8eZ1G d9d: d:eZ2G d;d< d<eZ3dS )=    N)OpenIdMixin
OAuthMixinOAuth2MixinGoogleOAuth2MixinFacebookGraphMixinTwitterMixin)json_decode)gen)HTTPClientError)
url_concat)app_log)AsyncHTTPTestCase	ExpectLog)RequestHandlerApplication	HTTPError)mockc                   @   s"   e Zd Zdd Zejdd ZdS )OpenIdClientLoginHandlerc                 C   s   | d| _d S )N/openid/server/authenticate)get_urlZ_OPENID_ENDPOINTselftest r   N/var/www/html/Ranjet/env/lib/python3.9/site-packages/tornado/test/auth_test.py
initialize   s    z#OpenIdClientLoginHandler.initializec                 c   sV   |  dd r>| j| jd dV }|d u r0td| | d S |  }|d u sRJ d S )Nopenid.modehttp_clientr   user is None)get_argumentget_authenticated_usersettings	Exceptionfinishauthenticate_redirect)r   userresr   r   r   get"   s    
zOpenIdClientLoginHandler.getN__name__
__module____qualname__r   r	   	coroutiner(   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd ZdS )OpenIdServerAuthenticateHandlerc                 C   s$   |  ddkrtd| d d S )Nr   Zcheck_authenticationzincorrect openid.mode %rzis_valid:true)r    r#   writer   r   r   r   post1   s    z$OpenIdServerAuthenticateHandler.postNr*   r+   r,   r1   r   r   r   r   r.   0   s   r.   c                   @   s8   e Zd Zdd Zdd Zejdd Zejdd Zd	S )
OAuth1ClientLoginHandlerc                 C   s.   || _ |d| _|d| _|d| _d S )N/oauth1/server/request_token/oauth1/server/authorize/oauth1/server/access_token)_OAUTH_VERSIONr   _OAUTH_REQUEST_TOKEN_URL_OAUTH_AUTHORIZE_URL_OAUTH_ACCESS_TOKEN_URL)r   r   versionr   r   r   r   8   s    z#OAuth1ClientLoginHandler.initializec                 C   s   t dddS NasdfZqwerkeysecretdictr0   r   r   r   _oauth_consumer_token>   s    z.OAuth1ClientLoginHandler._oauth_consumer_tokenc                 c   sV   |  dd r>| j| jd dV }|d u r0td| | d S | j| jd dV  d S )Noauth_tokenr   r   r   )r    r!   r"   r#   r$   authorize_redirectr   r&   r   r   r   r(   A   s    
zOAuth1ClientLoginHandler.getc                 C   s:   |  dd rtd|tdddkr0td| tddS )	NZfail_in_get_userzfailing in get_useruiop5678r>   zincorrect access token %rfoo@example.com)email)r    r#   rB   )r   access_tokenr   r   r   _oauth_get_user_futureM   s
    z/OAuth1ClientLoginHandler._oauth_get_user_futureN)	r*   r+   r,   r   rC   r	   r-   r(   rL   r   r   r   r   r3   7   s   
r3   c                   @   s   e Zd ZdZejdd ZdS )!OAuth1ClientLoginCoroutineHandlerzDReplaces OAuth1ClientLoginCoroutineHandler's get() with a coroutine.c              
   c   sh   |  dd rZz|  V  W qd tyV } z$| d | d|  W Y d }~qdd }~0 0 n
|  V  d S )NrD     zgot exception: %s)r    r!   r#   
set_statusr/   rE   )r   er   r   r   r(   Y   s    
&z%OAuth1ClientLoginCoroutineHandler.getN)r*   r+   r,   __doc__r	   r-   r(   r   r   r   r   rM   V   s   rM   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )$OAuth1ClientRequestParametersHandlerc                 C   s
   || _ d S N)r7   )r   r;   r   r   r   r   h   s    z/OAuth1ClientRequestParametersHandler.initializec                 C   s   t dddS r<   rA   r0   r   r   r   rC   k   s    z:OAuth1ClientRequestParametersHandler._oauth_consumer_tokenc                 C   s,   | j dtdddtddd}| | d S )Nzhttp://www.example.com/api/asdfrG   rH   r>   bar)foo)
parameters)Z_oauth_request_parametersrB   r/   )r   paramsr   r   r   r(   n   s    
z(OAuth1ClientRequestParametersHandler.getN)r*   r+   r,   r   rC   r(   r   r   r   r   rR   g   s   rR   c                   @   s   e Zd Zdd ZdS )OAuth1ServerRequestTokenHandlerc                 C   s   |  d d S )Nz(oauth_token=zxcv&oauth_token_secret=1234r/   r0   r   r   r   r(   x   s    z#OAuth1ServerRequestTokenHandler.getNr*   r+   r,   r(   r   r   r   r   rX   w   s   rX   c                   @   s   e Zd Zdd ZdS )OAuth1ServerAccessTokenHandlerc                 C   s   |  d d S )Nz(oauth_token=uiop&oauth_token_secret=5678rY   r0   r   r   r   r(   }   s    z"OAuth1ServerAccessTokenHandler.getNrZ   r   r   r   r   r[   |   s   r[   c                   @   s   e Zd Zdd Zdd ZdS )OAuth2ClientLoginHandlerc                 C   s   | d| _d S )Nz/oauth2/server/authorize)r   r9   r   r   r   r   r      s    z#OAuth2ClientLoginHandler.initializec                 C   s   |   }|d u sJ d S rS   )rE   )r   r'   r   r   r   r(      s    zOAuth2ClientLoginHandler.getN)r*   r+   r,   r   r(   r   r   r   r   r\      s   r\   c                   @   s"   e Zd Zdd Zejdd ZdS )FacebookClientLoginHandlerc                 C   s(   | d| _| d| _| d| _d S )Nz/facebook/server/authorize/facebook/server/access_tokenz/facebook/server)r   r9   r:   Z_FACEBOOK_BASE_URLr   r   r   r   r      s    z%FacebookClientLoginHandler.initializec                 c   sh   |  dd rD| j| j | jd | jd |  ddV }| | n | j| j | jd ddid d S )Ncodefacebook_api_keyfacebook_secret)redirect_uri	client_idclient_secretr_   scopezread_stream,offline_access)rb   rc   extra_params)r    r!   requestfull_urlr"   r/   rE   rF   r   r   r   r(      s    zFacebookClientLoginHandler.getNr)   r   r   r   r   r]      s   r]   c                   @   s   e Zd Zdd ZdS ) FacebookServerAccessTokenHandlerc                 C   s   |  tddd d S )Nr=   i  rK   Z
expires_in)r/   rB   r0   r   r   r   r(      s    z$FacebookServerAccessTokenHandler.getNrZ   r   r   r   r   ri      s   ri   c                   @   s   e Zd Zdd ZdS )FacebookServerMeHandlerc                 C   s   |  d d S )Nz{}rY   r0   r   r   r   r(      s    zFacebookServerMeHandler.getNrZ   r   r   r   r   rk      s   rk   c                   @   s   e Zd Zdd Zdd ZdS )TwitterClientHandlerc                 C   s@   | d| _| d| _| d| _| d| _| d| _d S )Nr4   /twitter/server/access_tokenr5   z/twitter/server/authenticatez/twitter/api)r   r8   r:   r9   Z_OAUTH_AUTHENTICATE_URLZ_TWITTER_BASE_URLr   r   r   r   r      s
    zTwitterClientHandler.initializec                 C   s
   | j d S )Nr   )r"   r0   r   r   r   get_auth_http_client   s    z)TwitterClientHandler.get_auth_http_clientN)r*   r+   r,   r   rn   r   r   r   r   rl      s   rl   c                   @   s   e Zd Zejdd ZdS )TwitterClientLoginHandlerc                 c   sB   |  dd r4|  V }|d u r&td| | d S |  V  d S NrD   r   )r    r!   r#   r$   rE   rF   r   r   r   r(      s    

zTwitterClientLoginHandler.getNr*   r+   r,   r	   r-   r(   r   r   r   r   ro      s   ro   c                   @   s   e Zd Zejdd ZdS ) TwitterClientAuthenticateHandlerc                 c   sB   |  dd r4|  V }|d u r&td| | d S |  V  d S rp   )r    r!   r#   r$   r%   rF   r   r   r   r(      s    

z$TwitterClientAuthenticateHandler.getNrq   r   r   r   r   rr      s   rr   c                   @   s   e Zd Zejdd ZdS )%TwitterClientLoginGenCoroutineHandlerc                 c   s0   |  dd r"|  V }| | n
|  V  d S )NrD   )r    r!   r$   rE   rF   r   r   r   r(      s    
z)TwitterClientLoginGenCoroutineHandler.getNrq   r   r   r   r   rs      s   rs   c                   @   s   e Zd Zejdd ZdS )TwitterClientShowUserHandlerc                 c   s\   z&| j d| d tddddV }W n& tyL   | d | d Y n0 | | d S )	Nz/users/show/%snamehjklvbnmr>   rK     zerror from twitter request)Ztwitter_requestr    rB   r
   rO   r$   r   responser   r   r   r(      s    

z TwitterClientShowUserHandler.getNrq   r   r   r   r   rt      s   rt   c                   @   s   e Zd Zdd ZdS )TwitterServerAccessTokenHandlerc                 C   s   |  d d S )Nz8oauth_token=hjkl&oauth_token_secret=vbnm&screen_name=foorY   r0   r   r   r   r(      s    z#TwitterServerAccessTokenHandler.getNrZ   r   r   r   r   r|      s   r|   c                   @   s   e Zd Zdd ZdS )TwitterServerShowUserHandlerc                 C   s   |dkrt dd| jjv s J d| jjv s0J d| jjv s@J | ddksRJ | dd	ksdJ | d
dksvJ | ddksJ | t|| d d S )Nerrorry   oauth_nonceoauth_timestampoauth_signatureoauth_consumer_keytest_twitter_consumer_keyoauth_signature_method	HMAC-SHA1oauth_version1.0rD   rv   screen_nameru   )r   rg   	argumentsr    r/   rB   
capitalize)r   r   r   r   r   r(      s    z TwitterServerShowUserHandler.getNrZ   r   r   r   r   r}      s   r}   c                   @   s   e Zd Zdd ZdS )%TwitterServerVerifyCredentialsHandlerc                 C   s   d| j jv sJ d| j jv s J d| j jv s0J | ddksBJ | ddksTJ | dd	ksfJ | d
dksxJ | tddd d S )Nr   r   r   r   r   r   r   r   r   rD   rv   rU   Foor   )rg   r   r    r/   rB   r0   r   r   r   r(     s    z)TwitterServerVerifyCredentialsHandler.getNrZ   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	e
edu d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S )+AuthTestc                 C   s   t dtt| dfdtt| ddfdttddfdtt| d	dfd
tt| d	dfdttd	dfdtt| dfdtt| dfdtt| dfdt	t| dfdt
t| dfdtt| dfdtfdtfdtfdtfdtfdtfdtfdtfg| jdddddS )N/openid/client/loginr   /oauth10/client/loginr   )r   r;   /oauth10/client/request_params)r;   /oauth10a/client/loginz1.0az /oauth10a/client/login_coroutine/oauth10a/client/request_params/oauth2/client/login/facebook/client/login/twitter/client/login/twitter/client/authenticate#/twitter/client/login_gen_coroutinez/twitter/client/show_userr   r4   r6   r^   z/facebook/server/merm   z"/twitter/api/users/show/(.*)\.jsonz-/twitter/api/account/verify_credentials\.jsonr   Ztest_twitter_consumer_secretZtest_facebook_api_keyZtest_facebook_secret)r   Ztwitter_consumer_keyZtwitter_consumer_secretr`   ra   )r   r   rB   r3   rR   rM   r\   r]   ro   rr   rs   rt   r.   rX   r[   ri   rk   r|   r}   r   r   r0   r   r   r   get_app  sl    


;zAuthTest.get_appc                 C   s4   | j ddd}| |jd | d|jd v  d S )Nr   FZfollow_redirects.  z/openid/server/authenticate?LocationfetchassertEqualr_   
assertTrueheadersrz   r   r   r   test_openid_redirectU  s    zAuthTest.test_openid_redirectc                 C   s0   |  d}|  t|j}| |d d d S )Nz/openid/client/login?openid.mode=blah&openid.ns.ax=http://openid.net/srv/ax/1.0&openid.ax.type.email=http://axschema.org/contact/email&openid.ax.value.email=foo@example.comrJ   rI   r   rethrowr   bodyr   r   r{   parsedr   r   r   test_openid_get_userZ  s    
zAuthTest.test_openid_get_userc                 C   sR   | j ddd}| |jd | |jd d | d|jd v |jd  d S )	Nr   Fr   r   r   )/oauth1/server/authorize?oauth_token=zxcv(_oauth_request_token="enhjdg==|MTIzNA=="
Set-Cookier   r   r_   r   r   endswithrz   r   r   r   test_oauth10_redirecte  s    
zAuthTest.test_oauth10_redirectc                 C   sP   | j dddid}|  t|j}| |d d | |d tdd	d
 d S )Nz&/oauth10/client/login?oauth_token=zxcvCookie&_oauth_request_token=enhjdg==|MTIzNA==r   rJ   rI   rK   rG   rH   r>   r   r   r   r   r   rB   r   r   r   r   test_oauth10_get_usert  s    
zAuthTest.test_oauth10_get_userc                 C   s\   |  d}|  t|j}| |d d | |d d | d|v  | d|v  d S )Nr   r   r=   rD   rG   r   r   r   r   r   r   r   r   r   r   r   r   test_oauth10_request_parameters~  s    

z(AuthTest.test_oauth10_request_parametersc                 C   sR   | j ddd}| |jd | |jd d | d|jd v |jd  d S )	Nr   Fr   r   r   r   r   r   r   rz   r   r   r   test_oauth10a_redirect  s    
zAuthTest.test_oauth10a_redirectNzmock package not presentc              	   C   s   t jtd`}td|_ttd | jddd}W d    n1 sH0    Y  | 	|j
d W d    n1 st0    Y  d S )Nr(   ZboomzUncaught exceptionr   Fr   ry   )r   patchobjectrX   r#   Zside_effectr   r   r   r   r_   )r   r(   r{   r   r   r   test_oauth10a_redirect_error  s
    
,z%AuthTest.test_oauth10a_redirect_errorc                 C   sP   | j dddid}|  t|j}| |d d | |d tdd	d
 d S )Nz'/oauth10a/client/login?oauth_token=zxcvr   r   r   rJ   rI   rK   rG   rH   r>   r   r   r   r   r   test_oauth10a_get_user  s    
zAuthTest.test_oauth10a_get_userc                 C   s\   |  d}|  t|j}| |d d | |d d | d|v  | d|v  d S )Nr   r   r=   rD   rG   r   r   r   r   r   r   r    test_oauth10a_request_parameters  s    

z)AuthTest.test_oauth10a_request_parametersc                 C   s$   | j dddid}| |jd d S )NzG/oauth10a/client/login_coroutine?oauth_token=zxcv&fail_in_get_user=truer   r   r   rN   )r   r   r_   rz   r   r   r   *test_oauth10a_get_user_coroutine_exception  s
    z3AuthTest.test_oauth10a_get_user_coroutine_exceptionc                 C   s4   | j ddd}| |jd | d|jd v  d S )Nr   Fr   r   z/oauth2/server/authorize?r   r   rz   r   r   r   test_oauth2_redirect  s    zAuthTest.test_oauth2_redirectc                 C   sz   | j ddd}| |jd | d|jd v  | j ddd}| |jd t|j}| |d	 d
 | |d d d S )Nr   Fr   r   z/facebook/server/authorize?r   z /facebook/client/login?code=1234   rK   r=   Zsession_expiresZ3600)r   r   r_   r   r   r   r   )r   r{   r&   r   r   r   test_facebook_login  s    
zAuthTest.test_facebook_loginc                 C   sR   | j |dd}| |jd | |jd d | d|jd v |jd  d S )NFr   r   r   r   r   r   r   )r   urlr{   r   r   r   base_twitter_redirect  s    
zAuthTest.base_twitter_redirectc                 C   s   |  d d S )Nr   r   r0   r   r   r   test_twitter_redirect  s    zAuthTest.test_twitter_redirectc                 C   s   |  d d S )Nr   r   r0   r   r   r   #test_twitter_redirect_gen_coroutine  s    z,AuthTest.test_twitter_redirect_gen_coroutinec                 C   sZ   | j ddd}| |jd | |jd d|jd  | d|jd v |jd  d S )	Nr   Fr   r   r   z-/twitter/server/authenticate?oauth_token=zxcvr   r   r   rz   r   r   r   "test_twitter_authenticate_redirect  s    
z+AuthTest.test_twitter_authenticate_redirectc                 C   sF   | j dddid}|  t|j}| |ddddd	ddd
 d S )Nz&/twitter/client/login?oauth_token=zxcvr   r   r   rv   rU   rw   )r?   r   r@   r   )rK   ru   r   usernamer   r   r   r   r   test_twitter_get_user  s"    
zAuthTest.test_twitter_get_userc                 C   s.   |  d}|  | t|jddd d S )Nz'/twitter/client/show_user?name=somebodyZSomebodyZsomebody)ru   r   )r   r   r   r   r   rz   r   r   r   test_twitter_show_user  s
    
zAuthTest.test_twitter_show_userc                 C   s*   |  d}| |jd | |jd d S )Nz$/twitter/client/show_user?name=errorry   s   error from twitter request)r   r   r_   r   rz   r   r   r   test_twitter_show_user_error  s    
z%AuthTest.test_twitter_show_user_error)r*   r+   r,   r   r   r   r   r   r   r   unittestZskipIfr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s*   D
	

	r   c                   @   s"   e Zd Zdd Zejdd ZdS )GoogleLoginHandlerc                 C   s.   || _ |d| _|d| _|d| _d S )N/client/login/google/oauth2/authorize/google/oauth2/token)r   r   _OAUTH_REDIRECT_URIr9   r:   r   r   r   r   r     s    zGoogleLoginHandler.initializec                 c   s   |  dd }|d urX| | j|V }| j| jd|d dV }|d |d< | | n4| j| j| jd d | jd d dd	gdd
did d S )Nr_   /google/oauth2/userinforK   rx   google_oauthr?   r@   ZprofilerJ   promptZselect_account)rb   rc   rd   re   Zresponse_typerf   )	r    r!   r   Zoauth2_requestr   r   r/   rE   r"   )r   r_   accessr&   r   r   r   r(     s"    
zGoogleLoginHandler.getNr)   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )GoogleOAuth2AuthorizeHandlerc                 C   s$   d}|  t| dt|d d S )Nfake-authorization-coderb   )r_   )redirectr   r    rB   )r   r_   r   r   r   r(   1  s    z GoogleOAuth2AuthorizeHandler.getNrZ   r   r   r   r   r   0  s   r   c                   @   s   e Zd Zdd ZdS )GoogleOAuth2TokenHandlerc                 C   s&   |  ddksJ | ddd d S )Nr_   r   fake-access-tokenznever-expiresrj   r    r$   r0   r   r   r   r1   8  s    zGoogleOAuth2TokenHandler.postNr2   r   r   r   r   r   7  s   r   c                   @   s   e Zd Zdd ZdS )GoogleOAuth2UserinfoHandlerc                 C   s&   |  ddksJ | ddd d S )NrK   r   r   rI   )ru   rJ   r   r0   r   r   r   r(   A  s    zGoogleOAuth2UserinfoHandler.getNrZ   r   r   r   r   r   @  s   r   c                   @   s   e Zd Zdd Zdd ZdS )GoogleOAuth2Testc                 C   s2   t dtt| dfdtfdtfdtfgdddd	S )
Nr   r   r   r   r   Zfake_google_client_idZfake_google_client_secretr>   )r   )r   r   rB   r   r   r   r0   r   r   r   r   H  s    	zGoogleOAuth2Test.get_appc                 C   s(   |  d}| ddddt|j d S )Nr   r   rI   r   )ru   rJ   rK   )r   ZassertDictEqualr   r   rz   r   r   r   test_google_loginX  s    
z"GoogleOAuth2Test.test_google_loginN)r*   r+   r,   r   r   r   r   r   r   r   G  s   r   )4r   Ztornado.authr   r   r   r   r   r   Ztornado.escaper   Ztornador	   Ztornado.httpclientr
   Ztornado.httputilr   Ztornado.logr   Ztornado.testingr   r   Ztornado.webr   r   r   r   ImportErrorr   r.   r3   rM   rR   rX   r[   r\   r]   ri   rk   rl   ro   rr   rs   rt   r|   r}   r   r   r   r   r   r   r   r   r   r   r   <module>   sN    
	  	