- Remove better-auth dependency (unused) - Update JWT secrets to stronger values - Add ENCRYPTION_SALT env variable for password encryption - Add role field to createUserSchema validator - Accept role from body in admin.controller createUser - Fix todo filters: add priority filter, handle completed param - Remove .env.example (merged into .env) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
96 lines
3.0 KiB
JavaScript
96 lines
3.0 KiB
JavaScript
import { z } from 'zod';
|
|
|
|
// Login s temporary password schema
|
|
export const loginSchema = z.object({
|
|
username: z
|
|
.string({
|
|
required_error: 'Username je povinný',
|
|
invalid_type_error: 'Username musí byť text',
|
|
})
|
|
.min(3, 'Username musí mať aspoň 3 znaky')
|
|
.max(50, 'Username môže mať maximálne 50 znakov'),
|
|
password: z
|
|
.string({
|
|
required_error: 'Heslo je povinné',
|
|
invalid_type_error: 'Heslo musí byť text',
|
|
})
|
|
.min(1, 'Heslo nemôže byť prázdne'),
|
|
});
|
|
|
|
// Set new password schema (krok 2)
|
|
export const setPasswordSchema = z
|
|
.object({
|
|
newPassword: z
|
|
.string({
|
|
required_error: 'Nové heslo je povinné',
|
|
})
|
|
.min(8, 'Heslo musí mať aspoň 8 znakov')
|
|
.max(100, 'Heslo môže mať maximálne 100 znakov')
|
|
.regex(/[a-z]/, 'Heslo musí obsahovať aspoň jedno malé písmeno')
|
|
.regex(/[A-Z]/, 'Heslo musí obsahovať aspoň jedno veľké písmeno')
|
|
.regex(/[0-9]/, 'Heslo musí obsahovať aspoň jedno číslo')
|
|
.regex(
|
|
/[^a-zA-Z0-9]/,
|
|
'Heslo musí obsahovať aspoň jeden špeciálny znak'
|
|
),
|
|
confirmPassword: z.string({
|
|
required_error: 'Potvrdenie hesla je povinné',
|
|
}),
|
|
})
|
|
.refine((data) => data.newPassword === data.confirmPassword, {
|
|
message: 'Heslá sa nezhodujú',
|
|
path: ['confirmPassword'],
|
|
});
|
|
|
|
// Link email schema (krok 3)
|
|
export const linkEmailSchema = z.object({
|
|
email: z
|
|
.string({
|
|
required_error: 'Email je povinný',
|
|
})
|
|
.email('Neplatný formát emailu')
|
|
.max(255, 'Email môže mať maximálne 255 znakov'),
|
|
emailPassword: z
|
|
.string({
|
|
required_error: 'Heslo k emailu je povinné',
|
|
})
|
|
.min(1, 'Heslo k emailu nemôže byť prázdne'),
|
|
});
|
|
|
|
|
|
// Create user schema (admin only) - temp password sa generuje automaticky
|
|
// Ak je poskytnutý email, môže byť poskytnuté aj emailPassword pre automatické nastavenie JMAP
|
|
export const createUserSchema = z.object({
|
|
username: z
|
|
.string({
|
|
required_error: 'Username je povinný',
|
|
})
|
|
.min(3, 'Username musí mať aspoň 3 znaky')
|
|
.max(50, 'Username môže mať maximálne 50 znakov')
|
|
.regex(
|
|
/^[a-zA-Z0-9_-]+$/,
|
|
'Username môže obsahovať iba písmená, čísla, pomlčky a podčiarkovníky'
|
|
),
|
|
email: z.string().email('Neplatný formát emailu').max(255).optional(),
|
|
emailPassword: z.string().min(1).optional(),
|
|
firstName: z.string().max(100).optional(),
|
|
lastName: z.string().max(100).optional(),
|
|
role: z.enum(['admin', 'member']).optional(),
|
|
});
|
|
|
|
// Update user schema
|
|
export const updateUserSchema = z.object({
|
|
firstName: z.string().max(100).optional(),
|
|
lastName: z.string().max(100).optional(),
|
|
email: z.string().email('Neplatný formát emailu').max(255).optional(),
|
|
});
|
|
|
|
// Change role schema (admin only)
|
|
export const changeRoleSchema = z.object({
|
|
userId: z.string().uuid('Neplatný formát user ID'),
|
|
role: z.enum(['admin', 'member'], {
|
|
required_error: 'Rola je povinná',
|
|
invalid_type_error: 'Neplatná rola',
|
|
}),
|
|
});
|