Files

79 lines
2.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# LaunchPad-Plugins
Jeder Unterordner hier ist ein Plugin. Erkannt wird alles, was eine
`index.js` mit einem passenden Default-Export enthält kein Rebuild des
Docker-Images nötig, dieser Ordner wird zur Laufzeit als Volume eingebunden
(siehe `docker-compose.yml`). Nach dem Hinzufügen/Ändern eines Plugins
reicht ein Neustart des Backend-Containers:
```bash
docker compose restart backend
```
## Minimalstruktur
```
apps/backend/plugins/mein-plugin/
└── index.js
```
```js
export default {
name: "mein-plugin",
version: "1.0.0",
description: "Kurze Beschreibung, erscheint unter Admin -> Plugins",
// optional: Scanner erweitern
setup(ctx) {
ctx.registerSoftwareSignature({
name: "Meine Software",
category: "Sonstiges",
icon: "🔧", // Emoji oder Icon-URL
matches: (input) => !!input.body && /meine-software/i.test(input.body),
});
},
// optional: eigene Geräte-Importquelle
async importDevices() {
return [
{ hostname: "beispiel", ip: "192.168.1.99", source: "plugin" },
];
},
};
```
Beide Funktionen (`setup`, `importDevices`) sind optional ein Plugin kann
nur die eine, nur die andere, oder beide implementieren. Reines JavaScript
(ESM), kein Build-Schritt nötig.
## Was Plugins aktuell können
- **Scanner registrieren**: `ctx.registerSoftwareSignature(...)` in `setup()`
fügt der automatischen Softwareerkennung (siehe `apps/backend/src/scanner/softwareDetection.ts`)
eine zusätzliche Signatur hinzu, inklusive eigenem Icon. Wird bei jedem
Geräte-Scan berücksichtigt.
- **Geräte importieren**: `importDevices()` liefert eine Liste von Geräten,
die per Knopfdruck unter Admin -> Plugins importiert werden
(`POST /api/plugins/:name/import`). Abgeglichen wird wie bei Scans über
MAC/IP ein erneuter Import überschreibt keine Gerätefelder, die der
Nutzer zwischenzeitlich geändert hat, außer den scan-eigenen (siehe
`upsertDeviceFromScan`).
- **Icons bereitstellen**: über `icon` an einer registrierten Signatur. Wird
als Startwert für neu angelegte Dienste übernommen (wie `category`
niemals nachträglich überschrieben, siehe README Hauptprojekt).
## Was (noch) nicht geht
- Eigene Admin-Menüpunkte/Unterseiten (aktuell erscheinen alle Plugins
gesammelt auf einer Seite unter Admin -> Plugins, keine eigene Route pro
Plugin).
- Kein Sandboxing: Plugin-Code läuft mit vollem Zugriff im Backend-Prozess.
Nur Plugins aus vertrauenswürdiger Quelle einbinden.
## Beispiel-Plugins
- `example-signatures/` registriert zwei zusätzliche Software-Signaturen
(Homebridge, Uptime Kuma).
- `static-import/` importiert Geräte aus einer lokalen `devices.json`
(standardmäßig leer, siehe `devices.example.json` für das Format).