Refactor app.py

This commit is contained in:
Iam54r1n4
2025-02-03 19:06:15 +00:00
parent 723378c00e
commit 2956b3813d

View File

@ -1,63 +1,65 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
import sys import sys
import os from fastapi import FastAPI, Depends
import secrets
from fastapi import FastAPI
from fastapi.templating import Jinja2Templates
from fastapi import Request from fastapi import Request
from starlette.middleware.sessions import SessionMiddleware
from starlette.staticfiles import StaticFiles from starlette.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from config import CONFIGS # Loads the configuration from .env
from authentication.auth import AuthMiddleware # Defines authentication middleware
from dependency import get_templates, get_session_manager # Defines dependencies across routers
from exception_handler import setup_exception_handler # Defines exception handlers
# Append directory of cli_api.py to be able to import it # Append directory of cli_api.py to be able to import it
HYSTERIA_CORE_DIR = '/etc/hysteria/core/' HYSTERIA_CORE_DIR = '/etc/hysteria/core/'
sys.path.append(HYSTERIA_CORE_DIR) sys.path.append(HYSTERIA_CORE_DIR)
import routers # noqa: This import should be after the sys.path modification, because it imports cli_api import routers # noqa: This import should be after the sys.path modification, because it imports cli_api
import cli_api # noqa
# region Setup App
app = FastAPI(debug=True)
secret_key = os.getenv("SESSION_SECRET_KEY", secrets.token_urlsafe(32))
app.mount('/assets', StaticFiles(directory='assets'), name='assets')
templates = Jinja2Templates(directory='templates')
app.add_middleware(SessionMiddleware, secret_key=secret_key)
# endregion
# region Routers def create_app() -> FastAPI:
'''
Create FastAPI app.
'''
# Add API version 1 router # Set up FastAPI
app.include_router(routers.api.v1.api_v1_router, prefix='/api/v1', tags=['v1']) # Add API version 1 router app = FastAPI(
# Add user router title='Hysteria Webpanel',
app.include_router(routers.user.router, prefix='/users', tags=['users']) description='Webpanel for Hysteria',
version='0.1.0',
debug=CONFIGS.DEBUG
)
# Add basic routes # Set up static files
app.mount('/assets', StaticFiles(directory='assets'), name='assets')
# Set up exception handlers
setup_exception_handler(app)
# Set up authentication middleware
app.add_middleware(AuthMiddleware, session_manager=get_session_manager(), api_token=CONFIGS.API_TOKEN)
# Set up Routers
app.include_router(routers.login.router, prefix='', tags=['authentication']) # Add authentication router
app.include_router(routers.user.router, prefix='/users', tags=['users']) # Add user router
app.include_router(routers.api.v1.api_v1_router, prefix='/api/v1', tags=['v1']) # Add API version 1 router
return app
@app.get('/login') app: FastAPI = create_app()
async def login(request: Request):
return templates.TemplateResponse('login.html', {'request': request})
@app.get('/logout') @app.get('/')
async def logout(request: Request): async def index(request: Request, templates: Jinja2Templates = Depends(get_templates)):
pass return templates.TemplateResponse('index.html', {'request': request})
@ app.get('/') @app.get('/home')
async def index(request: Request):
users = cli_api.list_users()
return templates.TemplateResponse('index.html', {'request': request, 'users': users})
@ app.get('/home')
async def home(request: Request): async def home(request: Request):
return await index(request) return await index(request)
# endregion
if __name__ == '__main__': if __name__ == '__main__':