matrix-prune-messages/matrix_prune-messages.v1.sh
2025-03-26 14:33:33 +01:00

78 lines
2.6 KiB
Bash

#!/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