Implement login endpoints
This commit is contained in:
@ -1,2 +1,3 @@
|
||||
from . import api
|
||||
from . import user
|
||||
from . import login
|
||||
|
||||
1
core/scripts/webpanel/routers/login/__init__.py
Normal file
1
core/scripts/webpanel/routers/login/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
from .login import router
|
||||
45
core/scripts/webpanel/routers/login/login.py
Normal file
45
core/scripts/webpanel/routers/login/login.py
Normal 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
|
||||
Reference in New Issue
Block a user