mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-15 10:43:07 +00:00
- authenticateCampaignToken usa depth:0 + select mínimo (sem join media) - getCampaignUserWithAvatar para layout/perfil; hasCampaignSession em rotas públicas - CampaignPasswordFields reutilizado em reset, perfil e convite - LoginForm migra para CampaignFormActionState + mapCampaignFormActionError - invite login schema unifica refineMatchingPasswords Co-authored-by: Francisco Solla <fsolla@users.noreply.github.com>
52 lines
1.6 KiB
TypeScript
52 lines
1.6 KiB
TypeScript
import type { RefinementCtx } from 'zod'
|
|
import { z } from 'zod'
|
|
|
|
export const CAMPAIGN_PASSWORD_RESET_TOKEN_MIN_LENGTH = 20
|
|
|
|
/** THE campaign password rule (P3-K — the invite schema copied it). */
|
|
export const campaignPasswordSchema = z
|
|
.string()
|
|
.min(8, 'A senha deve ter pelo menos 8 caracteres.')
|
|
.max(128, 'A senha deve ter no máximo 128 caracteres.')
|
|
|
|
export const refineMatchingPasswords = (
|
|
data: { password: string; passwordConfirmation: string },
|
|
context: RefinementCtx,
|
|
) => {
|
|
if (data.password !== data.passwordConfirmation) {
|
|
context.addIssue({
|
|
code: 'custom',
|
|
message: 'As senhas não coincidem.',
|
|
path: ['passwordConfirmation'],
|
|
})
|
|
}
|
|
}
|
|
|
|
export const campaignPasswordResetRequestSchema = z.object({
|
|
email: z.email('Informe um e-mail válido.').trim(),
|
|
})
|
|
|
|
export const campaignPasswordResetSchema = z
|
|
.object({
|
|
token: z.string().min(CAMPAIGN_PASSWORD_RESET_TOKEN_MIN_LENGTH).max(256),
|
|
password: campaignPasswordSchema,
|
|
passwordConfirmation: campaignPasswordSchema,
|
|
})
|
|
.superRefine(refineMatchingPasswords)
|
|
|
|
export const campaignChangePasswordSchema = z
|
|
.object({
|
|
currentPassword: z.string().min(1, 'Informe a senha atual.'),
|
|
password: campaignPasswordSchema,
|
|
passwordConfirmation: campaignPasswordSchema,
|
|
})
|
|
.superRefine((data, context) => {
|
|
refineMatchingPasswords(data, context)
|
|
if (data.currentPassword === data.password) {
|
|
context.addIssue({
|
|
code: 'custom',
|
|
message: 'A nova senha deve ser diferente da atual.',
|
|
path: ['password'],
|
|
})
|
|
}
|
|
})
|