mirror of
https://github.com/ivuorinen/dotfiles.git
synced 2026-01-26 11:14:08 +00:00
151 lines
3.0 KiB
Bash
Executable File
151 lines
3.0 KiB
Bash
Executable File
#!/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 <https://github.com/ivuorinen> 2023
|
|
|
|
__pushover_usage()
|
|
{
|
|
printf "pushover <options> <message>\n"
|
|
printf " -c <callback>\n"
|
|
printf " -d <device>\n"
|
|
printf " -D <timestamp>\n"
|
|
printf " -e <expire>\n"
|
|
printf " -p <priority>\n"
|
|
printf " -r <retry>\n"
|
|
printf " -t <title>\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}"
|