Skip to content

Commit 1d04c74

Browse files
committed
fix(validation): validate lang parameter against supported languages
1 parent b7031f5 commit 1d04c74

3 files changed

Lines changed: 18 additions & 6 deletions

File tree

lib/i18n/badgeLabels.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@ export const labels: Record<string, BadgeLabels> = {
7272
},
7373
};
7474

75+
export const supportedLanguages = Object.keys(labels) as [
76+
keyof typeof labels,
77+
...(keyof typeof labels)[],
78+
];
79+
7580
export function getLabels(lang: string = 'en'): BadgeLabels {
7681
return labels[lang.toLowerCase()] || labels['en'];
7782
}

lib/validations.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// lib/validations.ts
2-
2+
import { supportedLanguages } from './i18n/badgeLabels';
33
import { z } from 'zod';
44
import {
55
isValidHex,
@@ -173,7 +173,7 @@ export const streakParamsSchema = z.object({
173173
hide_title: z.string().optional().transform(toBooleanFlag),
174174
hide_background: z.string().optional().transform(toBooleanFlag),
175175
hide_stats: z.string().optional().transform(toBooleanFlag),
176-
lang: z.string().optional().default('en'),
176+
lang: z.enum(supportedLanguages).catch('en').default('en'),
177177
// Unknown view values fall back to the default dashboard view.
178178
view: z.enum(['default', 'monthly']).catch('default').default('default'),
179179
// Invalid delta formats fall back to percentage mode.

package-lock.json

Lines changed: 11 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)