From 581bed2a33870570991dc5b8e029df4df77959f4 Mon Sep 17 00:00:00 2001 From: Wu Clan Date: Mon, 22 Jul 2024 13:47:43 +0800 Subject: [PATCH] Update oauth2 route naming and return (#361) * Update oauth2 route naming and storage * Update some arg naming * Update oauth2 redirect uri * adapts to the front-end oauth2 --- backend/app/admin/api/router.py | 4 ++-- backend/app/admin/api/v1/auth2/__init__.py | 11 ----------- backend/app/admin/api/v1/oauth2/__init__.py | 11 +++++++++++ backend/app/admin/api/v1/{auth2 => oauth2}/github.py | 5 +++-- .../app/admin/api/v1/{auth2 => oauth2}/linux_do.py | 6 +++--- backend/app/admin/conf.py | 7 +++++-- 6 files changed, 24 insertions(+), 20 deletions(-) delete mode 100644 backend/app/admin/api/v1/auth2/__init__.py create mode 100644 backend/app/admin/api/v1/oauth2/__init__.py rename backend/app/admin/api/v1/{auth2 => oauth2}/github.py (90%) rename backend/app/admin/api/v1/{auth2 => oauth2}/linux_do.py (91%) diff --git a/backend/app/admin/api/router.py b/backend/app/admin/api/router.py index 03a1804b..5f7a84e4 100644 --- a/backend/app/admin/api/router.py +++ b/backend/app/admin/api/router.py @@ -3,15 +3,15 @@ from fastapi import APIRouter from backend.app.admin.api.v1.auth import router as auth_router -from backend.app.admin.api.v1.auth2 import router as auth2_router from backend.app.admin.api.v1.log import router as log_router from backend.app.admin.api.v1.monitor import router as monitor_router +from backend.app.admin.api.v1.oauth2 import router as oauth2_router from backend.app.admin.api.v1.sys import router as sys_router v1 = APIRouter() v1.include_router(auth_router) -v1.include_router(auth2_router) +v1.include_router(oauth2_router) v1.include_router(sys_router) v1.include_router(log_router) v1.include_router(monitor_router) diff --git a/backend/app/admin/api/v1/auth2/__init__.py b/backend/app/admin/api/v1/auth2/__init__.py deleted file mode 100644 index 1ea7bb02..00000000 --- a/backend/app/admin/api/v1/auth2/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -from fastapi import APIRouter - -from backend.app.admin.api.v1.auth2.github import router as github_router -from backend.app.admin.api.v1.auth2.linux_do import router as linux_do_router - -router = APIRouter(prefix='/auth2') - -router.include_router(github_router, prefix='/github', tags=['GitHub OAuth2']) -router.include_router(linux_do_router, prefix='/linuxdo', tags=['Linux Do OAuth2']) diff --git a/backend/app/admin/api/v1/oauth2/__init__.py b/backend/app/admin/api/v1/oauth2/__init__.py new file mode 100644 index 00000000..8ef946db --- /dev/null +++ b/backend/app/admin/api/v1/oauth2/__init__.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +from fastapi import APIRouter + +from backend.app.admin.api.v1.oauth2.github import router as github_router +from backend.app.admin.api.v1.oauth2.linux_do import router as linux_do_router + +router = APIRouter(prefix='/oauth2') + +router.include_router(github_router, prefix='/github', tags=['GitHub OAuth2']) +router.include_router(linux_do_router, prefix='/linux-do', tags=['LinuxDo OAuth2']) diff --git a/backend/app/admin/api/v1/auth2/github.py b/backend/app/admin/api/v1/oauth2/github.py similarity index 90% rename from backend/app/admin/api/v1/auth2/github.py rename to backend/app/admin/api/v1/oauth2/github.py index e7b30b9a..8b839375 100644 --- a/backend/app/admin/api/v1/auth2/github.py +++ b/backend/app/admin/api/v1/oauth2/github.py @@ -3,6 +3,7 @@ from fastapi import APIRouter, BackgroundTasks, Depends, Request from fastapi_limiter.depends import RateLimiter from fastapi_oauth20 import FastAPIOAuth20, GitHubOAuth20 +from starlette.responses import RedirectResponse from backend.app.admin.conf import admin_settings from backend.app.admin.service.oauth2_service import oauth2_service @@ -29,7 +30,7 @@ async def github_auth2() -> ResponseModel: ) async def github_login( request: Request, background_tasks: BackgroundTasks, oauth2: FastAPIOAuth20 = Depends(_github_oauth2) -) -> ResponseModel: +): token, _state = oauth2 access_token = token['access_token'] user = await _github_client.get_userinfo(access_token) @@ -39,4 +40,4 @@ async def github_login( user=user, social=UserSocialType.github, ) - return await response_base.success(data=data) + return RedirectResponse(url=f'{admin_settings.OAUTH2_FRONTEND_REDIRECT_URI}?access_token={data.access_token}') diff --git a/backend/app/admin/api/v1/auth2/linux_do.py b/backend/app/admin/api/v1/oauth2/linux_do.py similarity index 91% rename from backend/app/admin/api/v1/auth2/linux_do.py rename to backend/app/admin/api/v1/oauth2/linux_do.py index 8b822652..105afdaf 100644 --- a/backend/app/admin/api/v1/auth2/linux_do.py +++ b/backend/app/admin/api/v1/oauth2/linux_do.py @@ -1,9 +1,9 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- - from fastapi import APIRouter, BackgroundTasks, Depends, Request from fastapi_limiter.depends import RateLimiter from fastapi_oauth20 import FastAPIOAuth20, LinuxDoOAuth20 +from starlette.responses import RedirectResponse from backend.app.admin.conf import admin_settings from backend.app.admin.service.oauth2_service import oauth2_service @@ -33,7 +33,7 @@ async def linux_do_auth2() -> ResponseModel: ) async def linux_do_login( request: Request, background_tasks: BackgroundTasks, oauth2: FastAPIOAuth20 = Depends(_linux_do_oauth2) -) -> ResponseModel: +): token, _state = oauth2 access_token = token['access_token'] user = await _linux_do_client.get_userinfo(access_token) @@ -43,4 +43,4 @@ async def linux_do_login( user=user, social=UserSocialType.linuxdo, ) - return await response_base.success(data=data) + return RedirectResponse(url=f'{admin_settings.OAUTH2_FRONTEND_REDIRECT_URI}?access_token={data.access_token}') diff --git a/backend/app/admin/conf.py b/backend/app/admin/conf.py index ab5663ba..439902e1 100644 --- a/backend/app/admin/conf.py +++ b/backend/app/admin/conf.py @@ -16,12 +16,15 @@ class AdminSettings(BaseSettings): # GitHub OAUTH2_GITHUB_CLIENT_ID: str OAUTH2_GITHUB_CLIENT_SECRET: str - OAUTH2_GITHUB_REDIRECT_URI: str = 'http://127.0.0.1:8000/api/v1/auth2/github/callback' + OAUTH2_GITHUB_REDIRECT_URI: str = 'http://127.0.0.1:8000/api/v1/oauth2/github/callback' # Linux Do OAUTH2_LINUX_DO_CLIENT_ID: str OAUTH2_LINUX_DO_CLIENT_SECRET: str - OAUTH2_LINUX_DO_REDIRECT_URI: str = 'http://127.0.0.1:8000/api/v1/auth2/linuxdo/callback' + OAUTH2_LINUX_DO_REDIRECT_URI: str = 'http://127.0.0.1:8000/api/v1/oauth2/linux-do/callback' + + # Front-end redirect address + OAUTH2_FRONTEND_REDIRECT_URI: str = 'http://localhost:5173/oauth2/callback' # Captcha CAPTCHA_LOGIN_REDIS_PREFIX: str = 'fba_login_captcha'