Ankündigung

Einklappen
Keine Ankündigung bisher.

websocket mit wss:// -- Admin Webseite funktioniert nicht

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    websocket mit wss:// -- Admin Webseite funktioniert nicht

    Hallo zusammen,

    nach dem Update auf shNG 1.8.2 und sV 3.0.1 habe ich mich mal wieder an das Thema "Zugang via https" gemacht. Nach diversen fehlgeschlagenen Versuchen in der Vergangenheit hat diesmal soweit alles funktioniert und ich hab meine Visu über https laufen.

    Einen Bug hatte ich dann allerdings noch auf der shNG Admin Webseite. Ich kann nicht genau erklären, wie oder warum die Situation zustande kam. Allerdings war es irgendwann so, dass ich nicht mehr zwischen den einzelnen Menüpunkten der Admin-Webseite hin- und herschalten konnte. Stattdessen wurde einfach nur der Teil unterhalb der Menüleiste leer angezeigt. Mit rechter Maustaste und anzeigen in neuem Tab wurde der Inhalt geladen und angezeigt.

    Im Chrome wurde mir ein Fehler angezeigt. Die Admin Webseite versuchte einen Websocket über ws:// (also unverschlüsselt) aufzumachen. Chrome blockiert das, weil die Seite ja über https geladen wurde. (Stichwort: "mixed content")

    Der Fehler im Chrome deutet auf die Datei "modules/admin/webif/static/main.9c9acf7f875b584f8f78.js" als Verursacher hin. In diesem sehr großen JavaScript kommt nur ein einziges mal "ws://" vor:

    Code:
     e.prototype.connect = function() {
    var e = this
    , t = sessionStorage.getItem("hostip")
    , n = "[B]ws://[/B]" + sessionStorage.getItem("wsHost") + ":" + sessionStorage.getItem("wsPort");
    Ich habe an dieser Stelle einfach mal "ws://" durch "wss://" ersetzt:

    Code:
    sed -i 's/ws:\/\//wss:\/\//g' main.9c9acf7f875b584f8f78.js
    Danach ein Neustart und alles läuft fehlerfrei. Das Admin-Interface kann wieder sauber kommunizieren und der oben beschriebene Fehler ist verschwunden.

    Das ganze ist natürlich vorerst nur mal ein Workaround. Im JavaScript sollte möglichst eine Unterscheidung gemacht werden und entweder ws:// bei Verwendung von http oder wss:// bei Aufruf über https:// verwendet werden. Dafür langen meine JavaScript Kenntnisse aber nicht.

    Einen weiteren kleinen Bug hab ich dann auch noch gefunden. Nachdem das ganze lief tauchte im Log folgender Fehler auf:

    Code:
    2021-03-16 12:44:08 ERROR websockets.server Error in connection handler
    > Traceback (most recent call last):
    > File "/home/smarthome/.local/lib/python3.8/site-packages/websockets/server.py", line 191, in handler
    > await self.ws_handler(self, path)
    > File "/opt/smarthome/modules/websocket/__init__.py", line 301, in handle_new_connection
    > await self.unregister(websocket)
    > File "/opt/smarthome/modules/websocket/__init__.py", line 319, in unregister
    > await self.log_connection_event('removed', websocket)
    > File "/opt/smarthome/modules/websocket/__init__.py", line 328, in log_connection_event
    > self.logger.infp("USER {}: {} - local port: {}".format(action, 'with SSL connection', websocket.port))
    > AttributeError: 'Logger' object has no attribute 'infp'
    Hier war einfach ein Typo in Zeile 328.
    Code:
    self.logger.[B]infp[/B]("USER {}: {} - local port: {}".format(action, 'with SSL connection', websocket.port))
    Es muss natürlich
    Code:
    self.logger.[B]info[/B] ...
    heißen.

    Dafür werde ich vielleicht noch einen PR einreichen, falls gewünscht.

    Hoffe, das hilft vielleicht dem ein oder anderen.

    Beste Grüße
    Christian

    #2
    Den infp(... wurde im develop schon gefixt. Im master ist er noch vorhanden.

    Zuletzt geändert von TCr82; 16.03.2021, 18:01.

    Kommentar


      #3
      (sorry Beitrag löschen geht nicht, hab mich verklickt)

      Kommentar


        #4
        Ich vermute, dass Du noch das visu_websocket Plugin und nicht das websocket Modul nutzt?

        Mit dem Websocket Modul sollte die parallele Kommunikation von ws und wss problemlos funktionieren, während das alte Plugin nur entweder ws oder wss beherrscht.

        wss Support für die Admin GUI wird erst mir v1.9 kommen. Die Version wird ein eigenes Nutzdaten Protokoll implementieren und nicht das Visu Nutzdaten Protokoll nutzen. Dadurch wird die Admin GUI in der v1.9 auch nicht mehr mit dem visu_websocket Protokoll kompatibel sein.
        Zuletzt geändert von bmx; 16.03.2021, 19:22.
        Viele Grüße
        Martin

        There is no cloud. It's only someone else's computer.

        Kommentar

        Lädt...
        X