From 145865d16e7837df626f71d9e32d6b226bc67d5e Mon Sep 17 00:00:00 2001 From: Christoph Date: Fri, 26 Jun 2026 12:41:49 +0200 Subject: [PATCH] Add script 'disable-mattermost.notices.sh'. --- disable-mattermost.notices.sh | 179 ++++++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100755 disable-mattermost.notices.sh diff --git a/disable-mattermost.notices.sh b/disable-mattermost.notices.sh new file mode 100755 index 0000000..f8f414a --- /dev/null +++ b/disable-mattermost.notices.sh @@ -0,0 +1,179 @@ +#!/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