fix: use less strict validation for external URLs (#1104)

* fix: use less strict validation for external URLs

Default url validation from the Yup module doesn't allow URLs like "http://custom-host", while it is
a correct value for an external URL.

fix #1068

* fix: resolve GitHub CodeQL review
This commit is contained in:
Gauthier
2024-11-16 15:26:31 +01:00
committed by GitHub
parent 5c24e79b1d
commit 14f316a9a6
5 changed files with 24 additions and 6 deletions

View File

@@ -130,7 +130,10 @@ const RadarrModal = ({ onClose, radarr, onSave }: RadarrModalProps) => {
intl.formatMessage(messages.validationMinimumAvailabilityRequired) intl.formatMessage(messages.validationMinimumAvailabilityRequired)
), ),
externalUrl: Yup.string() 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( .test(
'no-trailing-slash', 'no-trailing-slash',
intl.formatMessage(messages.validationApplicationUrlTrailingSlash), intl.formatMessage(messages.validationApplicationUrlTrailingSlash),

View File

@@ -139,7 +139,10 @@ const SettingsJellyfin: React.FC<SettingsJellyfinProps> = ({
), ),
jellyfinExternalUrl: Yup.string() jellyfinExternalUrl: Yup.string()
.nullable() .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( .test(
'no-trailing-slash', 'no-trailing-slash',
intl.formatMessage(messages.validationUrlTrailingSlash), intl.formatMessage(messages.validationUrlTrailingSlash),
@@ -147,7 +150,10 @@ const SettingsJellyfin: React.FC<SettingsJellyfinProps> = ({
), ),
jellyfinForgotPasswordUrl: Yup.string() jellyfinForgotPasswordUrl: Yup.string()
.nullable() .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( .test(
'no-trailing-slash', 'no-trailing-slash',
intl.formatMessage(messages.validationUrlTrailingSlash), intl.formatMessage(messages.validationUrlTrailingSlash),

View File

@@ -87,7 +87,10 @@ const SettingsMain = () => {
intl.formatMessage(messages.validationApplicationTitle) intl.formatMessage(messages.validationApplicationTitle)
), ),
applicationUrl: Yup.string() 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( .test(
'no-trailing-slash', 'no-trailing-slash',
intl.formatMessage(messages.validationApplicationUrlTrailingSlash), intl.formatMessage(messages.validationApplicationUrlTrailingSlash),

View File

@@ -190,7 +190,10 @@ const SettingsPlex = ({ onComplete }: SettingsPlexProps) => {
otherwise: Yup.string().nullable(), otherwise: Yup.string().nullable(),
}), }),
tautulliExternalUrl: Yup.string() 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( .test(
'no-trailing-slash', 'no-trailing-slash',
intl.formatMessage(messages.validationUrlTrailingSlash), intl.formatMessage(messages.validationUrlTrailingSlash),

View File

@@ -145,7 +145,10 @@ const SonarrModal = ({ onClose, sonarr, onSave }: SonarrModalProps) => {
) )
: Yup.number(), : Yup.number(),
externalUrl: Yup.string() 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( .test(
'no-trailing-slash', 'no-trailing-slash',
intl.formatMessage(messages.validationApplicationUrlTrailingSlash), intl.formatMessage(messages.validationApplicationUrlTrailingSlash),