4528
|
1 |
#!/bin/bash |
|
2 |
# Does HTTP POST compatible with mod_post_msg for prosody |
|
3 |
# Aims to be compatible with sendxmpp syntax |
|
4 |
|
|
5 |
# API: |
|
6 |
# http://host/msg/user => msg to user@host |
|
7 |
# or http://whatever/msg/user@host => same |
|
8 |
# HTTP Basic auth |
|
9 |
|
|
10 |
# sendxmpp |
|
11 |
# $0 [options] <recipient> |
|
12 |
|
|
13 |
test -f $HOME/.sendxmpprc && |
|
14 |
read username password < $HOME/.sendxmpprc |
|
15 |
|
|
16 |
TEMP="$(getopt -o f:u:p:j:o:r:tlcs:m:iwvhd -l file:,username:,password:,jserver:,component:,resource:,tls,headline,message-type:,chatroom,subject:,message:,interactive,raw,verbose,help,usage,debug -n "${0%%*/}" -- "$@" )" |
|
17 |
|
|
18 |
if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi |
|
19 |
|
|
20 |
eval set -- "$TEMP" |
|
21 |
|
|
22 |
while true; do |
|
23 |
case "$1" in |
|
24 |
-f|--file) read username password < "$2"; shift 2;; |
|
25 |
-u|--username) username="$2"; shift 2;; |
|
26 |
-p|--password) password="$2"; shift 2;; |
|
27 |
-j|--jserver) server="$2"; shift 2;; |
|
28 |
-m|--message) message="$2"; shift 2;; |
|
29 |
-v|--verbose) verbose="yes"; shift;; |
|
30 |
-i|--interactive) interactive="yes"; shift;; # multiple messages, one per line on stdin |
|
31 |
-r|--resource) resource="$OPTARG"; shift 2;; # not used |
|
32 |
-h|--help|--usage) |
|
33 |
echo "usage: ${0##*/} [options] <recipient>" |
|
34 |
echo "or refer to the the source code ;)"; exit;; |
|
35 |
--) shift ; break ;; |
|
36 |
*) echo "option $1 is not implemented" >&1; shift ;; # TODO stuff |
|
37 |
# FIXME the above will fail if the opt has a param |
|
38 |
esac |
|
39 |
done |
|
40 |
|
|
41 |
if [ $# -gt 1 ]; then |
|
42 |
echo "multile recipients not implemented" >&1 # TODO stuff |
|
43 |
exit 1 |
|
44 |
fi |
|
45 |
|
|
46 |
# Can be user@host or just user, in wich case the http host is used |
|
47 |
recipient="$1" |
|
48 |
shift |
|
49 |
|
|
50 |
if [ -z "$server" ]; then |
|
51 |
server="${username#*@}:5280" |
|
52 |
fi |
|
53 |
|
|
54 |
if [ -z "$recipient" -o -z "$server" -o -z "$username" ]; then |
|
55 |
echo "required parameter missing or empty" >&1 |
|
56 |
exit 1 |
|
57 |
fi |
|
58 |
|
|
59 |
do_send() { |
|
60 |
#echo \ |
|
61 |
curl "http${secure:+s}://$server/msg/$recipient" \ |
|
62 |
-s ${verbose:+-v} \ |
|
63 |
-u "$username${password:+:$password}" \ |
|
64 |
"$@" |
|
65 |
} |
|
66 |
|
|
67 |
send_text() { |
|
68 |
do_send -H "Content-Type: text/plain" "$@" |
|
69 |
} |
|
70 |
|
|
71 |
if [ -z "$interactive" ]; then |
|
72 |
send_text -d "${message:-@-}" |
|
73 |
else |
|
74 |
while read line; do |
|
75 |
send_text -d "$line" |
|
76 |
done |
|
77 |
fi |
|
78 |
# TODO single curl line |