
    g3[                        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 	 d d
l mZ  G d dee      Z G d de      Z G d dee      Z G d de      Z G d dee      Z G d de      Z  G d de      Z! G d dee      Z" G d dee      Z# G d de      Z$ G d d e      Z% G d! d"ee      Z& G d# d$e&      Z' G d% d&e&      Z( G d' d(e&      Z) G d) d*e&      Z* G d+ d,e      Z+ G d- d.e      Z, G d/ d0e      Z- G d1 d2e      Z. G d3 d4ee      Z/ G d5 d6e      Z0 G d7 d8e      Z1 G d9 d:e      Z2 G d; d<e      Z3y# e$ r dZY %w xY w)=    N)OpenIdMixin
OAuthMixinOAuth2MixinGoogleOAuth2MixinFacebookGraphMixinTwitterMixin)json_decode)gen)HTTPClientError)
url_concat)app_log)AsyncHTTPTestCase	ExpectLog)RequestHandlerApplication	HTTPError)mockc                   6    e Zd Zd Zej
                  d        Zy)OpenIdClientLoginHandlerc                 0    |j                  d      | _        y )N/openid/server/authenticate)get_url_OPENID_ENDPOINTselftests     K/var/www/openai/venv/lib/python3.12/site-packages/tornado/test/auth_test.py
initializez#OpenIdClientLoginHandler.initialize   s     $-J K    c              #      K   | j                  dd       r@| j                  | j                  d         }|t        d      | j	                  |       y | j                         }|J y w)Nopenid.modehttp_clientr"   user is None)get_argumentget_authenticated_usersettings	Exceptionfinishauthenticate_redirect)r   userress      r   getzOpenIdClientLoginHandler.get"   su     ]D144 MM-8 5  D |//KK((*{{s   A(A*N__name__
__module____qualname__r   r
   	coroutiner-    r   r   r   r      s     L 	]]
 
r   r   c                       e Zd Zd Zy)OpenIdServerAuthenticateHandlerc                 d    | j                  d      dk7  rt        d      | j                  d       y )Nr!   check_authenticationzincorrect openid.mode %rzis_valid:true)r%   r(   writer   s    r   postz$OpenIdServerAuthenticateHandler.post1   s.    ]+/EE677

?#r   Nr/   r0   r1   r:   r3   r   r   r5   r5   0   s    $r   r5   c                   `    e Zd Zd Zd Zej                  d        Zej                  d        Zy)OAuth1ClientLoginHandlerc                     || _         |j                  d      | _        |j                  d      | _        |j                  d      | _        y )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   versions      r   r   z#OAuth1ClientLoginHandler.initialize8   s@    %(,5S(T%$(LL1K$L!'+||4Q'R$r   c                     t        dd      S Nasdfqwerkeysecretdictr9   s    r   _oauth_consumer_tokenz.OAuth1ClientLoginHandler._oauth_consumer_token>       v..r   c              #      K   | j                  dd       r@| j                  | j                  d         }|t        d      | j	                  |       y | j                  | j                  d          y w)Noauth_tokenr"   r#   r$   )r%   r&   r'   r(   r)   authorize_redirectr   r+   s     r   r-   zOAuth1ClientLoginHandler.getA   sz     ]D144 MM-8 5  D |//KK%%$--2N%OOs   A5A7c                     | j                  dd       rt        d      |t        dd      k7  rt        d|z        t        d      S )	Nfail_in_get_userzfailing in get_useruiop5678rK   zincorrect access token %rfoo@example.com)email)r%   r(   rO   )r   access_tokens     r   _oauth_get_user_futurez/OAuth1ClientLoginHandler._oauth_get_user_futureM   sK    /61224F6::7,FGG+,,r   N)	r/   r0   r1   r   rP   r
   r2   r-   r]   r3   r   r   r=   r=   7   s?    S/ 	]]	P 	P 	]]- -r   r=   c                   4    e Zd ZdZej
                  d        Zy)!OAuth1ClientLoginCoroutineHandlerzDReplaces OAuth1ClientLoginCoroutineHandler's get() with a coroutine.c              #      K   | j                  dd       r	 | j                          y | j                          y # t        $ r/}| j                  d       | j	                  d|z         Y d }~y d }~ww xY ww)NrS     zgot exception: %s)r%   r&   r(   
set_statusr8   rT   )r   es     r   r-   z%OAuth1ClientLoginCoroutineHandler.getY   sm     ]D141133
 ))++	  4$

.2334s+   A7< A7	A4%A/*A7/A44A7N)r/   r0   r1   __doc__r
   r2   r-   r3   r   r   r_   r_   V   s    N]]
, 
,r   r_   c                       e Zd Zd Zd Zd Zy)$OAuth1ClientRequestParametersHandlerc                     || _         y N)rB   )r   rF   s     r   r   z/OAuth1ClientRequestParametersHandler.initializeh   s
    %r   c                     t        dd      S rH   rN   r9   s    r   rP   z:OAuth1ClientRequestParametersHandler._oauth_consumer_tokenk   rQ   r   c                 x    | j                  dt        dd      t        d            }| j                  |       y )Nzhttp://www.example.com/api/asdfrX   rY   rK   bar)foo)
parameters)_oauth_request_parametersrO   r8   )r   paramss     r   r-   z(OAuth1ClientRequestParametersHandler.getn   s9    //-VF+ 0 

 	

6r   N)r/   r0   r1   r   rP   r-   r3   r   r   rf   rf   g   s    &/r   rf   c                       e Zd Zd Zy)OAuth1ServerRequestTokenHandlerc                 &    | j                  d       y )Nz(oauth_token=zxcv&oauth_token_secret=1234r8   r9   s    r   r-   z#OAuth1ServerRequestTokenHandler.getx       

=>r   Nr/   r0   r1   r-   r3   r   r   rq   rq   w       ?r   rq   c                       e Zd Zd Zy)OAuth1ServerAccessTokenHandlerc                 &    | j                  d       y )Nz(oauth_token=uiop&oauth_token_secret=5678rs   r9   s    r   r-   z"OAuth1ServerAccessTokenHandler.get}   rt   r   Nru   r3   r   r   rx   rx   |   rv   r   rx   c                       e Zd Zd Zd Zy)OAuth2ClientLoginHandlerc                 0    |j                  d      | _        y )Nz/oauth2/server/authorize)r   rD   r   s     r   r   z#OAuth2ClientLoginHandler.initialize   s    $(LL1K$L!r   c                 ,    | j                         }|J y rh   )rT   )r   r,   s     r   r-   zOAuth2ClientLoginHandler.get   s    %%'{{r   N)r/   r0   r1   r   r-   r3   r   r   r{   r{      s    Mr   r{   c                   6    e Zd Zd Zej
                  d        Zy)FacebookClientLoginHandlerc                     |j                  d      | _        |j                  d      | _        |j                  d      | _        y )Nz/facebook/server/authorize/facebook/server/access_tokenz/facebook/server)r   rD   rE   _FACEBOOK_BASE_URLr   s     r   r   z%FacebookClientLoginHandler.initialize   s8    $(LL1M$N!'+||4S'T$"&,,/A"Br   c              #   z  K   | j                  dd       rj| j                  | j                  j                         | j                  d   | j                  d   | j                  d            }| j                  |       y | j                  | j                  j                         | j                  d   ddi       y w)Ncodefacebook_api_keyfacebook_secret)redirect_uri	client_idclient_secretr   scopezread_stream,offline_access)r   r   extra_params)r%   r&   requestfull_urlr'   r8   rT   rU   s     r   r-   zFacebookClientLoginHandler.get   s     VT*44!\\224--(:;"mm,=>&&v.	 5  D JJt##!\\224--(:;%'CD $ s   B9B;Nr.   r3   r   r   r   r      s     C
 	]] r   r   c                       e Zd Zd Zy) FacebookServerAccessTokenHandlerc                 <    | j                  t        dd             y )NrI   i  r\   
expires_in)r8   rO   r9   s    r   r-   z$FacebookServerAccessTokenHandler.get   s    

4V=>r   Nru   r3   r   r   r   r      rv   r   r   c                       e Zd Zd Zy)FacebookServerMeHandlerc                 &    | j                  d       y )Nz{}rs   r9   s    r   r-   zFacebookServerMeHandler.get   s    

4r   Nru   r3   r   r   r   r      s    r   r   c                       e Zd Zd Zd Zy)TwitterClientHandlerc                     |j                  d      | _        |j                  d      | _        |j                  d      | _        |j                  d      | _        |j                  d      | _        y )Nr?   /twitter/server/access_tokenr@   z/twitter/server/authenticatez/twitter/api)r   rC   rE   rD   _OAUTH_AUTHENTICATE_URL_TWITTER_BASE_URLr   s     r   r   zTwitterClientHandler.initialize   s[    (,5S(T%'+||4R'S$$(LL1K$L!'+||4R'S$!%n!=r   c                      | j                   d   S )Nr"   )r'   r9   s    r   get_auth_http_clientz)TwitterClientHandler.get_auth_http_client   s    }}]++r   N)r/   r0   r1   r   r   r3   r   r   r   r      s    >,r   r   c                   0    e Zd Zej                  d        Zy)TwitterClientLoginHandlerc              #      K   | j                  dd       r1| j                         }|t        d      | j                  |       y | j	                          y wNrS   r$   )r%   r&   r(   r)   rT   rU   s     r   r-   zTwitterClientLoginHandler.get   sU     ]D14466D|//KK%%''   AANr/   r0   r1   r
   r2   r-   r3   r   r   r   r      s    ]]( (r   r   c                   0    e Zd Zej                  d        Zy) TwitterClientAuthenticateHandlerc              #      K   | j                  dd       r1| j                         }|t        d      | j                  |       y | j	                          y wr   )r%   r&   r(   r)   r*   rU   s     r   r-   z$TwitterClientAuthenticateHandler.get   sU     ]D14466D|//KK((**r   Nr   r3   r   r   r   r      s     	]]+ +r   r   c                   0    e Zd Zej                  d        Zy)%TwitterClientLoginGenCoroutineHandlerc              #      K   | j                  dd       r$| j                         }| j                  |       y | j                          y w)NrS   )r%   r&   r)   rT   rU   s     r   r-   z)TwitterClientLoginGenCoroutineHandler.get   sD     ]D14466DKK ))++s   A
ANr   r3   r   r   r   r      s    ]], ,r   r   c                   0    e Zd Zej                  d        Zy)TwitterClientShowUserHandlerc              #      K   	 | j                  d| j                  d      z  t        dd            }| j                  |       y # t        $ r% | j                  d       | j                  d       Y y w xY ww)	Nz/users/show/%snamehjklvbnmrK   r\     zerror from twitter request)twitter_requestr%   rO   r)   r   rb   r   responses     r   r-   z TwitterClientShowUserHandler.get   s{     	"!11 4#4#4V#<<!fV< 2  H KK!  	6 OOC KK45		6s'   A92A A9+A63A95A66A9Nr   r3   r   r   r   r      s    ]]" "r   r   c                       e Zd Zd Zy)TwitterServerAccessTokenHandlerc                 &    | j                  d       y )Nz8oauth_token=hjkl&oauth_token_secret=vbnm&screen_name=foors   r9   s    r   r-   z#TwitterServerAccessTokenHandler.get   s    

MNr   Nru   r3   r   r   r   r      s    Or   r   c                       e Zd Zd Zy)TwitterServerShowUserHandlerc                    |dk(  rt        d      d| j                  j                  v sJ d| j                  j                  v sJ d| j                  j                  v sJ | j                  d      dk(  sJ | j                  d      d	k(  sJ | j                  d
      dk(  sJ | j                  d      dk(  sJ | j	                  t        ||j                                      y )Nerrorr   oauth_nonceoauth_timestampoauth_signatureoauth_consumer_keytest_twitter_consumer_keyoauth_signature_method	HMAC-SHA1oauth_version1.0rS   r   screen_namer   )r   r   	argumentsr%   r8   rO   
capitalize)r   r   s     r   r-   z TwitterServerShowUserHandler.get   s    '!C.  6 6666 DLL$:$:::: DLL$:$::::  !56:UUUU  !9:kIII  1U:::  /6999

4Kk6L6L6NOPr   Nru   r3   r   r   r   r      s    
Qr   r   c                       e Zd Zd Zy)%TwitterServerVerifyCredentialsHandlerc                    d| j                   j                  v sJ d| j                   j                  v sJ d| j                   j                  v sJ | j                  d      dk(  sJ | j                  d      dk(  sJ | j                  d      d	k(  sJ | j                  d
      dk(  sJ | j                  t	        dd             y )Nr   r   r   r   r   r   r   r   r   rS   r   rl   Foor   )r   r   r%   r8   rO   r9   s    r   r-   z)TwitterServerVerifyCredentialsHandler.get  s     6 6666 DLL$:$:::: DLL$:$::::  !56:UUUU  !9:kIII  1U:::  /6999

4E67r   Nru   r3   r   r   r   r     s    8r   r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	 e
j                  edu d	      d
        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)AuthTestc                 ^   t        dt        t        |       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        |       fdt        t        |       fdt        t        |       fdt        t        |       fdt        t        |       fdt        t        |       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      S )N/openid/client/loginr   /oauth10/client/loginr   )r   rF   /oauth10/client/request_params)rF   /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   r?   rA   r   z/facebook/server/mer   z"/twitter/api/users/show/(.*)\.jsonz-/twitter/api/account/verify_credentials\.jsonr   test_twitter_consumer_secrettest_facebook_api_keytest_facebook_secret)r"   twitter_consumer_keytwitter_consumer_secretr   r   )r   r   rO   r=   rf   r_   r{   r   r   r   r   r   r5   rq   rx   r   r   r   r   r   r"   r9   s    r   get_appzAuthTest.get_app  sd    ()A4T?S+,dE2 58' -,dF3 75dF3 68(
 ()A4T?S)+EtQUW(*CTt_U24dO :9dO 00dO /0OP/1PQ.0NO02RS&(?@/1PQ68TUD9m:v ((!<$B42AA
 A	
r   c                     | j                  dd      }| j                  |j                  d       | j                  d|j                  d   v        y )Nr   Ffollow_redirects.  z/openid/server/authenticate?LocationfetchassertEqualr   
assertTrueheadersr   s     r   test_openid_redirectzAuthTest.test_openid_redirectU  sF    ::4u:M,6(:J:J::VVWr   c                     | j                  d      }|j                          t        |j                        }| j	                  |d   d       y )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.comr[   rZ   r   rethrowr	   bodyr   r   r   parseds      r   test_openid_get_userzAuthTest.test_openid_get_userZ  sF    ::5
 	X]]+*;<r   c                    | j                  dd      }| j                  |j                  d       | j                  |j                  d   j                  d             | j                  d|j                  d   v |j                  d          y )	Nr   Fr   r   r   )/oauth1/server/authorize?oauth_token=zxcv(_oauth_request_token="enhjdg==|MTIzNA=="
Set-Cookier   r   r   r   r   endswithr   s     r   test_oauth10_redirectzAuthTest.test_oauth10_redirecte  s    ::5:N,Z(11;	
 	6-.\*	
r   c                     | j                  dddi      }|j                          t        |j                        }| j	                  |d   d       | j	                  |d   t        dd	
             y )Nz&/oauth10/client/login?oauth_token=zxcvCookie&_oauth_request_token=enhjdg==|MTIzNA==r   r[   rZ   r\   rX   rY   rK   r   r   r	   r   r   rO   r   s      r   test_oauth10_get_userzAuthTest.test_oauth10_get_usert  sn    ::4GH  
 	X]]+*;</&1PQr   c                    | j                  d      }|j                          t        |j                        }| j	                  |d   d       | j	                  |d   d       | j                  d|v        | j                  d|v        y )Nr   r   rI   rS   rX   r   r   r   r   r	   r   r   r   r   s      r   test_oauth10_request_parametersz(AuthTest.test_oauth10_request_parameters~  sy    ::>?X]]+ 45v>.7/0)V34r   c                    | j                  dd      }| j                  |j                  d       | j                  |j                  d   j                  d             | j                  d|j                  d   v |j                  d          y )	Nr   Fr   r   r   r   r   r   r   r   s     r   test_oauth10a_redirectzAuthTest.test_oauth10a_redirect  s    ::6:O,Z(11;	
 	6-.\*	
r   Nzmock package not presentc                 >   t         j                  j                  t        d      5 }t	        d      |_        t        t        d      5  | j                  dd      }d d d        | j                  j                  d       d d d        y # 1 sw Y   .xY w# 1 sw Y   y xY w)Nr-   boomzUncaught exceptionr   Fr   r   )r   patchobjectrq   r(   side_effectr   r   r   r   r   )r   r-   r   s      r   test_oauth10a_redirect_errorz%AuthTest.test_oauth10a_redirect_error  sw    ZZ>F#'/CO7$89::&>QV:W :X]]C0	 GF99 GFs#   !BB$BB	BBc                     | j                  dddi      }|j                          t        |j                        }| j	                  |d   d       | j	                  |d   t        dd	
             y )Nz'/oauth10a/client/login?oauth_token=zxcvr   r   r   r[   rZ   r\   rX   rY   rK   r   r   s      r   test_oauth10a_get_userzAuthTest.test_oauth10a_get_user  sn    ::5GH  
 	X]]+*;</&1PQr   c                    | j                  d      }|j                          t        |j                        }| j	                  |d   d       | j	                  |d   d       | j                  d|v        | j                  d|v        y )Nr   r   rI   rS   rX   r   r   r  r   s      r    test_oauth10a_request_parametersz)AuthTest.test_oauth10a_request_parameters  sy    ::?@X]]+ 45v>.7/0)V34r   c                 f    | j                  dddi      }| j                  |j                  d       y )NzG/oauth10a/client/login_coroutine?oauth_token=zxcv&fail_in_get_user=truer   r   r   ra   )r   r   r   r   s     r   *test_oauth10a_get_user_coroutine_exceptionz3AuthTest.test_oauth10a_get_user_coroutine_exception  s7    ::UGH  
 	,r   c                     | j                  dd      }| j                  |j                  d       | j                  d|j                  d   v        y )Nr   Fr   r   z/oauth2/server/authorize?r   r   r   s     r   test_oauth2_redirectzAuthTest.test_oauth2_redirect  sF    ::4u:M,3x7G7G
7SSTr   c                 ~   | j                  dd      }| j                  |j                  d       | j                  d|j                  d   v        | j                  dd      }| j                  |j                  d       t        |j                        }| j                  |d	   d
       | j                  |d   d       y )Nr   Fr   r   z/facebook/server/authorize?r   z /facebook/client/login?code=1234   r\   rI   session_expires3600)r   r   r   r   r   r	   r   )r   r   r+   s      r   test_facebook_loginzAuthTest.test_facebook_login  s    ::6:O,59I9I*9UUV::.  
 	,8==)n-v6/0&9r   c                    | j                  |d      }| j                  |j                  d       | j                  |j                  d   j                  d             | j                  d|j                  d   v |j                  d          y )NFr   r   r   r   r   r   r   )r   urlr   s      r   base_twitter_redirectzAuthTest.base_twitter_redirect  s    ::cE::,Z(11;	
 	6-.\*	
r   c                 &    | j                  d       y )Nr   r  r9   s    r   test_twitter_redirectzAuthTest.test_twitter_redirect  s    ""#:;r   c                 &    | j                  d       y )Nr   r  r9   s    r   #test_twitter_redirect_gen_coroutinez,AuthTest.test_twitter_redirect_gen_coroutine  s    ""#HIr   c                 4   | j                  dd      }| j                  |j                  d       | j                  |j                  d   j                  d      |j                  d          | j                  d|j                  d   v |j                  d          y )	Nr   Fr   r   r   z-/twitter/server/authenticate?oauth_token=zxcvr   r   r   r   s     r   "test_twitter_authenticate_redirectz+AuthTest.test_twitter_authenticate_redirect  s    ::<u:U,Z(11? Z(		
 	6-.\*	
r   c                     | j                  dddi      }|j                          t        |j                        }| j	                  |ddddd	ddd
       y )Nz&/twitter/client/login?oauth_token=zxcvr   r   r   r   rl   r   )rL   r   rM   r   )r\   r   r   usernamer   r   s      r   test_twitter_get_userzAuthTest.test_twitter_get_user  sn    ::4GH  
 	X]]+ "#($!
 $!		
r   c                     | j                  d      }|j                          | j                  t        |j                        ddd       y )Nz'/twitter/client/show_user?name=somebodySomebodysomebody)r   r   )r   r   r   r	   r   r   s     r   test_twitter_show_userzAuthTest.test_twitter_show_user  s>    ::GH&J(W	
r   c                     | j                  d      }| j                  |j                  d       | j                  |j                  d       y )Nz$/twitter/client/show_user?name=errorr   s   error from twitter request)r   r   r   r   r   s     r   test_twitter_show_user_errorz%AuthTest.test_twitter_show_user_error  s:    ::DE,(EFr   )r/   r0   r1   r   r   r   r   r   r  r  unittestskipIfr   r
  r  r  r  r  r  r  r  r  r!  r$  r(  r*  r3   r   r   r   r     s    B
HX
	=
R5
 X__TT\#=>1 ?1R5-U

:
 <J
 
*
Gr   r   c                   6    e Zd Zd Zej
                  d        Zy)GoogleLoginHandlerc                     || _         |j                  d      | _        |j                  d      | _        |j                  d      | _        y )N/client/login/google/oauth2/authorize/google/oauth2/token)r   r   _OAUTH_REDIRECT_URIrD   rE   r   s     r   r   zGoogleLoginHandler.initialize  s>    	#'<<#@ $(LL1K$L!'+||4J'K$r   c              #   n  K   | j                  dd       }|i| j                  | j                  |      }| j                  | j                  j                  d      |d         }|d   |d<   | j                  |       y | j                  | j                  | j                  d   d   ddgdd	d
i       y w)Nr   /google/oauth2/userinfor\   r   google_oauthrL   profiler[   promptselect_account)r   r   r   response_typer   )	r%   r&   r3  oauth2_requestr   r   r8   rT   r'   )r   r   accessr+   s       r   r-   zGoogleLoginHandler.get  s       .66t7O7OQUVVF,,		!!";<#N3 -  D
 $*.#9D JJt##!55--7> '*$&(89 $ s   B3B5Nr.   r3   r   r   r.  r.    s     L 	]] r   r.  c                       e Zd Zd Zy)GoogleOAuth2AuthorizeHandlerc                 p    d}| j                  t        | j                  d      t        |                   y )Nfake-authorization-coder   )r   )redirectr   r%   rO   )r   r   s     r   r-   z GoogleOAuth2AuthorizeHandler.get0  s)    (j!2!2>!BDdOTUr   Nru   r3   r   r   r>  r>  /  s    Vr   r>  c                       e Zd Zd Zy)GoogleOAuth2TokenHandlerc                 X    | j                  d      dk(  sJ | j                  ddd       y )Nr   r@  fake-access-tokenznever-expiresr   r%   r)   r9   s    r   r:   zGoogleOAuth2TokenHandler.post7  s0      (,EEEE0P	
r   Nr;   r3   r   r   rC  rC  6  s    
r   rC  c                       e Zd Zd Zy)GoogleOAuth2UserinfoHandlerc                 X    | j                  d      dk(  sJ | j                  ddd       y )Nr\   rE  r   rZ   )r   r[   rF  r9   s    r   r-   zGoogleOAuth2UserinfoHandler.get@  s.      04GGGGU->?@r   Nru   r3   r   r   rH  rH  ?  s    Ar   rH  c                       e Zd Zd Zd Zy)GoogleOAuth2Testc                 p    t        dt        t        |       fdt        fdt        fdt
        fgddd	      S )
Nr0  r   r1  r2  r5  fake_google_client_idfake_google_client_secretrK   )r6  )r   r.  rO   r>  rC  rH  r9   s    r   r   zGoogleOAuth2Test.get_appG  sM     !"4doF+-IJ')AB*,GH /5
 	
r   c                 x    | j                  d      }| j                  ddddt        |j                               y )Nr0  r   rZ   rE  )r   r[   r\   )r   assertDictEqualr	   r   r   s     r   test_google_loginz"GoogleOAuth2Test.test_google_loginW  s:    ::o.* 3
 &	
r   N)r/   r0   r1   r   rQ  r3   r   r   rK  rK  F  s    
 	
r   rK  )4r+  tornado.authr   r   r   r   r   r   tornado.escaper	   tornador
   tornado.httpclientr   tornado.httputilr   tornado.logr   tornado.testingr   r   tornado.webr   r   r   r   ImportErrorr   r5   r=   r_   rf   rq   rx   r{   r   r   r   r   r   r   r   r   r   r   r   r   r.  r>  rC  rH  rK  r3   r   r   <module>r[     s     '  . '  8 > >
~{ $$n $-~z ->,(@ ,">:  ?n ?
?^ ?
~{ 1C 0?~ ?
n 
	,>< 	,	( 4 	(+'; +	,,@ 	,"#7 "&On O
Q> Q	8N 	8~G  ~GB): <V> V
~ 
A. A
( 
Y  Ds   E' 'E21E2