diff --git a/src/components/Settings/RadarrModal/index.tsx b/src/components/Settings/RadarrModal/index.tsx index 59f16065d..51c74ba89 100644 --- a/src/components/Settings/RadarrModal/index.tsx +++ b/src/components/Settings/RadarrModal/index.tsx @@ -130,7 +130,10 @@ const RadarrModal = ({ onClose, radarr, onSave }: RadarrModalProps) => { intl.formatMessage(messages.validationMinimumAvailabilityRequired) ), externalUrl: Yup.string() - .url(intl.formatMessage(messages.validationApplicationUrl)) + .matches( + /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}(\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*))?$/i, + intl.formatMessage(messages.validationApplicationUrl) + ) .test( 'no-trailing-slash', intl.formatMessage(messages.validationApplicationUrlTrailingSlash), diff --git a/src/components/Settings/SettingsJellyfin.tsx b/src/components/Settings/SettingsJellyfin.tsx index 316dc48ef..7c6d02d80 100644 --- a/src/components/Settings/SettingsJellyfin.tsx +++ b/src/components/Settings/SettingsJellyfin.tsx @@ -139,7 +139,10 @@ const SettingsJellyfin: React.FC = ({ ), jellyfinExternalUrl: Yup.string() .nullable() - .url(intl.formatMessage(messages.validationUrl)) + .matches( + /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}(\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*))?$/i, + intl.formatMessage(messages.validationUrl) + ) .test( 'no-trailing-slash', intl.formatMessage(messages.validationUrlTrailingSlash), @@ -147,7 +150,10 @@ const SettingsJellyfin: React.FC = ({ ), jellyfinForgotPasswordUrl: Yup.string() .nullable() - .url(intl.formatMessage(messages.validationUrl)) + .matches( + /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}(\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*))?$/i, + intl.formatMessage(messages.validationUrl) + ) .test( 'no-trailing-slash', intl.formatMessage(messages.validationUrlTrailingSlash), diff --git a/src/components/Settings/SettingsMain/index.tsx b/src/components/Settings/SettingsMain/index.tsx index 2d1e0219f..41f399ad5 100644 --- a/src/components/Settings/SettingsMain/index.tsx +++ b/src/components/Settings/SettingsMain/index.tsx @@ -87,7 +87,10 @@ const SettingsMain = () => { intl.formatMessage(messages.validationApplicationTitle) ), applicationUrl: Yup.string() - .url(intl.formatMessage(messages.validationApplicationUrl)) + .matches( + /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}(\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*))?$/i, + intl.formatMessage(messages.validationApplicationUrl) + ) .test( 'no-trailing-slash', intl.formatMessage(messages.validationApplicationUrlTrailingSlash), diff --git a/src/components/Settings/SettingsPlex.tsx b/src/components/Settings/SettingsPlex.tsx index a20fc4836..82cabe92f 100644 --- a/src/components/Settings/SettingsPlex.tsx +++ b/src/components/Settings/SettingsPlex.tsx @@ -190,7 +190,10 @@ const SettingsPlex = ({ onComplete }: SettingsPlexProps) => { otherwise: Yup.string().nullable(), }), tautulliExternalUrl: Yup.string() - .url(intl.formatMessage(messages.validationUrl)) + .matches( + /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}(\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*))?$/i, + intl.formatMessage(messages.validationUrl) + ) .test( 'no-trailing-slash', intl.formatMessage(messages.validationUrlTrailingSlash), diff --git a/src/components/Settings/SonarrModal/index.tsx b/src/components/Settings/SonarrModal/index.tsx index f2bcd4dbc..7890d4b5c 100644 --- a/src/components/Settings/SonarrModal/index.tsx +++ b/src/components/Settings/SonarrModal/index.tsx @@ -145,7 +145,10 @@ const SonarrModal = ({ onClose, sonarr, onSave }: SonarrModalProps) => { ) : Yup.number(), externalUrl: Yup.string() - .url(intl.formatMessage(messages.validationApplicationUrl)) + .matches( + /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}(\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&/=]*))?$/i, + intl.formatMessage(messages.validationApplicationUrl) + ) .test( 'no-trailing-slash', intl.formatMessage(messages.validationApplicationUrlTrailingSlash),