Bezpieczeństwo pluginów#

System pluginów vCLU zapewnia bezpieczeństwo na wielu poziomach. Instalacja pluginu nie może zepsuć Twoich istniejących automatyzacji, a każdy plugin działa w odizolowanym środowisku.

Dlaczego to ważne#

Pluginy to kod pisany przez społeczność lub zewnętrznych dostawców. vCLU musi gwarantować, że:

  • wadliwy plugin nie zawiesi całego systemu
  • złośliwy plugin nie uzyska dostępu do Twoich danych
  • odinstalowanie pluginu nie pozostawi śmieci

Izolacja – każdy plugin w swojej piaskownicy#

Każdy plugin działa w odizolowanym środowisku (sandbox), oddzielonym od Twojego kodu i od innych pluginów:

graph TD
    subgraph "Środowisko vCLU"
        modules["Twój kod (modules/)<br/>Pełny dostęp do systemu"]

        subgraph "Plugin: pogoda"
            pt[Timery]
            pe[Zdarzenia]
            pm[MQTT]
            pk["Dane (KV)"]
        end

        subgraph "Plugin: salda"
            st[Timery]
            se[Zdarzenia]
            sm[MQTT]
            sk["Dane (KV)"]
        end

        shared["Współdzielone (tylko do odczytu):<br/>rejestr urządzeń, Logger, JSON"]
    end

Co plugin może, a czego nie#

Dozwolone#

MożliwośćOpis
Tworzyć timeryOkresowe zadania (np. odpytywanie API co minutę)
Subskrybować MQTTNasłuchiwanie na wiadomości z brokera
Publikować MQTTWysyłanie wiadomości do brokera
Wysyłać zapytania HTTPKomunikacja z zewnętrznymi serwisami
Tworzyć własne obiektySensory, przełączniki w swoim namespace
Reagować na zdarzeniaEventBus – reaguj na zmiany w systemie
Zapisywać daneWłasny KV store, przetrwa restart
Czytać rejestr urządzeńWidzi stan wszystkich urządzeń (tylko do odczytu)

Zablokowane#

BlokadaPowód
Dostęp do systemu plikówOchrona przed odczytem/zapisem plików
Wykonywanie komend systemowychOchrona przed przejęciem systemu
Modyfikacja cudzych urządzeńOchrona integralności rejestru
Ładowanie zewnętrznego koduOchrona przed wstrzyknięciem kodu
Introspekcja środowiskaOchrona przed ucieczką z sandboxa

Własny namespace#

Każdy plugin może tworzyć obiekty tylko w swoim namespace. Plugin @vclu/weather może tworzyć obiekty jak plugins.vclu.weather.temperature, ale nie może modyfikować obiektów z CLU220000592.DOUT1 ani plugins.vclu.salda.outsideAir.

Obiekty spoza namespace pluginu są dostępne w trybie tylko do odczytu – plugin może sprawdzić stan dowolnego urządzenia, ale nie może go zmienić bezpośrednio.

Dane pluginu (KV Store)#

Każdy plugin ma własną, izolowaną przestrzeń do przechowywania danych:

  • Dane przetrwają restart systemu i aktualizację pluginu
  • Plugin widzi tylko swoje dane – nie ma dostępu do danych innych pluginów
  • Dane wrażliwe (np. tokeny API) mogą być oznaczone jako “secure” – nie będą widoczne w ogólnym podglądzie

Komunikacja między pluginami#

Pluginy nie mogą się bezpośrednio wywoływać, ale mogą komunikować się przez wspólne mechanizmy:

graph LR
    A["Plugin A"]
    B["Plugin B"]

    A -->|"EventBus<br/>weather.updated"| B
    A -->|"MQTT<br/>sensors/temp"| B
    B -.->|"Registry (readonly)<br/>getObject('...temp')"| A
  • Zdarzenia (EventBus) – plugin wysyła zdarzenie, inny nasłuchuje
  • MQTT – komunikacja przez broker wiadomości
  • Rejestr urządzeń – odczyt obiektów utworzonych przez inne pluginy

Bezpieczna instalacja i odinstalowanie#

Instalacja#

Plugin jest pobierany z repozytorium i uruchamiany w piaskownicy. Twój istniejący kod nie jest w żaden sposób modyfikowany.

Odinstalowanie#

System automatycznie czyści wszystkie zasoby pluginu:

  1. Zatrzymanie timerów
  2. Anulowanie subskrypcji zdarzeń
  3. Odsubskrybowanie MQTT
  4. Usunięcie obiektów z rejestru
  5. Usunięcie danych pluginu (KV store)
  6. Zwolnienie środowiska sandbox

Nie ma ryzyka “wycieku” zasobów – po odinstalowaniu system jest czysty, jakby plugin nigdy nie był zainstalowany.

Przeładowanie (hot reload)#

Aktualizacja pluginu polega na odinstalowaniu starej wersji (z pełnym czyszczeniem) i zainstalowaniu nowej. Jedyne, co przetrwa, to dane w KV store – timery, subskrypcje i obiekty są tworzone od nowa.

Ochrona przed błędami#

Błąd w kodzie pluginu (wyjątek, timeout) jest przechwytywany i logowany, ale nie zatrzymuje działania reszty systemu. Inne pluginy, Twoje automatyzacje i integracje (HomeKit, MQTT) działają dalej bez przeszkód.

Pluginy z oficjalnego repozytorium#

Pluginy z oficjalnego repozytorium vCLU są sprawdzone i bezpieczne. Przechodzą review kodu i testy przed publikacją. Jeśli instalujesz pluginy z zewnętrznych źródeł, robisz to na własne ryzyko – mechanizmy izolacji nadal działają, ale jakość kodu nie jest gwarantowana.