From 723378c00e9c168f7a8294e479c76c70ac89dbd2 Mon Sep 17 00:00:00 2001 From: Iam54r1n4 Date: Mon, 3 Feb 2025 19:05:51 +0000 Subject: [PATCH] Implement login endpoints --- core/scripts/webpanel/routers/__init__.py | 1 + .../webpanel/routers/login/__init__.py | 1 + core/scripts/webpanel/routers/login/login.py | 45 +++++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 core/scripts/webpanel/routers/login/__init__.py create mode 100644 core/scripts/webpanel/routers/login/login.py diff --git a/core/scripts/webpanel/routers/__init__.py b/core/scripts/webpanel/routers/__init__.py index 2f5ca0e..3c1276e 100644 --- a/core/scripts/webpanel/routers/__init__.py +++ b/core/scripts/webpanel/routers/__init__.py @@ -1,2 +1,3 @@ from . import api from . import user +from . import login diff --git a/core/scripts/webpanel/routers/login/__init__.py b/core/scripts/webpanel/routers/login/__init__.py new file mode 100644 index 0000000..e53750a --- /dev/null +++ b/core/scripts/webpanel/routers/login/__init__.py @@ -0,0 +1 @@ +from .login import router diff --git a/core/scripts/webpanel/routers/login/login.py b/core/scripts/webpanel/routers/login/login.py new file mode 100644 index 0000000..efbdfd4 --- /dev/null +++ b/core/scripts/webpanel/routers/login/login.py @@ -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