Skip to content

Commit 35c7d6b

Browse files
committed
fix: diced#964
1 parent f45d1b7 commit 35c7d6b

File tree

2 files changed

+44
-4
lines changed

2 files changed

+44
-4
lines changed

src/lib/config/validate.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,8 +247,19 @@ export const schema = z.object({
247247
}),
248248
passkeys: z.object({
249249
enabled: z.boolean().default(false),
250-
rpID: z.string().nullable().default(null),
251-
origin: z.url().nullable().default(null),
250+
rpID: z
251+
.string()
252+
.trim()
253+
.transform((v) => (v.length > 0 ? v : null))
254+
.nullable()
255+
.default(null),
256+
origin: z
257+
.string()
258+
.trim()
259+
.transform((v) => (v.length > 0 ? v : null))
260+
.refine((v) => (v ? URL.canParse(v) : true), 'Invalid URL')
261+
.nullable()
262+
.default(null),
252263
}),
253264
}),
254265
oauth: z.object({

src/server/routes/api/server/settings/index.ts

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -294,9 +294,18 @@ export default typedPlugin(
294294

295295
mfaTotpEnabled: z.boolean(),
296296
mfaTotpIssuer: z.string(),
297+
297298
mfaPasskeysEnabled: z.boolean(),
298-
mfaPasskeysRpID: z.string(),
299-
mfaPasskeysOrigin: z.string(),
299+
mfaPasskeysRpID: z
300+
.string()
301+
.trim()
302+
.transform((v) => (v.length === 0 ? null : v))
303+
.nullable(),
304+
mfaPasskeysOrigin: z
305+
.string()
306+
.trim()
307+
.transform((v) => (v.length === 0 ? null : v))
308+
.nullable(),
300309

301310
ratelimitEnabled: z.boolean(),
302311
ratelimitMax: z.number().refine((value) => value > 0, 'Value must be greater than 0'),
@@ -413,6 +422,26 @@ export default typedPlugin(
413422
});
414423
}
415424
})
425+
.superRefine((data, ctx) => {
426+
if (data.mfaPasskeysEnabled) {
427+
if (!data.mfaPasskeysRpID || data.mfaPasskeysRpID.length === 0) {
428+
ctx.addIssue({
429+
path: ['mfaPasskeysRpID'],
430+
message: 'RP ID is required when passkeys are enabled',
431+
code: 'custom',
432+
});
433+
}
434+
435+
if (!data.mfaPasskeysOrigin || data.mfaPasskeysOrigin.length === 0) {
436+
ctx.addIssue({
437+
path: ['mfaPasskeysOrigin'],
438+
message: 'Origin is required when passkeys are enabled',
439+
code: 'custom',
440+
});
441+
}
442+
}
443+
})
444+
416445
.refine((data) => Object.keys(data).length > 0, {
417446
message: 'No settings provided to update',
418447
});

0 commit comments

Comments
 (0)