2025-06-10 12:29:26 +08:00
|
|
|
|
import logging
|
2025-04-09 23:58:17 +08:00
|
|
|
|
import os
|
2025-06-10 12:29:26 +08:00
|
|
|
|
from datetime import datetime, timedelta
|
|
|
|
|
|
|
|
|
|
import jwt
|
|
|
|
|
from dotenv import load_dotenv
|
2025-05-17 11:57:02 +08:00
|
|
|
|
from flask import Flask, request
|
2025-03-28 22:45:42 +08:00
|
|
|
|
from flask_cors import CORS
|
2025-04-05 22:04:05 +08:00
|
|
|
|
from routes import register_routes
|
2025-04-09 23:58:17 +08:00
|
|
|
|
|
|
|
|
|
# 加载环境变量
|
2025-06-10 12:29:26 +08:00
|
|
|
|
load_dotenv(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), "docker", ".env"))
|
2025-03-28 22:45:42 +08:00
|
|
|
|
|
|
|
|
|
app = Flask(__name__)
|
|
|
|
|
# 启用CORS,允许前端访问
|
2025-06-10 12:29:26 +08:00
|
|
|
|
CORS(app, resources={r"/api/*": {"origins": "*", "methods": ["GET", "POST", "PUT", "DELETE", "OPTIONS"], "allow_headers": ["Content-Type", "Authorization"]}})
|
2025-03-28 22:45:42 +08:00
|
|
|
|
|
2025-04-05 22:04:05 +08:00
|
|
|
|
# 注册所有路由
|
|
|
|
|
register_routes(app)
|
|
|
|
|
|
2025-04-09 23:58:17 +08:00
|
|
|
|
# 从环境变量获取配置
|
2025-06-10 12:29:26 +08:00
|
|
|
|
ADMIN_USERNAME = os.getenv("MANAGEMENT_ADMIN_USERNAME", "admin")
|
|
|
|
|
ADMIN_PASSWORD = os.getenv("MANAGEMENT_ADMIN_PASSWORD", "12345678")
|
|
|
|
|
JWT_SECRET = os.getenv("MANAGEMENT_JWT_SECRET", "your-secret-key")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 设置日志目录和文件名
|
|
|
|
|
log_dir = "logs"
|
|
|
|
|
os.makedirs(log_dir, exist_ok=True)
|
|
|
|
|
log_file = os.path.join(log_dir, "parser.log")
|
|
|
|
|
|
|
|
|
|
# 配置 logging
|
|
|
|
|
logging.basicConfig(
|
|
|
|
|
level=logging.INFO,
|
|
|
|
|
format="%(asctime)s - %(levelname)s - %(name)s - %(message)s",
|
|
|
|
|
handlers=[
|
|
|
|
|
logging.FileHandler(log_file, encoding="utf-8"),
|
|
|
|
|
logging.StreamHandler(), # 同时也输出到控制台
|
|
|
|
|
],
|
|
|
|
|
)
|
|
|
|
|
|
2025-04-09 23:58:17 +08:00
|
|
|
|
|
|
|
|
|
# 生成token
|
|
|
|
|
def generate_token(username):
|
|
|
|
|
# 设置令牌过期时间(例如1小时后过期)
|
|
|
|
|
expire_time = datetime.utcnow() + timedelta(hours=1)
|
2025-06-10 12:29:26 +08:00
|
|
|
|
|
2025-04-09 23:58:17 +08:00
|
|
|
|
# 生成令牌
|
2025-06-10 12:29:26 +08:00
|
|
|
|
token = jwt.encode({"username": username, "exp": expire_time}, JWT_SECRET, algorithm="HS256")
|
|
|
|
|
|
2025-04-09 23:58:17 +08:00
|
|
|
|
return token
|
|
|
|
|
|
2025-06-10 12:29:26 +08:00
|
|
|
|
|
2025-04-05 22:04:05 +08:00
|
|
|
|
# 登录路由保留在主文件中
|
2025-06-10 12:29:26 +08:00
|
|
|
|
@app.route("/api/v1/auth/login", methods=["POST"])
|
2025-03-28 22:45:42 +08:00
|
|
|
|
def login():
|
2025-04-09 23:58:17 +08:00
|
|
|
|
data = request.get_json()
|
2025-06-10 12:29:26 +08:00
|
|
|
|
username = data.get("username")
|
|
|
|
|
password = data.get("password")
|
|
|
|
|
|
2025-04-09 23:58:17 +08:00
|
|
|
|
# 创建用户名和密码的映射
|
2025-06-10 12:29:26 +08:00
|
|
|
|
valid_users = {ADMIN_USERNAME: ADMIN_PASSWORD}
|
|
|
|
|
|
2025-04-09 23:58:17 +08:00
|
|
|
|
# 验证用户名是否存在
|
|
|
|
|
if not username or username not in valid_users:
|
|
|
|
|
return {"code": 1, "message": "用户名不存在"}, 400
|
2025-06-10 12:29:26 +08:00
|
|
|
|
|
2025-04-09 23:58:17 +08:00
|
|
|
|
# 验证密码是否正确
|
|
|
|
|
if not password or password != valid_users[username]:
|
|
|
|
|
return {"code": 1, "message": "密码错误"}, 400
|
2025-06-10 12:29:26 +08:00
|
|
|
|
|
2025-04-09 23:58:17 +08:00
|
|
|
|
# 生成token
|
|
|
|
|
token = generate_token(username)
|
2025-06-10 12:29:26 +08:00
|
|
|
|
|
2025-04-09 23:58:17 +08:00
|
|
|
|
return {"code": 0, "data": {"token": token}, "message": "登录成功"}
|
|
|
|
|
|
2025-03-28 22:45:42 +08:00
|
|
|
|
|
2025-06-10 12:29:26 +08:00
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
app.run(host="0.0.0.0", port=5000)
|