This repository has been archived on 2026-10-02. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
NeteaseUrl/auth_system/__init__.py
T
snowy-yang 3de75f7479 refactor: 两个「数据泥团」收成 dataclass / 字典
为什么:上一轮报告「11 个参数 > 6」的清单实测只有 7 个 ≥7 参数,其中真正
该改的是 2 个(另 5 个是 HTTP/下载原语的参数透传,合并反而降低清晰度,有意
保留)。

1) auth_system.create_user(11 参 → 6 参)
   前 5 个是账号属性(username/password/email/credits/role,同属一个概念),
   后 6 个才是泥团——它们是「注册风控上下文」(同 IP 频率闸 + 设备赠送闸)。
   收成 frozen dataclass RegistrationGuard,默认值等价于「不做任何风控」,故
   老调用点语义不变。

2) web/routers/download.py._single_task(11 参 → 2 参)
   11 个位置参数改成一个 params 字典 + device_id,字典原样透传给 worker。
   顺带删掉原本就**未被使用**的 data 参数(11 个里有 1 个是死的)。
   理由不是「参数多」而是这 11 个位置参数没有名字,调用点极易错序。

教训:create_user 签名重构时漏改 web/routers/admin_site.py:155,pytest 189 例
全绿(该端点无测试覆盖)但 pyright 报出 2 errors —— 两道门禁互补的实证,
说明类型检查不是冗余。
2026-09-26 18:54:17 +08:00

250 lines
5.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.
# -*- coding: utf-8 -*-
"""站点认证与管理系统
提供网站级用户体系:
- 用户注册(邮箱验证码)/ 登录 / 登出 / 注册即赠下载次数(试用领取已并入注册)
- 按次计费(一首歌 = 1 次)、卡密(次数卡)充值
- 管理员后台:用户管理 / SMTP 配置 / 卡密生成 / 公告 / 日志 / 数据库备份
- 接口装饰器:login_required(强制登录 + 按次扣费)/ admin_required(仅管理员)
数据存储:SQLite(data/site.db),会话:Flask 签名 Cookie(secret_key 持久化)
"""
# 兼容门面:实现已按职责拆分到同包各子模块,此处原样再导出。
# 用 `__all__` 声明再导出(ruff F401 与 pyright 均据此认定「有意再导出」),
# 使既有调用点(auth_system.xxx / from auth_system import Y)零改动。
#
# ⚠️ 路径常量(DATA_DIR / DB_PATH / BACKUP_DIR / SECRET_KEY_PATH)在此只是
# **import 时的值快照**:它们是再导出的绑定,运行时改 auth_system.DB_PATH
# 不会影响 db / backup 的实际读写路径(那只会静默失效,且看起来"改成功了")。
# 一律不要经由包属性做重定向:
# - 测试:patch `auth_system.db.<NAME>`(唯一来源,db 与 backup 都随动)
# - 部署:设置环境变量 SITE_DATA_DIR(须在进程启动前)
# 此处保留再导出仅为不破坏既有 `auth_system.DB_PATH` 读取方(如黄金测试)。
from .backup import (
_BACKUP_ERR_TS,
_BACKUP_NAME_LOCK,
_auto_backup_loop,
_backup_is_valid_db,
_backup_thread_started,
_before_restore_hook,
backup_path,
create_backup,
delete_backup,
list_backups,
prune_backups,
register_before_restore_hook,
restore_backup,
start_auto_backup,
)
from .cards import (
delete_card,
generate_cards,
list_cards,
redeem_card,
set_card_disabled,
)
from .credits import (
add_credits,
charge_credits,
format_credits,
refund_credits,
reserve_credits,
)
from .db import (
_DB_LOCK,
BACKUP_DIR,
DATA_DIR,
DB_PATH,
DEFAULT_ADMIN_USER,
DEFAULT_REGISTER_CREDITS,
SECRET_KEY_PATH,
SESSION_KEY,
_q,
_x,
get_conn,
get_secret_key,
init_db,
)
from .geo import (
_PROVINCE_CACHE,
PROVINCE_BAN_LIMIT,
PROVINCE_WINDOW,
_is_private_ip,
query_ip_province,
record_login_location,
)
from .ledger import (
ledger_cleanup_settled,
ledger_get,
ledger_open,
ledger_recover_orphans,
ledger_rename,
ledger_settle,
ledger_supplement,
reserve_and_open,
)
from .logs import (
_LOG_WRITE_COUNTER,
add_log,
clear_logs,
query_logs,
)
from .mail import (
_CODE_EMAIL_TEMPLATES,
_CODE_FAILS,
_CODE_FAILS_MAX,
_CODE_PURPOSES,
_EMAIL_SENT_24H,
_SMTP_ENC_PREFIX,
_code_fails_trim,
_smtp_connect,
_smtp_password_decrypt,
_smtp_password_encrypt,
check_verify_code,
get_smtp_config,
restore_verify_code,
save_smtp_config,
send_email,
send_verify_code,
smtp_configured,
)
from .security import (
_PBKDF2_ITERS,
_hash,
_hash_new,
_normalize_email,
_verify_password,
)
from .settings import (
get_announcement,
get_setting,
save_announcement,
set_setting,
)
from .users import (
RegistrationGuard,
_last_province,
_user_public,
ban_user,
create_user,
delete_user,
device_used,
get_user_by_email,
get_user_by_id,
get_user_by_name,
list_users,
register_ip_exceeded,
reset_password,
set_user_credits,
set_user_netease_cookie,
set_user_password,
set_user_status,
unban_user,
verify_login,
)
__all__ = [
'BACKUP_DIR',
'DATA_DIR',
'DB_PATH',
'DEFAULT_ADMIN_USER',
'DEFAULT_REGISTER_CREDITS',
'PROVINCE_BAN_LIMIT',
'PROVINCE_WINDOW',
'SECRET_KEY_PATH',
'SESSION_KEY',
'_BACKUP_ERR_TS',
'_BACKUP_NAME_LOCK',
'_CODE_EMAIL_TEMPLATES',
'_CODE_FAILS',
'_CODE_FAILS_MAX',
'_CODE_PURPOSES',
'_DB_LOCK',
'_EMAIL_SENT_24H',
'_LOG_WRITE_COUNTER',
'_PBKDF2_ITERS',
'_PROVINCE_CACHE',
'_SMTP_ENC_PREFIX',
'RegistrationGuard',
'_auto_backup_loop',
'_backup_is_valid_db',
'_backup_thread_started',
'_before_restore_hook',
'_code_fails_trim',
'_hash',
'_hash_new',
'_is_private_ip',
'_last_province',
'_normalize_email',
'_q',
'_smtp_connect',
'_smtp_password_decrypt',
'_smtp_password_encrypt',
'_user_public',
'_verify_password',
'_x',
'add_credits',
'add_log',
'backup_path',
'ban_user',
'charge_credits',
'check_verify_code',
'clear_logs',
'create_backup',
'create_user',
'delete_backup',
'delete_card',
'delete_user',
'device_used',
'format_credits',
'generate_cards',
'get_announcement',
'get_conn',
'get_secret_key',
'get_setting',
'get_smtp_config',
'get_user_by_email',
'get_user_by_id',
'get_user_by_name',
'init_db',
'ledger_cleanup_settled',
'ledger_get',
'ledger_open',
'ledger_recover_orphans',
'ledger_rename',
'ledger_settle',
'ledger_supplement',
'list_backups',
'list_cards',
'list_users',
'prune_backups',
'query_ip_province',
'query_logs',
'record_login_location',
'redeem_card',
'refund_credits',
'register_before_restore_hook',
'register_ip_exceeded',
'reserve_and_open',
'reserve_credits',
'reset_password',
'restore_backup',
'restore_verify_code',
'save_announcement',
'save_smtp_config',
'send_email',
'send_verify_code',
'set_card_disabled',
'set_setting',
'set_user_credits',
'set_user_netease_cookie',
'set_user_password',
'set_user_status',
'smtp_configured',
'start_auto_backup',
'unban_user',
'verify_login',
]