From 5d36b7a981d81fc31adc978c428b74eea1737fa1 Mon Sep 17 00:00:00 2001 From: vakaris_zilius Date: Fri, 12 Aug 2022 14:54:28 +0000 Subject: [PATCH] Island: Remove trailing slashes before registering a URL Strict slashes seems to not handle a case when URL is defined with a trailing slash, but request is sent without one. Removing trailing slashes before registering a URL will solve the burden of remembering to register URLS without slashes --- monkey/monkey_island/cc/app.py | 2 +- monkey/tests/unit_tests/monkey_island/cc/test_app.py | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/monkey/monkey_island/cc/app.py b/monkey/monkey_island/cc/app.py index c522c3082..0391026bb 100644 --- a/monkey/monkey_island/cc/app.py +++ b/monkey/monkey_island/cc/app.py @@ -128,7 +128,7 @@ class FlaskDIWrapper: raise ValueError(f"Resource {resource.__name__} has no defined URLs") self._reserve_urls(resource.urls) - + resource.urls = map(lambda url: url.rstrip("/"), resource.urls) dependencies = self._container.resolve_dependencies(resource) self._api.add_resource(resource, *resource.urls, resource_class_args=dependencies) diff --git a/monkey/tests/unit_tests/monkey_island/cc/test_app.py b/monkey/tests/unit_tests/monkey_island/cc/test_app.py index 225f87ff8..27971e0b6 100644 --- a/monkey/tests/unit_tests/monkey_island/cc/test_app.py +++ b/monkey/tests/unit_tests/monkey_island/cc/test_app.py @@ -81,3 +81,11 @@ def test_url_check_slash_stripping__path_separation(resource_manager): # Following shouldn't raise and exception resource_manager.add_resource(resource3) resource_manager.add_resource(resource4) + + +def test_trailing_slash_removal(resource_manager): + bogus_endpoint = "/beef/face" + resource3 = get_mock_resource("res3", [f"{bogus_endpoint}/"]) + resource_manager.add_resource(resource3) + registered_rules = resource_manager._api.app.url_map._rules + assert any([rule.rule == bogus_endpoint for rule in registered_rules])