# Starface Chat löschen Kleines Bash-Script, das den kompletten UCC-Chatverlauf eines einzelnen Starface-Users aus der internen Openfire-Chat-DB löscht. Nötig, weil Starface in der App/Admin-UI selbst keine Möglichkeit bietet, den Chatverlauf eines Users zu löschen — z.B. wenn ein Mitarbeiter das Unternehmen verlässt. ## Hintergrund Starface nutzt für den UCC-Chat einen eingebetteten **Openfire-XMPP-Server**, der dieselbe Postgres-Datenbank (`asterisk`) wie die restliche PBX verwendet. Relevant sind zwei Tabellen (Openfire Monitoring-Plugin): - `ofmessagearchive` — die eigentlichen Chat-Nachrichten (`fromjid`, `tojid`, `body`, `sentdate`, ...) - `ofconversation` — Konversations-Header (Zeitraum, Nachrichtenanzahl je `conversationid`) Es gibt **keine offizielle API** dafür — die Löschung passiert direkt per SQL auf dem Starface-Server. ## Voraussetzungen - SSH-Zugriff auf den Starface-Server (root oder ein User mit `sudo -u postgres`-Rechten) - `psql` muss installiert sein (bei Starface Standard) - Script liegt/läuft direkt **auf** dem Starface-Server (nicht remote per SQL-Tunnel) ## Nutzung ```bash ./delete_starface_chat.sh ``` Beispiel — Mitarbeiter mit der Starface-Benutzer-ID `0022` verlässt das Unternehmen: ```bash ./delete_starface_chat.sh 0022 ``` `` ist die Starface-Benutzernummer/-ID wie sie intern als JID genutzt wird (JID-Format `@`) — einfach die Nummer/den Login-Namen des Users angeben. ## Was das Script macht 1. Sucht alle Nachrichten in `ofmessagearchive`, bei denen der angegebene User Absender **oder** Empfänger ist (`fromjid`/`tojid LIKE '@%'`). 2. **Erstellt zuerst ein Backup** — CSV-Dump aller betroffenen Nachrichten und Konversationen nach `/var/backups/starface_chat_backups/`, bevor irgendwas gelöscht wird. 3. Löscht die betroffenen Zeilen aus `ofmessagearchive`. 4. Löscht die zugehörigen `ofconversation`-Einträge — aber **nur**, wenn nach dem Löschen wirklich keine Nachricht mehr auf diese `conversationid` verweist (Konversations-Header bleibt sonst stehen). 5. Gibt am Ende die verbleibende Nachrichtenanzahl für den User aus (sollte `0` sein). Alles läuft in **einer Transaktion** (`BEGIN` / `COMMIT`) — entweder alles oder nichts. ## Wichtige Einschränkung: gemeinsame Konversation Openfire speichert eine Konversation zwischen zwei Usern als **eine gemeinsame** Nachrichten-Historie — es gibt **keine getrennten Kopien** pro Teilnehmer (kein "Postfach pro User"). Das heißt konkret: Löscht man z.B. User `0022`, der einen Chat mit User `0005` hatte, verschwindet dieser Chat **für beide Seiten** — nicht nur bei `0022`. Andere Chats von `0005` mit anderen Kollegen (ohne `0022`) bleiben davon unberührt. Es gibt technisch keinen Weg, "nur die Hälfte" eines Chats zu löschen, ohne die Nachrichten zu duplizieren oder zu anonymisieren (Body/Name ersetzen statt Zeile zu löschen) — das macht dieses Script bewusst nicht, da vollständige Löschung (z.B. aus DSGVO-Gründen beim Austritt eines Mitarbeiters) hier das Ziel war. ## Sicherheit - Backup **vor** jeder Löschung, automatisch, ungefragt. - Input-Validierung: `user_id` darf nur `A-Za-z0-9._-` enthalten (keine SQL-Injection über das Argument). - `set -euo pipefail` — Script bricht bei jedem Fehler sofort ab. - Bei `0` gefundenen Nachrichten: Script beendet sich ohne jede Aktion. ## Wiederherstellung aus dem Backup Die CSV-Backups liegen unter `/var/backups/starface_chat_backups/` und lassen sich bei Bedarf mit `\copy ... FROM ... WITH CSV HEADER` wieder in die jeweilige Tabelle zurückspielen.