38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
from typing import Annotated
|
|
|
|
from fastapi import APIRouter, Depends
|
|
from fastapi.security import OAuth2PasswordRequestForm
|
|
from datetime import datetime
|
|
|
|
from ..model.token import TokenResponse, RefreshTokenRequest
|
|
from ..context import ContextDependency, Context
|
|
from ..controller import UserController
|
|
|
|
router = APIRouter(tags=["token"])
|
|
|
|
|
|
def gen_token_response(user_ctrl: UserController, now: datetime) -> TokenResponse:
|
|
token_ctrl = user_ctrl.token_ctrl()
|
|
access_token, refresh_token = token_ctrl.generate_token_pair(now)
|
|
return TokenResponse(
|
|
access_token=access_token.encode(),
|
|
refresh_token=refresh_token.encode(),
|
|
)
|
|
|
|
|
|
@router.post("", response_model=TokenResponse)
|
|
async def token_create(
|
|
data: Annotated[OAuth2PasswordRequestForm, Depends()],
|
|
ctx: Context = Depends(ContextDependency()),
|
|
) -> TokenResponse:
|
|
now = ctx.clock()
|
|
user_ctrl = await UserController.session_start(ctx, data.username, data.password)
|
|
return gen_token_response(user_ctrl, now)
|
|
|
|
|
|
@router.post("/refresh", response_model=TokenResponse)
|
|
async def token_refresh(
|
|
data: RefreshTokenRequest,
|
|
ctx: Context = Depends(ContextDependency()),
|
|
):
|
|
pass
|