mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-04-13 18:11:03 +08:00
The previous refactoring broke backward compatibility by converting Database from Session-extending sync class to a standalone async class. This broke RSSEngine, startup code, and auth flows. - Restore Database(Session) with sync interface for legacy code - Restore UserDatabase to sync methods - Restore security/api.py and auth.py to sync calls - Passkey API now uses async_session_factory directly - PasskeyAuthStrategy uses async sessions independently - Remove unused db_session from engine.py Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
76 lines
2.4 KiB
Python
76 lines
2.4 KiB
Python
from datetime import timedelta
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException, status
|
|
from fastapi.responses import JSONResponse, Response
|
|
from fastapi.security import OAuth2PasswordRequestForm
|
|
|
|
from module.models import APIResponse
|
|
from module.models.user import User, UserUpdate
|
|
from module.security.api import (
|
|
active_user,
|
|
auth_user,
|
|
get_current_user,
|
|
update_user_info,
|
|
)
|
|
from module.security.jwt import create_access_token
|
|
|
|
from .response import u_response
|
|
|
|
router = APIRouter(prefix="/auth", tags=["auth"])
|
|
|
|
|
|
@router.post("/login", response_model=dict)
|
|
async def login(response: Response, form_data=Depends(OAuth2PasswordRequestForm)):
|
|
user = User(username=form_data.username, password=form_data.password)
|
|
resp = auth_user(user)
|
|
if resp.status:
|
|
token = create_access_token(
|
|
data={"sub": user.username}, expires_delta=timedelta(days=1)
|
|
)
|
|
response.set_cookie(key="token", value=token, httponly=True, max_age=86400)
|
|
return {"access_token": token, "token_type": "bearer"}
|
|
return u_response(resp)
|
|
|
|
|
|
@router.get(
|
|
"/refresh_token", response_model=dict, dependencies=[Depends(get_current_user)]
|
|
)
|
|
async def refresh(response: Response):
|
|
token = create_access_token(
|
|
data={"sub": active_user[0]}, expires_delta=timedelta(days=1)
|
|
)
|
|
response.set_cookie(key="token", value=token, httponly=True, max_age=86400)
|
|
return {"access_token": token, "token_type": "bearer"}
|
|
|
|
|
|
@router.get(
|
|
"/logout", response_model=APIResponse, dependencies=[Depends(get_current_user)]
|
|
)
|
|
async def logout(response: Response):
|
|
active_user.clear()
|
|
response.delete_cookie(key="token")
|
|
return JSONResponse(
|
|
status_code=200,
|
|
content={"msg_en": "Logout successfully.", "msg_zh": "登出成功。"},
|
|
)
|
|
|
|
|
|
@router.post("/update", response_model=dict, dependencies=[Depends(get_current_user)])
|
|
async def update_user(user_data: UserUpdate, response: Response):
|
|
old_user = active_user[0]
|
|
if update_user_info(user_data, old_user):
|
|
token = create_access_token(
|
|
data={"sub": old_user}, expires_delta=timedelta(days=1)
|
|
)
|
|
response.set_cookie(
|
|
key="token",
|
|
value=token,
|
|
httponly=True,
|
|
max_age=86400,
|
|
)
|
|
return {
|
|
"access_token": token,
|
|
"token_type": "bearer",
|
|
"message": "update success",
|
|
}
|