Refactor app.py
This commit is contained in:
@ -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__':
|
||||||
|
|||||||
Reference in New Issue
Block a user