from fastapi import APIRouter, status, Depends, HTTPException, Header from backend.code.middlewares.private_middleware import PrivateMiddleware from backend.code.models.requests.account_login import AccountLoginRequest from backend.code.models.requests.account_recover import AccountRecoverRequest from backend.code.models.responses.session_token import SessionTokenResponse from backend.code.modules.sessions.controller import SessionsController routes = APIRouter(prefix="/account", tags=['Session']) middleware = PrivateMiddleware() controller = SessionsController() @routes.post('/login', status_code = status.HTTP_200_OK, response_model = SessionTokenResponse) def Login(data: AccountLoginRequest): session = controller.Login(data.Username, data.Password, data.Domain) if type(session) is not SessionTokenResponse: raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED) return session @routes.post('/token/validate', status_code = status.HTTP_200_OK, response_model = SessionTokenResponse) def ValidateToken(token: str = Depends(middleware.HasToken)): validation = controller.ValidateToken(token) if type(validation) is not SessionTokenResponse: raise HTTPException(status_code = status.HTTP_401_UNAUTHORIZED) return validation @routes.post('/logout', status_code = status.HTTP_204_NO_CONTENT) def Logout(token: str = Depends(middleware.HasToken)): closed = controller.Logout(token) if closed is None: raise HTTPException(status_code = status.HTTP_404_NOT_FOUND) @routes.post('/recover', status_code = status.HTTP_200_OK) def RecoverAccount(data: AccountRecoverRequest): recovered = controller.RecoverAccount(data.Username, data.Domain) if recovered is None: raise HTTPException(status_code = status.HTTP_404_NOT_FOUND) @routes.post("/recover/validate/{token}", status_code=status.HTTP_204_NO_CONTENT) def ValidateTokenRecoverAccount(token: str): account = controller.ValidateTokenRecoverAccount(token) if account is None: raise HTTPException(status_code = status.HTTP_404_NOT_FOUND)