Files
findreve/main.py

90 lines
2.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
'''
Author: 于小丘 海枫
Date: 2024-10-02 15:23:34
LastEditors: Yuerchu admin@yuxiaoqiu.cn
LastEditTime: 2024-11-29 20:04:41
FilePath: /Findreve/main.py
Description: Findreve
Copyright (c) 2018-2024 by 于小丘Yuerchu, All Rights Reserved.
'''
from nicegui import app, ui, Client
from fastapi import Request
from starlette.middleware.base import BaseHTTPMiddleware
from fastapi.responses import RedirectResponse, JSONResponse
import hashlib
import inspect
import notfound
import main_page
import found
import login
import admin
import model
import asyncio
import logging
notfound.create()
main_page.create()
found.create()
login.create()
admin.create()
# 中间件配置文件
AUTH_CONFIG = {
"restricted_routes": {'/admin'},
"login_url": "/login",
"cookie_name": "session",
"session_expire": 3600 # 会话过期时间
}
# 登录验证中间件 Login verification middleware
class AuthMiddleware(BaseHTTPMiddleware):
# 异步处理每个请求
async def dispatch(self, request: Request, call_next):
try:
logging.info(f"访问路径: {request.url.path},"
f"认证状态: {app.storage.user.get('authenticated')}")
if not app.storage.user.get('authenticated', False):
# 如果请求的路径不是nicegui的静态文件并且不在unrestricted_page_routes中
if not request.url.path.startwith('/_nicegui') \
and request.url.path in AUTH_CONFIG["restricted_routes"]:
logging.warning(f"未认证用户尝试访问: {request.url.path}")
# 记录用户想访问的路径 Record the user's intended path
app.storage.user['referrer_path'] = request.url.path
# 重定向到登录页面 Redirect to the login page
return RedirectResponse(f'/login?redirect_to={request.url.path}')
# 否则,继续处理请求 Otherwise, continue processing the request
return await call_next(request)
except Exception as e:
# 记录错误日志
logging.error(f"认证中间件错误: {str(e)}")
# 返回适当的错误响应
return JSONResponse(
status_code=500,
content={"detail": "服务器内部错误"}
)
# 添加中间件 Add middleware
app.add_middleware(AuthMiddleware)
# 添加静态文件目录
app.add_static_files(url_path='/static', local_directory='static')
# 启动函数 Startup function
def startup():
asyncio.run(model.Database().init_db())
ui.run(
host='0.0.0.0',
favicon='🚀',
port=8080,
title='Findreve',
native=False,
storage_secret='findreve',
language='zh-CN',
fastapi_docs=False)
if __name__ in {"__main__", "__mp_main__"}:
startup()