Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ const ModalContent = () => {
.string({
required_error: formErrors.required(),
})
.trim()
.min(1, formErrors.required()),
kind: z.nativeEnum(AclAliasKind),
ports: aclPortsValidator(LL),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,11 +65,12 @@ export const AddDeviceSetupStep = () => {
choice: z.nativeEnum(AddNativeWgDeviceMode),
name: z
.string()
.trim()
.min(4, LL.form.error.minimumLength())
.refine((val) => !userData?.reservedDevices?.includes(val), {
message: localLL.form.errors.name.duplicatedName(),
}),
publicKey: z.string(),
publicKey: z.string().trim(),
})
.superRefine((val, ctx) => {
const { publicKey, choice } = val;
Expand Down
2 changes: 2 additions & 0 deletions web/src/pages/auth/Login/Login.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -56,11 +56,13 @@ export const Login = () => {
z.object({
username: z
.string()
.trim()
.min(1, LL.form.error.minimumLength())
.max(64)
.regex(patternLoginCharacters, LL.form.error.forbiddenCharacter()),
password: z
.string()
.trim()
.min(1, LL.form.error.required())
.max(128, LL.form.error.maximumLength()),
}),
Expand Down
1 change: 1 addition & 0 deletions web/src/pages/auth/MFARoute/MFAEmail/MFAEmail.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ export const MFAEmail = () => {
z.object({
code: z
.string()
.trim()
.min(6, LL.form.error.minimumLength())
.max(6, LL.form.error.maximumLength())
.regex(patternNumbersOnly, LL.form.error.invalid()),
Expand Down
1 change: 1 addition & 0 deletions web/src/pages/auth/MFARoute/MFATOTPAuth/MFATOTPAuth.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ export const MFATOTPAuth = () => {
z.object({
code: z
.string()
.trim()
.min(6, LL.form.error.validCode())
.max(6, LL.form.error.validCode()),
}),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ export const standaloneDeviceFormSchema = (
.object({
name: z
.string()
.trim()
.min(1, LL.form.error.required())
.refine((value) => {
if (mode === StandaloneDeviceModalFormMode.EDIT && isPresent(originalName)) {
Expand All @@ -30,10 +31,10 @@ export const standaloneDeviceFormSchema = (
return !reservedNames.includes(value.trim());
}, LL.form.error.reservedName()),
location_id: z.number(),
description: z.string().optional(),
modifiableIpParts: z.array(z.string().min(1, LL.form.error.required())),
description: z.string().trim().optional(),
modifiableIpParts: z.array(z.string().trim().min(1, LL.form.error.required())),
generationChoice: z.nativeEnum(WGConfigGenChoice),
wireguard_pubkey: z.string().optional(),
wireguard_pubkey: z.string().trim().optional(),
})
.superRefine((vals, ctx) => {
if (mode === StandaloneDeviceModalFormMode.CREATE_MANUAL) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ const ModalContent = () => {
.string({
required_error: LL.form.error.required(),
})
.trim()
.min(4, LL.form.error.minimumLength())
.refine((name) => {
// if in edit mode ignore self name
Expand Down
3 changes: 3 additions & 0 deletions web/src/pages/network/NetworkEditForm/NetworkEditForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -117,12 +117,14 @@ export const NetworkEditForm = () => {
name: z.string().min(1, LL.form.error.required()),
address: z
.string()
.trim()
.min(1, LL.form.error.required())
.refine((value) => {
return validateIpList(value, ',', true);
}, LL.form.error.addressNetmask()),
endpoint: z
.string()
.trim()
.min(1, LL.form.error.required())
.refine(
(val) => validateIpOrDomain(val, false, true),
Expand All @@ -136,6 +138,7 @@ export const NetworkEditForm = () => {
allowed_ips: z.string(),
dns: z
.string()
.trim()
.optional()
.refine((val) => {
if (val === '' || !val) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,13 +95,15 @@ export const OpenIdClientModalForm = () => {
z.object({
name: z
.string()
.trim()
.min(4, LL.form.error.minimumLength())
.max(16, LL.form.error.maximumLength())
.min(1, LL.form.error.required()),
redirect_uri: z.array(
z.object({
url: z
.string()
.trim()
.min(
1,
LL.openidOverview.modals.openidClientModal.form.error.urlRequired(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,11 +111,15 @@ const ModalContent = () => {
const schema = useMemo(
() =>
z.object({
name: z.string().min(1, LL.form.error.required()),
url: z.string().min(1, LL.form.error.required()).url(LL.form.error.urlInvalid()),
username: z.string(),
password: z.string(),
cert: z.string(),
name: z.string().trim().min(1, LL.form.error.required()),
url: z
.string()
.trim()
.min(1, LL.form.error.required())
.url(LL.form.error.urlInvalid()),
username: z.string().trim(),
password: z.string().trim(),
cert: z.string().trim(),
}),
[LL.form.error],
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,15 @@ const ModalContent = () => {
const schema = useMemo(
() =>
z.object({
name: z.string().min(1, LL.form.error.required()),
url: z.string().min(1, LL.form.error.required()).url(LL.form.error.urlInvalid()),
username: z.string(),
password: z.string(),
cert: z.string(),
name: z.string().trim().min(1, LL.form.error.required()),
url: z
.string()
.trim()
.min(1, LL.form.error.required())
.url(LL.form.error.urlInvalid()),
username: z.string().trim(),
password: z.string().trim(),
cert: z.string().trim(),
}),
[LL.form.error],
);
Expand Down
7 changes: 4 additions & 3 deletions web/src/pages/settings/components/GlobalSettings/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,18 @@ import type { TranslationFunctions } from '../../../../i18n/i18n-types';

export const globalSettingsSchema = (LL: TranslationFunctions) =>
z.object({
main_logo_url: z.string(),
nav_logo_url: z.string(),
main_logo_url: z.string().trim(),
nav_logo_url: z.string().trim(),
instance_name: z
.string()
.trim()
.min(3, LL.form.error.minimumLength())
.max(64, LL.form.error.maximumLength()),
openid_enabled: z.boolean(),
wireguard_enabled: z.boolean(),
worker_enabled: z.boolean(),
webhooks_enabled: z.boolean(),
license: z.string().optional(),
license: z.string().trim().optional(),
});

export type GlobalSettingsFormFields = z.infer<ReturnType<typeof globalSettingsSchema>>;
Original file line number Diff line number Diff line change
Expand Up @@ -72,28 +72,29 @@ export const LdapSettingsForm = () => {
z.object({
ldap_url: z
.string()
.trim()
.url(LL.form.error.invalid())
.min(1, LL.form.error.required()),
ldap_bind_username: z.string().min(1, LL.form.error.required()),
ldap_bind_password: z.string(),
ldap_group_member_attr: z.string().min(1, LL.form.error.required()),
ldap_group_obj_class: z.string().min(1, LL.form.error.required()),
ldap_group_search_base: z.string().min(1, LL.form.error.required()),
ldap_groupname_attr: z.string().min(1, LL.form.error.required()),
ldap_member_attr: z.string().min(1, LL.form.error.required()),
ldap_user_obj_class: z.string().min(1, LL.form.error.required()),
ldap_user_auxiliary_obj_classes: z.string(),
ldap_user_search_base: z.string().min(1, LL.form.error.required()),
ldap_username_attr: z.string().min(1, LL.form.error.required()),
ldap_bind_username: z.string().trim().min(1, LL.form.error.required()),
ldap_bind_password: z.string().trim(),
ldap_group_member_attr: z.string().trim().min(1, LL.form.error.required()),
ldap_group_obj_class: z.string().trim().min(1, LL.form.error.required()),
ldap_group_search_base: z.string().trim().min(1, LL.form.error.required()),
ldap_groupname_attr: z.string().trim().min(1, LL.form.error.required()),
ldap_member_attr: z.string().trim().min(1, LL.form.error.required()),
ldap_user_obj_class: z.string().trim().min(1, LL.form.error.required()),
ldap_user_auxiliary_obj_classes: z.string().trim(),
ldap_user_search_base: z.string().trim().min(1, LL.form.error.required()),
ldap_username_attr: z.string().trim().min(1, LL.form.error.required()),
ldap_enabled: z.boolean(),
ldap_sync_enabled: z.boolean(),
ldap_is_authoritative: z.boolean(),
ldap_use_starttls: z.boolean(),
ldap_tls_verify_cert: z.boolean(),
ldap_sync_interval: z.number().default(300),
ldap_uses_ad: z.boolean(),
ldap_user_rdn_attr: z.string().optional(),
ldap_sync_groups: z.string(),
ldap_user_rdn_attr: z.string().trim().optional(),
ldap_sync_groups: z.string().trim(),
}),
[LL.form.error],
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ export const SmtpSettingsForm = () => {
z.object({
smtp_server: z
.string()
.trim()
.min(1, LL.form.error.required())
.refine(
(val) => (!val ? true : validateIpOrDomain(val, false, true)),
Expand All @@ -119,13 +120,14 @@ export const SmtpSettingsForm = () => {
invalid_type_error: LL.form.error.required(),
})
.max(65535, LL.form.error.portMax()),
smtp_password: z.string(),
smtp_user: z.string(),
smtp_password: z.string().trim(),
smtp_user: z.string().trim(),
smtp_sender: z
.string()
.trim()
.min(1, LL.form.error.required())
.regex(patternValidEmail, LL.form.error.invalid()),
smtp_encryption: z.string().min(1, LL.form.error.required()),
smtp_encryption: z.string().trim().min(1, LL.form.error.required()),
}),
[LL.form],
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ export const SmtpTest = () => {
const zodSchema = useMemo(
() =>
z.object({
to: z.string().regex(patternValidEmail, LL.form.error.invalid()),
to: z.string().trim().regex(patternValidEmail, LL.form.error.invalid()),
}),
[LL.form.error],
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ const ModalContent = () => {
const zodSchema = useMemo(
() =>
z.object({
to: z.string().regex(patternValidEmail, LL.form.error.invalid()),
to: z.string().trim().regex(patternValidEmail, LL.form.error.invalid()),
}),
[LL.form.error],
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,13 +84,15 @@ export const ProfileDetailsForm = () => {
z.object({
username: z
.string()
.trim()
.min(1, LL.form.error.minimumLength())
.regex(patternSafeUsernameCharacters, LL.form.error.forbiddenCharacter())
.max(64, LL.form.error.maximumLength()),
first_name: z.string().min(1, LL.form.error.required()),
last_name: z.string().min(1, LL.form.error.required()),
first_name: z.string().trim().min(1, LL.form.error.required()),
last_name: z.string().trim().min(1, LL.form.error.required()),
phone: z
.string()
.trim()
.optional()
.refine((val) => {
if (val && values.length > 0) {
Expand All @@ -100,13 +102,14 @@ export const ProfileDetailsForm = () => {
}, LL.form.error.invalid()),
email: z
.string()
.trim()
.min(1, LL.form.error.required())
.regex(patternValidEmail, LL.form.error.invalid()),
groups: z.array(z.string().min(1, LL.form.error.required())),
groups: z.array(z.string().trim().min(1, LL.form.error.required())),
authorized_apps: z.array(
z.object({
oauth2client_id: z.number().min(1, LL.form.error.required()),
oauth2client_name: z.string().min(1, LL.form.error.required()),
oauth2client_name: z.string().trim().min(1, LL.form.error.required()),
user_id: z.number().min(1, LL.form.error.required()),
}),
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ export const RegisterWebAuthNForm = () => {
z.object({
name: z
.string()
.trim()
.min(1, LL.form.error.required())
.min(4, LL.form.error.minimumLength()),
}),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ export const RegisterMFAEmailForm = () => {
z.object({
code: z
.string()
.trim()
.regex(patternNumbersOnly, LL.form.error.invalid())
.min(6, LL.form.error.minimumLength())
.max(6, LL.form.error.maximumLength()),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ const TOTPRegisterForm = () => {
const zodSchema = useMemo(
() =>
z.object({
code: z.string().min(6, LL.form.error.minimumLength()),
code: z.string().trim().min(6, LL.form.error.minimumLength()),
}),
[LL.form.error],
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,12 @@ export const EditUserDeviceForm = () => {
z.object({
name: z
.string()
.trim()
.min(4, LL.form.error.minimumLength())
.regex(patternNoSpecialChars, LL.form.error.noSpecialChars()),
wireguard_pubkey: z
.string()
.trim()
.min(44, LL.form.error.invalidKey())
.max(44, LL.form.error.invalidKey())
.regex(patternValidWireguardKey, LL.form.error.invalidKey()),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ export const AddApiTokenForm = () => {
.string({
required_error: LL.form.error.required(),
})
.trim()
.min(1, LL.form.error.required())
.min(4, LL.form.error.minimumLength()),
}),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,11 +67,14 @@ export const AddAuthenticationKeyForm = ({ keyType }: Props) => {
.string({
required_error: LL.form.error.required(),
})
.trim()
.min(1, LL.form.error.required())
.min(4, LL.form.error.minimumLength()),
keyValue: z.string({
required_error: LL.form.error.required(),
}),
keyValue: z
.string({
required_error: LL.form.error.required(),
})
.trim(),
}),
[LL.form.error],
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ const ModalContent = () => {
z.object({
name: z
.string()
.trim()
.min(1, LL.form.error.required())
.min(4, LL.form.error.minimumLength()),
}),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ const ModalContent = () => {
z.object({
name: z
.string()
.trim()
.min(1, LL.form.error.required())
.min(4, LL.form.error.minimumLength()),
}),
Expand Down
Loading