From 0b2c499f94cd643c46c560cca4dc5decf573dd72 Mon Sep 17 00:00:00 2001 From: Bob Mottram <bob@freedombone.net> Date: Thu, 5 Jul 2018 12:28:55 +0100 Subject: [PATCH] Separate command for notifications --- src/freedombone-app-keyserver | 6 +-- src/freedombone-backup-remote | 10 ++-- src/freedombone-notification | 81 ++++++++++++++++++++++++++++ src/freedombone-repair-database | 2 +- src/freedombone-restore-remote | 2 +- src/freedombone-usb-canary | 2 +- src/freedombone-utils-backup | 4 +- src/freedombone-utils-cron | 2 +- src/freedombone-utils-database | 4 +- src/freedombone-utils-gnusocialtools | 4 +- src/freedombone-utils-onion | 6 +-- src/freedombone-utils-web | 6 +-- 12 files changed, 102 insertions(+), 27 deletions(-) create mode 100755 src/freedombone-notification diff --git a/src/freedombone-app-keyserver b/src/freedombone-app-keyserver index 59792f044..0a1aca39d 100755 --- a/src/freedombone-app-keyserver +++ b/src/freedombone-app-keyserver @@ -68,14 +68,12 @@ function keyserver_watchdog { { echo '#!/bin/bash'; echo "dirsize=\$(du /var/lib/sks/DB | awk -F ' ' '{print \$1}')"; echo "if [ \$dirsize -gt 450000 ]; then"; - - echo " echo \"$keyserver_size_warning\" | mail -s \"$keyserver_mail_subject_line\" $ADMIN_EMAIL_ADDRESS"; - + echo " ${PROJECT_NAME}-notification -m \"$keyserver_size_warning\" -s \"$keyserver_mail_subject_line\""; echo " if [ \$dirsize -gt 500000 ]; then"; echo " nginx_dissite $KEYSERVER_DOMAIN_NAME"; echo ' systemctl stop sks'; echo ' systemctl disable sks'; - echo " echo \"$keyserver_disabled_warning\" | mail -s \"$keyserver_mail_subject_line_disabled\" $ADMIN_EMAIL_ADDRESS"; + echo " ${PROJECT_NAME}-notification -m \"$keyserver_disabled_warning\" -s \"$keyserver_mail_subject_line_disabled\""; echo ' fi'; echo 'fi'; } > $keyserver_watchdog_script chmod +x $keyserver_watchdog_script diff --git a/src/freedombone-backup-remote b/src/freedombone-backup-remote index 7997990cb..ea94b455e 100755 --- a/src/freedombone-backup-remote +++ b/src/freedombone-backup-remote @@ -333,7 +333,7 @@ function backup_mariadb { echo $"Unable to backup MariaDB settings" rm -rf $temp_backup_dir # Send a warning email - echo $"Unable to export database settings" | mail -s "${PROJECT_NAME} backup to friends" "$ADMIN_EMAIL_ADDRESS" + ${PROJECT_NAME}-notification -m $"Unable to export database settings" -s $"${PROJECT_NAME} backup to friends" exit 653 fi echo "$DATABASE_PASSWORD" > $temp_backup_dir/db @@ -410,12 +410,10 @@ function disperse_key_shares { # shellcheck disable=SC2181 if [ ! "$?" = "0" ]; then # Send a warning email - echo "Key share to $REMOTE_SERVER failed" | \ - mail -s "${PROJECT_NAME} social key management" "$MY_EMAIL_ADDRESS" + ${PROJECT_NAME}-notification -m $"Key share to $REMOTE_SERVER failed" -s $"${PROJECT_NAME} social key management" else # Send a confirmation email - echo "Key ${share_filename} shared to $REMOTE_SERVER" | \ - mail -s "${PROJECT_NAME} social key management" "$MY_EMAIL_ADDRESS" + ${PROJECT_NAME}-notification -m $"Key ${share_filename} shared to $REMOTE_SERVER" -s $"${PROJECT_NAME} social key management" fi # remove the temp file/directory @@ -480,7 +478,7 @@ do if ! rsync -ratlzv --rsh="/usr/bin/sshpass -p \"$REMOTE_PASSWORD\" ssh -p $REMOTE_SSH_PORT -o StrictHostKeyChecking=no" "$SERVER_DIRECTORY/backup" "$REMOTE_SERVER"; then echo "$NOW Backup to $REMOTE_SERVER failed" >> /var/log/remotebackups.log # Send a warning email - echo "Backup to $REMOTE_SERVER failed" | mail -s "${PROJECT_NAME} backup to friends" "$ADMIN_EMAIL_ADDRESS" + ${PROJECT_NAME}-notification -m $"Backup to $REMOTE_SERVER failed" -s $"${PROJECT_NAME} backup to friends" else echo "$NOW Backed up to $REMOTE_SERVER" >> /var/log/remotebackups.log fi diff --git a/src/freedombone-notification b/src/freedombone-notification new file mode 100755 index 000000000..e30b27948 --- /dev/null +++ b/src/freedombone-notification @@ -0,0 +1,81 @@ +#!/bin/bash +# _____ _ _ +# | __|___ ___ ___ _| |___ _____| |_ ___ ___ ___ +# | __| _| -_| -_| . | . | | . | . | | -_| +# |__| |_| |___|___|___|___|_|_|_|___|___|_|_|___| +# +# Freedom in the Cloud +# +# Sends a notification to the administrator user +# +# License +# ======= +# +# Copyright (C) 2018 Bob Mottram <bob@freedombone.net> +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +PROJECT_NAME='freedombone' + +ADMIN_USERNAME= +SUBJECT= +MESSAGE= + +while [ $# -gt 1 ] +do + key="$1" + + case $key in + -e|--email) + shift + ADMIN_EMAIL_ADDRESS="$1" + ;; + -u|--user|--username) + shift + ADMIN_USERNAME="$1" + ;; + -s|--subject|--header) + shift + SUBJECT="$1" + ;; + -m|--message|--msg) + shift + MESSAGE="$1" + ;; + *) + # unknown option + ;; + esac + shift +done + +if [ ! "$MESSAGE" ]; then + exit 0 +fi + +if [ ! "$COMPLETION_FILE" ]; then + COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt +fi + +if [ ! "$ADMIN_USERNAME" ]; then + ADMIN_USERNAME=$(grep "Admin user" "$COMPLETION_FILE" | awk -F ':' '{print $2}') +fi +ADMIN_EMAIL_ADDRESS=${ADMIN_USERNAME}@${HOSTNAME} + +# send email to administrator +if [ "$SUBJECT" ]; then + echo "$MESSAGE" | mail -s "$SUBJECT" "$ADMIN_EMAIL_ADDRESS" +fi + +exit 0 diff --git a/src/freedombone-repair-database b/src/freedombone-repair-database index 615d3341d..e4a918800 100755 --- a/src/freedombone-repair-database +++ b/src/freedombone-repair-database @@ -85,7 +85,7 @@ if grep -q "Error" "$TEMPFILE"; then mysql -u root --password="$MYSQL_ROOT_PASSWORD" "$DATABASE" -o < "/var/backups/${DATABASE}_${BACKUP_TYPE}.sql" # Send a warning email - echo $"$DATABASE database corruption could not be repaired. Restored from backup." | mail -s $"${PROJECT_NAME} database maintenance" "$ADMIN_EMAIL_ADDRESS" + ${PROJECT_NAME}-notification -m $"$DATABASE database corruption could not be repaired. Restored from backup." -s $"${PROJECT_NAME} database maintenance" rm -f "$TEMPFILE" exit 1 diff --git a/src/freedombone-restore-remote b/src/freedombone-restore-remote index 492b8e3b4..6bf994bc6 100755 --- a/src/freedombone-restore-remote +++ b/src/freedombone-restore-remote @@ -85,7 +85,7 @@ echo "$NOW Starting restore from $REMOTE_SERVER" >> /var/log/remotebackups.log if ! rsync -ratlzv --rsh="/usr/bin/sshpass -p $REMOTE_PASSWORD ssh -p $REMOTE_SSH_PORT -o StrictHostKeyChecking=no" "$REMOTE_SERVER/backup" "$SERVER_DIRECTORY"; then echo "$NOW Restore from $REMOTE_SERVER failed" >> /var/log/remotebackups.log # Send a warning email - echo "Restore from $REMOTE_SERVER failed" | mail -s "${PROJECT_NAME} restore from friend" "$ADMIN_EMAIL_ADDRESS" + ${PROJECT_NAME}-notification -m $"Restore from $REMOTE_SERVER failed" -s $"${PROJECT_NAME} restore from friend" exit 790 else echo "$NOW Restored encrypted data from $REMOTE_SERVER" >> /var/log/remotebackups.log diff --git a/src/freedombone-usb-canary b/src/freedombone-usb-canary index 88cdd9dbd..ba82e2495 100755 --- a/src/freedombone-usb-canary +++ b/src/freedombone-usb-canary @@ -42,7 +42,7 @@ if [ ! -f /tmp/.upgrading ]; then rm /tmp/.curr_usb_devices fi - echo -e "USB device connected on ${DEVPATH}\\n\\n${devices_changed}" | mail -s "${PROJECT_NAME} USB canary" "${MY_EMAIL_ADDRESS}" + ${PROJECT_NAME}-notification -m $"USB device connected on ${DEVPATH}\\n\\n${devices_changed}" -s $"${PROJECT_NAME} USB canary" echo "${ACTION}" > /tmp/usb-canary echo "${MY_EMAIL_ADDRESS}" >> /tmp/usb-canary date >> /tmp/usb-canary diff --git a/src/freedombone-utils-backup b/src/freedombone-utils-backup index ed5c7ddb1..9754f41b8 100755 --- a/src/freedombone-utils-backup +++ b/src/freedombone-utils-backup @@ -503,7 +503,7 @@ function backup_database_remote { echo $"${1} database could not be saved" rm -rf "${local_database_dir}" # Send a warning email - echo $"Unable to export ${1} database" | mail -s $"${PROJECT_NAME} backup to friends" "$ADMIN_EMAIL_ADDRESS" + ${PROJECT_NAME}-notification -m $"Unable to export ${1} database" -s $"${PROJECT_NAME} backup to friends" function_check restart_site restart_site exit 57386728 @@ -512,7 +512,7 @@ function backup_database_remote { echo $"${1} database could not be dumped" rm -rf "${local_database_dir}" # Send a warning email - echo $"Unable to dump ${1} database" | mail -s $"${PROJECT_NAME} backup to friends" "$ADMIN_EMAIL_ADDRESS" + "${PROJECT_NAME}-notification" -m $"Unable to dump ${1} database" -s $"${PROJECT_NAME} backup to friends" function_check restart_site restart_site exit 36874289 diff --git a/src/freedombone-utils-cron b/src/freedombone-utils-cron index b1247c938..a588354b2 100755 --- a/src/freedombone-utils-cron +++ b/src/freedombone-utils-cron @@ -83,7 +83,7 @@ function schedule_stig_tests { echo 'rm -rf /tmp/*'; echo "${PROJECT_NAME}-tests --stig yes > /tmp/daily-stig-tests"; echo 'if [ ! "$?" = "0" ]; then'; - echo " echo \"\$(cat /tmp/daily-stig-tests)\" | mail -s \"${PROJECT_NAME} STIG test failures\" \$ADMIN_EMAIL_ADDRESS"; + echo " ${PROJECT_NAME}-notification -m \"\$(cat /tmp/daily-stig-tests)\" -s \"${PROJECT_NAME} STIG test failures\""; echo 'fi'; echo 'if [ -f /tmp/daily-stig-tests ]; then'; echo ' rm /tmp/daily-stig-tests'; diff --git a/src/freedombone-utils-database b/src/freedombone-utils-database index 1f0df97f3..7610d82be 100755 --- a/src/freedombone-utils-database +++ b/src/freedombone-utils-database @@ -85,10 +85,10 @@ function backup_database_local { echo " mysql -u root --password=\"\$MYSQL_PASSWORD\" ${database_name} -o < \$DAILYFILE"; echo ''; echo ' # Send a warning email'; - echo " echo \"Unable to create a backup of the ${database_name} database. Attempted to restore from yesterdays backup\" | mail -s \"${database_name} backup\" \$EMAIL"; + echo " ${PROJECT_NAME}-notification -m \"Unable to create a backup of the ${database_name} database. Attempted to restore from yesterdays backup\" -s \"${database_name} backup\""; echo ' else'; echo ' # Send a warning email'; - echo " echo \"Unable to create a backup of the ${database_name} database.\" | mail -s \"${database_name} backup\" \$EMAIL"; + echo " ${PROJECT_NAME}-notification -m \"Unable to create a backup of the ${database_name} database.\" -s \"${database_name} backup\""; echo ' fi'; echo 'else'; echo " chmod 600 \$TEMPFILE"; diff --git a/src/freedombone-utils-gnusocialtools b/src/freedombone-utils-gnusocialtools index 4ff1af200..288b0cfa3 100755 --- a/src/freedombone-utils-gnusocialtools +++ b/src/freedombone-utils-gnusocialtools @@ -468,8 +468,8 @@ function gnusocial_hourly_script { echo " if [ \"\$UPTIME\" -gt 500 ]; then"; echo " ADMIN_USER=\$(cat $COMPLETION_FILE | grep 'Admin user' | awk -F ':' '{print \$2}')"; echo " MY_EMAIL_ADDRESS=\$ADMIN_USER@$HOSTNAME"; - echo -n " echo \"Restarting ${gnusocial_type} daemons\" | mail -s \"${gnusocial_type} "; - echo "daemons not found\" \$MY_EMAIL_ADDRESS"; + echo -n " ${PROJECT_NAME}-notification -m \"Restarting ${gnusocial_type} daemons\" -s \"${gnusocial_type} "; + echo "daemons not found\""; echo ' fi'; echo ' su -c "sh scripts/startdaemons.sh" -s /bin/sh www-data'; echo 'fi'; diff --git a/src/freedombone-utils-onion b/src/freedombone-utils-onion index c56d0238e..95d228b80 100755 --- a/src/freedombone-utils-onion +++ b/src/freedombone-utils-onion @@ -316,17 +316,17 @@ function check_tor_health { echo "if [[ \"\$status\" == 'G'* ]]; then"; echo ' if [ -f /tmp/.torfailed ]; then'; echo ' rm /tmp/.torfailed'; - echo " tail -n 3 /var/log/tor/notices.log | mail -s \"[${PROJECT_NAME}] Tor status is now \$status\" \$ADMIN_USER@\$HOSTNAME"; + echo " ${PROJECT_NAME}-notification -m \"\$(tail -n 3 /var/log/tor/notices.log)\" -s \"[${PROJECT_NAME}] Tor status is now \$status\""; echo ' fi'; echo ' exit 0'; echo 'fi'; echo 'if [ ! -f /tmp/.torfailed ]; then'; - echo " tail -n 3 /var/log/tor/notices.log | mail -s \"[${PROJECT_NAME}] Tor status is \$status\" \$ADMIN_USER@\$HOSTNAME"; + echo " ${PROJECT_NAME}-notification -m \"\$(tail -n 3 /var/log/tor/notices.log)\" -s \"[${PROJECT_NAME}] Tor status is \$status\""; echo " echo \"\$status\" > /tmp/.torfailed"; echo 'else'; echo " prev_status=\$(cat /tmp/.torfailed)"; echo " if [[ \"\$prev_status\" != \"\$status\" ]]; then"; - echo " tail -n 3 /var/log/tor/notices.log | mail -s \"[${PROJECT_NAME}] Tor status is \$status\" \$ADMIN_USER@\$HOSTNAME"; + echo " ${PROJECT_NAME}-notification -m \"\$(tail -n 3 /var/log/tor/notices.log)\" -s \"[${PROJECT_NAME}] Tor status is \$status\""; echo " echo \"\$status\" > /tmp/.torfailed"; echo ' fi'; echo 'fi'; } > /usr/bin/check_tor_health diff --git a/src/freedombone-utils-web b/src/freedombone-utils-web index b18829655..cc7188a2d 100755 --- a/src/freedombone-utils-web +++ b/src/freedombone-utils-web @@ -360,8 +360,7 @@ function letsencrypt_renewals { echo " echo \"${renewal_failure_msg}\" > ~/temp_renewletsencrypt.txt"; echo ' echo "" >> ~/temp_renewletsencrypt.txt'; echo " \${PROJECT_NAME}-renew-cert -h \$LETSENCRYPT_DOMAIN -p letsencrypt 2>> ~/temp_renewletsencrypt.txt"; - echo -n " cat ~/temp_renewletsencrypt.txt | mail -s \"${renewal_email_title}\" "; - echo "\$ADMIN_EMAIL_ADDRESS"; + echo " \${PROJECT_NAME}-notification -m \"\$(cat ~/temp_renewletsencrypt.txt)\" -s \"${renewal_email_title}\""; echo ' rm ~/temp_renewletsencrypt.txt'; echo ' if [ ! -f ~/letsencrypt_failed ]; then'; echo ' touch ~/letsencrypt_failed'; @@ -427,8 +426,7 @@ function letsencrypt_renewals { echo " echo \"${renewal_failure_msg}\" > ~/temp_renewletsencrypt.txt"; echo ' echo "" >> ~/temp_renewletsencrypt.txt'; echo " \${PROJECT_NAME}-renew-cert -h \$LETSENCRYPT_DOMAIN -p letsencrypt 2>> ~/temp_renewletsencrypt.txt"; - echo -n " cat ~/temp_renewletsencrypt.txt | mail -s \"${renewal_email_title}\" "; - echo "\$ADMIN_EMAIL_ADDRESS"; + echo " \${PROJECT_NAME}-notification -m \"\$(cat ~/temp_renewletsencrypt.txt)\" -s \"${renewal_email_title}\""; echo ' rm ~/temp_renewletsencrypt.txt'; echo ' if [ ! -f ~/letsencrypt_failed ]; then'; echo ' touch ~/letsencrypt_failed'; -- GitLab