180 lines
6.8 KiB
Bash
Executable File
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
|