- admin token 载荷新增 ver 版本号,与当前版本不一致即失效;版本持久化到 platform_configs,重启/多实例(30s同步)均生效 - 新增 POST /api/admin/session/revoke-all(requireAdmin):一键吊销全部后台登录态;后台右上角新增入口 - 令牌有效期改为可配置 ADMIN_TOKEN_TTL_HOURS(默认由 7 天收紧到 24 小时) - 移除 server 未使用的 @prisma/client / prisma(server/src 零引用),pnpm 移除 331 个包;pnpm audit --prod 由 46 个漏洞降为 0 - 新增回归护栏 admin-token-revocation.spec.ts(91 套件/653 用例全绿);冒烟 6/6
41 行
1.7 KiB
TypeScript
41 行
1.7 KiB
TypeScript
// 已读取AGENTS.md
|
|
import * as fs from 'fs';
|
|
import * as path from 'path';
|
|
|
|
/**
|
|
* 第七十五批回归闸门:后台登录态吊销 + 依赖清理。
|
|
*/
|
|
describe('第七十五批后台令牌吊销闸门', () => {
|
|
const root = path.resolve(__dirname, '../../');
|
|
const indexCode = fs.readFileSync(path.join(root, 'server/src/index.ts'), 'utf-8');
|
|
const pkg = JSON.parse(fs.readFileSync(path.join(root, 'server/package.json'), 'utf-8'));
|
|
const navbar = fs.readFileSync(path.join(root, 'admin/arco-design-pro-vite/src/components/navbar/index.vue'), 'utf-8');
|
|
|
|
it('令牌携带版本号,版本不符即失效', () => {
|
|
expect(indexCode).toContain('ver: adminTokenEpoch');
|
|
expect(indexCode).toContain('if (Number(data.ver) !== adminTokenEpoch) return false;');
|
|
expect(indexCode).toContain('let adminTokenEpoch = 1;');
|
|
});
|
|
|
|
it('提供吊销接口并持久化版本号', () => {
|
|
expect(indexCode).toContain("app.post('/api/admin/session/revoke-all', requireAdmin");
|
|
expect(indexCode).toContain("repo.updatePlatformConfig('admin_token_epoch'");
|
|
expect(indexCode).toContain('loadAdminTokenEpoch');
|
|
});
|
|
|
|
it('令牌有效期可配置(默认 24 小时)', () => {
|
|
expect(indexCode).toContain('ADMIN_TOKEN_TTL_HOURS');
|
|
expect(indexCode).toContain('ADMIN_TOKEN_TTL_MS');
|
|
});
|
|
|
|
it('后台提供「吊销所有后台登录态」入口', () => {
|
|
expect(navbar).toContain('handleRevokeAll');
|
|
expect(navbar).toContain('revokeAllAdminSessions');
|
|
});
|
|
|
|
it('已移除未使用的 prisma 依赖(消除全部依赖漏洞)', () => {
|
|
expect(pkg.dependencies['@prisma/client']).toBeUndefined();
|
|
expect(pkg.devDependencies['prisma']).toBeUndefined();
|
|
});
|
|
});
|