annotate mod_post_msg/sendxmpp-curl.sh @ 4651:8231774f5bfd

mod_cloud_notify_encrypted: Ensure body substring remains valid UTF-8 The `body:sub()` call risks splitting the string in the middle of a multi-byte UTF-8 sequence. This should have been caught by util.stanza validation, but that would have caused some havoc, at the very least causing the notification to not be sent. There have been no reports of this happening. Likely because this module isn't widely deployed among users with languages that use many longer UTF-8 sequences. The util.encodings.utf8.valid() function is O(n) where only the last sequence really needs to be checked, but it's in C and expected to be fast.
author Kim Alvefur <zash@zash.se>
date Sun, 22 Aug 2021 13:22:59 +0200
parents 9764d27db681
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4524
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 #!/bin/bash
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2 # Does HTTP POST compatible with mod_post_msg for prosody
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3 # Aims to be compatible with sendxmpp syntax
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5 # API:
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6 # http://host/msg/user => msg to user@host
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7 # or http://whatever/msg/user@host => same
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8 # HTTP Basic auth
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10 # sendxmpp
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 # $0 [options] <recipient>
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13 test -f $HOME/.sendxmpprc &&
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 read username password < $HOME/.sendxmpprc
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
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%%*/}" -- "$@" )"
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 eval set -- "$TEMP"
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 while true; do
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 case "$1" in
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 -f|--file) read username password < "$2"; shift 2;;
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 -u|--username) username="$2"; shift 2;;
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26 -p|--password) password="$2"; shift 2;;
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 -j|--jserver) server="$2"; shift 2;;
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 -m|--message) message="$2"; shift 2;;
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 -v|--verbose) verbose="yes"; shift;;
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30 -i|--interactive) interactive="yes"; shift;; # multiple messages, one per line on stdin
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 -r|--resource) resource="$OPTARG"; shift 2;; # not used
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32 -h|--help|--usage)
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33 echo "usage: ${0##*/} [options] <recipient>"
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 echo "or refer to the the source code ;)"; exit;;
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35 --) shift ; break ;;
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 *) echo "option $1 is not implemented" >&1; shift ;; # TODO stuff
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 # FIXME the above will fail if the opt has a param
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38 esac
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 done
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 if [ $# -gt 1 ]; then
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42 echo "multile recipients not implemented" >&1 # TODO stuff
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43 exit 1
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 fi
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46 # Can be user@host or just user, in wich case the http host is used
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
47 recipient="$1"
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
48 shift
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
49
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50 if [ -z "$server" ]; then
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
51 server="${username#*@}:5280"
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
52 fi
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
53
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
54 if [ -z "$recipient" -o -z "$server" -o -z "$username" ]; then
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
55 echo "required parameter missing or empty" >&1
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
56 exit 1
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
57 fi
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
58
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
59 do_send() {
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
60 #echo \
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
61 curl "http${secure:+s}://$server/msg/$recipient" \
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
62 -s ${verbose:+-v} \
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
63 -u "$username${password:+:$password}" \
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
64 "$@"
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
65 }
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
66
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
67 send_text() {
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
68 do_send -H "Content-Type: text/plain" "$@"
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
69 }
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
70
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
71 if [ -z "$interactive" ]; then
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
72 send_text -d "${message:-@-}"
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
73 else
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
74 while read line; do
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
75 send_text -d "$line"
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
76 done
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
77 fi
9764d27db681 mod_post_msg: Add sendxmpp-curl
Kim Alvefur <zash@zash.se>
parents:
diff changeset
78 # TODO single curl line