Add basic router & Using hypercorn instead of uvicorn & Fix accepting proxy headers from reverse proxy

This commit is contained in:
Iam54r1n4
2025-02-04 16:32:18 +00:00
parent 78859facce
commit f05620430c

View File

@ -1,17 +1,15 @@
#!/usr/bin/env python3
import sys
from fastapi import FastAPI, Depends
from fastapi import Request
import asyncio
from fastapi import FastAPI
from starlette.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from fastapi.responses import PlainTextResponse
from config import CONFIGS # Loads the configuration from .env
from middleware import AuthMiddleware # Defines authentication middleware
from middleware import AfterRequestMiddleware # Defines after request middleware
from dependency import get_templates, get_session_manager # Defines dependencies across routers
from dependency import 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
@ -31,7 +29,7 @@ def create_app() -> FastAPI:
title='Hysteria Webpanel',
description='Webpanel for Hysteria',
version='0.1.0',
debug=CONFIGS.DEBUG
debug=CONFIGS.DEBUG,
)
# Set up static files
@ -46,6 +44,7 @@ def create_app() -> FastAPI:
app.add_middleware(AfterRequestMiddleware)
# Set up Routers
app.include_router(routers.basic.router, prefix='', tags=['basic']) # Add basic router
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
@ -56,20 +55,17 @@ def create_app() -> FastAPI:
app: FastAPI = create_app()
@app.get('/')
async def index(request: Request, templates: Jinja2Templates = Depends(get_templates)):
return templates.TemplateResponse('index.html', {'request': request})
@app.get('/home')
async def home(request: Request):
return await index(request)
@app.get('/robots.txt')
async def robots_txt(request: Request):
return PlainTextResponse('User-agent: *\nDisallow: /')
if __name__ == '__main__':
import uvicorn
uvicorn.run(app, host='127.0.0.1', port=8080)
from hypercorn.config import Config
from hypercorn.asyncio import serve # type: ignore
from hypercorn.middleware import ProxyFixMiddleware
config = Config()
config.debug = CONFIGS.DEBUG
config.bind = ['127.0.0.1:8080']
config.accesslog = '-'
config.errorlog = '-'
# Fix proxy headers
app = ProxyFixMiddleware(app, 'legacy') # type: ignore
asyncio.run(serve(app, config)) # type: ignore