diff --git a/pushover.sh b/pushover.sh new file mode 100755 index 0000000..6f826d4 --- /dev/null +++ b/pushover.sh @@ -0,0 +1,139 @@ +#!/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 + + +