v2.0: 架构大版本升级
任务 3.2+3.3: 飞书入口迁移到 MessagePipeline - feishu_bot.py 改用 pipeline.handle_message(去掉 30 行会话管理代码) - feishu_longconn_service.py 改用 pipeline.handle_message(去掉 25 行) - 各入口只负责协议适配,业务逻辑统一在 Pipeline 任务 5: 统一配置管理 - 新增 src/config/config_service.py(ConfigService 单例) - 优先级:环境变量 > system_settings.json > 代码默认值 - 支持点号分隔的嵌套 key、自动类型转换 任务 8: 密码哈希升级 - SHA-256 bcrypt(User.set_password/check_password) - AuthManager.hash_password/verify_password 同步升级 - 兼容旧密码:登录时检测 SHA-256 格式,验证通过后自动升级为 bcrypt - auth_manager.secret_key 改为从环境变量读取 任务 9: 前端事件总线 - TSPDashboard 新增 on/off/emit 方法 - 模块间可通过事件通信,不再只靠直接读写共享状态 README.md 重写 - 功能概览、技术栈、快速开始、项目结构 - 架构要点、多租户、飞书机器人、环境变量 - 开发和部署说明
This commit is contained in:
@@ -18,16 +18,21 @@ class AuthManager:
|
||||
"""认证管理器"""
|
||||
|
||||
def __init__(self):
|
||||
self.secret_key = "your-secret-key-change-this-in-production" # 应该从配置中读取
|
||||
import os
|
||||
self.secret_key = os.environ.get('SECRET_KEY', 'change-this-in-production')
|
||||
self.token_expiry = timedelta(hours=24)
|
||||
|
||||
def hash_password(self, password: str) -> str:
|
||||
"""密码哈希"""
|
||||
return hashlib.sha256(password.encode()).hexdigest()
|
||||
"""密码哈希(bcrypt)"""
|
||||
import bcrypt
|
||||
return bcrypt.hashpw(password.encode(), bcrypt.gensalt()).decode()
|
||||
|
||||
def verify_password(self, password: str, password_hash: str) -> bool:
|
||||
"""验证密码"""
|
||||
return self.hash_password(password) == password_hash
|
||||
"""验证密码(兼容旧 SHA-256)"""
|
||||
import bcrypt
|
||||
if password_hash and password_hash.startswith('$2b$'):
|
||||
return bcrypt.checkpw(password.encode(), password_hash.encode())
|
||||
return hashlib.sha256(password.encode()).hexdigest() == password_hash
|
||||
|
||||
def generate_token(self, user_data: dict) -> str:
|
||||
"""生成JWT token"""
|
||||
|
||||
@@ -294,12 +294,21 @@ class User(Base):
|
||||
last_login = Column(DateTime)
|
||||
|
||||
def set_password(self, password):
|
||||
"""设置密码哈希"""
|
||||
self.password_hash = hashlib.sha256(password.encode()).hexdigest()
|
||||
"""设置密码哈希(bcrypt)"""
|
||||
import bcrypt
|
||||
self.password_hash = bcrypt.hashpw(password.encode(), bcrypt.gensalt()).decode()
|
||||
|
||||
def check_password(self, password):
|
||||
"""验证密码"""
|
||||
return self.password_hash == hashlib.sha256(password.encode()).hexdigest()
|
||||
"""验证密码(兼容旧 SHA-256 格式,验证通过后自动升级为 bcrypt)"""
|
||||
import bcrypt
|
||||
if self.password_hash and self.password_hash.startswith('$2b$'):
|
||||
return bcrypt.checkpw(password.encode(), self.password_hash.encode())
|
||||
# 旧格式:SHA-256
|
||||
if self.password_hash == hashlib.sha256(password.encode()).hexdigest():
|
||||
# 自动升级为 bcrypt
|
||||
self.set_password(password)
|
||||
return True
|
||||
return False
|
||||
|
||||
def to_dict(self):
|
||||
"""转换为字典格式(用于API响应)"""
|
||||
|
||||
Reference in New Issue
Block a user