deepak2563/opensourcetranscriptmaker
0
1from fastapi import APIRouter, HTTPException, Depends, Header2from fastapi.security import OAuth2PasswordBearer3from typing import Optional4from ..schemas.access import UnlockRequest, UnlockResponse, SessionResponse, LogoutResponse5from ..services.access_control import verify_password, create_access_token, verify_access_token6 7router = APIRouter(prefix="/api/access", tags=["access"])8 9oauth2_scheme = OAuth2PasswordBearer(tokenUrl="api/access/unlock")10 11def get_current_user(token: str = Depends(oauth2_scheme)):12 if not verify_access_token(token):13 raise HTTPException(status_code=401, detail="Invalid or expired token")14 return "unlocked_user"15 16@router.post("/unlock", response_model=UnlockResponse)17async def unlock_app(req: UnlockRequest):18 if verify_password(req.password):19 token = create_access_token()20 return UnlockResponse(ok=True, token=token)21 return UnlockResponse(ok=False, error="Invalid password")22 23@router.get("/session", response_model=SessionResponse)24async def check_session(authorization: Optional[str] = Header(None)):25 if authorization and authorization.startswith("Bearer "):26 token = authorization.split(" ")[1]27 if verify_access_token(token):28 return SessionResponse(ok=True, unlocked=True)29 return SessionResponse(ok=True, unlocked=False)30 31@router.post("/logout", response_model=LogoutResponse)32async def logout():33 # Client will just delete the token34 return LogoutResponse(ok=True)35 36 