- admin.py:HTTP Basic Auth + 服务端渲染单页,概览统计 / 用户与当前授权 / 最近使用记录 / 会话令牌 / 扫码场景五个区块 - ADMIN_PASSWORD 为空时返回 503 而非放行,避免漏配密码导致全库数据公开 - 不引模板引擎与 CDN,所有入库文本经 html.escape;令牌只显示首尾便于比对 - config.py / .env.example 新增 ADMIN_USER / ADMIN_PASSWORD - wechat.py 挂载 admin.router;CODEBUDDY.md 补充文档
40 lines
1.5 KiB
Python
40 lines
1.5 KiB
Python
"""
|
|
配置管理 - 从 .env 文件读取敏感信息
|
|
.env 文件不进 Git(已在 .gitignore 中排除)
|
|
"""
|
|
|
|
import os
|
|
from dotenv import load_dotenv
|
|
|
|
# 加载 .env 文件
|
|
load_dotenv()
|
|
|
|
# 微信测试号配置
|
|
WECHAT_TOKEN = os.getenv("WECHAT_TOKEN", "")
|
|
WECHAT_APPID = os.getenv("WECHAT_APPID", "")
|
|
WECHAT_SECRET = os.getenv("WECHAT_SECRET", "")
|
|
|
|
# MySQL 配置
|
|
MYSQL_HOST = os.getenv("MYSQL_HOST", "127.0.0.1")
|
|
MYSQL_PORT = int(os.getenv("MYSQL_PORT", "3306"))
|
|
MYSQL_USER = os.getenv("MYSQL_USER", "root")
|
|
MYSQL_PASSWORD = os.getenv("MYSQL_PASSWORD", "")
|
|
MYSQL_DB = os.getenv("MYSQL_DB", "wechat_api")
|
|
|
|
# Redis 配置
|
|
REDIS_HOST = os.getenv("REDIS_HOST", "127.0.0.1")
|
|
REDIS_PORT = int(os.getenv("REDIS_PORT", "6379"))
|
|
REDIS_PASSWORD = os.getenv("REDIS_PASSWORD", "")
|
|
|
|
# 业务配置
|
|
FREE_AUTH_DAYS = int(os.getenv("FREE_AUTH_DAYS", "7")) # 首次关注赠送天数
|
|
SCENE_TTL_SECONDS = int(os.getenv("SCENE_TTL_SECONDS", "300")) # 二维码/scene 有效期(秒)
|
|
SESSION_TTL_HOURS = int(os.getenv("SESSION_TTL_HOURS", "24")) # session_token 有效期(小时)
|
|
# 时间授权 usage_logs 节流窗口(秒):同一用户+设备在此窗口内只记一条
|
|
USAGE_LOG_THROTTLE_SECONDS = int(os.getenv("USAGE_LOG_THROTTLE_SECONDS", "60"))
|
|
|
|
# 管理后台(/admin)的 HTTP Basic Auth 凭据。
|
|
# ADMIN_PASSWORD 为空时 /admin 直接返回 503,绝不放行——避免「忘了配密码 = 谁都能进」。
|
|
ADMIN_USER = os.getenv("ADMIN_USER", "admin")
|
|
ADMIN_PASSWORD = os.getenv("ADMIN_PASSWORD", "")
|