From dbaedf83b5319e038932a6b477993ae1511182dd Mon Sep 17 00:00:00 2001 From: Bastian Schroll Date: Thu, 16 Aug 2018 20:17:33 +0200 Subject: [PATCH 1/9] v2.4 prepare --- CHANGELOG.md | 6 +----- includes/globalVars.py | 6 +++--- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e9475dc..9530fae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,6 @@ # Changelog - -### __[v2.3.1]__ - Unreleased +### __[v2.4]__ - 17.08.2018 ##### Added - Config Eintrag um Port für MySQL Plugin festzulegen [#345](https://github.com/Schrolli91/BOSWatch/pull/345) - FMS und ZVEI Support für Pushover Plugin [#352](https://github.com/Schrolli91/BOSWatch/pull/352) @@ -10,12 +9,9 @@ - multicastAlarm Plugin - RICs die von multicastAlarm genutzt werden, müssen nicht mehr in der config bei allow_ric bzw. filter_range_start/filter_range_end berücksichtigt werden. [#357](https://github.com/Schrolli91/BOSWatch/pull/357) - FFAgent Plugin - Debug Logging für die alarmHeaders eingebaut zwecks Troubleshooting [#354](https://github.com/Schrolli91/BOSWatch/pull/354) - multicastAlarm Plugin - Buffer nach jedem Alarm löschen - erlaubt in kombination mit "doubleFilter_check_msg" die Verwendung in Netzen, die zwischen multicastAlarm RICs auch normale Alarme senden. #370(https://github.com/Schrolli91/BOSWatch/pull/370) -##### Deprecated -##### Removed ##### Fixed - Fehler beim Auslesen der netIdent_RIC im MySQL Plugin [#347](https://github.com/Schrolli91/BOSWatch/pull/347) - FFAgent Plugin - Typo bei alarmHeaders für Live Betrieb gefixt [#354](https://github.com/Schrolli91/BOSWatch/pull/354) -##### Security ### __[v2.3]__ - 22.12.2017 diff --git a/includes/globalVars.py b/includes/globalVars.py index b14594d..a809c19 100644 --- a/includes/globalVars.py +++ b/includes/globalVars.py @@ -9,9 +9,9 @@ Global variables """ # version info -versionNr = "2.5" -branch = "dev" -buildDate = "unreleased" +versionNr = "2.4" +branch = "master" +buildDate = "17.08.2018" # Global variables From f4c35391b4f80b9dec2037c2cf413639348c3231 Mon Sep 17 00:00:00 2001 From: CJHarms Date: Thu, 1 Aug 2019 22:20:35 +0200 Subject: [PATCH 2/9] Update FFAgent.py Added a OrderedDict to keep the Content-Type first in a URL Request to prevent HTTP 500 Errors from the FF-Agent API. --- plugins/FFAgent/FFAgent.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/plugins/FFAgent/FFAgent.py b/plugins/FFAgent/FFAgent.py index 561ca86..52cae9c 100644 --- a/plugins/FFAgent/FFAgent.py +++ b/plugins/FFAgent/FFAgent.py @@ -12,6 +12,7 @@ FFAgent-Plugin to send FMS-, ZVEI- and POCSAG - messages to FF-Agent import logging # Global logger import hmac, hashlib import json, requests +import collections from includes import globalVars # Global variables @@ -134,6 +135,15 @@ def run(typ,freq,data): } logging.debug(alarmHeaders) + alarmHeaders = collections.OrderedDict(alarmHeaders) + alarmHeadersOrdered = collections.OrderedDict() + alarmHeadersOrdered["Content-Type"]=alarmHeaders["Content-Type"] + alarmHeadersOrdered["webApiToken"]=alarmHeaders["webApiToken"] + alarmHeadersOrdered["accessToken"]=alarmHeaders["accessToken"] + alarmHeadersOrdered["selectiveCallCode"]=alarmHeaders["selectiveCallCode"] + alarmHeadersOrdered["hmac"]=alarmHeaders["hmac"] + logging.debug(alarmHeadersOrdered) + if globalVars.config.get("FFAgent", "live") == "1": r = requests.post(url, data=alarmData, headers=alarmHeaders, verify=serverCertFile, cert=(clientCertFile, clientCertPass)) else: From 190e7f36feb0f2137f731d08178b05a9612b1411 Mon Sep 17 00:00:00 2001 From: CJHarms Date: Sat, 3 Aug 2019 10:27:45 +0200 Subject: [PATCH 3/9] Update FFAgent.py Used json.dumps for the alarmHeaders instead of a OrderedDict to preserve Insertion Order --- plugins/FFAgent/FFAgent.py | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/plugins/FFAgent/FFAgent.py b/plugins/FFAgent/FFAgent.py index 52cae9c..bd3b949 100644 --- a/plugins/FFAgent/FFAgent.py +++ b/plugins/FFAgent/FFAgent.py @@ -12,7 +12,6 @@ FFAgent-Plugin to send FMS-, ZVEI- and POCSAG - messages to FF-Agent import logging # Global logger import hmac, hashlib import json, requests -import collections from includes import globalVars # Global variables @@ -126,24 +125,15 @@ def run(typ,freq,data): alarmData = json.dumps(alarmData) logging.debug(alarmData) - alarmHeaders = { + alarmHeaders = json.dumps({ "Content-Type": "application/json", "webApiToken": webApiToken, "accessToken": accessToken, "selectiveCallCode": selectiveCallCode, "hmac": hmac.new(webApiKey, webApiToken + selectiveCallCode + accessToken + alarmData, digestmod=hashlib.sha256).hexdigest() - } + }) logging.debug(alarmHeaders) - alarmHeaders = collections.OrderedDict(alarmHeaders) - alarmHeadersOrdered = collections.OrderedDict() - alarmHeadersOrdered["Content-Type"]=alarmHeaders["Content-Type"] - alarmHeadersOrdered["webApiToken"]=alarmHeaders["webApiToken"] - alarmHeadersOrdered["accessToken"]=alarmHeaders["accessToken"] - alarmHeadersOrdered["selectiveCallCode"]=alarmHeaders["selectiveCallCode"] - alarmHeadersOrdered["hmac"]=alarmHeaders["hmac"] - logging.debug(alarmHeadersOrdered) - if globalVars.config.get("FFAgent", "live") == "1": r = requests.post(url, data=alarmData, headers=alarmHeaders, verify=serverCertFile, cert=(clientCertFile, clientCertPass)) else: From bd5f7f4707c982d07882495dc8d75273d5b008e4 Mon Sep 17 00:00:00 2001 From: CJHarms Date: Mon, 19 Aug 2019 10:12:25 +0200 Subject: [PATCH 4/9] Update FFAgent.py Passing the Headers directly instead of a Dict to prevent "reordering" with Python <3.7. --- plugins/FFAgent/FFAgent.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/FFAgent/FFAgent.py b/plugins/FFAgent/FFAgent.py index bd3b949..9b4c74c 100644 --- a/plugins/FFAgent/FFAgent.py +++ b/plugins/FFAgent/FFAgent.py @@ -124,20 +124,20 @@ def run(typ,freq,data): alarmData = json.dumps(alarmData) logging.debug(alarmData) - - alarmHeaders = json.dumps({ + + alarmHeaders = { "Content-Type": "application/json", "webApiToken": webApiToken, "accessToken": accessToken, "selectiveCallCode": selectiveCallCode, "hmac": hmac.new(webApiKey, webApiToken + selectiveCallCode + accessToken + alarmData, digestmod=hashlib.sha256).hexdigest() - }) + } logging.debug(alarmHeaders) if globalVars.config.get("FFAgent", "live") == "1": - r = requests.post(url, data=alarmData, headers=alarmHeaders, verify=serverCertFile, cert=(clientCertFile, clientCertPass)) + r = requests.post(url, data=alarmData, headers={"Content-Type": "application/json", "webApiToken": webApiToken, "accessToken": accessToken, "selectiveCallCode": selectiveCallCode, "hmac": hmac.new(webApiKey, webApiToken + selectiveCallCode + accessToken + alarmData, digestmod=hashlib.sha256).hexdigest()}, verify=serverCertFile, cert=(clientCertFile, clientCertPass)) else: - r = requests.post(url, data=alarmData, headers=alarmHeaders, verify=serverCertFile) + r = requests.post(url, data=alarmData, headers={"Content-Type": "application/json", "webApiToken": webApiToken, "accessToken": accessToken, "selectiveCallCode": selectiveCallCode, "hmac": hmac.new(webApiKey, webApiToken + selectiveCallCode + accessToken + alarmData, digestmod=hashlib.sha256).hexdigest()}, verify=serverCertFile) except: logging.error("cannot send FFAgent request") From e2ed799b8768ef957ef5443a87b35b7793519341 Mon Sep 17 00:00:00 2001 From: CJHarms Date: Mon, 19 Aug 2019 11:10:56 +0200 Subject: [PATCH 5/9] Update FFAgent.py Added some additional Debug Logging --- plugins/FFAgent/FFAgent.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/FFAgent/FFAgent.py b/plugins/FFAgent/FFAgent.py index 9b4c74c..a6d8b79 100644 --- a/plugins/FFAgent/FFAgent.py +++ b/plugins/FFAgent/FFAgent.py @@ -138,6 +138,8 @@ def run(typ,freq,data): r = requests.post(url, data=alarmData, headers={"Content-Type": "application/json", "webApiToken": webApiToken, "accessToken": accessToken, "selectiveCallCode": selectiveCallCode, "hmac": hmac.new(webApiKey, webApiToken + selectiveCallCode + accessToken + alarmData, digestmod=hashlib.sha256).hexdigest()}, verify=serverCertFile, cert=(clientCertFile, clientCertPass)) else: r = requests.post(url, data=alarmData, headers={"Content-Type": "application/json", "webApiToken": webApiToken, "accessToken": accessToken, "selectiveCallCode": selectiveCallCode, "hmac": hmac.new(webApiKey, webApiToken + selectiveCallCode + accessToken + alarmData, digestmod=hashlib.sha256).hexdigest()}, verify=serverCertFile) + + logging.debug(r) except: logging.error("cannot send FFAgent request") From 8599093a6c0e67409997733d0d7868187973287d Mon Sep 17 00:00:00 2001 From: CJHarms Date: Tue, 20 Aug 2019 10:27:46 +0200 Subject: [PATCH 6/9] Update FFAgent.py Replaced Double Quotes with Single Quotes in the HTTP Request --- plugins/FFAgent/FFAgent.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/FFAgent/FFAgent.py b/plugins/FFAgent/FFAgent.py index a6d8b79..028b80a 100644 --- a/plugins/FFAgent/FFAgent.py +++ b/plugins/FFAgent/FFAgent.py @@ -135,11 +135,11 @@ def run(typ,freq,data): logging.debug(alarmHeaders) if globalVars.config.get("FFAgent", "live") == "1": - r = requests.post(url, data=alarmData, headers={"Content-Type": "application/json", "webApiToken": webApiToken, "accessToken": accessToken, "selectiveCallCode": selectiveCallCode, "hmac": hmac.new(webApiKey, webApiToken + selectiveCallCode + accessToken + alarmData, digestmod=hashlib.sha256).hexdigest()}, verify=serverCertFile, cert=(clientCertFile, clientCertPass)) + r = requests.post(url, data=alarmData, headers={'Content-Type': 'application/json', 'webApiToken': webApiToken, 'accessToken': accessToken, 'selectiveCallCode': selectiveCallCode, 'hmac': hmac.new(webApiKey, webApiToken + selectiveCallCode + accessToken + alarmData, digestmod=hashlib.sha256).hexdigest()}, verify=serverCertFile, cert=(clientCertFile, clientCertPass)) else: - r = requests.post(url, data=alarmData, headers={"Content-Type": "application/json", "webApiToken": webApiToken, "accessToken": accessToken, "selectiveCallCode": selectiveCallCode, "hmac": hmac.new(webApiKey, webApiToken + selectiveCallCode + accessToken + alarmData, digestmod=hashlib.sha256).hexdigest()}, verify=serverCertFile) + r = requests.post(url, data=alarmData, headers={'Content-Type': 'application/json', 'webApiToken': webApiToken, 'accessToken': accessToken, 'selectiveCallCode': selectiveCallCode, 'hmac': hmac.new(webApiKey, webApiToken + selectiveCallCode + accessToken + alarmData, digestmod=hashlib.sha256).hexdigest()}, verify=serverCertFile) - logging.debug(r) + logging.debug(response.content) except: logging.error("cannot send FFAgent request") From 42f841ba15b274abc3f8108d91dd9b4918e5bf94 Mon Sep 17 00:00:00 2001 From: CJHarms Date: Wed, 28 Aug 2019 09:06:44 +0200 Subject: [PATCH 7/9] Update FFAgent.py Fixed Header Ordering by using Requests Session. Additionally added some Debug Logging. --- plugins/FFAgent/FFAgent.py | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/plugins/FFAgent/FFAgent.py b/plugins/FFAgent/FFAgent.py index 028b80a..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,6 +125,7 @@ def run(typ,freq,data): } alarmData = json.dumps(alarmData) + logging.debug(alarmData) alarmHeaders = { @@ -132,14 +135,30 @@ def run(typ,freq,data): "selectiveCallCode": selectiveCallCode, "hmac": hmac.new(webApiKey, webApiToken + selectiveCallCode + accessToken + alarmData, digestmod=hashlib.sha256).hexdigest() } + logging.debug(alarmHeaders) - if globalVars.config.get("FFAgent", "live") == "1": - r = requests.post(url, data=alarmData, headers={'Content-Type': 'application/json', 'webApiToken': webApiToken, 'accessToken': accessToken, 'selectiveCallCode': selectiveCallCode, 'hmac': hmac.new(webApiKey, webApiToken + selectiveCallCode + accessToken + alarmData, digestmod=hashlib.sha256).hexdigest()}, verify=serverCertFile, cert=(clientCertFile, clientCertPass)) - else: - r = requests.post(url, data=alarmData, headers={'Content-Type': 'application/json', 'webApiToken': webApiToken, 'accessToken': accessToken, 'selectiveCallCode': selectiveCallCode, 'hmac': hmac.new(webApiKey, webApiToken + selectiveCallCode + accessToken + alarmData, digestmod=hashlib.sha256).hexdigest()}, verify=serverCertFile) + 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(response.content) + logging.debug(alarmHeadersOrdered) + + if globalVars.config.get("FFAgent", "live") == "1": + 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: + 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") From 483c4f167ea6794da23f371cd2873395d3d0654d Mon Sep 17 00:00:00 2001 From: Bastian Schroll Date: Wed, 28 Aug 2019 11:09:01 +0200 Subject: [PATCH 8/9] Update globalVars.py --- includes/globalVars.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/includes/globalVars.py b/includes/globalVars.py index d12aff4..52c57ff 100644 --- a/includes/globalVars.py +++ b/includes/globalVars.py @@ -9,9 +9,9 @@ Global variables """ # version info -versionNr = "2.4.2" -branch = "master" -buildDate = "11.03.2019" +versionNr = "2.4.3" +branch = "dev" +buildDate = "unreleased" # Global variables config = 0 From ae11c53fe646867a9b3819db906eebea810d9eb7 Mon Sep 17 00:00:00 2001 From: CJHarms Date: Wed, 28 Aug 2019 11:16:17 +0200 Subject: [PATCH 9/9] Update CHANGELOG.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FF Agent Fixes dokumentiert und dem Changelog hinzugefügt. --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ffb0f5e..dc5f34a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - 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