#!/bin/bash # Autor: Patrick Asmus # Web: https://www.techniverse.net # Git-Reposit.: https://git.techniverse.net/Backups/backup_matrixsynapse # Cron: 0 23 * * * bash /home/scripts/default/matrix_prune-messages.v1.sh >/dev/null 2>&1 # Version: 1.0 # Datum: 26.03.2025 # Modifikation: Initial ##################################################### # 🔐 Token TOKEN="" # 📄 Log-Datei LOGFILE="/var/log/matrix_prune.log" # 🗂️ Räume nach Aufbewahrungsdauer ROOMS_7DAYS=( "!gHtY78vXsQwErTyUiO:matrixdomain.com" # System Alerts & Monitoring "!zXc12vBnMaSdFgHjKl:matrixdomain.com" # DevOps Deployment Notifications "!lPo98AsDfGhJkLmNqW:matrixdomain.com" # GitLab CI/CD Build Updates "!xYu78vCzBnMqwErTyU:matrixdomain.com" # Webhook Events (external services) ) ROOMS_30DAYS=( "!nMki87HgFdSaQwErTy:matrixdomain.com" # Company Announcements "!vCxZrTuBnMwEyUiOpL:matrixdomain.com" # Community Chat (public) "!aSdFgHjKlQwErTyUiO:matrixdomain.com" # Uptime & Status Reports ) # ⏱️ Timestamps TS_7DAYS=$(date --date='7 days ago' +%s000) TS_30DAYS=$(date --date='30 days ago' +%s000) DATE_NOW=$(date '+%Y-%m-%d %H:%M:%S') # 🧩 Funktion: Prüfen & loggen log_response() { local room_id=$1 local days=$2 local response=$3 local status="unbekannt" if command -v jq >/dev/null 2>&1; then purge_id=$(echo "$response" | jq -r '.purge_id // empty') error=$(echo "$response" | jq -r '.error // empty') else purge_id=$(echo "$response" | grep -o '"purge_id":"[^"]*"' | cut -d'"' -f4) error=$(echo "$response" | grep -o '"error":"[^"]*"' | cut -d'"' -f4) fi if [[ -n "$purge_id" ]]; then status="✅ purge gestartet (purge_id: $purge_id)" elif [[ -n "$error" ]]; then status="⚠️ $error" else status="⚠️ Unbekannte Antwort: $response" fi echo "[$DATE_NOW] [$days Tage] $room_id → $status" >> "$LOGFILE" } # 🔁 Räume mit 7 Tagen for ROOM_ID in "${ROOMS_7DAYS[@]}"; do RESPONSE=$(curl -s -X POST "http://localhost:8008/_synapse/admin/v1/purge_history/$ROOM_ID" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d "{\"purge_up_to_ts\": $TS_7DAYS}") log_response "$ROOM_ID" "7" "$RESPONSE" done # 🔁 Räume mit 30 Tagen for ROOM_ID in "${ROOMS_30DAYS[@]}"; do RESPONSE=$(curl -s -X POST "http://localhost:8008/_synapse/admin/v1/purge_history/$ROOM_ID" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d "{\"purge_up_to_ts\": $TS_30DAYS}") log_response "$ROOM_ID" "30" "$RESPONSE" done