view mod_post_msg/sendxmpp-curl.sh @ 5715:8488ebde5739

mod_http_oauth2: Skip consent screen if requested by client and same scopes already granted This follows the intent behind the OpenID Connect 'prompt' parameter when it does not include the 'consent' keyword, that is the client wishes to skip the consent screen. If the user has already granted the exact same scopes to the exact same client in the past, then one can assume that they may grant it again.
author Kim Alvefur <zash@zash.se>
date Tue, 14 Nov 2023 23:03:37 +0100
parents 9764d27db681
children
line wrap: on
line source

#!/bin/bash
# Does HTTP POST compatible with mod_post_msg for prosody
# Aims to be compatible with sendxmpp syntax

# API:
# http://host/msg/user => msg to user@host
# or http://whatever/msg/user@host => same
# HTTP Basic auth

# sendxmpp
# $0 [options] <recipient>

test -f $HOME/.sendxmpprc &&
read username password < $HOME/.sendxmpprc

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%%*/}" -- "$@" )"

if [ $? != 0 ] ; then echo "Terminating..." >&2 ; exit 1 ; fi

eval set -- "$TEMP"

while true; do
	case "$1" in
		-f|--file) read username password < "$2"; shift 2;;
		-u|--username) username="$2"; shift 2;;
		-p|--password) password="$2"; shift 2;;
		-j|--jserver) server="$2"; shift 2;;
		-m|--message) message="$2"; shift 2;;
		-v|--verbose) verbose="yes"; shift;;
		-i|--interactive) interactive="yes"; shift;; # multiple messages, one per line on stdin
		-r|--resource) resource="$OPTARG"; shift 2;; # not used
		-h|--help|--usage)
			echo "usage: ${0##*/} [options] <recipient>"
			echo "or refer to the the source code ;)"; exit;;
		--) shift ; break ;;
		*) echo "option $1 is not implemented" >&1; shift ;; # TODO stuff
		# FIXME the above will fail if the opt has a param
	esac
done

if [ $# -gt 1 ]; then
	echo "multile recipients not implemented" >&1 # TODO stuff
	exit 1
fi

# Can be user@host or just user, in wich case the http host is used
recipient="$1"
shift

if [ -z "$server" ]; then
	server="${username#*@}:5280"
fi

if [ -z "$recipient" -o -z "$server" -o -z "$username" ]; then
	echo "required parameter missing or empty" >&1
	exit 1
fi

do_send() {
	#echo \
	curl "http${secure:+s}://$server/msg/$recipient" \
	-s ${verbose:+-v} \
	-u "$username${password:+:$password}" \
	"$@"
}

send_text() {
	do_send -H "Content-Type: text/plain" "$@"
}

if [ -z "$interactive" ]; then
	send_text -d "${message:-@-}"
else
	while read line; do
		send_text -d "$line"
	done
fi
# TODO single curl line