feat: implement TASK-WP1-04 admin security

This commit is contained in:
suyx
2026-07-28 18:32:50 +08:00
parent 66fe3b763a
commit 03f1509de7
29 changed files with 2344 additions and 40 deletions
+50
View File
@@ -108,6 +108,54 @@ export const LoginCompleteResponseSchema = Type.Object(
{ additionalProperties: false, $id: "LoginCompleteResponse" },
);
export const AdminLoginSendRequestSchema = Type.Object(
{
email: Type.String({ maxLength: 320, pattern: emailPattern }),
},
{ additionalProperties: false, $id: "AdminLoginSendRequest" },
);
export const AdminAuthenticatedUserSchema = Type.Object(
{
role: Type.Literal("super_admin"),
status: Type.Literal("active"),
user_id: Type.String({ pattern: uuidPattern }),
},
{ additionalProperties: false, $id: "AdminAuthenticatedUser" },
);
export const AdminLoginCompleteRequestSchema = Type.Object(
{
registration_id: Type.String({ pattern: uuidPattern }),
verification_code: Type.String({ pattern: "^[0-9]{6}$" }),
},
{ additionalProperties: false, $id: "AdminLoginCompleteRequest" },
);
export const AdminLoginCompleteResponseSchema = Type.Object(
{
admin: Type.Ref(AdminAuthenticatedUserSchema),
audience: Type.Literal("admin"),
session_expires_at: Type.String({ pattern: isoTimestampPattern }),
status: Type.Literal("authenticated"),
},
{ additionalProperties: false, $id: "AdminLoginCompleteResponse" },
);
export const AdminSessionResponseSchema = Type.Object(
{
acknowledged_private_content_notice_version: Type.Union([Type.String(), Type.Null()]),
admin: Type.Ref(AdminAuthenticatedUserSchema),
audience: Type.Literal("admin"),
authenticated: Type.Literal(true),
csrf_token: Type.String({ maxLength: 64, minLength: 43, pattern: "^[A-Za-z0-9_-]+$" }),
current_private_content_notice_version: Type.Union([Type.String(), Type.Null()]),
expires_at: Type.String({ pattern: isoTimestampPattern }),
notice_acknowledged: Type.Boolean(),
},
{ additionalProperties: false, $id: "AdminSessionResponse" },
);
export const LogoutHeadersSchema = Type.Object(
{
"idempotency-key": Type.String({ maxLength: 200, minLength: 32, pattern: "^[A-Za-z0-9_-]+$" }),
@@ -128,3 +176,5 @@ export type RegistrationCompleteResponse = Static<typeof RegistrationCompleteRes
export type UserSessionResponse = Static<typeof UserSessionResponseSchema>;
export type LoginSendRequest = Static<typeof LoginSendRequestSchema>;
export type LoginCompleteRequest = Static<typeof LoginCompleteRequestSchema>;
export type AdminLoginSendRequest = Static<typeof AdminLoginSendRequestSchema>;
export type AdminLoginCompleteRequest = Static<typeof AdminLoginCompleteRequestSchema>;