| from fastapi import APIRouter, Request, Depends
|
| from ..controller.auth import (
|
| initiate_google_login,
|
| handle_google_callback,
|
| logout_user,
|
| get_user_sessions,
|
| register_user,
|
| login_user,
|
| delete_user_account,
|
| refresh_access_token,
|
| )
|
| from ..schema.auth import RegisterRequest, LoginRequest, RefreshTokenRequest
|
| from ..lib.auth import get_current_user
|
|
|
| router = APIRouter()
|
|
|
|
|
| @router.post("/register")
|
| async def register(register_data: RegisterRequest):
|
| """Register a new user"""
|
| return await register_user(register_data)
|
|
|
|
|
| @router.post("/login")
|
| async def login(login_data: LoginRequest, request: Request):
|
| """Login with email and password"""
|
| return await login_user(login_data, request)
|
|
|
|
|
| @router.post("/refresh")
|
| async def refresh(refresh_data: RefreshTokenRequest):
|
| """Refresh access token using refresh token"""
|
| return await refresh_access_token(refresh_data.refresh_token)
|
|
|
|
|
| @router.get("/google/login")
|
| async def login_google():
|
| """Initiate Google OAuth2 login"""
|
| return await initiate_google_login()
|
|
|
|
|
| @router.get("/google/callback")
|
| async def auth_google_callback(code: str, state: str, request: Request):
|
| """Handle Google OAuth2 callback"""
|
| return await handle_google_callback(code, state, request)
|
|
|
|
|
| @router.post("/logout")
|
| async def logout(user_id: int = Depends(get_current_user)):
|
| """Logout current user from all sessions"""
|
| return await logout_user(user_id)
|
|
|
|
|
| @router.post("/logout/{session_id}")
|
| async def logout_session(session_id: int, user_id: int = Depends(get_current_user)):
|
| """Logout from specific session"""
|
| return await logout_user(user_id, session_id)
|
|
|
|
|
| @router.get("/sessions")
|
| async def get_sessions(user_id: int = Depends(get_current_user)):
|
| """Get user's login sessions"""
|
| return await get_user_sessions(user_id)
|
|
|
|
|
| @router.delete("/account")
|
| async def delete_account(user_id: int = Depends(get_current_user)):
|
| """Delete user account and all associated data"""
|
| return await delete_user_account(user_id)
|
|
|