From bd7983d4f57062567a84216efc92de5df4641325 Mon Sep 17 00:00:00 2001 From: Colin Henderson <colin.henderson@atkinsglobal.com> Date: Thu, 19 Sep 2024 13:04:13 +0100 Subject: [PATCH 1/8] Added ability for self-hosted token service to be specified. --- pygeoapi/provider/esri.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pygeoapi/provider/esri.py b/pygeoapi/provider/esri.py index 8179a705b..0e54ff1ee 100644 --- a/pygeoapi/provider/esri.py +++ b/pygeoapi/provider/esri.py @@ -62,8 +62,10 @@ def __init__(self, provider_def): self.crs = provider_def.get('crs', '4326') self.username = provider_def.get('username') self.password = provider_def.get('password') + self.token_url = provider_def.get('token_service') + self.token_referer = provider_def.get('referer') self.token = None - + self.session = Session() self.login() @@ -194,16 +196,16 @@ def login(self): msg = 'Missing ESRI login information, not setting token' LOGGER.debug(msg) return - + params = { 'f': 'pjson', 'username': self.username, 'password': self.password, - 'referer': ARCGIS_URL + 'referer': (ARCGIS_URL if self.token_referer is None else self.token_referer) } LOGGER.debug('Logging in') - with self.session.post(GENERATE_TOKEN_URL, data=params) as r: + with self.session.post((GENERATE_TOKEN_URL if self.token_url is None else self.token_url), data=params) as r: self.token = r.json().get('token') # https://enterprise.arcgis.com/en/server/latest/administer/windows/about-arcgis-tokens.htm self.session.headers.update({ From 562c5677ad3b69baa89b8365a52bc0d8651b6de1 Mon Sep 17 00:00:00 2001 From: Colin Henderson <colin.henderson@atkinsglobal.com> Date: Tue, 1 Oct 2024 12:40:01 +0100 Subject: [PATCH 2/8] Update documentation to show the available parameters --- .../data-publishing/ogcapi-features.rst | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/docs/source/data-publishing/ogcapi-features.rst b/docs/source/data-publishing/ogcapi-features.rst index 30ccf0796..4958ac08e 100644 --- a/docs/source/data-publishing/ogcapi-features.rst +++ b/docs/source/data-publishing/ogcapi-features.rst @@ -145,6 +145,10 @@ To publish an ESRI `Feature Service`_ or `Map Service`_ specify the URL for the * ``id_field`` will often be ``OBJECTID``, ``objectid``, or ``FID``. * If the map or feature service is not shared publicly, the ``username`` and ``password`` fields can be set in the configuration to authenticate into the service. +* If the map or feature service is self-hosted and not shared publicly, the ``token_service`` and optional ``referer`` fields + can be set in the configuration to authenticate into the service. + +To publish from a ArcGIS online hosted service: .. code-block:: yaml @@ -157,6 +161,24 @@ To publish an ESRI `Feature Service`_ or `Map Service`_ specify the URL for the crs: 4326 # Optional crs (default is EPSG:4326) username: username # Optional ArcGIS username password: password # Optional ArcGIS password + token_service: https://your.server.com/arcgis/sharing/rest/generateToken # Optional url to your generateToken service + referer: https://your.server.com # Optional referer, defaults to https://www.arcgis.com if not set + +To publish from a self-hosted service that is not publicly accessible the ``token_service`` field is required: + +.. code-block:: yaml + + providers: + - type: feature + name: ESRI + data: https://your.server.com/arcgis/rest/services/your-layer/MapServer/0 + id_field: objectid + time_field: date_in_your_device_time_zone # Optional time field + crs: 4326 # Optional crs (default is EPSG:4326) + username: username # Optional ArcGIS username + password: password # Optional ArcGIS password + token_service: https://your.server.com/arcgis/sharing/rest/generateToken # Optional url to your generateToken service + referer: https://your.server.com # Optional referer, defaults to https://www.arcgis.com if not set GeoJSON ^^^^^^^ From 34450aca37764a64df315db5ced5f2ca8c563daf Mon Sep 17 00:00:00 2001 From: Colin Henderson <colin.henderson@atkinsglobal.com> Date: Tue, 1 Oct 2024 12:43:12 +0100 Subject: [PATCH 3/8] Update pygeoapi/provider/esri.py Co-authored-by: Benjamin Webb <40066515+webb-ben@users.noreply.github.com> --- pygeoapi/provider/esri.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pygeoapi/provider/esri.py b/pygeoapi/provider/esri.py index 0e54ff1ee..b1781d4e9 100644 --- a/pygeoapi/provider/esri.py +++ b/pygeoapi/provider/esri.py @@ -62,8 +62,8 @@ def __init__(self, provider_def): self.crs = provider_def.get('crs', '4326') self.username = provider_def.get('username') self.password = provider_def.get('password') - self.token_url = provider_def.get('token_service') - self.token_referer = provider_def.get('referer') + self.token_url = provider_def.get('token_service', ARCGIS_URL) + self.token_referer = provider_def.get('referer', GENERATE_TOKEN_URL) self.token = None self.session = Session() From c0de26f4c0b5e5734e0ca537211671905e7eb76e Mon Sep 17 00:00:00 2001 From: Colin Henderson <colin.henderson@atkinsglobal.com> Date: Tue, 1 Oct 2024 12:43:48 +0100 Subject: [PATCH 4/8] Update pygeoapi/provider/esri.py Co-authored-by: Benjamin Webb <40066515+webb-ben@users.noreply.github.com> --- pygeoapi/provider/esri.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pygeoapi/provider/esri.py b/pygeoapi/provider/esri.py index b1781d4e9..715ec2938 100644 --- a/pygeoapi/provider/esri.py +++ b/pygeoapi/provider/esri.py @@ -65,7 +65,6 @@ def __init__(self, provider_def): self.token_url = provider_def.get('token_service', ARCGIS_URL) self.token_referer = provider_def.get('referer', GENERATE_TOKEN_URL) self.token = None - self.session = Session() self.login() From d483b5010f1fcdff35de157b3060952dc885b9ea Mon Sep 17 00:00:00 2001 From: Colin Henderson <colin.henderson@atkinsglobal.com> Date: Tue, 1 Oct 2024 12:43:58 +0100 Subject: [PATCH 5/8] Update pygeoapi/provider/esri.py Co-authored-by: Benjamin Webb <40066515+webb-ben@users.noreply.github.com> --- pygeoapi/provider/esri.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pygeoapi/provider/esri.py b/pygeoapi/provider/esri.py index 715ec2938..e44c2cd8c 100644 --- a/pygeoapi/provider/esri.py +++ b/pygeoapi/provider/esri.py @@ -195,7 +195,6 @@ def login(self): msg = 'Missing ESRI login information, not setting token' LOGGER.debug(msg) return - params = { 'f': 'pjson', 'username': self.username, From c11195e84f04add01f1630f12f66192ad4ce9444 Mon Sep 17 00:00:00 2001 From: Colin Henderson <colin.henderson@atkinsglobal.com> Date: Tue, 1 Oct 2024 12:44:04 +0100 Subject: [PATCH 6/8] Update pygeoapi/provider/esri.py Co-authored-by: Benjamin Webb <40066515+webb-ben@users.noreply.github.com> --- pygeoapi/provider/esri.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygeoapi/provider/esri.py b/pygeoapi/provider/esri.py index e44c2cd8c..bb42bb4a8 100644 --- a/pygeoapi/provider/esri.py +++ b/pygeoapi/provider/esri.py @@ -199,7 +199,7 @@ def login(self): 'f': 'pjson', 'username': self.username, 'password': self.password, - 'referer': (ARCGIS_URL if self.token_referer is None else self.token_referer) + 'referer': self.token_referer } LOGGER.debug('Logging in') From fa53fa925cb33352c2240db111c43aede83433e6 Mon Sep 17 00:00:00 2001 From: Benjamin Webb <40066515+webb-ben@users.noreply.github.com> Date: Tue, 1 Oct 2024 10:27:24 -0400 Subject: [PATCH 7/8] Update pygeoapi/provider/esri.py --- pygeoapi/provider/esri.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pygeoapi/provider/esri.py b/pygeoapi/provider/esri.py index bb42bb4a8..47d74e2b9 100644 --- a/pygeoapi/provider/esri.py +++ b/pygeoapi/provider/esri.py @@ -203,7 +203,7 @@ def login(self): } LOGGER.debug('Logging in') - with self.session.post((GENERATE_TOKEN_URL if self.token_url is None else self.token_url), data=params) as r: + with self.session.post(self.token_url, data=params) as r: self.token = r.json().get('token') # https://enterprise.arcgis.com/en/server/latest/administer/windows/about-arcgis-tokens.htm self.session.headers.update({ From 81b183f01446d69ec47c6631c902c8051bc83b23 Mon Sep 17 00:00:00 2001 From: Tom Kralidis <tomkralidis@gmail.com> Date: Tue, 1 Oct 2024 10:53:20 -0400 Subject: [PATCH 8/8] Update ogcapi-features.rst --- docs/source/data-publishing/ogcapi-features.rst | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/source/data-publishing/ogcapi-features.rst b/docs/source/data-publishing/ogcapi-features.rst index 342d54a28..12478c1d2 100644 --- a/docs/source/data-publishing/ogcapi-features.rst +++ b/docs/source/data-publishing/ogcapi-features.rst @@ -145,11 +145,11 @@ To publish an ESRI `Feature Service`_ or `Map Service`_ specify the URL for the * ``id_field`` will often be ``OBJECTID``, ``objectid``, or ``FID``. * If the map or feature service is not shared publicly, the ``username`` and ``password`` fields can be set in the - configuration to authenticate into the service. + configuration to authenticate to the service. * If the map or feature service is self-hosted and not shared publicly, the ``token_service`` and optional ``referer`` fields - can be set in the configuration to authenticate into the service. + can be set in the configuration to authenticate to the service. -To publish from a ArcGIS online hosted service: +To publish from an ArcGIS online hosted service: .. code-block:: yaml @@ -162,10 +162,10 @@ To publish from a ArcGIS online hosted service: crs: 4326 # Optional crs (default is EPSG:4326) username: username # Optional ArcGIS username password: password # Optional ArcGIS password - token_service: https://your.server.com/arcgis/sharing/rest/generateToken # Optional url to your generateToken service - referer: https://your.server.com # Optional referer, defaults to https://www.arcgis.com if not set + token_service: https://your.server.com/arcgis/sharing/rest/generateToken # optional URL to your generateToken service + referer: https://your.server.com # optional referer, defaults to https://www.arcgis.com if not set -To publish from a self-hosted service that is not publicly accessible the ``token_service`` field is required: +To publish from a self-hosted service that is not publicly accessible, the ``token_service`` field is required: .. code-block:: yaml