From 2a94dea004ec833af231d4b62f8ba62814829a56 Mon Sep 17 00:00:00 2001
From: Andreas Hubel <andi@saerdnaer.de>
Date: Wed, 11 Dec 2024 22:21:08 +0100
Subject: [PATCH] chore(schedulejson): add request header config option

---
 src/core/schedules/schedulejson.py | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/src/core/schedules/schedulejson.py b/src/core/schedules/schedulejson.py
index 389339c34..8af6a9b09 100644
--- a/src/core/schedules/schedulejson.py
+++ b/src/core/schedules/schedulejson.py
@@ -16,8 +16,10 @@ class ScheduleJSONSupport(BaseScheduleSupport):
     readonly = True
 
     configuration_fields = {
-        'feedback': ('bool', True, False, 'Enable/Disable feedback url generation'),
-        'kind': ('string', 'assembly', False, 'kind of events, either "assembly" or "official" or "sos" or "lightning"'),
+        # 'key':    (type, default value, mandatory, translation text)
+        'feedback': ('bool',   True,       False, 'Enable/Disable feedback url generation'),
+        'kind':     ('string', 'assembly', False, 'kind of events, either "assembly" or "official" or "sos" or "lightning"'),
+        'headers':  ('dict',   {},         False, 'HTTP headers to send with the request e.g. Authorization'),
     }
 
     def ready(self):
@@ -38,9 +40,12 @@ class ScheduleJSONSupport(BaseScheduleSupport):
         all events need to have an unique but stable identifier, i.e.
         if the name of the event changes the identifier must not change!
         """
+        headers = {}
+        if self.conf_value('headers'):
+            headers = self.conf_value('headers')
 
-        schedule = ScheduleJSON.from_url(self.remote_url, language='en')
-        schedule_de = ScheduleJSON.from_url(self.remote_url, language='de', event_map=True)
+        schedule = ScheduleJSON.from_url(self.remote_url, headers={**headers, 'Accept-Language': 'en'})
+        schedule_de = ScheduleJSON.from_url(self.remote_url, headers={**headers, 'Accept-Language': 'de'}, event_map=True)
         instance = urlparse(schedule.get('base_url', self.remote_url))
         host = f'//{instance.netloc}'
 
@@ -101,8 +106,8 @@ class ScheduleJSON:
             self._events = {e.get('guid'): e for e in self.events()}
 
     @classmethod
-    def from_url(cls, url, client=None, language=None, event_map=False):
-        r = (client if client else s).get(url, headers={'Accept-Language': language} if language else None)
+    def from_url(cls, url, client=None, headers=None, event_map=False):
+        r = (client if client else s).get(url, headers=headers)
         if r.ok is False:
             raise Exception(f'Request failed, HTTP {r.status_code}.')
 
-- 
GitLab