Closed thokich closed 3 months ago
Wie wäre es den mit der ip und den Port?
Der Assistent muss ja nur drauf zugreifen und selbst über http://gotify müsste er intern im Netz trotzdem erreichbar sein
wie gebe ich dem notification assisten den die info das er die Verbindung zum gotify server nicht über https://gotify.geheim.de/ sondern über http://gotify interner Stack nacht ? sozusagen
Gotify - Url: http://gotify :-) Is Gotify - Url available: yes SecNtfy Server - Url: https://api.secntfy.app/api
ich könnte dan über eine interne host.conf gotify einer ip zuweisen. mit Gotify - Url: https://gotify.geheim.de/ geht die kiste erst mal in das internet
Na über die App
App öffnen -> Einstellungen -> Instanzen Verwalten -> Instanz auswählen -> oben rechts Bearbeiten
Und dann die Einträge anpassen.
Das habe ich mir gedacht und die speicherst du dann in deiner sqllite db mit ab. somit geht dein notification dienst für die gotify server abfrage über das internet. und wo kannst du deinem notification assisten SAGEN DAS ER DEN LOKALEN DOCKER STACK nimmt. In deiner ersten Version gab es den parameter GOTIFY_SERVER_URL | http://gotify/. Den ignorierst du jetzt in der aktuellen version scheinbar. wenn ich deinen code ansehe könnte jetzt wahrscheinlich deine sql lite datenbank manipulieren und anstelle https://gotify.geheim.de/ http://gotify reinschreiben :-)
Warum hast die die ENV GOTIFY_SERVER_URL Variable raus geschmissen ?
Wenn du die Anpassungen übers lokale Netz machst und der App die lokale Adresse des Gotify Servers gibst z.b. http://gotify (Adresse des Gotify Servers vom Stack der auch im lokalen Netzwerk erreichbar ist, wird diese url in die SQLite dB eingetragen.
Der Assistent startet daraufhin eine Socket Connection genau mit der URL die er bekommen hat über die App und dem dazugehörigen Client Token!!!
Es hat sich vom Aufbau nichts geändert nur dass die Config jetzt über die App geht und flexibler ist...
Und der Dienst geht sobald er eine lokale Adresse bekommt nicht übers Netz sondern bleibt intern!!!
ich probiere es aus und melde mich hier wieder. leider nicht so einfach die Kiste läuft in der Cloud (Firewall usw.) und nicht in einem lokalen Netz. Ach und noch etwas sehr positives. Super schnelle Reaktionszeit, ich danke dir dafür.
Danke für die Unterstützung. Leider läßt es das Konzept meiner Infrastruktur nicht zu, das ein hinter der Firewall befindlicher Dienst eine Anfrage ins Internet stellt um dann über den nginx proxy wieder zurück aus dem Internet über die Firewall auf den internen Server zugreift. Mein Konzept ist es hier das ein interner Verkehr auch intern hinter der Firewall bleibt. Dafür war deine erste Version geeignet mit dem ENV Parameter ENV GOTIFY_SERVER_URL. Hier sprachen gotify Server und Notification Assisten im Internen Netz. Das einzige was jetzt hilft wäre das ich den gotify Server frei über das Internet erreichbar mache und nicht über eine IP Acessliste beim nginx proxy für bestimmte Server eingrenze.
Hast du es mal mit der IP Adresse des Gotify Servers probiert?
Hier mein Infrastruktur Konzept das die Sache aubremst. (https://surl.it-tkcloud.de/d6hsD)
Habe im nginx die IP Accesliste einmal deaktiviert, den Notification Assistent gestartet Gotify - Url: https://gotify.geheim.de Is Gotify - Url available: yes SecNtfy Server - Url: https://api.secntfy.app/api Is SecNtfy Server - Url available: yes Client - Token: xxxxxx Client connecting... hat die push notification auf das apple device funktioniert. Habe danach den Docker Container nicht mehr angefasst und im nginx die IP Accessliste wieder aktiviert. Es funktionierte die push notification auf das apple device weiter. Prüfst du nur beim Container Start ab ob dier Gotify Server zur Verfügung steht und wenn ja dann arbeitet dein Programm gewollt/ungewollt auch noch mit http://gotify ? Nur so kann ich mir gerade erklären das jetzt notifications auf das handy kommen; denn der Weg über den nginx ist durch die IP Accesliste eigentlich wieder gesperrt.
Eigentlich wird mit dem Websocket dauerhaft eine Verbindung zum Server gehalten, sonst könnte er ja keinen Push machen.
Die überprüfen ist nur am Start da, der Websocket startet diese, aber nach einem reconnect nochmal neu
Ich denke die Kommunikation zwischen Notification-Assistent und gotify server läuft weiterhin intern im Docker Netz. Ich habe an meiner Firewall bei push an iPhone keinen out/in Datenverkehr von 8681 (notification assistent) sondern nur von 8680 (gotify.server) gesehen. Nur beim start des Containers sucht er den gotify Server über externes Netz (https://gotify.geheim.de/) Netzlast beim push sehe ich nur im Docker internen Netzwerk vom prozess dotnet iGotify Notification Assist.dll Im Log sehe ich noc diese Meldungen. Disconnection happened, type: Websocket.Client.DisconnectionInfo warn: Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware[3] Failed to determine the https port for redirect. info: Microsoft.Hosting.Lifetime[0] Application is shutting down... Database is created: True info: Microsoft.Hosting.Lifetime[14] Now listening on: http://[::]:8080 info: Microsoft.Hosting.Lifetime[0] Application started. Press Ctrl+C to shut down. info: Microsoft.Hosting.Lifetime[0] Hosting environment: Production info: Microsoft.Hosting.Lifetime[0] Content root path: /app
Ich könnte ja mit diesem Workaround leben.
Bei meinen Kommunikationsrecherchen habe ich festgestellt das du einen http; https service auf 167.235.79.55 (Hetzner) api.secntfy.app laufen hast. Welche Daten empfängst du hier und wohin leitest du sie weiter ? Ich sehe sie werden mit TLS 1.3 zu deinem Service übertragen :-) ich gehe mal davon aus das sie von hier aus zur App als PUSH Message gelangen. Wie sieht es allgemein mit End to End Verschlüsselung aus ? Zur Transparenz wäre es cool wenn du ein Kommunikationsschaubild veröffentlichst.
Ich würde später dir mal das alles erklären hab bloß grad keine Zeit
Alles gut, keinen Stress. Hast auf jeden Fall ein super c# Programm geschrieben. Ich finde es gut. Das Problem mit der Zeit kenne ich auch.
So, jetzt kann ich dir hier mal die Abfolge erklären. Ich beachte dabei jedoch nicht das HTTPS-Protokoll in Bezug auf Verschlüsselung.
Der Gotify Server erhält eine Nachricht mit einem Curl-Event oder ähnlichem. Diese empfängt er und leitet sie direkt an den Websocket weiter. Der Websocket wird über den API-Endpunkt http/s://
Über den oben angegebenen Endpunkt verbinde ich den Service, damit ich die Nachrichten erhalte. Die Android-App von Gotify funktioniert genauso, nur bei Apple funktioniert das nicht aufgrund des "Energy Efficiency Mode". Aber jetzt zur Verarbeitung der Nachrichtendaten. Damit der Service überhaupt weiß, wohin er sich verbinden muss, benötigt er ab Version 1.2 die Informationen der App. Diese gibt den Gotify Server an, mit dem er sich verbinden muss, und zusätzlich das Client-Token, damit er überhaupt zuhören darf. Wenn alles passt, baut der Service die Verbindung zum Gotify Server auf und speichert die Daten, Client-Token, Notification-Token und die URL des Gotify Servers ab. Dadurch kann er sich im Falle eines Ausfalls direkt mit dem Gotify Server verbinden.
Zum Thema Verarbeitung der Notifications von Gotify: Diese kommen alle unverschlüsselt an, das heißt im Klartext. Mein Service holt sich über das Device-Token den Public Key des Gerätes, um die Nachricht asymmetrisch zu verschlüsseln. Die verschlüsselte Nachricht wird dann an meinen Service SecNtfy gesendet, der die Daten an Apple weitergibt, da für das Versenden ein Zertifikat benötigt wird. Falls jetzt die Frage kommt, was alles gespeichert wird: Es werden nur Typeninformationen (OS-Version, Gerätetyp, PubKey, APN ID) sowie Statistiken gespeichert. Alle Daten, die erhoben werden, enthalten keinerlei personenbezogene Informationen. Wenn die Nachricht an Apple gesendet wurde, leitet Apple diese an das Gerät weiter und entschlüsselt sie mit dem Private Key, der auf dem Gerät liegt.
Ich denke, das sollte ein bisschen Licht ins Dunkle bringen. Hätte ich das über ein Bild gemacht, wäre das, glaube ich, ein bisschen chaotisch und unverständlich geworden.
Falls fragen sind hau raus
Hi, wie cool ist das den. Danke das du dir die Zeit genommen hast, ist ja nicht selbstverständlich. Du hast recht, in Worten gefasst ist es besser verständlich als in einem Bild. Apple hat ja ganz schön Aufwand produziert. aber es klappt jetzt erstmal bei mir mit dem Workaround (warum auch immer, aber es klappt). Ich verwende es um meine Cloud Hobbyumgebung bei Hetzner mittels checkmk und gotify zu monitoren. checkmk macht die notification mit seinen events, sendet diese über ein phyton Skript an igotify und dann geht es weiter mit deiner Lösung bis zum Apple Handy.Ich sage dann erst mal Danke und ich bin schon gespannt was du noch so um die Kiste drum rum programmierts.
Hi, folgendes Problem.
Gotify - Url: https://gotify.geheim.de Is Gotify - Url available: no SecNtfy Server - Url: https://api.secntfy.app/api Is SecNtfy Server - Url available: yes Client - Token: xxxxxxxxxxx Client connecting...
Der Notification Dienst greift jetzt nicht mehr intern auf gotify Server zu sondern über die öffentliche Internetadresse. nachdem ich im nginx aber die Adresse von gotify server nicht zulasse, macht hier der nginx proxy manager dank ip accessliste zu.
In deiner ersten version bist du über den Docker Stack gegangen und hast die URL mit dem parameter GOTIFY_SERVER_URL | http://gotify gesetzt. Das hat gut funktioniert und er funkt nicht ins Internet und wieder zurück, sondern bleibt auf dem docker host. Jetzt holst du dir die Einstellung des gotify Servers scheinbar über die Client App?
Hast du eine Idee wie ich den gotify server wieder intern im Docker Stack http://gotify ansprechen kann, ich kann aufgrund meiner nginx proxy konfiguration (ip accessliste) nicht von diesem host (gotify server) durch den nginx proxy.