jdeip/app/main.py

57 lines
1.9 KiB
Python

from fastapi import FastAPI, Request, Form
from fastapi.templating import Jinja2Templates
from fastapi.staticfiles import StaticFiles
from fastapi.responses import HTMLResponse, RedirectResponse
from .config import settings
from .routers.proxy import router as proxy_router
from starlette.middleware.sessions import SessionMiddleware
app = FastAPI(title="EIP Rotation Service")
# 设置模板目录
templates = Jinja2Templates(directory="app/templates")
# 会话中间件(用于简单登录态)
app.add_middleware(SessionMiddleware, secret_key=settings.session_secret)
@app.get("/health")
def health_check():
return {"status": "ok"}
@app.get("/", response_class=HTMLResponse)
async def index(request: Request, id: str = None):
"""主页 - IP轮换控制面板"""
if not request.session.get("authenticated"):
return RedirectResponse(url="/login", status_code=302)
return templates.TemplateResponse("index.html", {
"request": request,
"client_id": id or "1" # 默认ID为1
})
app.include_router(proxy_router, prefix="/proxy", tags=["proxy"])
@app.get("/login", response_class=HTMLResponse)
async def login_page(request: Request):
return templates.TemplateResponse("login.html", {"request": request, "error": None})
@app.post("/login")
async def login_submit(request: Request, username: str = Form(...), password: str = Form(...)):
if username == settings.admin_username and password == settings.admin_password:
request.session["authenticated"] = True
return RedirectResponse(url="/", status_code=302)
# 登录失败,回到登录页并提示
return templates.TemplateResponse("login.html", {"request": request, "error": "用户名或密码错误"}, status_code=401)
@app.get("/logout")
async def logout(request: Request):
request.session.clear()
return RedirectResponse(url="/login", status_code=302)