misc: added oidc create validation in route

This commit is contained in:
Sheen Capadngan
2024-06-20 00:28:14 +08:00
parent 63a9e46936
commit b198f97930
+75 -26
View File
@@ -242,32 +242,81 @@ export const registerOidcRouter = async (server: FastifyZodProvider) => {
}, },
onRequest: verifyAuth([AuthMode.JWT]), onRequest: verifyAuth([AuthMode.JWT]),
schema: { schema: {
body: z.object({ body: z
allowedEmailDomains: z .object({
.string() allowedEmailDomains: z
.trim() .string()
.optional() .trim()
.default("") .optional()
.transform((data) => { .default("")
if (data === "") return ""; .transform((data) => {
// Trim each ID and join with ', ' to ensure formatting if (data === "") return "";
return data // Trim each ID and join with ', ' to ensure formatting
.split(",") return data
.map((id) => id.trim()) .split(",")
.join(", "); .map((id) => id.trim())
}), .join(", ");
configurationType: z.nativeEnum(OIDCConfigurationType), }),
issuer: z.string().trim().optional().default(""), configurationType: z.nativeEnum(OIDCConfigurationType),
discoveryURL: z.string().trim().optional().default(""), issuer: z.string().trim().optional().default(""),
authorizationEndpoint: z.string().trim().optional().default(""), discoveryURL: z.string().trim().optional().default(""),
jwksUri: z.string().trim().optional().default(""), authorizationEndpoint: z.string().trim().optional().default(""),
tokenEndpoint: z.string().trim().optional().default(""), jwksUri: z.string().trim().optional().default(""),
userinfoEndpoint: z.string().trim().optional().default(""), tokenEndpoint: z.string().trim().optional().default(""),
clientId: z.string().trim(), userinfoEndpoint: z.string().trim().optional().default(""),
clientSecret: z.string().trim(), clientId: z.string().trim(),
isActive: z.boolean(), clientSecret: z.string().trim(),
orgSlug: z.string().trim() isActive: z.boolean(),
}), orgSlug: z.string().trim()
})
.superRefine((data, ctx) => {
if (data.configurationType === OIDCConfigurationType.CUSTOM) {
if (!data.issuer) {
ctx.addIssue({
path: ["issuer"],
message: "Issuer is required",
code: z.ZodIssueCode.custom
});
}
if (!data.authorizationEndpoint) {
ctx.addIssue({
path: ["authorizationEndpoint"],
message: "Authorization endpoint is required",
code: z.ZodIssueCode.custom
});
}
if (!data.jwksUri) {
ctx.addIssue({
path: ["jwksUri"],
message: "JWKS URI is required",
code: z.ZodIssueCode.custom
});
}
if (!data.tokenEndpoint) {
ctx.addIssue({
path: ["tokenEndpoint"],
message: "Token endpoint is required",
code: z.ZodIssueCode.custom
});
}
if (!data.userinfoEndpoint) {
ctx.addIssue({
path: ["userinfoEndpoint"],
message: "Userinfo endpoint is required",
code: z.ZodIssueCode.custom
});
}
} else {
// eslint-disable-next-line no-lonely-if
if (!data.discoveryURL) {
ctx.addIssue({
path: ["discoveryURL"],
message: "Discovery URL is required",
code: z.ZodIssueCode.custom
});
}
}
}),
response: { response: {
200: OidcConfigsSchema.pick({ 200: OidcConfigsSchema.pick({
id: true, id: true,