From d950a87e20a17b056d11e1a6429315393715c43e Mon Sep 17 00:00:00 2001 From: matve Date: Thu, 28 Sep 2023 18:20:03 +0300 Subject: [PATCH] add endpoints authorize, callback --- sapphire/users/api/service.py | 4 +--- sapphire/users/api/v1beta/oauth2/habr.py | 11 ++++++++--- sapphire/users/oauth2/habr.py | 3 +-- sapphire/users/settings.py | 2 -- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/sapphire/users/api/service.py b/sapphire/users/api/service.py index 695c56e3..d7b9fef7 100644 --- a/sapphire/users/api/service.py +++ b/sapphire/users/api/service.py @@ -1,12 +1,10 @@ import fastapi from facet import ServiceMixin - from sapphire.common.api.service import APIService from sapphire.users.__version__ import __version__ from sapphire.users.database.service import UsersDatabaseService from sapphire.users.oauth2.habr import OAuth2HabrBackend from sapphire.users.settings import UsersSettings - from .router import router @@ -14,7 +12,7 @@ class UsersAPIService(APIService): def __init__( self, database: UsersDatabaseService, - habr_oauth2: OAuth2HabrBackend, + habr_oauth2: OAuth2HabrBackend, version: str = "0.0.0", port: int = 8000, ): diff --git a/sapphire/users/api/v1beta/oauth2/habr.py b/sapphire/users/api/v1beta/oauth2/habr.py index c51f24e9..e24a711c 100644 --- a/sapphire/users/api/v1beta/oauth2/habr.py +++ b/sapphire/users/api/v1beta/oauth2/habr.py @@ -7,10 +7,15 @@ @router.get("/authorize", response_class=RedirectResponse) async def authorize(request: fastapi.Request): + habr_oauth2 = request.app.habr_oauth2 redirect_url = yarl.URL(str(request.url)).parent / "callback" + authorisation_url = habr_oauth2.get_authorization_url(redirect_url=str(redirect_url)) + return RedirectResponse(url=authorisation_url) - # Get OAuth2 backend from request.app.habr_oauth2 @router.get("/callback") -async def callback(): - pass +async def callback(request: fastapi.Request): + habr_oauth2 = request.app.habr_oauth2 + token = await habr_oauth2.get_token() + user_info = await habr_oauth2.get_user_info(token=token) + return user_info diff --git a/sapphire/users/oauth2/habr.py b/sapphire/users/oauth2/habr.py index 93098bb8..205ca12c 100644 --- a/sapphire/users/oauth2/habr.py +++ b/sapphire/users/oauth2/habr.py @@ -1,8 +1,6 @@ import aiohttp import pydantic - from sapphire.users.settings import UsersSettings - from .base import OAuth2BaseBackend @@ -33,6 +31,7 @@ async def get_user_info(self, token: str) -> HabrUser: is_email_confirmed=(data["is_email_confirmed"] == "1"), ) + def get_oauth2_backend(settings: UsersSettings) -> OAuth2HabrBackend: return OAuth2HabrBackend( client_id=settings.habr_oauth2_client_id, diff --git a/sapphire/users/settings.py b/sapphire/users/settings.py index 7cda4b5f..d94dd1ac 100644 --- a/sapphire/users/settings.py +++ b/sapphire/users/settings.py @@ -4,9 +4,7 @@ class UsersSettings(BaseSettings): port: conint(ge=1, le=65535) = 8000 - db_dsn: AnyUrl = AnyUrl("sqlite+aiosqlite:///users.sqlite3") - habr_oauth2_client_id: str habr_oauth2_client_secret: str