mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-04-14 02:20:53 +08:00
67 lines
2.3 KiB
Python
67 lines
2.3 KiB
Python
from datetime import timedelta
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException, status
|
|
from fastapi.security import OAuth2PasswordRequestForm
|
|
from fastapi.responses import JSONResponse, Response
|
|
|
|
from .response import u_response
|
|
|
|
from module.models.user import User, UserUpdate
|
|
from module.models import APIResponse
|
|
from module.security.api import (
|
|
auth_user,
|
|
get_current_user,
|
|
update_user_info,
|
|
active_user
|
|
)
|
|
from module.security.jwt import create_access_token
|
|
|
|
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"}
|