diff --git a/CHANGELOG.md b/CHANGELOG.md index ebdc85b..dc5f34a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,12 @@ # Changelog + ### __[v#.#]__ - date ##### Added - Telegram-Plugin: In der generierten Übersichtkarte wird eine Anfahrtsroute integriert. Der Abfahrtsort ist konfiguierbar. [#382](https://github.com/Schrolli91/BOSWatch/pull/382) - Hue-Plugin: Geräte die mit einer Hue bridge verbunden sind können aus BOSWatch ein- und ausgeschaltet werden. [#394](https://github.com/Schrolli91/BOSWatch/issues/394) ##### Changed +- FFAgent Plugin: zusätzliches OrderedDict "alarmHeadersOrdered" implementiert um das HTTP Header Ordering sicherzustellen. Zusätzlich den HTTP Request mittels Session implementiert um das Header Ordering zu bewahren. Zusätzliches Debug Logging für die Header implementiert. [#356] (https://github.com/Schrolli91/BOSWatch/issues/356) ##### Deprecated ##### Removed ##### Fixed diff --git a/includes/globalVars.py b/includes/globalVars.py index 25962e3..52c57ff 100644 --- a/includes/globalVars.py +++ b/includes/globalVars.py @@ -13,7 +13,6 @@ versionNr = "2.4.3" branch = "dev" buildDate = "unreleased" - # Global variables config = 0 script_path = "" diff --git a/plugins/FFAgent/FFAgent.py b/plugins/FFAgent/FFAgent.py index 561ca86..7ab8a92 100644 --- a/plugins/FFAgent/FFAgent.py +++ b/plugins/FFAgent/FFAgent.py @@ -13,6 +13,8 @@ import logging # Global logger import hmac, hashlib import json, requests +from collections import OrderedDict + from includes import globalVars # Global variables #from includes.helper import timeHandler @@ -123,8 +125,9 @@ def run(typ,freq,data): } alarmData = json.dumps(alarmData) + logging.debug(alarmData) - + alarmHeaders = { "Content-Type": "application/json", "webApiToken": webApiToken, @@ -132,12 +135,30 @@ def run(typ,freq,data): "selectiveCallCode": selectiveCallCode, "hmac": hmac.new(webApiKey, webApiToken + selectiveCallCode + accessToken + alarmData, digestmod=hashlib.sha256).hexdigest() } + logging.debug(alarmHeaders) + alarmHeadersOrdered=OrderedDict() + alarmHeadersOrdered['webApiToken']=webApiToken + alarmHeadersOrdered['accessToken']=accessToken + alarmHeadersOrdered['selectiveCallCode']=selectiveCallCode + alarmHeadersOrdered['hmac']=hmac.new(webApiKey, webApiToken + selectiveCallCode + accessToken + alarmData, digestmod=hashlib.sha256).hexdigest() + + logging.debug(alarmHeadersOrdered) + if globalVars.config.get("FFAgent", "live") == "1": - r = requests.post(url, data=alarmData, headers=alarmHeaders, verify=serverCertFile, cert=(clientCertFile, clientCertPass)) + s = requests.Session() + s.headers = OrderedDict([('Content-Type', 'application/json')]) + logging.debug(s.headers) + r = s.post(url, data=alarmData, headers=alarmHeadersOrdered, verify=serverCertFile, cert=(clientCertFile, clientCertPass)) + else: - r = requests.post(url, data=alarmData, headers=alarmHeaders, verify=serverCertFile) + s = requests.Session() + s.headers = OrderedDict([('Content-Type', 'application/json')]) + logging.debug(s.headers) + r = s.post(url, data=alarmData, headers=alarmHeadersOrdered, verify=serverCertFile) + + logging.debug(r.request.headers) except: logging.error("cannot send FFAgent request")