Implement login endpoints

This commit is contained in:
Iam54r1n4
2025-02-03 19:05:51 +00:00
parent d0a73a6fc6
commit 723378c00e
3 changed files with 47 additions and 0 deletions

View File

@ -1,2 +1,3 @@
from . import api
from . import user
from . import login

View File

@ -0,0 +1 @@
from .login import router

View File

@ -0,0 +1,45 @@
from fastapi import APIRouter, Depends, Form, Request
from fastapi.responses import RedirectResponse
from fastapi.templating import Jinja2Templates
from dependency import get_templates, get_session_manager
from authentication.session import SessionManager
from config import CONFIGS
router = APIRouter()
@router.get('/login')
async def login(request: Request, templates: Jinja2Templates = Depends(get_templates)):
return templates.TemplateResponse('login.html', {'request': request})
@router.post('/login')
async def login_post(
request: Request,
templates: Jinja2Templates = Depends(get_templates), session_manager: SessionManager = Depends(get_session_manager),
username: str = Form(), password: str = Form(),
):
ADMIN_USERNAME = CONFIGS.ADMIN_USERNAME
ADMIN_PASSWORD = CONFIGS.ADMIN_PASSWORD
if not username == ADMIN_USERNAME or not password == ADMIN_PASSWORD:
return templates.TemplateResponse('login.html', {'request': request, 'error': 'Invalid username or password'})
session_id = session_manager.set_session(username)
res = RedirectResponse(url='/', status_code=302)
res.set_cookie(key='session_id', value=session_id)
return res
@router.get('/logout')
async def logout(request: Request, session_manager: SessionManager = Depends(get_session_manager)):
session_id = request.cookies.get('session_id')
if session_id:
session_manager.revoke_session(session_id)
res = RedirectResponse(url='/', status_code=302)
res.delete_cookie('session_id')
return res