#!/bin/bash #---------------------------------------------------------------------------------------------------- #~ Name : pushover #~ Description : Send notification to pushover #~ Author : Etienne Girault #~ #~ Usage : [-h] [-D] [-V] #~ Usage : [-a ] #~ Usage : -t #~ Usage : -m #~ #~ Options : -h, --help ; Affiche l'aide #~ Options : -V, --version ; Affiche la version #~ Options : -D, --debug ; Mode debug #~ Options : -a, --application ; Nom de l'application #~ Options : -m, --message ; Message de la notification #~ Options : -t, --title ; Titre de la notification #~ Options : -p, --priority ; Priorité de la notification (-2, -1, 0 ou 1) #~ Options : -s, --sound ; Choix du son de la notification #~ Options : -d, --dry-run ; N'envoie pas la notification et la simule en sortie #---------------------------------------------------------------------------------------------------- # Variables #---------------------------------------------------------------------------------------------------- script_name="$(grep '^#~ Nom' "$0" | sed 's/^.*: //')" script_version="$(grep '^#~ v' "$0" | tail -1 | sed -e 's/^#~ //' -e 's/ *\-.*$//')" keyfile=keys #---------------------------------------------------------------------------------------------------- # Functions #---------------------------------------------------------------------------------------------------- print_script_name_version() { echo "$script_name $script_version" && sed -n '/^#~ Version/,$p' "$0" | grep '^#~' | sed 's/^#~ //'; } print_script_description() { grep '^#~ Description' "$0" | sed 's/^.*: //'; } print_script_usage() { grep '^#~ Usage' "$0" | sed -e 's/^.*: //' -e '1 s/^/Usage: '"$script_name"' /' -e '2,$ s/^/'"$(printf '%*s' "$(echo "Usage: $script_name" | wc -c)")"'/'; } print_script_options() { echo "Options" && grep '^#~ Options' "$0" | sed -e 's/^.*://' -e 's/^ --/ --/' | column -ts \;; } print_script_help() { echo "$script_name $script_version" && print_script_description && print_script_usage && print_script_options; } send_notification() { curl --silent \ -F "token=$apptoken" \ -F "user=$user_key" \ -F "title=$title" \ -F "message=$message" \ https://api.pushover.net/1/messages > /dev/null # -F "sound=$sound" \ # -F "$priorityString" \ } load_keys() { [[ $user_key ]] && save_user_key=$user_key [[ $apptoken ]] && save_apptoken=$apptoken if [[ -f "$keyfile" ]]; then . "$keyfile" else if [[ $apptoken == "" ]]; then echo "unable to load key file" exit 1 fi fi [[ $save_user_key ]] && user_key=$save_user_key [[ $save_apptoken ]] && apptoken=$save_apptoken } choose_app() { apptoken=$(eval echo \$apptoken_$1) if [[ $apptoken == "" ]]; then return 1 fi } simulate () { echo "Application: $application" echo "Title: $title" echo "Message: $message" exit } # Signals trap 'exit 1' INT TERM #---------------------------------------------------------------------------------------------------- # Options #---------------------------------------------------------------------------------------------------- while getopts ":-:hVDf:a:m:t:p:s:d" OPTION; do case $OPTION in h) print_script_help; exit;; V) print_script_name_version; exit;; D) set -x;; f) keyfile="$OPTARG";; a) application="$OPTARG";; m) message="$OPTARG";; t) title="$OPTARG";; d) mode_simulation=0;; :) ;; -) case $OPTARG in help) print_script_help; exit;; version) print_script_name_version; exit;; debug) set -x;; application) token="";; # TODO message) message="";; # TODO title) title="";; # TODO esac ;; *) ;; esac done shift $((OPTIND-1)) #---------------------------------------------------------------------------------------------------- # Start #---------------------------------------------------------------------------------------------------- load_keys [[ $apptoken ]] || choose_app "${application:=$(hostname -s)}" [[ "$mode_simulation" ]] && simulate send_notification #---------------------------------------------------------------------------------------------------- # End #---------------------------------------------------------------------------------------------------- #~ Version changelog #~ v0.1 - Script creation #~ v0.2 - Added chose app #~ v0.3 - Added simulation #~ v0.4 - Reworked how to get the apptoken #~ v0.5 - Added load keys #~ v0.5.1 - Load keys can now read from env #~ v0.5.2 - Bug fix whith apptoken from env