Files
mattermost/disable-mattermost.notices.sh
T

180 lines
6.8 KiB
Bash
Executable File

#!/bin/bash
#
# set-mattermost-notices.sh
#
# Setzt in der Mattermost config.json die beiden Parameter
# AnnouncementSettings.AdminNoticesEnabled = false
# AnnouncementSettings.UserNoticesEnabled = false
#
# Eigenschaften:
# - installiert 'jq' automatisch nach, falls es fehlt
# - funktioniert unabhaengig davon, ob "AnnouncementSettings" und/oder
# die einzelnen Parameter bereits existieren oder nicht
# - legt vor jeder Aenderung ein Backup an
# - stellt im Fehlerfall automatisch das Backup wieder her
# - gibt fuer jeden Schritt eine farbige Statuszeile aus
# ( [ OK ] in gruen, [ ERROR ] in rot )
set -uo pipefail
# ---------------------------------------------------------------------------
# Variablen / Konfiguration
# ---------------------------------------------------------------------------
CONFIG_FILE="/opt/mattermost/config/config.json"
BACKUP_FILE="${CONFIG_FILE}.bak.$(date +%Y%m%d-%H%M%S)"
TMP_FILE="$(mktemp)"
# Merker, ob bereits ein Backup angelegt wurde (fuer den Fehlerfall)
BACKUP_CREATED=0
# Farben fuer die Statusausgabe
COLOR_GREEN="\033[0;32m"
COLOR_RED="\033[0;31m"
COLOR_RESET="\033[0m"
# ---------------------------------------------------------------------------
# Hilfsfunktionen fuer die Statusausgabe
# ---------------------------------------------------------------------------
# Gibt eine Erfolgszeile aus, z.B.: [ OK ] jq ist installiert
print_ok() {
local message="$1"
echo -e "[ ${COLOR_GREEN}OK${COLOR_RESET} ] ${message}"
}
# Gibt eine Fehlerzeile aus, stellt bei Bedarf das Backup wieder her
# und beendet das Skript mit Exit-Code 1.
print_error_and_exit() {
local message="$1"
echo -e "[ ${COLOR_RED}ERROR${COLOR_RESET} ] ${message}"
# Falls bereits ein Backup existiert, Originaldatei wiederherstellen
if [[ "${BACKUP_CREATED}" -eq 1 && -f "${BACKUP_FILE}" ]]; then
if cp -p "${BACKUP_FILE}" "${CONFIG_FILE}" 2> /dev/null; then
echo -e "[ ${COLOR_GREEN}OK${COLOR_RESET} ] Vorherige Konfiguration aus Backup wiederhergestellt"
else
echo -e "[ ${COLOR_RED}ERROR${COLOR_RESET} ] Wiederherstellung aus Backup fehlgeschlagen: ${BACKUP_FILE}"
fi
fi
# Aufraeumen der temporaeren Datei
rm -f "${TMP_FILE}"
echo ""
exit 1
}
# ---------------------------------------------------------------------------
# Ausgabe: fuehrende Leerzeile
# ---------------------------------------------------------------------------
echo ""
# ---------------------------------------------------------------------------
# Schritt 1: Pruefen / Installieren von jq
# ---------------------------------------------------------------------------
if command -v jq &> /dev/null; then
print_ok "jq ist bereits installiert"
else
echo "jq ist nicht installiert, versuche Installation..."
if ! apt-get update -qq; then
print_error_and_exit "apt-get update ist fehlgeschlagen"
fi
if ! apt-get install -y -qq jq; then
print_error_and_exit "Installation von jq ist fehlgeschlagen"
fi
if command -v jq &> /dev/null; then
print_ok "jq wurde erfolgreich installiert"
else
print_error_and_exit "jq konnte nicht installiert werden"
fi
fi
# ---------------------------------------------------------------------------
# Schritt 2: Pruefen, ob die Konfigurationsdatei existiert
# ---------------------------------------------------------------------------
if [[ -f "${CONFIG_FILE}" ]]; then
print_ok "Konfigurationsdatei gefunden: ${CONFIG_FILE}"
else
print_error_and_exit "Konfigurationsdatei '${CONFIG_FILE}' wurde nicht gefunden"
fi
# ---------------------------------------------------------------------------
# Schritt 3: Pruefen, ob die Datei valides JSON enthaelt
# ---------------------------------------------------------------------------
if jq empty "${CONFIG_FILE}" 2> /dev/null; then
print_ok "Konfigurationsdatei enthaelt valides JSON"
else
print_error_and_exit "'${CONFIG_FILE}' enthaelt kein valides JSON"
fi
# ---------------------------------------------------------------------------
# Schritt 4: Backup der Originaldatei anlegen
# ---------------------------------------------------------------------------
if cp -p "${CONFIG_FILE}" "${BACKUP_FILE}"; then
BACKUP_CREATED=1
print_ok "Backup erstellt: ${BACKUP_FILE}"
else
print_error_and_exit "Backup konnte nicht erstellt werden"
fi
# ---------------------------------------------------------------------------
# Schritt 5: Parameter setzen
# ---------------------------------------------------------------------------
# .AnnouncementSettings //= {} -> Block anlegen, falls er fehlt
# .AdminNoticesEnabled = false -> Parameter setzen/ueberschreiben
# .UserNoticesEnabled = false -> Parameter setzen/ueberschreiben
if jq '
.AnnouncementSettings //= {}
| .AnnouncementSettings.AdminNoticesEnabled = false
| .AnnouncementSettings.UserNoticesEnabled = false
' "${CONFIG_FILE}" > "${TMP_FILE}"; then
print_ok "Parameter AdminNoticesEnabled / UserNoticesEnabled berechnet"
else
print_error_and_exit "Fehler beim Verarbeiten der Konfiguration mit jq"
fi
# ---------------------------------------------------------------------------
# Schritt 6: Ergebnis erneut auf valides JSON pruefen
# ---------------------------------------------------------------------------
if jq empty "${TMP_FILE}" 2> /dev/null; then
print_ok "Neue Konfiguration ist valides JSON"
else
print_error_and_exit "Die erzeugte Konfiguration ist kein valides JSON, es wurde nichts uebernommen"
fi
# ---------------------------------------------------------------------------
# Schritt 7: Original-Rechte/Eigentuemer ermitteln und Datei uebernehmen
# ---------------------------------------------------------------------------
ORIG_OWNER="$(stat -c '%U:%G' "${CONFIG_FILE}" 2> /dev/null)"
ORIG_PERMS="$(stat -c '%a' "${CONFIG_FILE}" 2> /dev/null)"
if [[ -z "${ORIG_OWNER}" || -z "${ORIG_PERMS}" ]]; then
print_error_and_exit "Eigentuemer/Rechte der Originaldatei konnten nicht ermittelt werden"
fi
if mv "${TMP_FILE}" "${CONFIG_FILE}" \
&& chown "${ORIG_OWNER}" "${CONFIG_FILE}" \
&& chmod "${ORIG_PERMS}" "${CONFIG_FILE}"; then
print_ok "Konfigurationsdatei aktualisiert (Rechte/Eigentuemer uebernommen)"
else
print_error_and_exit "Schreiben der neuen Konfigurationsdatei ist fehlgeschlagen"
fi
# ---------------------------------------------------------------------------
# Schritt 8: Abschliessende Erfolgsmeldung und Hinweis zum Neuladen
# ---------------------------------------------------------------------------
print_ok "AdminNoticesEnabled=false und UserNoticesEnabled=false gesetzt"
echo ""
echo "Hinweis: Die Aenderung wird erst nach einem Neuladen wirksam,"
echo "z.B. mit: systemctl restart mattermost"
# ---------------------------------------------------------------------------
# Ausgabe: abschliessende Leerzeile
# ---------------------------------------------------------------------------
echo ""
exit 0