集成在 api.200181.xyz(同一个 Worker),国内机 writeapi.usj.cc 同步可用。 新增第三档后台角色 'ssl': - 只拿证书管家钥匙,看不到评论/文章/用户等模块 - 判定正着枚举放行(canManageSSL = admin|ssl),不用排除法, 免得以后新增角色静默获得私钥权限 - 鉴权只认 Bearer 会话,绝不走 isAdminRequest —— 后者有 Artalk 老客户端的 query 兜底,一旦进来的就是 TLS 私钥 数据(复用 RSS_KV,前缀 certkeeper:): - 凭据一条一键,避开 KV 读-改-写无事务导致的并发丢数据 - 私钥/AK-SK 一律 AES-GCM 密文(TOKEN_SECRET 经 PBKDF2 派生) - 列表接口只回显前 4 后 4 位,明文不进内存 - 配置读失败抛错而非返回空,避免一次保存覆盖线上配置 只读监控: - probeTls 走 cloudflare:sockets 拿证书正文,实现到期分级 与「库里记录 vs 线上实测」对比(match/mismatch/live-only/unreachable) - 到期提醒邮件(HTML 已转义) 国内机 editor-api: - identify 识别 ssl 角色;业务分支前白名单,ssl 只能碰 /health、 /admin/session、/admin/logout 与 /api/v2/ssl* - /api/v2/ssl* 反代放行 admin + ssl(RSS 仍是 admin-only) - posts.mjs 越权兜底方向修正:owns() 从「非 editor 即放行」改为 「只有 admin 不受限」,漏进来的 ssl 被当受限编辑而非管理员全放行 - createPost 显式拒绝非写作角色 验证:typecheck ✓ / selftest:ssl 117 项 ✓ / 浏览器 37 项 ✓
24 lines
1.3 KiB
JSON
24 lines
1.3 KiB
JSON
{
|
|
"name": "artalk-cf",
|
|
"version": "0.1.0",
|
|
"private": true,
|
|
"description": "Artalk API v2 compatible comment backend on Cloudflare Workers + D1",
|
|
"scripts": {
|
|
"dev": "wrangler dev",
|
|
"deploy": "wrangler deploy",
|
|
"typecheck": "tsc --noEmit",
|
|
"selftest:ssl:build": "tsc src/routes/ssl.ts src/lib/role.ts src/lib/certstore.ts src/lib/certvault.ts src/lib/certprobe.ts --outDir .selftest-ssl --module commonjs --target es2022 --moduleResolution node --strict --types ./node_modules/@cloudflare/workers-types --skipLibCheck --esModuleInterop --resolveJsonModule",
|
|
"selftest:ssl": "npm run selftest:ssl:build && node tools/selftest-ssl.mjs",
|
|
"db:init:local": "wrangler d1 execute artalk-cf --local --file=./schema.sql",
|
|
"db:init:remote": "wrangler d1 execute artalk-cf --remote --file=./schema.sql",
|
|
"import:gen": "python tools/import_artrans.py",
|
|
"selftest": "tsc tools/selftest.ts --outDir .selftest-build --module commonjs --target es2022 --moduleResolution node --types ./node_modules/@cloudflare/workers-types --skipLibCheck --esModuleInterop --noEmit false && node .selftest-build/tools/selftest.js",
|
|
"tail": "wrangler tail"
|
|
},
|
|
"devDependencies": {
|
|
"@cloudflare/workers-types": "^5.20261006.1",
|
|
"typescript": "^5.7.0",
|
|
"wrangler": "^4.147.0"
|
|
}
|
|
}
|