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])