feat(admin): configure model providers from database

This commit is contained in:
Jesse_Chen
2026-08-07 20:03:13 +08:00
parent d63f10dcc2
commit 3089316d2e
31 changed files with 871 additions and 1430 deletions
+8 -7
View File
@@ -69,16 +69,17 @@ test("MFA API keeps native Better Auth enrollment, recovery, rotation, and proof
assert.match(migration, /grant select, insert, update, delete on table identity\.two_factors[\s\S]*identity_runtime/);
});
test("high-risk UI performs MFA challenge before requesting permission-scoped email OTP", () => {
test("high-risk UI uses permission-scoped email OTP without requiring MFA", () => {
const modal = readFileSync(new URL("../src/components/admin/reason-action-modal.tsx", import.meta.url), "utf8");
const reauth = readFileSync(new URL("../src/app/api/admin/reauth/route.ts", import.meta.url), "utf8");
const http = readFileSync(new URL("../src/lib/admin/http.ts", import.meta.url), "utf8");
assert.match(modal, /adminSecurityRequest<MfaStatus>\("\/api\/admin\/mfa"\)/);
assert.match(modal, /action: mfaFactor === "totp" \? "verify" : "recover"/);
assert.match(modal, /if \(!reauthPermission \|\| !mfaReady\) return/);
assert.match(modal, /action: "request"/);
assert.match(modal, /\/admin\/security/);
assert.match(reauth, /requireAdminMfaIfRequired\(request, session\)[\s\S]*getIdentityEmailOtpApi/);
assert.match(http, /requireAdminMfaIfRequired\(request, session\)[\s\S]*verifyHighRiskAdminProof/);
assert.match(modal, /action: "verify"/);
assert.match(modal, /邮箱验证码/);
assert.doesNotMatch(modal, /\/api\/admin\/mfa|\/admin\/security|MfaStatus|mfaFactor|mfaReady/);
assert.match(reauth, /requireAdminMutation\(request, parsed\.data\.permission\)[\s\S]*getIdentityEmailOtpApi/);
assert.doesNotMatch(reauth, /requireAdminMfaIfRequired/);
assert.match(http, /requireAdminMutation\(request, permission\)[\s\S]*verifyHighRiskAdminProof/);
assert.doesNotMatch(http, /requireAdminMfaIfRequired/);
});