#!/usr/bin/env sh # # Send Pushover messages from cli # Based on https://github.com/mrusme/dotfiles/blob/master/usr/local/bin/pushover # # Modified by Ismo Vuorinen 2023 __pushover_usage() { printf "pushover \n" printf " -c \n" printf " -d \n" printf " -D \n" printf " -e \n" printf " -p \n" printf " -r \n" printf " -t \n" printf " -T <TOKEN> (required if not in 'PUSHOVER_TOKEN' env)\n" printf " -s <sound>\n" printf " -u <url>\n" printf " -U <USER> (required if not in 'PUSHOVER_USER' env)\n" printf " -a <url_title>\n" return 1 } __pushover_opt_field() { field=$1 shift value="${*}" if [ -n "${value}" ]; then printf "%s \"%s=%s\"\n" "-F" "$field" "$value" fi } __pushover_send_message() { device="${1:-}" curl_cmd="\"${CURL}\" -s -S \ ${CURL_OPTS} \ -F \"token=${TOKEN}\" \ -F \"user=${USER}\" \ -F \"message=${message}\" \ $(__pushover_opt_field device "${device}") \ $(__pushover_opt_field callback "${callback}") \ $(__pushover_opt_field timestamp "${timestamp}") \ $(__pushover_opt_field priority "${priority}") \ $(__pushover_opt_field retry "${retry}") \ $(__pushover_opt_field expire "${expire}") \ $(__pushover_opt_field title "${title}") \ $(__pushover_opt_field sound "${sound}") \ $(__pushover_opt_field url "${url}") \ $(__pushover_opt_field url_title "${url_title}") \ \"${PUSHOVER_URL}\"" response="$(eval "${curl_cmd}")" printf "%s\n" "$response" # TODO: Parse response r="${?}" if [ "${r}" -ne 0 ]; then printf "%s: Failed to send message\n" "${0}" >&2 fi return "${r}" } CURL="$(which curl)" PUSHOVER_URL="https://api.pushover.net/1/messages.json" TOKEN=$PUSHOVER_TOKEN USER=$PUSHOVER_USER CURL_OPTS="" devices="${devices} ${device}" optstring="c:d:D:e:f:p:r:t:T:s:u:U:a:h" OPTIND=1 while getopts ${optstring} c; do case ${c} in c) callback="${OPTARG}" ;; d) devices="${devices} ${OPTARG}" ;; D) timestamp="${OPTARG}" ;; e) expire="${OPTARG}" ;; p) priority="${OPTARG}" ;; r) retry="${OPTARG}" ;; t) title="${OPTARG}" ;; k) TOKEN="${OPTARG}" ;; s) sound="${OPTARG}" ;; u) url="${OPTARG}" ;; U) USER="${OPTARG}" ;; a) url_title="${OPTARG}" ;; [h\?]) __pushover_usage exit 1 ;; esac done shift $((OPTIND - 1)) if [ "$#" -lt 1 ]; then __pushover_usage exit 1 fi message="$*" if [ ! -x "${CURL}" ]; then printf "CURL is unset, empty, or does not point to curl executable.\n \ This script requires curl!\n" >&2 exit 1 fi devices="$(printf "${devices}" | xargs -n1 | sort -u | uniq)\n" if [ -z "${devices}" ]; then __pushover_send_message r=${?} else for device in ${devices}; do __pushover_send_message "${device}" r=${?} if [ "${r}" -ne 0 ]; then break fi done fi exit "${r}"