From 7c5754418bab8863c309a5e1c1bb3fbc5148daba Mon Sep 17 00:00:00 2001 From: index-git Date: Mon, 4 Sep 2023 08:22:01 +0200 Subject: [PATCH 1/3] Prepare x_forwarded_prefix_test.py for maps --- .../publications/x_forwarded_prefix_test.py | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/tests/dynamic_data/publications/x_forwarded_prefix_test.py b/tests/dynamic_data/publications/x_forwarded_prefix_test.py index 801d8c139..c9acd3f89 100644 --- a/tests/dynamic_data/publications/x_forwarded_prefix_test.py +++ b/tests/dynamic_data/publications/x_forwarded_prefix_test.py @@ -2,6 +2,8 @@ from test_tools import process_client from tests import EnumTestTypes from tests.dynamic_data import base_test, base_test_classes +from tests.dynamic_data.publications import common_publications +from ... import Publication pytest_generate_tests = base_test.pytest_generate_tests @@ -12,15 +14,30 @@ class RestMethodLocal(base_test_classes.RestMethodBase): MULTI_DELETE = ('delete_workspace_publications', 'multi_delete') +class PublicationTypes(base_test_classes.PublicationByDefinitionBase): + LAYER = (common_publications.LAYER_VECTOR_SLD, 'layer') + MAP = (common_publications.MAP_EMPTY, 'map') + + class TestPublication(base_test.TestSingleRestPublication): workspace = 'x_forwarded_prefix_post_workspace' + publication_type = None + rest_parametrization = [ - RestMethodLocal + RestMethodLocal, + PublicationTypes, ] - test_cases = [base_test.TestCaseType(key='layer', - publication_type=process_client.LAYER_TYPE, + test_cases = [base_test.TestCaseType(key='proxy_test', + publication=lambda publ_def, cls: Publication(cls.workspace, + publ_def.type, + None), type=EnumTestTypes.MANDATORY, + specific_types={ + (PublicationTypes.MAP, RestMethodLocal.POST): EnumTestTypes.IGNORE, + (PublicationTypes.MAP, RestMethodLocal.DELETE): EnumTestTypes.IGNORE, + (PublicationTypes.MAP, RestMethodLocal.MULTI_DELETE): EnumTestTypes.IGNORE, + }, )] @classmethod @@ -36,4 +53,4 @@ def test_publication(publication, rest_method): proxy_prefix = '/layman-proxy' response = rest_method(publication, args={'headers': {'X-Forwarded-Prefix': proxy_prefix}}) publication_response = response[0] if isinstance(response, list) and len(response) == 1 else response - assert publication_response['url'] == f'http://{settings.LAYMAN_PROXY_SERVER_NAME}{proxy_prefix}/rest/workspaces/{publication.workspace}/layers/{publication.name}' + assert publication_response['url'] == f'http://{settings.LAYMAN_PROXY_SERVER_NAME}{proxy_prefix}/rest/workspaces/{publication.workspace}/{publication.type.split(".")[1]}s/{publication.name}' From 2e928d208a5c648fc3575fb377495060ad23d49f Mon Sep 17 00:00:00 2001 From: index-git Date: Mon, 4 Sep 2023 08:22:23 +0200 Subject: [PATCH 2/3] Incorporate X-Forwarded-Prefix into url key of DELETE Workspace Map --- CHANGELOG.md | 2 +- doc/client-proxy.md | 2 ++ src/layman/map/rest_workspace_map.py | 3 ++- tests/dynamic_data/publications/x_forwarded_prefix_test.py | 1 - 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 42c99ffa4..caca6003c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ - [#765](https://github.com/LayerManager/layman/issues/765) Fix `issuer_id` value in `users` table that was broken since v1.21.0. - [#765](https://github.com/LayerManager/layman/issues/765) Remove `authn.txt` files from workspace directories. The same information as in `authn.txt` files is saved in prime DB schema. ### Changes -- [#868](https://github.com/LayerManager/layman/issues/868) Endpoints [GET Publications](doc/rest.md#get-publications), [GET Layers](doc/rest.md#get-layers), [GET Workspace Layers](doc/rest.md#get-workspace-layers), [GET Maps](doc/rest.md#get-maps), [GET Workspace Maps](doc/rest.md#get-workspace-maps), [GET Workspace Layer](doc/rest.md#get-workspace-layer), [GET Workspace Map](doc/rest.md#get-workspace-map), [POST Workspace Layers](doc/rest.md#post-workspace-layers), [DELETE Workspace Layer](doc/rest.md#delete-workspace-layer) and [DELETE Workspace Layers](doc/rest.md#delete-workspace-layers) respects [HTTP header `X-Forwarded-Prefix`](doc/client-proxy.md#x-forwarded-prefix-http-header) of the request in the response. +- [#868](https://github.com/LayerManager/layman/issues/868) Endpoints [GET Publications](doc/rest.md#get-publications), [GET Layers](doc/rest.md#get-layers), [GET Workspace Layers](doc/rest.md#get-workspace-layers), [GET Maps](doc/rest.md#get-maps), [GET Workspace Maps](doc/rest.md#get-workspace-maps), [GET Workspace Layer](doc/rest.md#get-workspace-layer), [GET Workspace Map](doc/rest.md#get-workspace-map), [POST Workspace Layers](doc/rest.md#post-workspace-layers), [DELETE Workspace Layer](doc/rest.md#delete-workspace-layer), [DELETE Workspace Layers](doc/rest.md#delete-workspace-layers) and [DELETE Workspace Map](doc/rest.md#delete-workspace-map) respects [HTTP header `X-Forwarded-Prefix`](doc/client-proxy.md#x-forwarded-prefix-http-header) of the request in the response. - [#880](https://github.com/LayerManager/layman/issues/880) Use Docker Compose v2 (`docker compose`) in Makefile without `compatibility` flag and remove `Makefile_docker-compose_v1` file. Docker containers are named according to Docker Compose v2 and may have different name after upgrade. - [#765](https://github.com/LayerManager/layman/issues/765) Stop saving OAuth2 claims in filesystem, use prime DB schema only. - [#893](https://github.com/LayerManager/layman/issues/893) It is possible to specify logging level by new environment variable [LAYMAN_LOGLEVEL](doc/env-settings.md#LAYMAN_LOGLEVEL). Default level is `INFO`. diff --git a/doc/client-proxy.md b/doc/client-proxy.md index d9e6af589..843b69737 100644 --- a/doc/client-proxy.md +++ b/doc/client-proxy.md @@ -69,3 +69,5 @@ Currently, value of `X-Forwarded-Prefix` affects following URLs: * `url` key * [DELETE Workspace Layers](rest.md#delete-workspace-layers) * `url` key +* [DELETE Workspace Map](rest.md#delete-workspace-map) + * `url` key diff --git a/src/layman/map/rest_workspace_map.py b/src/layman/map/rest_workspace_map.py index df0da5ce5..1049d324e 100644 --- a/src/layman/map/rest_workspace_map.py +++ b/src/layman/map/rest_workspace_map.py @@ -115,9 +115,10 @@ def patch(workspace, mapname): @util.lock_decorator def delete_map(workspace, mapname): app.logger.info(f"DELETE Map, actor={g.user}") + x_forwarded_prefix = layman_util.get_x_forwarded_prefix(request.headers) # raise exception if map does not exist - info = util.get_complete_map_info(workspace, mapname) + info = util.get_complete_map_info(workspace, mapname, x_forwarded_prefix=x_forwarded_prefix) util.abort_map_chain(workspace, mapname) diff --git a/tests/dynamic_data/publications/x_forwarded_prefix_test.py b/tests/dynamic_data/publications/x_forwarded_prefix_test.py index c9acd3f89..c7c91200d 100644 --- a/tests/dynamic_data/publications/x_forwarded_prefix_test.py +++ b/tests/dynamic_data/publications/x_forwarded_prefix_test.py @@ -35,7 +35,6 @@ class TestPublication(base_test.TestSingleRestPublication): type=EnumTestTypes.MANDATORY, specific_types={ (PublicationTypes.MAP, RestMethodLocal.POST): EnumTestTypes.IGNORE, - (PublicationTypes.MAP, RestMethodLocal.DELETE): EnumTestTypes.IGNORE, (PublicationTypes.MAP, RestMethodLocal.MULTI_DELETE): EnumTestTypes.IGNORE, }, )] From 7c143042c05b13ce2db38fb9003b622e89fbcecf Mon Sep 17 00:00:00 2001 From: index-git Date: Mon, 4 Sep 2023 08:26:50 +0200 Subject: [PATCH 3/3] Incorporate X-Forwarded-Prefix into url key of DELETE Workspace Maps --- CHANGELOG.md | 2 +- doc/client-proxy.md | 2 ++ src/layman/map/rest_workspace_maps.py | 2 ++ tests/dynamic_data/publications/x_forwarded_prefix_test.py | 1 - 4 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index caca6003c..6c9ee647b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ - [#765](https://github.com/LayerManager/layman/issues/765) Fix `issuer_id` value in `users` table that was broken since v1.21.0. - [#765](https://github.com/LayerManager/layman/issues/765) Remove `authn.txt` files from workspace directories. The same information as in `authn.txt` files is saved in prime DB schema. ### Changes -- [#868](https://github.com/LayerManager/layman/issues/868) Endpoints [GET Publications](doc/rest.md#get-publications), [GET Layers](doc/rest.md#get-layers), [GET Workspace Layers](doc/rest.md#get-workspace-layers), [GET Maps](doc/rest.md#get-maps), [GET Workspace Maps](doc/rest.md#get-workspace-maps), [GET Workspace Layer](doc/rest.md#get-workspace-layer), [GET Workspace Map](doc/rest.md#get-workspace-map), [POST Workspace Layers](doc/rest.md#post-workspace-layers), [DELETE Workspace Layer](doc/rest.md#delete-workspace-layer), [DELETE Workspace Layers](doc/rest.md#delete-workspace-layers) and [DELETE Workspace Map](doc/rest.md#delete-workspace-map) respects [HTTP header `X-Forwarded-Prefix`](doc/client-proxy.md#x-forwarded-prefix-http-header) of the request in the response. +- [#868](https://github.com/LayerManager/layman/issues/868) Endpoints [GET Publications](doc/rest.md#get-publications), [GET Layers](doc/rest.md#get-layers), [GET Workspace Layers](doc/rest.md#get-workspace-layers), [GET Maps](doc/rest.md#get-maps), [GET Workspace Maps](doc/rest.md#get-workspace-maps), [GET Workspace Layer](doc/rest.md#get-workspace-layer), [GET Workspace Map](doc/rest.md#get-workspace-map), [POST Workspace Layers](doc/rest.md#post-workspace-layers), [DELETE Workspace Layer](doc/rest.md#delete-workspace-layer), [DELETE Workspace Layers](doc/rest.md#delete-workspace-layers), [DELETE Workspace Map](doc/rest.md#delete-workspace-map) and [DELETE Workspace Maps](doc/rest.md#delete-workspace-maps) respects [HTTP header `X-Forwarded-Prefix`](doc/client-proxy.md#x-forwarded-prefix-http-header) of the request in the response. - [#880](https://github.com/LayerManager/layman/issues/880) Use Docker Compose v2 (`docker compose`) in Makefile without `compatibility` flag and remove `Makefile_docker-compose_v1` file. Docker containers are named according to Docker Compose v2 and may have different name after upgrade. - [#765](https://github.com/LayerManager/layman/issues/765) Stop saving OAuth2 claims in filesystem, use prime DB schema only. - [#893](https://github.com/LayerManager/layman/issues/893) It is possible to specify logging level by new environment variable [LAYMAN_LOGLEVEL](doc/env-settings.md#LAYMAN_LOGLEVEL). Default level is `INFO`. diff --git a/doc/client-proxy.md b/doc/client-proxy.md index 843b69737..bd785c97a 100644 --- a/doc/client-proxy.md +++ b/doc/client-proxy.md @@ -71,3 +71,5 @@ Currently, value of `X-Forwarded-Prefix` affects following URLs: * `url` key * [DELETE Workspace Map](rest.md#delete-workspace-map) * `url` key +* [DELETE Workspace Maps](rest.md#delete-workspace-maps) + * `url` key diff --git a/src/layman/map/rest_workspace_maps.py b/src/layman/map/rest_workspace_maps.py index 6c72a9a21..4d8e2df75 100644 --- a/src/layman/map/rest_workspace_maps.py +++ b/src/layman/map/rest_workspace_maps.py @@ -134,6 +134,7 @@ def post(workspace): def delete(workspace): app.logger.info(f"DELETE Maps, actor={g.user}") + x_forwarded_prefix = layman_util.get_x_forwarded_prefix(request.headers) infos = layman_util.delete_publications(workspace, MAP_TYPE, util.is_map_chain_ready, @@ -142,6 +143,7 @@ def delete(workspace): request.method, 'rest_workspace_map.get', 'mapname', + x_forwarded_prefix=x_forwarded_prefix, ) return infos, 200 diff --git a/tests/dynamic_data/publications/x_forwarded_prefix_test.py b/tests/dynamic_data/publications/x_forwarded_prefix_test.py index c7c91200d..b6c3f6a65 100644 --- a/tests/dynamic_data/publications/x_forwarded_prefix_test.py +++ b/tests/dynamic_data/publications/x_forwarded_prefix_test.py @@ -35,7 +35,6 @@ class TestPublication(base_test.TestSingleRestPublication): type=EnumTestTypes.MANDATORY, specific_types={ (PublicationTypes.MAP, RestMethodLocal.POST): EnumTestTypes.IGNORE, - (PublicationTypes.MAP, RestMethodLocal.MULTI_DELETE): EnumTestTypes.IGNORE, }, )]