From 86513844f2708d6aff69493eef9732b01fbe4654 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 20 Apr 2025 08:31:42 +1000 Subject: [PATCH] Fix for URL validation (#9539) (#9540) * FIx for URL validation * Further fixes (cherry picked from commit 8d48f9cecdfbd64170f72d814c7c666461eaf7bc) Co-authored-by: Oliver --- src/backend/InvenTree/InvenTree/fields.py | 8 +++++--- src/backend/InvenTree/InvenTree/tests.py | 12 +++++++++++- src/backend/InvenTree/InvenTree/validators.py | 5 ++++- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/backend/InvenTree/InvenTree/fields.py b/src/backend/InvenTree/InvenTree/fields.py index 2609780b5e..d0e304e266 100644 --- a/src/backend/InvenTree/InvenTree/fields.py +++ b/src/backend/InvenTree/InvenTree/fields.py @@ -36,9 +36,11 @@ class InvenTreeRestURLField(RestURLField): """Override default validation behaviour for this field type.""" strict_urls = get_global_setting('INVENTREE_STRICT_URLS', cache=False) - if not strict_urls and data is not empty and '://' not in data: - # Validate as if there were a schema provided - data = 'http://' + data + if not strict_urls and data is not empty and data is not None: + data = str(data).strip() + if '://' not in data: + # Validate as if there were a schema provided + data = 'http://' + data return super().run_validation(data=data) diff --git a/src/backend/InvenTree/InvenTree/tests.py b/src/backend/InvenTree/InvenTree/tests.py index 9080b521ea..b42385fc69 100644 --- a/src/backend/InvenTree/InvenTree/tests.py +++ b/src/backend/InvenTree/InvenTree/tests.py @@ -434,17 +434,27 @@ class ValidatorTest(TestCase): link='www.google.com', ) + # Check that a blank URL is acceptable + Part.objects.create( + name=f'Part {n + 1}', description='Missing link', category=cat, link='' + ) + # With strict URL validation InvenTreeSetting.set_setting('INVENTREE_STRICT_URLS', True, None) with self.assertRaises(ValidationError): Part.objects.create( - name=f'Part {n + 1}', + name=f'Part {n + 2}', description='Link without schema', category=cat, link='www.google.com', ) + # Check that a blank URL is acceptable + Part.objects.create( + name=f'Part {n + 3}', description='Missing link', category=cat, link='' + ) + class FormatTest(TestCase): """Unit tests for custom string formatting functionality.""" diff --git a/src/backend/InvenTree/InvenTree/validators.py b/src/backend/InvenTree/InvenTree/validators.py index ed6874b6d1..91556e75c2 100644 --- a/src/backend/InvenTree/InvenTree/validators.py +++ b/src/backend/InvenTree/InvenTree/validators.py @@ -65,7 +65,10 @@ class AllowedURLValidator(validators.URLValidator): # Determine if 'strict' URL validation is required (i.e. if the URL must have a schema prefix) strict_urls = get_global_setting('INVENTREE_STRICT_URLS', cache=False) - if not strict_urls: + if value is not None: + value = str(value).strip() + + if value and not strict_urls: # Allow URLs which do not have a provided schema if '://' not in value: # Validate as if it were http