(self)
| 57 | |
| 58 | class LoginHandler(BaseHandler, tornado.auth.GoogleOAuth2Mixin): |
| 59 | async def get(self): |
| 60 | redirect_uri = urllib.parse.urljoin( |
| 61 | self.application.settings["redirect_base_uri"], |
| 62 | self.reverse_url("google_oauth"), |
| 63 | ) |
| 64 | if self.get_argument("code", False): |
| 65 | access = await self.get_authenticated_user( |
| 66 | redirect_uri=redirect_uri, code=self.get_argument("code") |
| 67 | ) |
| 68 | user = await self.oauth2_request( |
| 69 | "https://www.googleapis.com/oauth2/v1/userinfo", |
| 70 | access_token=access["access_token"], |
| 71 | ) |
| 72 | # Save the user and access token. |
| 73 | user_cookie = dict(id=user["id"], access_token=access["access_token"]) |
| 74 | self.set_signed_cookie("googledemo_user", json.dumps(user_cookie)) |
| 75 | self.redirect("/") |
| 76 | else: |
| 77 | self.authorize_redirect( |
| 78 | redirect_uri=redirect_uri, |
| 79 | client_id=self.get_google_oauth_settings()["key"], |
| 80 | scope=["profile", "email"], |
| 81 | response_type="code", |
| 82 | extra_params={"approval_prompt": "auto"}, |
| 83 | ) |
| 84 | |
| 85 | |
| 86 | class LogoutHandler(BaseHandler): |
nothing calls this directly
no test coverage detected