+
    ‚V@i[  ã                   óð  € ^ RI t ^ RIHtHtHtHtHtHt ^ RIH	t	 ^ RI
Ht ^ RIHt ^ RIHt ^ RIHt ^ RIHtHt ^ R	IHtHtHt  ^ R
I Ht  ! R R]]4      t ! R R]4      t ! R R]]4      t ! R R]4      t ! R R]]4      t ! R R]4      t  ! R R]4      t! ! R R]]4      t" ! R R]]4      t# ! R R]4      t$ ! R R ]4      t% ! R! R"]]4      t& ! R# R$]&4      t' ! R% R&]&4      t( ! R' R(]&4      t) ! R) R*]&4      t* ! R+ R,]4      t+ ! R- R.]4      t, ! R/ R0]4      t- ! R1 R2]4      t. ! R3 R4]]4      t/ ! R5 R6]4      t0 ! R7 R8]4      t1 ! R9 R:]4      t2 ! R; R<]4      t3R#   ] d    Rt EL(i ; i)=é    N)ÚOpenIdMixinÚ
OAuthMixinÚOAuth2MixinÚGoogleOAuth2MixinÚFacebookGraphMixinÚTwitterMixin)Újson_decode)Úgen)ÚHTTPClientError)Ú
url_concat)Úapp_log)ÚAsyncHTTPTestCaseÚ	ExpectLog)ÚRequestHandlerÚApplicationÚ	HTTPError)Úmockc                   óJ   a € ] tR t^t o R t]P                  R 4       tRtV t	R# )ÚOpenIdClientLoginHandlerc                ó2   € VP                  R 4      V n        R# )ú/openid/server/authenticateN)Úget_urlÚ_OPENID_ENDPOINT©ÚselfÚtests   &&Ú8/usr/lib/python3/dist-packages/tornado/test/auth_test.pyÚ
initializeÚ#OpenIdClientLoginHandler.initialize   s   € Ø $§¡Ð-JÓ KˆÖó    c              #  óø   "  € V P                  R R4      '       dH   V P                  V P                  R,          R7      x €pVf   \        R4      hV P	                  V4       R# V P                  4       pVe   Q hR# 5i)úopenid.modeNÚhttp_client©r#   úuser is None)Úget_argumentÚget_authenticated_userÚsettingsÚ	ExceptionÚfinishÚauthenticate_redirect)r   ÚuserÚress   &  r   ÚgetÚOpenIdClientLoginHandler.get"   sw   é € à×Ñ˜]¨D×1Ò1Ø×4Ñ4Ø ŸM™M¨-Õ8ð 5ó ñ ˆDð Š|Ü Ó/Ð/Ø�K‰K˜ÔÙØ×(Ñ(Ó*ˆØŠ{ÐŠ{ùs   ‚A8A:)r   N©
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r
   Ú	coroutiner.   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r   r      s#   ø‡ € òLð 	‡]�]ñ
ó ö
r    r   c                   ó&   a € ] tR t^0t o R tRtV tR# )ÚOpenIdServerAuthenticateHandlerc                ój   € V P                  R 4      R8w  d   \        R4      hV P                  R4       R# )r"   Úcheck_authenticationzincorrect openid.mode %rzis_valid:trueN)r&   r)   Úwrite©r   s   &r   ÚpostÚ$OpenIdServerAuthenticateHandler.post1   s.   € Ø×Ñ˜]Ó+Ð/EÔEÜÐ6Ó7Ð7Ø�
‰
�?Ö#r    © N©r1   r2   r3   r4   r@   r6   r7   r8   s   @r   r;   r;   0   s   ø‡ € ÷$ð $r    r;   c                   ót   a € ] tR t^7t o R tR t]P                  R 4       t]P                  R 4       t	Rt
V tR# )ÚOAuth1ClientLoginHandlerc                ó–   € W n         VP                  R 4      V n        VP                  R4      V n        VP                  R4      V n        R# )ú/oauth1/server/request_tokenú/oauth1/server/authorizeú/oauth1/server/access_tokenN)Ú_OAUTH_VERSIONr   Ú_OAUTH_REQUEST_TOKEN_URLÚ_OAUTH_AUTHORIZE_URLÚ_OAUTH_ACCESS_TOKEN_URL)r   r   Úversions   &&&r   r   Ú#OAuth1ClientLoginHandler.initialize8   s>   € Ø%ÔØ(,¯©Ð5SÓ(TˆÔ%Ø$(§L¡LÐ1KÓ$LˆÔ!Ø'+§|¡|Ð4QÓ'RˆÖ$r    c                ó   € \        R RR7      # ©ÚasdfÚqwer©ÚkeyÚsecret©Údictr?   s   &r   Ú_oauth_consumer_tokenÚ.OAuth1ClientLoginHandler._oauth_consumer_token>   ó   € Ü˜ vÔ.Ð.r    c              #  ó  "  € V P                  R R4      '       dH   V P                  V P                  R,          R7      x €pVf   \        R4      hV P	                  V4       R# V P                  V P                  R,          R7      x € R# 5i)Úoauth_tokenNr#   r$   r%   )r&   r'   r(   r)   r*   Úauthorize_redirect©r   r,   s   & r   r.   ÚOAuth1ClientLoginHandler.getA   s|   é € à×Ñ˜]¨D×1Ò1Ø×4Ñ4Ø ŸM™M¨-Õ8ð 5ó ñ ˆDð Š|Ü Ó/Ð/Ø�K‰K˜ÔÙØ×%Ñ%°$·-±-ÀÕ2NÐ%ÓOÔOùs   ‚BB	c                ó¨   € V P                  R R4      '       d   \        R4      hV\        RRR7      8w  d   \        RV,          4      h\        RR7      # )	Úfail_in_get_userNzfailing in get_userÚuiopÚ5678rT   zincorrect access token %rúfoo@example.com)Úemail)r&   r)   rX   )r   Úaccess_tokens   &&r   Ú_oauth_get_user_futureÚ/OAuth1ClientLoginHandler._oauth_get_user_futureM   sN   € à×ÑÐ/°×6Ò6ÜÐ1Ó2Ð2Øœ4 F°6Ô:Ô:ÜÐ7¸,ÕFÓGÐGÜÐ+Ô,Ð,r    )rM   rL   rK   rJ   N)r1   r2   r3   r4   r   rY   r
   r5   r.   rh   r6   r7   r8   s   @r   rE   rE   7   sB   ø‡ € òSò/ð 	‡]�]ñ	Pó ð	Pð 	‡]�]ñ-ó ö-r    rE   c                   óH   a € ] tR t^Vt o Rt]P                  R 4       tRtV t	R# )Ú!OAuth1ClientLoginCoroutineHandlerzDReplaces OAuth1ClientLoginCoroutineHandler's get() with a coroutine.c              #  ó  "  € V P                  R R4      '       d    V P                  4       x € R# V P                  4       x € R#   \         d5   pT P                  R4       T P	                  RT,          4        Rp?R# Rp?ii ; i5i)r]   Né÷  zgot exception: %s)r&   r'   r)   Ú
set_statusr>   r^   )r   Úes   & r   r.   Ú%OAuth1ClientLoginCoroutineHandler.getY   so   é € à×Ñ˜]¨D×1Ò1ð4Ø×1Ñ1Ó3Ô3ð
 ×)Ñ)Ó+Ô+øô	 ô 4Ø—‘ Ô$Ø—
‘
Ð.°Õ2×3Ò3ûð4üs-   ‚BœA ®BÁBÁ)A>Á8BÁ>BÂBrB   N)
r1   r2   r3   r4   Ú__doc__r
   r5   r.   r6   r7   r8   s   @r   rk   rk   V   s   ø‡ € ÙNà‡]�]ñ
,ó ö
,r    rk   c                   ó2   a € ] tR t^gt o R tR tR tRtV tR# )Ú$OAuth1ClientRequestParametersHandlerc                ó   € Wn         R # ©N©rJ   )r   rN   s   &&r   r   Ú/OAuth1ClientRequestParametersHandler.initializeh   s   € Ø%Ör    c                ó   € \        R RR7      # rQ   rW   r?   s   &r   rY   Ú:OAuth1ClientRequestParametersHandler._oauth_consumer_tokenk   r[   r    c                óz   € V P                  R \        RRR7      \        RR7      R7      pV P                  V4       R# )zhttp://www.example.com/api/asdfrc   rd   rT   Úbar)Úfoo)Ú
parametersN)Ú_oauth_request_parametersrX   r>   )r   Úparamss   & r   r.   Ú(OAuth1ClientRequestParametersHandler.getn   s9   € Ø×/Ñ/Ø-Ü�V FÔ+Ü ”ð 0ó 
ˆð
 	�
‰
�6Ör    rv   N)	r1   r2   r3   r4   r   rY   r.   r6   r7   r8   s   @r   rs   rs   g   s   ø‡ € ò&ò/÷ð r    rs   c                   ó&   a € ] tR t^wt o R tRtV tR# )ÚOAuth1ServerRequestTokenHandlerc                ó(   € V P                  R 4       R# )z(oauth_token=zxcv&oauth_token_secret=1234N©r>   r?   s   &r   r.   Ú#OAuth1ServerRequestTokenHandler.getx   ó   € Ø�
‰
Ð=Ö>r    rB   N©r1   r2   r3   r4   r.   r6   r7   r8   s   @r   r‚   r‚   w   ó   ø‡ € ÷?ð ?r    r‚   c                   ó&   a € ] tR t^|t o R tRtV tR# )ÚOAuth1ServerAccessTokenHandlerc                ó(   € V P                  R 4       R# )z(oauth_token=uiop&oauth_token_secret=5678Nr„   r?   s   &r   r.   Ú"OAuth1ServerAccessTokenHandler.get}   r†   r    rB   Nr‡   r8   s   @r   rŠ   rŠ   |   rˆ   r    rŠ   c                   ó,   a € ] tR t^�t o R tR tRtV tR# )ÚOAuth2ClientLoginHandlerc                ó2   € VP                  R 4      V n        R# )z/oauth2/server/authorizeN)r   rL   r   s   &&r   r   Ú#OAuth2ClientLoginHandler.initialize‚   s   € Ø$(§L¡LÐ1KÓ$LˆÖ!r    c                ó2   € V P                  4       pVe   Q hR # ru   )r^   )r   r-   s   & r   r.   ÚOAuth2ClientLoginHandler.get…   s   € Ø×%Ñ%Ó'ˆØŠ{ÐŠ{r    )rL   N)r1   r2   r3   r4   r   r.   r6   r7   r8   s   @r   rŽ   rŽ   �   s   ø‡ € òM÷ð r    rŽ   c                   óJ   a € ] tR t^Št o R t]P                  R 4       tRtV t	R# )ÚFacebookClientLoginHandlerc                óŠ   € VP                  R 4      V n        VP                  R4      V n        VP                  R4      V n        R# )z/facebook/server/authorizeú/facebook/server/access_tokenz/facebook/serverN)r   rL   rM   Ú_FACEBOOK_BASE_URLr   s   &&r   r   Ú%FacebookClientLoginHandler.initialize‹   s8   € Ø$(§L¡LÐ1MÓ$NˆÔ!Ø'+§|¡|Ð4SÓ'TˆÔ$Ø"&§,¡,Ð/AÓ"BˆÖr    c              #  ó¢  "  € V P                  R R4      '       dt   V P                  V P                  P                  4       V P                  R,          V P                  R,          V P                  R 4      R7      x €pV P                  V4       R# V P                  V P                  P                  4       V P                  R,          RR/R7       R# 5i)ÚcodeNÚ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(   r>   r^   r_   s   & r   r.   ÚFacebookClientLoginHandler.get�   s±   é € à×Ñ˜V T×*Ò*Ø×4Ñ4Ø!Ÿ\™\×2Ñ2Ó4ØŸ-™-Ð(:Õ;Ø"Ÿm™mÐ,=Õ>Ø×&Ñ& vÓ.ð	 5ó ñ ˆDð �J‰J�tÖà×#Ñ#Ø!Ÿ\™\×2Ñ2Ó4ØŸ-™-Ð(:Õ;Ø%Ð'CÐDð $ö ùs   ‚CC)r—   rM   rL   Nr0   r8   s   @r   r”   r”   Š   s#   ø‡ € òCð
 	‡]�]ñó ör    r”   c                   ó&   a € ] tR t^¢t o R tRtV tR# )Ú FacebookServerAccessTokenHandlerc                ó>   € V P                  \        R RR7      4       R# )rR   i  )rg   Ú
expires_inN)r>   rX   r?   s   &r   r.   Ú$FacebookServerAccessTokenHandler.get£   s   € Ø�
‰
”4 V¸Ô=Ö>r    rB   Nr‡   r8   s   @r   r¦   r¦   ¢   rˆ   r    r¦   c                   ó&   a € ] tR t^§t o R tRtV tR# )ÚFacebookServerMeHandlerc                ó(   € V P                  R 4       R# )z{}Nr„   r?   s   &r   r.   ÚFacebookServerMeHandler.get¨   s   € Ø�
‰
�4Ör    rB   Nr‡   r8   s   @r   r«   r«   §   s   ø‡ € ÷ð r    r«   c                   ó,   a € ] tR t^¬t o R tR tRtV tR# )ÚTwitterClientHandlerc                óâ   € VP                  R 4      V n        VP                  R4      V n        VP                  R4      V n        VP                  R4      V n        VP                  R4      V n        R# )rG   ú/twitter/server/access_tokenrH   z/twitter/server/authenticatez/twitter/apiN)r   rK   rM   rL   Ú_OAUTH_AUTHENTICATE_URLÚ_TWITTER_BASE_URLr   s   &&r   r   ÚTwitterClientHandler.initialize­   s[   € Ø(,¯©Ð5SÓ(TˆÔ%Ø'+§|¡|Ð4RÓ'SˆÔ$Ø$(§L¡LÐ1KÓ$LˆÔ!Ø'+§|¡|Ð4RÓ'SˆÔ$Ø!%§¡¨nÓ!=ˆÖr    c                ó(   € V P                   R ,          # r$   )r(   r?   s   &r   Úget_auth_http_clientÚ)TwitterClientHandler.get_auth_http_client´   s   € Ø�}‰}˜]Õ+Ð+r    )rM   r²   rL   rK   r³   N)r1   r2   r3   r4   r   r¶   r6   r7   r8   s   @r   r¯   r¯   ¬   s   ø‡ € ò>÷,ð ,r    r¯   c                   óD   a € ] tR t^¸t o ]P
                  R 4       tRtV tR# )ÚTwitterClientLoginHandlerc              #  óÊ   "  € V P                  R R4      '       d5   V P                  4       x €pVf   \        R4      hV P                  V4       R# V P	                  4       x € R# 5i©r]   Nr%   )r&   r'   r)   r*   r^   r_   s   & r   r.   ÚTwitterClientLoginHandler.get¹   sW   é € à×Ñ˜]¨D×1Ò1Ø×4Ñ4Ó6Ñ6ˆDØŠ|Ü Ó/Ð/Ø�K‰K˜ÔÙØ×%Ñ%Ó'Ô'ùó   ‚A!A#rB   N©	r1   r2   r3   r4   r
   r5   r.   r6   r7   r8   s   @r   r¹   r¹   ¸   s   ø‡ € Ø‡]�]ñ(ó ö(r    r¹   c                   óD   a € ] tR t^Ät o ]P
                  R 4       tRtV tR# )Ú TwitterClientAuthenticateHandlerc              #  óÊ   "  € V P                  R R4      '       d5   V P                  4       x €pVf   \        R4      hV P                  V4       R# V P	                  4       x € R# 5ir»   )r&   r'   r)   r*   r+   r_   s   & r   r.   Ú$TwitterClientAuthenticateHandler.getÇ   sW   é € à×Ñ˜]¨D×1Ò1Ø×4Ñ4Ó6Ñ6ˆDØŠ|Ü Ó/Ð/Ø�K‰K˜ÔÙØ×(Ñ(Ó*Ô*ùr½   rB   Nr¾   r8   s   @r   rÀ   rÀ   Ä   s   ø‡ € ð 	‡]�]ñ+ó ö+r    rÀ   c                   óD   a € ] tR t^Òt o ]P
                  R 4       tRtV tR# )Ú%TwitterClientLoginGenCoroutineHandlerc              #  ó¬   "  € V P                  R R4      '       d&   V P                  4       x €pV P                  V4       R# V P                  4       x € R# 5i)r]   N)r&   r'   r*   r^   r_   s   & r   r.   Ú)TwitterClientLoginGenCoroutineHandler.getÓ   sF   é € à×Ñ˜]¨D×1Ò1Ø×4Ñ4Ó6Ñ6ˆDØ�K‰K˜Öð ×)Ñ)Ó+Ô+ùs   ‚AArB   Nr¾   r8   s   @r   rÄ   rÄ   Ò   s   ø‡ € Ø‡]�]ñ,ó ö,r    rÄ   c                   óD   a € ] tR t^Þt o ]P
                  R 4       tRtV tR# )ÚTwitterClientShowUserHandlerc              #  ó  "  €  V P                  R V P                  R4      ,          \        RRR7      R7      x €pV P                  V4       R#   \         d'    T P                  R4       T P                  R4        R# i ; i5i)	z/users/show/%sÚnameÚhjklÚvbnmrT   ©rg   éô  zerror from twitter requestN)Útwitter_requestr&   rX   r*   r   rn   ©r   Úresponses   & r   r.   Ú TwitterClientShowUserHandler.getß   sz   é € ð	"Ø!×1Ñ1Ø  4×#4Ñ#4°VÓ#<Õ<Ü! f°VÔ<ð 2ó ñ ˆHð �K‰K˜Ö!øô ô 	6ð �O‰O˜CÔ Ø�K‰KÐ4×5ð		6üs'   ‚B„6A ºBÁ-A>Á:BÁ=A>Á>BrB   Nr¾   r8   s   @r   rÈ   rÈ   Þ   s   ø‡ € Ø‡]�]ñ"ó ö"r    rÈ   c                   ó&   a € ] tR t^ñt o R tRtV tR# )ÚTwitterServerAccessTokenHandlerc                ó(   € V P                  R 4       R# )z8oauth_token=hjkl&oauth_token_secret=vbnm&screen_name=fooNr„   r?   s   &r   r.   Ú#TwitterServerAccessTokenHandler.getò   s   € Ø�
‰
ÐMÖNr    rB   Nr‡   r8   s   @r   rÔ   rÔ   ñ   s   ø‡ € ÷Oð Or    rÔ   c                   ó&   a € ] tR t^öt o R tRtV tR# )ÚTwitterServerShowUserHandlerc                óê  € VR 8X  d   \        R4      hRV P                  P                  9   g   Q hRV P                  P                  9   g   Q hRV P                  P                  9   g   Q hV P                  R4      R8X  g   Q hV P                  R4      R8X  g   Q hV P                  R	4      R
8X  g   Q hV P                  R4      R8X  g   Q hV P	                  \        WP                  4       R7      4       R# )ÚerrorrÎ   Úoauth_nonceÚoauth_timestampÚoauth_signatureÚoauth_consumer_keyÚtest_twitter_consumer_keyÚoauth_signature_methodú	HMAC-SHA1Úoauth_versionú1.0r]   rË   ©Úscreen_namerÊ   N)r   r¢   Ú	argumentsr&   r>   rX   Ú
capitalize)r   rå   s   &&r   r.   Ú TwitterServerShowUserHandler.get÷   sÝ   € Ø˜'Ô!Ü˜C“.Ð Ø §¡× 6Ñ 6Ô6Ð6Ð6Ø  D§L¡L×$:Ñ$:Ô:Ð:Ð:Ø  D§L¡L×$:Ñ$:Ô:Ð:Ð:Ø× Ñ Ð!5Ó6Ð:UÔUÐUÐUØ× Ñ Ð!9Ó:¸kÔIÐIÐIØ× Ñ  Ó1°UÔ:Ð:Ð:Ø× Ñ  Ó/°6Ô9Ð9Ð9Ø�
‰
”4 K×6LÑ6LÓ6NÔOÖPr    rB   Nr‡   r8   s   @r   rØ   rØ   ö   s   ø‡ € ÷
Qð 
Qr    rØ   c                   ó&   a € ] tR tRt o R tRtV tR# )Ú%TwitterServerVerifyCredentialsHandleri  c                ó¬  € R V P                   P                  9   g   Q hRV P                   P                  9   g   Q hRV P                   P                  9   g   Q hV P                  R4      R8X  g   Q hV P                  R4      R8X  g   Q hV P                  R4      R8X  g   Q hV P                  R	4      R
8X  g   Q hV P                  \	        RRR7      4       R# )rÛ   rÜ   rÝ   rÞ   rß   rà   rá   râ   rã   r]   rË   r|   ÚFoorä   N)r¢   ræ   r&   r>   rX   r?   s   &r   r.   Ú)TwitterServerVerifyCredentialsHandler.get  sÄ   € Ø §¡× 6Ñ 6Ô6Ð6Ð6Ø  D§L¡L×$:Ñ$:Ô:Ð:Ð:Ø  D§L¡L×$:Ñ$:Ô:Ð:Ð:Ø× Ñ Ð!5Ó6Ð:UÔUÐUÐUØ× Ñ Ð!9Ó:¸kÔIÐIÐIØ× Ñ  Ó1°UÔ:Ð:Ð:Ø× Ñ  Ó/°6Ô9Ð9Ð9Ø�
‰
”4 E°Ô6Ö7r    rB   Nr‡   r8   s   @r   rê   rê     s   ø‡ € ÷8ð 8r    rê   c                   óÈ   a € ] tR tRt o R tR tR tR tR tR t	R t
]P                  ! ]R	J R
4      R 4       tR tR tR tR tR tR tR tR tR tR tR tR tRtV tR	# )ÚAuthTesti  c                ó^  € \        R \        \        V R7      3R\        \        V RR7      3R\        \        RR7      3R\        \        V RR7      3R	\
        \        V RR7      3R
\        \        RR7      3R\        \        V R7      3R\        \        V R7      3R\        \        V R7      3R\        \        V R7      3R\        \        V R7      3R\        \        V R7      3R\        3R\        3R\        3R\        3R\         3R\"        3R\$        3R\&        3.V P(                  RRRRR7      # )ú/openid/client/login©r   ú/oauth10/client/loginrã   )r   rN   ú/oauth10/client/request_params)rN   ú/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   rG   rI   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   rX   rE   rs   rk   rŽ   r”   r¹   rÀ   rÄ   rÈ   r;   r‚   rŠ   r¦   r«   rÔ   rØ   rê   r#   r?   s   &r   Úget_appÚAuthTest.get_app  sd  € Üð (Ô)AÄ4ÈTÄ?ÐSà+Ü,Ü˜d¨EÔ2ðð 5Ü8Ü Ô'ðð -Ü,Ü˜d¨FÔ3ðð 7Ü5Ü˜d¨FÔ3ðð 6Ü8Ü Ô(ðð
 (Ô)AÄ4ÈTÄ?ÐSØ)Ô+EÄtÐQUÄÐWØ(Ô*CÄTÈtÄ_ÐUà2Ü4Ü˜d”Oðð :Ü9Ü˜d”Oðð 0Ü0Ü˜d”Oðð /Ô0OÐPØ/Ô1PÐQØ.Ô0NÐOØ0Ô2RÐSØ&Ô(?Ð@Ø/Ô1PÐQØ6Ô8TÐUàDÜ9ððm:ðv ×(Ñ(Ø!<Ø$BØ4Ø2ôAA
ð A	
r    c                óª   € V P                  R RR7      pV P                  VP                  R4       V P                  RVP                  R,          4       R# )rñ   F©Úfollow_redirectsé.  z/openid/server/authenticate?ÚLocationN©ÚfetchÚassertEqualrš   ÚassertInÚheadersrÐ   s   & r   Útest_openid_redirectÚAuthTest.test_openid_redirectU  sC   € Ø—:‘:Ð4Àu�:ÓMˆØ×Ñ˜Ÿ™¨Ô,Ø�‰Ð4°h×6FÑ6FÀzÕ6RÖSr    c                ó¤   € V P                  R 4      pVP                  4        \        VP                  4      pV P	                  VR,          R4       R# )z¬/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.comrf   re   N©r	  Úrethrowr	   Úbodyr
  ©r   rÑ   Úparseds   &  r   Útest_openid_get_userÚAuthTest.test_openid_get_userZ  sF   € Ø—:‘:ð5ó
ˆð 	×ÑÔÜ˜XŸ]™]Ó+ˆØ×Ñ˜ �Ð*;Ö<r    c                ó0  € V P                  R RR7      pV P                  VP                  R4       V P                  VP                  R,          P                  R4      4       V P                  RVP                  R,          VP                  R,          4       R# )	ró   Fr  r  r  ú)/oauth1/server/authorize?oauth_token=zxcvú(_oauth_request_token="enhjdg==|MTIzNA=="ú
Set-CookieN©r	  r
  rš   Ú
assertTruer  Úendswithr  rÐ   s   & r   Útest_oauth10_redirectÚAuthTest.test_oauth10_redirecte  s~   € Ø—:‘:Ð5È�:ÓNˆØ×Ñ˜Ÿ™¨Ô,Ø�‰Ø×Ñ˜ZÕ(×1Ñ1Ø;óô	
ð 	�‰Ø6Ø×Ñ˜\Õ*Ø×Ñ˜\Õ*ö	
r    c                óô   € V P                  R RR/R7      pVP                  4        \        VP                  4      pV P	                  VR,          R4       V P	                  VR,          \        RRR	7      4       R
# )z&/oauth10/client/login?oauth_token=zxcvÚCookieú&_oauth_request_token=enhjdg==|MTIzNA==©r  rf   re   rg   rc   rd   rT   N©r	  r  r	   r  r
  rX   r  s   &  r   Útest_oauth10_get_userÚAuthTest.test_oauth10_get_usert  sn   € Ø—:‘:Ø4ØÐGÐHð ó 
ˆð 	×ÑÔÜ˜XŸ]™]Ó+ˆØ×Ñ˜ �Ð*;Ô<Ø×Ñ˜ Õ/´¸&ÈÔ1PÖQr    c                ó  € V P                  R 4      pVP                  4        \        VP                  4      pV P	                  VR,          R4       V P	                  VR,          R4       V P                  RV4       V P                  RV4       R# )rô   rÞ   rR   r]   rc   rÛ   rÝ   N©r	  r  r	   r  r
  r  r  s   &  r   Útest_oauth10_request_parametersÚ(AuthTest.test_oauth10_request_parameters~  ss   € Ø—:‘:Ð>Ó?ˆØ×ÑÔÜ˜XŸ]™]Ó+ˆØ×Ñ˜Ð 4Õ5°vÔ>Ø×Ñ˜ Õ.°Ô7Ø�‰�m VÔ,Ø�‰Ð'¨Ö0r    c                ó4  € V P                  R RR7      pV P                  VP                  R4       V P                  VP                  R,          P                  R4      4       V P                  RVP                  R,          9   VP                  R,          4       R# )	rõ   Fr  r  r  r  r  r  N)r	  r
  rš   r  r  r  rÐ   s   & r   Útest_oauth10a_redirectÚAuthTest.test_oauth10a_redirect‡  sƒ   € Ø—:‘:Ð6È�:ÓOˆØ×Ñ˜Ÿ™¨Ô,Ø�‰Ø×Ñ˜ZÕ(×1Ñ1Ø;óô	
ð 	�‰Ø6Ø×Ñ Õ-ñ.à×Ñ˜\Õ*ö	
r    Nzmock package not presentc           	     ó~  € \         P                  P                  \        R 4      ;_uu_ 4       p\	        R4      Vn        \        \        R4      ;_uu_ 4        V P                  RRR7      pRRR4       V P                  XP                  R4       RRR4       R#   + '       g   i     L6; i  + '       g   i     R# ; i)r.   ÚboomzUncaught exceptionrõ   Fr  NrÎ   )r   ÚpatchÚobjectr‚   r)   Úside_effectr   r   r	  r
  rš   )r   r.   rÑ   s   &  r   Útest_oauth10a_redirect_errorÚ%AuthTest.test_oauth10a_redirect_error–  s€   € ä�Z‰Z×ÑÔ>À×FÔFÈ#Ü'¨Ó/ˆCŒOÜœ7Ð$8×9Õ9ØŸ:™:Ð&>ÐQV˜:ÓW�÷ :à×Ñ˜XŸ]™]¨CÔ0÷	 GÑFç9×9ú÷ G×FÐFús#   ­)B+ÁB	Á*$B+ÂB(Â#B+Â+B<	c                óô   € V P                  R RR/R7      pVP                  4        \        VP                  4      pV P	                  VR,          R4       V P	                  VR,          \        RRR	7      4       R
# )z'/oauth10a/client/login?oauth_token=zxcvr!  r"  r#  rf   re   rg   rc   rd   rT   Nr$  r  s   &  r   Útest_oauth10a_get_userÚAuthTest.test_oauth10a_get_userž  sn   € Ø—:‘:Ø5ØÐGÐHð ó 
ˆð 	×ÑÔÜ˜XŸ]™]Ó+ˆØ×Ñ˜ �Ð*;Ô<Ø×Ñ˜ Õ/´¸&ÈÔ1PÖQr    c                ó  € V P                  R 4      pVP                  4        \        VP                  4      pV P	                  VR,          R4       V P	                  VR,          R4       V P                  RV4       V P                  RV4       R# )rö   rÞ   rR   r]   rc   rÛ   rÝ   Nr(  r  s   &  r   Ú test_oauth10a_request_parametersÚ)AuthTest.test_oauth10a_request_parameters¨  ss   € Ø—:‘:Ð?Ó@ˆØ×ÑÔÜ˜XŸ]™]Ó+ˆØ×Ñ˜Ð 4Õ5°vÔ>Ø×Ñ˜ Õ.°Ô7Ø�‰�m VÔ,Ø�‰Ð'¨Ö0r    c                óh   € V P                  R RR/R7      pV P                  VP                  R4       R# )zG/oauth10a/client/login_coroutine?oauth_token=zxcv&fail_in_get_user=truer!  r"  r#  rm   N)r	  r
  rš   rÐ   s   & r   Ú*test_oauth10a_get_user_coroutine_exceptionÚ3AuthTest.test_oauth10a_get_user_coroutine_exception±  s7   € Ø—:‘:ØUØÐGÐHð ó 
ˆð 	×Ñ˜Ÿ™¨Ö,r    c                óª   € V P                  R RR7      pV P                  VP                  R4       V P                  RVP                  R,          4       R# )r÷   Fr  r  z/oauth2/server/authorize?r  Nr  rÐ   s   & r   Útest_oauth2_redirectÚAuthTest.test_oauth2_redirect¸  sC   € Ø—:‘:Ð4Àu�:ÓMˆØ×Ñ˜Ÿ™¨Ô,Ø�‰Ð1°8×3CÑ3CÀJÕ3OÖPr    c                óš  € V P                  R RR7      pV P                  VP                  R4       V P                  RVP                  R,          9   4       V P                  RRR7      pV P                  VP                  ^È4       \        VP                  4      pV P                  VR,          R4       V P                  VR	,          R
4       R# )rø   Fr  r  z/facebook/server/authorize?r  z /facebook/client/login?code=1234rg   rR   Úsession_expiresÚ3600N)r	  r
  rš   r  r  r	   r  )r   rÑ   r,   s   &  r   Útest_facebook_loginÚAuthTest.test_facebook_login½  s­   € Ø—:‘:Ð6È�:ÓOˆØ×Ñ˜Ÿ™¨Ô,Ø�‰Ð5¸×9IÑ9IÈ*Õ9UÑUÔVØ—:‘:Ø.Àð ó 
ˆð 	×Ñ˜Ÿ™¨Ô,Ü˜8Ÿ=™=Ó)ˆØ×Ñ˜˜nÕ-¨vÔ6Ø×Ñ˜Ð/Õ0°&Ö9r    c                ó0  € V P                  VR R7      pV P                  VP                  R4       V P                  VP                  R,          P                  R4      4       V P                  RVP                  R,          VP                  R,          4       R# )Fr  r  r  r  r  r  Nr  )r   ÚurlrÑ   s   && r   Úbase_twitter_redirectÚAuthTest.base_twitter_redirectÉ  s}   € à—:‘:˜c°E�:Ó:ˆØ×Ñ˜Ÿ™¨Ô,Ø�‰Ø×Ñ˜ZÕ(×1Ñ1Ø;óô	
ð 	�‰Ø6Ø×Ñ˜\Õ*Ø×Ñ˜\Õ*ö	
r    c                ó(   € V P                  R 4       R# )rù   N©rH  r?   s   &r   Útest_twitter_redirectÚAuthTest.test_twitter_redirectÙ  s   € Ø×"Ñ"Ð#:Ö;r    c                ó(   € V P                  R 4       R# )rû   NrK  r?   s   &r   Ú#test_twitter_redirect_gen_coroutineÚ,AuthTest.test_twitter_redirect_gen_coroutineÜ  s   € Ø×"Ñ"Ð#HÖIr    c                óT  € V P                  R RR7      pV P                  VP                  R4       V P                  VP                  R,          P                  R4      VP                  R,          4       V P                  RVP                  R,          VP                  R,          4       R# )	rú   Fr  r  r  z-/twitter/server/authenticate?oauth_token=zxcvr  r  Nr  rÐ   s   & r   Ú"test_twitter_authenticate_redirectÚ+AuthTest.test_twitter_authenticate_redirectß  sŽ   € Ø—:‘:Ð<Èu�:ÓUˆØ×Ñ˜Ÿ™¨Ô,Ø�‰Ø×Ñ˜ZÕ(×1Ñ1Ø?óð ×Ñ˜ZÕ(ô		
ð 	�‰Ø6Ø×Ñ˜\Õ*Ø×Ñ˜\Õ*ö	
r    c                óº   € V P                  R RR/R7      pVP                  4        \        VP                  4      pV P	                  VRRRRRR	R
/RRRRRR/4       R# )z&/twitter/client/login?oauth_token=zxcvr!  r"  r#  rg   rU   rË   rå   r|   rV   rÌ   rÊ   rì   ÚusernameNr  r  s   &  r   Útest_twitter_get_userÚAuthTest.test_twitter_get_userï  s{   € Ø—:‘:Ø4ØÐGÐHð ó 
ˆð 	×ÑÔÜ˜XŸ]™]Ó+ˆØ×ÑØàØ˜6Ø! 5Ø˜fð!ð
 ˜Ø˜uØ˜Eð	ö	
r    c                óš   € V P                  R 4      pVP                  4        V P                  \        VP                  4      RRRR/4       R# )z'/twitter/client/show_user?name=somebodyrÊ   ÚSomebodyrå   ÚsomebodyN)r	  r  r
  r	   r  rÐ   s   & r   Útest_twitter_show_userÚAuthTest.test_twitter_show_user  sB   € Ø—:‘:ÐGÓHˆØ×ÑÔØ×ÑÜ˜Ÿ™Ó&¨°¸]ÈJÐ(Wö	
r    c                ó˜   € V P                  R 4      pV P                  VP                  R4       V P                  VP                  R4       R# )z$/twitter/client/show_user?name=errorrÎ   s   error from twitter requestN)r	  r
  rš   r  rÐ   s   & r   Útest_twitter_show_user_errorÚ%AuthTest.test_twitter_show_user_error  s:   € Ø—:‘:ÐDÓEˆØ×Ñ˜Ÿ™¨Ô,Ø×Ñ˜Ÿ™Ð(EÖFr    rB   )r1   r2   r3   r4   r  r  r  r  r%  r)  r,  ÚunittestÚskipIfr   r3  r6  r9  r<  r?  rD  rH  rL  rO  rR  rV  r[  r^  r6   r7   r8   s   @r   rï   rï     s–   ø‡ € òB
òHTò
	=ò
òRò1ò
ð ‡_‚_�T˜T�\Ð#=Ó>ñ1ó ?ð1òRò1ò-òQò

:ò
ò <òJò
ò 
ò*
÷Gð Gr    rï   c                   óJ   a € ] tR tRt o R t]P                  R 4       tRtV t	R# )ÚGoogleLoginHandleri  c                ó–   € Wn         VP                  R 4      V n        VP                  R4      V n        VP                  R4      V n        R# )ú/client/loginú/google/oauth2/authorizeú/google/oauth2/tokenN)r   r   Ú_OAUTH_REDIRECT_URIrL   rM   r   s   &&r   r   ÚGoogleLoginHandler.initialize  s<   € ØŒ	Ø#'§<¡<°Ó#@ˆÔ Ø$(§L¡LÐ1KÓ$LˆÔ!Ø'+§|¡|Ð4JÓ'KˆÖ$r    c              #  ó–  "  € V P                  R R4      pVes   V P                  V P                  V4      x €pV P                  V P                  P                  R4      VR,          R7      x €pVR,          VR&   V P                  V4       R# V P                  V P                  V P                  R,          R,          RR.R R	R
/R7       R# 5i)rš   Nú/google/oauth2/userinforg   rÍ   Úgoogle_oauthrU   Úprofilerf   ÚpromptÚselect_account)r�   rž   r    Úresponse_typer¡   )	r&   r'   rh  Úoauth2_requestr   r   r>   r^   r(   )r   rš   Úaccessr,   s   &   r   r.   ÚGoogleLoginHandler.get  sÌ   é € à× Ñ  ¨Ó.ˆØÒà×6Ñ6°t×7OÑ7OÐQUÓVÑVˆFØ×,Ñ,Ø—	‘	×!Ñ!Ð";Ó<Ø# NÕ3ð -ó ñ ˆDð
 $*¨.Õ#9ˆD�Ñ Ø�J‰J�tÖà×#Ñ#Ø!×5Ñ5ØŸ-™-¨Õ7¸Õ>Ø  'Ð*Ø$Ø&Ð(8Ð9ð $ö ùs   ‚CC	)rM   rL   rh  r   Nr0   r8   s   @r   rc  rc    s#   ø‡ € òLð 	‡]�]ñó ör    rc  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚGoogleOAuth2AuthorizeHandleri/  c           	     ór   € R pV P                  \        V P                  R4      \        VR7      4      4       R# )úfake-authorization-coder�   )rš   N)Úredirectr   r&   rX   )r   rš   s   & r   r.   Ú GoogleOAuth2AuthorizeHandler.get0  s)   € à(ˆØ�‰”j ×!2Ñ!2°>Ó!BÄDÈdÄOÓTÖUr    rB   Nr‡   r8   s   @r   ru  ru  /  s   ø‡ € ÷Vð Vr    ru  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚGoogleOAuth2TokenHandleri6  c                ó`   € V P                  R 4      R8X  g   Q hV P                  RRRR/4       R# )rš   rw  rg   úfake-access-tokenr¨   znever-expiresN©r&   r*   r?   s   &r   r@   ÚGoogleOAuth2TokenHandler.post7  s5   € Ø× Ñ  Ó(Ð,EÔEÐEÐEà�‰ØÐ0°,ÀÐPö	
r    rB   NrC   r8   s   @r   r{  r{  6  s   ø‡ € ÷
ð 
r    r{  c                   ó&   a € ] tR tRt o R tRtV tR# )ÚGoogleOAuth2UserinfoHandleri?  c                ó`   € V P                  R 4      R8X  g   Q hV P                  RRRR/4       R# )rg   r}  rÊ   rì   rf   re   Nr~  r?   s   &r   r.   ÚGoogleOAuth2UserinfoHandler.get@  s2   € Ø× Ñ  Ó0Ð4GÔGÐGÐGà�‰�V˜U GÐ->Ð?Ö@r    rB   Nr‡   r8   s   @r   r�  r�  ?  s   ø‡ € ÷Að Ar    r�  c                   ó,   a € ] tR tRt o R tR tRtV tR# )ÚGoogleOAuth2TestiF  c                ór   € \        R \        \        V R7      3R\        3R\        3R\
        3.RRRR/R	7      # )
re  rò   rf  rg  rk  rU   Úfake_google_client_idrV   Úfake_google_client_secret)rl  )r   rc  rX   ru  r{  r�  r?   s   &r   r  ÚGoogleOAuth2Test.get_appG  sS   € Üð !Ô"4´dÀ´oÐFà+Ô-IÐJØ'Ô)AÐBØ*Ô,GÐHðð Ð.ØÐ5ðô
ð 	
r    c                ó~   € V P                  R 4      pV P                  RRRRRR/\        VP                  4      4       R# )re  rÊ   rì   rf   re   rg   r}  N)r	  ÚassertDictEqualr	   r  rÐ   s   & r   Útest_google_loginÚ"GoogleOAuth2Test.test_google_loginW  sB   € Ø—:‘:˜oÓ.ˆØ×Ñà˜ØÐ*ØÐ 3ðô
 ˜Ÿ™Ó&ö	
r    rB   N)r1   r2   r3   r4   r  rŒ  r6   r7   r8   s   @r   r…  r…  F  s   ø‡ € ò
÷ 	
ð 	
r    r…  )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   r;   rE   rk   rs   r‚   rŠ   rŽ   r”   r¦   r«   r¯   r¹   rÀ   rÄ   rÈ   rÔ   rØ   rê   rï   rc  ru  r{  r�  r…  rB   r    r   Ú<module>r—     s�  ðó ÷÷ õ 'Ý Ý .Ý 'Ý ß 8ß >Ñ >ðÝô
˜~¨{ô ô$$ nô $ô-˜~¨zô -ô>,Ð(@ô ,ô"¨>¸:ô ô ? nô ?ô
? ^ô ?ô
˜~¨{ô ô Ð1Cô ô0? ~ô ?ô
˜nô ô
	,˜>¨<ô 	,ô	(Ð 4ô 	(ô+Ð';ô +ô	,Ð,@ô 	,ô"Ð#7ô "ô&O nô Oô
Q >ô Qô	8¨Nô 	8ô~GÐ ô ~GôB˜Ð):ô ô<V >ô Vô
˜~ô 
ôA .ô Aô
Ð(ö 
øðY ô ØƒDðús   ÁE( Å(	E5Å4E5