Wer einen XMPP-Dienst hostet, bei dem die öffentliche Registrierung aktiviert ist, wird auf kurz oder lang vor dem Problem stehen, dass viele registrierte Benutzer existieren, die gar nicht mehr aktiv sind, oder nie aktiv waren. Möchte man nun Benutzer nach einem gewissen Zeitfenster der Inaktivität löschen, ist dies gar nicht so leicht umzusetzen, wenn man nicht vorgesorgt hat.

Speicherung von Aktivitätsdaten

Um eine solche Löschung zu ermöglichen ist es nötig, die Aktivitätsdaten der Benutzer erst einmal zu speichern und dann nach inaktiven Nutzern zu suchen. Dazu bietet Prosody zum Glück zwei passende Plugins an:

Löschung inaktiver Benutzer

Über mod_lastlog wird der timestamp des letzten Log-Ins der Benutzer gespeichert und über mod_list_inactive kann über diese gespeicherten Daten gesucht werden. Dazu habe ich mir folgendes Script geschrieben, das täglich via cron ausgeführt wird:

#!/bin/bash
WHITELIST=( foo@fusselkater.org )
for i in $(prosodyctl mod_list_inactive fusselkater.org 1month)
do
    if [[ ! " ${WHITELIST[@]} " =~ " ${i} " ]]
    then
        prosodyctl deluser $i
    fi
done

Dieses Script sucht also alle Benutzer von der Domain fusselkater.org, die länger als 1 Monat nicht online waren. Zusätzlich prüft es, ob der Benutzer sich nicht in der Whitelist befindet, damit z.B. der ein oder andere Service-Account nicht gelöscht wird.