服务端加固: - express.json 上限 2mb → 12mb:表格导入把文件以 base64 放进 JSON(约 4/3 倍), 8MB 的声明上限原先到 1.5MB 就被拦掉;超限现在由 error 中间件映射成 413 IMPORT_TOO_LARGE(中文提示"请拆分后分批导入"),不再落进 500 兜底分支抛英文原文; - loginRateLimiter 同时挂 /auth/login 与 /auth/class-login(班级密码默认 123456, 班级登录曾是唯一没有暴力破解防护的入口),两个路径共享同一计数器; - CORS_ORIGIN=* 时启动告警(不拦截启动,避免挡住教室机 file:// 的合法部署); - 删除已无用的 DEFAULT_STUDENT_PASSWORD;班级 termWeeks 上限 40 → 30, 与 MAX_TERM_WEEK / weekNumberSchema 对齐(原先对外承诺了系统兑现不了的学期长度)。 Web 端: - 作业页 ?date= 深链在同路由再推 query 时也生效(watch route.query.date); - 表格导入对话框适配 8MB 上限与 413 提示。 冒烟与文档: - 新增 scripts/lib/smoke-class.mjs:验证用临时班级,避免探针通知弹到用户自己的客户端与灵动岛; - README 与 AGENTS.md 同步本轮全部行为变更(含 schedule source、学生账号清理、凭据门禁)。
48 lines
1.5 KiB
YAML
48 lines
1.5 KiB
YAML
appId: com.classhelper.desktop
|
||
productName: 班级小助手
|
||
copyright: Copyright © 2026 Class Helper
|
||
|
||
directories:
|
||
output: release
|
||
buildResources: build
|
||
|
||
# 注意:这里**不要**加 afterPack 去改 appOutDir 的完整性标签。
|
||
# 归档内部的载荷标签不会被还原(装到正常位置拿到的是默认 Medium 文件),
|
||
# 而在打包前把 appOutDir 改成 Medium 会让 7za(自身带 Low 标签、进程被降到 Low)
|
||
# 因"不能向上读"而无法生成归档。交付物的标签统一在 scripts/dist-win.mjs 收尾时修正。
|
||
|
||
# 渲染进程产物已由 Vite 打包、主进程/preload 已由 esbuild 打包,
|
||
# 运行时不需要任何 node_modules(electron 模块由 Electron 运行时提供)。
|
||
files:
|
||
- dist/**/*
|
||
- package.json
|
||
- '!node_modules/**/*'
|
||
- '!**/*.map'
|
||
|
||
asar: true
|
||
# 没有原生模块,跳过 rebuild,避免不必要的 node-gyp 依赖
|
||
npmRebuild: false
|
||
compression: normal
|
||
removePackageScripts: true
|
||
|
||
win:
|
||
target:
|
||
- target: nsis
|
||
arch: [x64]
|
||
- target: portable
|
||
arch: [x64]
|
||
# 未提供 build/icon.ico 时使用 Electron 默认图标
|
||
artifactName: ${productName}-${version}-${arch}.${ext}
|
||
|
||
nsis:
|
||
oneClick: false
|
||
perMachine: false
|
||
allowToChangeInstallationDirectory: true
|
||
createDesktopShortcut: true
|
||
createStartMenuShortcut: true
|
||
shortcutName: 班级小助手
|
||
artifactName: ${productName}-${version}-${arch}-setup.${ext}
|
||
|
||
portable:
|
||
artifactName: ${productName}-${version}-${arch}-portable.${ext}
|