adds password max chars hint

This commit is contained in:
Christian Beutel
2025-02-16 20:46:31 +01:00
parent 95f78cb89a
commit 307736dfc2
17 changed files with 120 additions and 54 deletions

View File

@@ -34,23 +34,47 @@
extend: validator({
schema: z
.object({
oldPassword: z.string().min(
oldPassword: z
.string()
.min(
8,
$_("must-be-at-least-n-characters-long", {
values: { n: 8 },
}),
)
.max(
72,
$_("must-be-at-most-n-characters-long", {
values: { n: 72 },
}),
),
password: z.string().min(
password: z
.string()
.min(
8,
$_("must-be-at-least-n-characters-long", {
values: { n: 8 },
}),
)
.max(
72,
$_("must-be-at-most-n-characters-long", {
values: { n: 72 },
}),
),
passwordConfirm: z.string().min(
passwordConfirm: z
.string()
.min(
8,
$_("must-be-at-least-n-characters-long", {
values: { n: 8 },
}),
)
.max(
72,
$_("must-be-at-most-n-characters-long", {
values: { n: 72 },
}),
),
})
.refine((d) => d.password === d.passwordConfirm, {

View File

@@ -107,7 +107,7 @@
"error-reading-file": "Fehler beim Lesen der Datei",
"error-saving-list": "Fehler beim Speichern der Liste",
"error-saving-trail": "Fehler beim Speichern der Route",
"error-setting-up-strava-integration": "Fehler beim Einrichten der Strava-Integration",
"error-setting-up-integration": "Fehler beim Einrichten der Strava-Integration",
"error-updating-password": "Fehler beim Aktualisieren des Passworts",
"error-updating-strava-integration": "Fehler Aktualisierung der Komoot-Integration",
"est-duration": "Gesch. Dauer",
@@ -177,6 +177,7 @@
"metric": "Metrisch",
"moderate": "Mittel",
"must-be-at-least-n-characters-long": "Muss mindestens {n} Zeichen lang sein",
"must-be-at-most-n-characters-long": "",
"my-account": "Mein Konto",
"n-days-ago": "vor {n} Tagen",
"n-hours-ago": "vor {n} Stunden",

View File

@@ -107,7 +107,7 @@
"error-reading-file": "Error reading file",
"error-saving-list": "Error saving list",
"error-saving-trail": "Error saving trail",
"error-setting-up-strava-integration": "Error setting up strava integration",
"error-setting-up-integration": "Error setting up {provider} integration",
"error-updating-password": "Error updating password",
"error-updating-strava-integration": "Error updating komoot integration",
"est-duration": "Est. duration",
@@ -177,6 +177,7 @@
"metric": "Metric",
"moderate": "Moderate",
"must-be-at-least-n-characters-long": "Must be at least {n} characters long",
"must-be-at-most-n-characters-long": "Must be at most {n} characters long",
"my-account": "My Account",
"n-days-ago": "{n} days ago",
"n-hours-ago": "{n} hours ago",

View File

@@ -107,7 +107,7 @@
"error-reading-file": "Error leyendo el archivo",
"error-saving-list": "Error guardando la lista",
"error-saving-trail": "Error guardando la ruta",
"error-setting-up-strava-integration": "Error setting up strava integration",
"error-setting-up-integration": "Error setting up strava integration",
"error-updating-password": "Error actualizando la contraseña",
"error-updating-strava-integration": "Error updating komoot integration",
"est-duration": "Duración estimada",
@@ -177,6 +177,7 @@
"metric": "Métrica",
"moderate": "Medio",
"must-be-at-least-n-characters-long": "Tiene que tener por lo menos {n} caracteres",
"must-be-at-most-n-characters-long": "",
"my-account": "Mi cuenta",
"n-days-ago": "hace {n} días",
"n-hours-ago": "hace {n} horas",

View File

@@ -107,7 +107,7 @@
"error-reading-file": "Erreur de lecture du fichier",
"error-saving-list": "Erreur lors de l'enregistrement de la liste",
"error-saving-trail": "Erreur lors de l'enregistrement de l'itinéraire",
"error-setting-up-strava-integration": "Error setting up strava integration",
"error-setting-up-integration": "Error setting up strava integration",
"error-updating-password": "Erreur lors de la mise à jour du mot de passe",
"error-updating-strava-integration": "Error updating komoot integration",
"est-duration": "Temps estimé",
@@ -177,6 +177,7 @@
"metric": "Métrique",
"moderate": "Moyenne",
"must-be-at-least-n-characters-long": "Doit être composé d'au moins {n} caractères",
"must-be-at-most-n-characters-long": "",
"my-account": "Mon profil",
"n-days-ago": "il y a {n} jours",
"n-hours-ago": "il y a {n} heures",

View File

@@ -107,7 +107,7 @@
"error-reading-file": "Hiba a fájl olvasása közben",
"error-saving-list": "Error saving list",
"error-saving-trail": "Error saving trail",
"error-setting-up-strava-integration": "Error setting up strava integration",
"error-setting-up-integration": "Error setting up strava integration",
"error-updating-password": "Error updating password",
"error-updating-strava-integration": "Error updating komoot integration",
"est-duration": "Becsült időtartam",
@@ -177,6 +177,7 @@
"metric": "Metrikus",
"moderate": "Mérsékelt",
"must-be-at-least-n-characters-long": "Legalább {n} karakter hosszúnak kell lennie",
"must-be-at-most-n-characters-long": "",
"my-account": "My Account",
"n-days-ago": "{n} days ago",
"n-hours-ago": "{n} hours ago",

View File

@@ -107,7 +107,7 @@
"error-reading-file": "Errore durante la lettura del file",
"error-saving-list": "Errore salvando la lista",
"error-saving-trail": "Errore nel salvataggio del percorso",
"error-setting-up-strava-integration": "Error setting up strava integration",
"error-setting-up-integration": "Error setting up strava integration",
"error-updating-password": "Errore nell'aggiornamento della password",
"error-updating-strava-integration": "Error updating komoot integration",
"est-duration": "Durata stimata",
@@ -177,6 +177,7 @@
"metric": "Metrico",
"moderate": "Moderato",
"must-be-at-least-n-characters-long": "Deve essere lungo almeno {n} caratteri",
"must-be-at-most-n-characters-long": "",
"my-account": "Il mio account",
"n-days-ago": "{n} giorni fa",
"n-hours-ago": "{n} ore fa",

View File

@@ -107,7 +107,7 @@
"error-reading-file": "Het bestand kan niet worden ingelezen",
"error-saving-list": "Error saving list",
"error-saving-trail": "Error saving trail",
"error-setting-up-strava-integration": "Error setting up strava integration",
"error-setting-up-integration": "Error setting up strava integration",
"error-updating-password": "Error updating password",
"error-updating-strava-integration": "Error updating komoot integration",
"est-duration": "Geschatte duur",
@@ -177,6 +177,7 @@
"metric": "Metrisch",
"moderate": "Gemiddeld",
"must-be-at-least-n-characters-long": "Minimaal {n} tekens",
"must-be-at-most-n-characters-long": "",
"my-account": "My Account",
"n-days-ago": "{n} dagen geleden",
"n-hours-ago": "{n} uuren geleden",

View File

@@ -107,7 +107,7 @@
"error-reading-file": "Błąd wczytywania pliku",
"error-saving-list": "Błąd przy zapisywaniu listy",
"error-saving-trail": "Błąd podczas zapisywania szlaku",
"error-setting-up-strava-integration": "Error setting up strava integration",
"error-setting-up-integration": "Error setting up strava integration",
"error-updating-password": "Błąd podczas aktualizacji hasła",
"error-updating-strava-integration": "Error updating komoot integration",
"est-duration": "Szacowany czas",
@@ -177,6 +177,7 @@
"metric": "Metryczne",
"moderate": "Średni",
"must-be-at-least-n-characters-long": "Długość musi wynosić przynajmniej {n} znaków",
"must-be-at-most-n-characters-long": "",
"my-account": "Moje konto",
"n-days-ago": "{n} dni temu",
"n-hours-ago": "{n} godzin temu",

View File

@@ -107,7 +107,7 @@
"error-reading-file": "Erro ao ler o arquivo",
"error-saving-list": "Erro ao gravar lista",
"error-saving-trail": "Erro ao gravar percurso",
"error-setting-up-strava-integration": "Error setting up strava integration",
"error-setting-up-integration": "Error setting up strava integration",
"error-updating-password": "Erro ao atualizar password",
"error-updating-strava-integration": "Error updating komoot integration",
"est-duration": "Duração prevista",
@@ -177,6 +177,7 @@
"metric": "Métrica",
"moderate": "Moderado",
"must-be-at-least-n-characters-long": "Deve ter pelo menos {n} caracteres",
"must-be-at-most-n-characters-long": "",
"my-account": "A minha conta",
"n-days-ago": "{n} dias atrás",
"n-hours-ago": "{n} horas atrás",

View File

@@ -107,7 +107,7 @@
"error-reading-file": "读取文件错误",
"error-saving-list": "保存列表失败",
"error-saving-trail": "保存路线失败",
"error-setting-up-strava-integration": "Error setting up strava integration",
"error-setting-up-integration": "Error setting up strava integration",
"error-updating-password": "更新密码失败",
"error-updating-strava-integration": "Error updating komoot integration",
"est-duration": "预计时长",
@@ -177,6 +177,7 @@
"metric": "公制",
"moderate": "中等",
"must-be-at-least-n-characters-long": "长度至少 {n} 字符",
"must-be-at-most-n-characters-long": "",
"my-account": "我的账户",
"n-days-ago": "{n} 天前",
"n-hours-ago": "{n} 小时前",

View File

@@ -4,7 +4,7 @@ import type { User } from "../user";
const UserCreateSchema = (z.object({
username: z.string({ message: "required" }).min(3, "must-be-at-least-n-characters-long").regex(/^[\w][\w\.]*$/, "invalid-username"),
email: z.string({ message: "required" }).email("not-a-valid-email-address"),
password: z.string().min(8, "must-be-at-least-n-characters-long"),
password: z.string().min(8, "must-be-at-least-n-characters-long").max(72),
passwordConfirm: z.string().optional()
}) satisfies ZodType<Partial<User>>).refine((data) => data.password === data.passwordConfirm, {
@@ -15,9 +15,9 @@ const UserCreateSchema = (z.object({
const UserUpdateSchema = (z.object({
username: z.string({ message: "required" }).min(3, "must-be-at-least-n-characters-long").regex(/^[\w][\w\.]*$/, "invalid-username").optional(),
email: z.string({ message: "required" }).email("not-a-valid-email-address").optional(),
password: z.string().min(8, "must-be-at-least-n-characters-long").optional(),
oldPassword: z.string().min(8, "must-be-at-least-n-characters-long").optional(),
passwordConfirm: z.string().min(8, "must-be-at-least-n-characters-long").optional(),
password: z.string().min(8, "must-be-at-least-n-characters-long").max(72).optional(),
oldPassword: z.string().min(8, "must-be-at-least-n-characters-long").max(72).optional(),
passwordConfirm: z.string().min(8, "must-be-at-least-n-characters-long").max(72).optional(),
}) satisfies ZodType<Partial<User>>).refine((data) => data.password === data.passwordConfirm, {
message: "passwords-must-match",
path: ["passwordConfirm"],

View File

@@ -8,8 +8,8 @@ export async function POST(event: RequestEvent) {
const data = await event.request.json()
const safeData = z.object({
token: z.string(),
password: z.string(),
passwordConfirm: z.string()
password: z.string().min(8).max(72),
passwordConfirm: z.string().min(8).max(72)
}).refine(d => d.password === d.passwordConfirm).parse(data)
const r = await pb.collection('users').confirmPasswordReset(safeData.token, safeData.password, safeData.passwordConfirm);
return json(r);

View File

@@ -9,7 +9,7 @@ export async function POST(event: RequestEvent) {
const safeData = z.object({
email: z.string().email().optional(),
username: z.string().optional(),
password: z.string()
password: z.string().min(8).max(72)
}).refine(d => d.email !== undefined || d.username !== undefined).parse(data);

View File

@@ -23,17 +23,33 @@
extend: validator({
schema: z
.object({
password: z.string().min(
password: z
.string()
.min(
8,
$_("must-be-at-least-n-characters-long", {
values: { n: 8 },
}),
)
.max(
72,
$_("must-be-at-most-n-characters-long", {
values: { n: 72 },
}),
),
passwordConfirm: z.string().min(
passwordConfirm: z
.string()
.min(
8,
$_("must-be-at-least-n-characters-long", {
values: { n: 8 },
}),
)
.max(
72,
$_("must-be-at-most-n-characters-long", {
values: { n: 72 },
}),
),
})
.refine((d) => d.password === d.passwordConfirm, {

View File

@@ -41,7 +41,15 @@
extend: validator({
schema: z.object({
username: z.string().min(1, "required"),
password: z.string().min(1, "required"),
password: z
.string()
.min(1, "required")
.max(
72,
$_("must-be-at-most-n-characters-long", {
values: { n: 72 },
}),
),
}),
}),
onSubmit: async (newUser) => {

View File

@@ -39,11 +39,19 @@
.string()
.min(1, "required")
.email("not-a-valid-email-address"),
password: z.string().min(
password: z
.string()
.min(
8,
$_("must-be-at-least-n-characters-long", {
values: { n: 8 },
}),
)
.max(
72,
$_("must-be-at-most-n-characters-long", {
values: { n: 72 },
}),
),
}),
}),