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