Plugins

Mit Plugins rüstet ihr Funktionen nach, ohne DeskHub selbst zu verändern. Alles läuft unter Adminportal → Plugins (nur echte Administratoren).

Die Plugin-Verwaltung

Die Seite hat drei Reiter:

Installierte Plugins. Plugin hinzufügen (ZIP-Upload mit Prüfsumme und Quellenbestätigung). Katalog und Herausgeber-Schlüssel.

Installieren, Berechtigungen, Updates

  1. Plugin als ZIP bereithalten; wenn der Anbieter eine Prüfsumme (SHA-256) oder Signatur nennt, tragt sie ein.
  2. ZIP hochladen und bestätigen, dass ihr der Quelle vertraut. Das Plugin ist danach noch inaktiv.
  3. Mit „Aktivieren“ einschalten und vorher die angeforderten Berechtigungen bestätigen. Dabei entsteht automatisch ein Backup; das Plugin legt bei Bedarf eigene Tabellen an.

Berechtigungen nennen, welche Erweiterungspunkte ein Plugin nutzt: Ticket-Ereignisse (hooks.tickets), Hintergrundläufe (hooks.cron), Menüpunkte (ui.menu), Seitenleistenbausteine (ui.sidebar), eigene Datenbank-Tabellen (db.migrations), öffentliche Adressen (api.public), Anmeldung für Mitarbeiter (auth.login) und Kunden (auth.customer). Fordert eine neue Version zusätzliche Berechtigungen an, wird das Plugin automatisch angehalten, bis ihr sie bestätigt habt – auch wenn jemand Dateien per FTP austauscht.

Ein Plugin ist Programmcode und läuft mit allen Rechten des Systems, auch mit Zugriff auf die gesamte Datenbank. Die Berechtigungen begrenzen nur die Erweiterungspunkte. Installiert nur Plugins aus vertrauenswürdigen Quellen und aktiviert „Nur signierte Plugins installieren“.

Mitgelieferte Plugins

Alle außer dem Discord/Telegram-Bot laufen auf jedem DeskHub ohne Änderung am Server. Jedes Plugin bringt eine eigene Seite im Menü mit.

PluginWas es tut
Tagesbericht per E-MailMorgens eine Übersicht: offene, unzugewiesene, überfällige und eigene Tickets, Zu- und Abgänge der letzten 24 Stunden, die fünf ältesten offenen Tickets
Anhänge-VirenscanPrüft Anhänge und sperrt Gefährliches (Quarantäne, Notiz, Tag „Virus-Verdacht“, Mail)
VirusTotal-AnhangsprüfungHält Anhänge zurück, bis VirusTotal sie anhand des Fingerabdrucks geprüft hat
Spam- und MissbrauchsfilterBewertet neue Tickets mit Punkten; legt Spam automatisch ab
Discord- und Telegram-BotMitglieder legen per /ticket Tickets an und werden benachrichtigt
Urlaub und VertretungAbwesenheit mit Vertretung; Tickets wandern zur Vertretung und zurück
SchichtübergabeNotizen für die nächste Schicht, sichtbar nach der Anmeldung
Störungsmitteilung und RundmailEine Nachricht an viele Kunden gleichzeitig
Website- und Server-ÜberwachungPrüft Webseiten, Ports und Zertifikate; legt bei Ausfall Tickets an
DatenschutzAnonymisiert Kundendaten nach einer wählbaren Frist; löscht auf Antrag
authentik-AnmeldungAnmeldung von Mitarbeitern und Kunden über authentik (OpenID Connect)
Synology NAS BackupKopiert Backups automatisch auf eine Synology NAS (WebDAV)
Cloudflare-SchutzPrüft Cloudflare-Anfragen und gleicht die Cloudflare-Proxy-Netze ab, damit Besucher-IP und HTTPS sicher erkannt werden
Cache & PerformanceBeschleunigt die öffentliche Wissensdatenbank mit einem einstellbaren Datenbankcache und zeigt den PHP-OPcache-Status
Code-Issue-SynchronisierungGibt einzelne Git-Repositories frei, importiert Issues als Tickets (mit gewählter Abteilung und Priorität) und gleicht den Ticketstatus ab
Sprachpakete (lang-en, lang-de)Weitere Sprachen für Portal und Mitarbeiterbereich

Die folgenden Abschnitte zeigen die Seiten der Plugins mit Beispieldaten.

Tagesbericht

Im Menü „Tagesbericht“ schaltet ihr den Versand ein, legt Uhrzeit, Rhythmus (täglich, nur Werktage oder einmal pro Woche mit Wochentag) und Empfänger fest und schickt einen Testbericht. Standardmäßig kommt der Bericht nur, wenn es etwas zu tun gibt (unzugewiesene oder überfällige Tickets). Jeder Mitarbeiter wählt unter „Mein Tagesbericht“: wie eingestellt, nur wenn Tickets überfällig sind, nur einmal pro Woche (montags) oder gar nicht mehr; jede Mail enthält dazu einen Link. Jeder sieht nur Tickets seiner Abteilungen.

Tagesbericht: Einstellungen (Administrator). Tagesbericht: „Mein Tagesbericht“.

Virenscan und VirusTotal

Der Virenscan braucht nichts auf dem Server: Die eingebaute Analyse erkennt Programme, Skripte, getarnte Dateien (eine .exe als PDF), doppelte Endungen, Office-Makros, PDF-Tricks, Skripte in HTML/SVG und Archive mit solchen Dateien. Optional gleicht er per Hash-Abfrage bei VirusTotal ab, und ClamAV wird mitgenutzt, falls vorhanden. Er erkennt keine ganz neuen Viren in normal aussehenden Dokumenten.

Die VirusTotal-Anhangsprüfung sperrt dagegen zuerst: Jeder neue Anhang bleibt [IN PRÜFUNG], bis der SHA-256-Fingerabdruck abgefragt wurde – sauber: frei; ab der Schwelle (Standard 3 Scanner) Schadsoftware: gesperrt mit Tag, Notiz und Mail; unbekannt: zurückgehalten, bis ein Administrator freigibt oder löscht. Standardmäßig verlässt keine Datei den Server. Der kostenlose API-Schlüssel erlaubt 4 Abfragen pro Minute und 500 pro Tag; das Plugin hält sich daran.

Virenscan. VirusTotal-Anhangsprüfung.

Spam- und Missbrauchsfilter

Bewertet jedes neue Ticket (Phishing-Wendungen, Marken-Nachahmung im Absendernamen, Link-Verkürzer, Wegwerf-Adressen, Wiederholungen; bekannte Absender bekommen Abzug). Ab 70 Punkten wird das Ticket als Spam abgelegt, ab 35 erhält es den Tag „Spam-Verdacht“. Freigabe- und Sperrliste, eigene Wörter, Protokoll mit „Kein Spam“ / „Doch Spam“ und eine Bewertung in der Seitenleiste des Tickets.

Spam- und Missbrauchsfilter.

Discord- und Telegram-Bot

Mitglieder legen mit /ticket im Discord oder in Telegram ein Ticket an, bekommen die Nummer zurück und werden bei Antworten und Lösung benachrichtigt; weitere Befehle /status und /antwort. Der Server nimmt die Anfragen direkt entgegen (kein eigener Bot-Server); sie werden per Signatur (Discord) bzw. Geheimtoken (Telegram) geprüft, je Person gilt eine Stundenobergrenze. Braucht Server 1.0.30 oder neuer, für Discord die PHP-Erweiterung sodium und die Berechtigung api.public.

Community-Bot.

Urlaub und Vertretung, Schichtübergabe, Rundmail

Vertretung: Abwesenheit mit Vertretung eintragen; zum Beginn gehen offene und neue Tickets an die Vertretung, am Ende kommen die noch offenen zurück; die Vertretung sieht währenddessen auch die Abteilungen des Abwesenden (Ketten bis drei Stufen). Schichtübergabe: Am Schichtende eine kurze Notiz (für alle oder eine Abteilung); die nächste Schicht sieht sie als Hinweis oben auf jeder Seite (rot bei wichtigen), mit „neu“-Zähler im Menü; der Verfasser sieht, wer sie gelesen hat. Rundmail: eine Nachricht an Kunden mit offenen Tickets, einer Abteilung oder Organisation, mit Vorlagen, Empfängerprüfung, Probemail und Protokoll; jede Mail geht einzeln raus (höchstens 200 Empfänger, 5 Rundmails pro Stunde).

Urlaub und Vertretung. Schichtübergabe. Störungsmitteilung und Rundmail.

Überwachung und Datenschutz

Die Website- und Server-Überwachung prüft Webseiten, Ports und Zertifikate; bei Ausfall (nach 2 Fehlschlägen in Folge) oder einem Zertifikat, das in 14 Tagen abläuft, legt das Plugin ein Ticket an und schickt eine Mail; nach der Behebung kommt die Entwarnung und das Ticket wird gelöst. Das Datenschutz-Plugin anonymisiert Kundendaten aus Tickets ohne Registrierung nach einer wählbaren Frist (Name, E-Mail oder beides, auch IP, Mitleser, Zusatzfelder, Nachrichten, Anhänge); die automatische Anonymisierung ist nach der Installation aus. Daten registrierter Kunden löscht der Administrator auf Antrag mit einem Klick.

Website- und Server-Überwachung. Datenschutz-Plugin.

authentik-Anmeldung

Mitarbeiter und Kunden melden sich mit authentik an (OpenID Connect mit PKCE). In authentik legt ihr einen OAuth2/OpenID-Provider an und tragt die Rückkehr-Adresse https://<DeskHub>/staff/plugin_login.php?p=authentik&e=callback ein; in DeskHub tragt ihr Issuer-Adresse, Client-ID und Geheimnis ein und prüft mit „Verbindung testen“. Mitarbeiter verknüpfen ihr Konto selbst („Mein authentik-Konto“); Mitarbeiterkonten werden nie automatisch angelegt, Kundenkonten bei Bedarf schon. E-Mail und Passwort funktionieren weiter, auch wenn authentik ausfällt. Braucht Server 1.0.52.

authentik: Einstellungen. authentik: „Mein Konto“.

Synology NAS Backup

Kopiert die Backups des Servers automatisch per WebDAV auf eine Synology NAS (oder einen anderen WebDAV-Server) und erscheint als Reiter „Synology NAS Backup“ auf der Seite „Backup“. Einstellbar: Verbindung (Adresse, Port 5005/5006, Benutzer, Passwort, HTTPS, Zielverzeichnis) mit „Verbindung testen“, Aufbewahrung (maximales Alter und maximale Anzahl), einzelnes Verschieben von Backups, eigene Backups mit Zeitplan und – für große Backups hinter Proxys mit Größengrenze – Hochladen in Stücken. Jedes Backup wird nach dem Hochladen auf vollständige Größe geprüft; das Passwort wird verschlüsselt gespeichert.

Synology NAS Backup.

Cloudflare-Schutz, Cache & Performance, Code-Issue-Synchronisierung

Cloudflare-Schutz: Status. Cache-Manager: Status. Code-Issue-Sync: Verwaltung.

Cloudflare-Schutz und Cache & Performance sind reine Betriebs-Zusätze mit je einer Statusseite. Die Code-Issue-Synchronisierung braucht mehrere Berechtigungen (u. a. api.public, hooks.cron), weil sie Issues aus Git-Repositories abholt und Statusänderungen zurückmeldet.

Eigene Plugins entwickeln (Kurzüberblick)

Ein Plugin ist ein ZIP mit plugin.json (Name, Version, Berechtigungen, optional Sprachpaket-Angaben), plugin.php (Code), optionalen Seiten, Migrationen und lang/<Code>.json für Übersetzungen. Es registriert Menüpunkte, Seiten, Ereignisse (Hooks), Hintergrundjobs, API-Endpunkte oder Anmeldeverfahren – jeweils nur mit der entsprechenden Berechtigung. Pakete lassen sich mit dem Herausgeber-Schlüssel signieren. Die technische Dokumentation steht im Abschnitt „Plugins entwickeln“ der README.

Die Plugin- und Theme-Webseite

Die Plugin-Webseite ist der Katalog für Plugins, Themes und App-Dateien. Betreiber veröffentlichen dort signierte Pakete; DeskHub-Installationen lesen den Katalog, prüfen Prüfsumme und Signatur und installieren per Klick. Dort liegen auch die Apps (Windows, Android, Chrome-Erweiterung, WordPress- und Minecraft-Plugin), die der Update-Hinweis der Apps abfragt, und der Push-Dienst für die Android-Benachrichtigungen.