mirror of
https://github.com/ivuorinen/dotfiles.git
synced 2026-01-30 01:46:23 +00:00
feat(scripts): pushover cli
This commit is contained in:
149
local/bin/pushover
Executable file
149
local/bin/pushover
Executable file
@@ -0,0 +1,149 @@
|
||||
#!/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}"
|
||||
|
||||
Reference in New Issue
Block a user