Files
starface-chat-l-schen/README.md
T

3.6 KiB

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

./delete_starface_chat.sh <user_id>

Beispiel — Mitarbeiter mit der Starface-Benutzer-ID 0022 verlässt das Unternehmen:

./delete_starface_chat.sh 0022

<user_id> ist die Starface-Benutzernummer/-ID wie sie intern als JID genutzt wird (JID-Format <user_id>@<starface-host>) — 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 '<user_id>@%').
  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.