summaryrefslogtreecommitdiff
path: root/localkannel-dispatch
diff options
context:
space:
mode:
authorroot <root@hello.jones.dk>2010-06-05 18:55:36 +0200
committerroot <root@hello.jones.dk>2010-06-05 18:55:36 +0200
commitb60961d6f2805769f36abf1588646c501fe81309 (patch)
treec44c788a423cb4488bb541466ec3cca4a528a15e /localkannel-dispatch
parentf2962c6ceebee1c1684fb53f81bd8f645c449b88 (diff)
parent847a13089cd112ab6d047d1d1614e6a9c6f2dd9c (diff)
Merge branch 'master' of git://source.jones.dk/sbin
Conflicts: localkannel-dispatch
Diffstat (limited to 'localkannel-dispatch')
-rwxr-xr-xlocalkannel-dispatch167
1 files changed, 76 insertions, 91 deletions
diff --git a/localkannel-dispatch b/localkannel-dispatch
index 8a891d6..f1fcf5f 100755
--- a/localkannel-dispatch
+++ b/localkannel-dispatch
@@ -2,9 +2,20 @@
set -e
-exit1() {
- echo >&2 "Error: $1"
- echo >&2 "Exiting..."
+vardir=/var/lib/kannel/hello
+sbindir=/usr/local/sbin
+
+exit0() {
+ [ -n "$1" ] && echo "$1"
+ exit 0
+}
+exit1() {
+ [ -z "$1" ] || echo "Error: $1" || echo "Internal error!"
+ response="${1+Error: $1}${-Internal error!}"
+# FIXME: pass error messages via stderr (not stdout)
+# echo >&2 "$response"
+ echo "$response"
+ [ -z "$SMS_SMSC$SMS_URL" ] || $sbindir/localsendsms "$to" "$response"
exit 1
}
@@ -25,8 +36,8 @@ uriunescape() {
from=`uriunescape "$1"`; shift
#to=`uriunescape "$1" | sed -e 's/\+/ /g'`; shift
to=`uriunescape "$1"`; shift
-#set -- `uriunescape "$@" | sed -e 's/\+/ /g'`
-set -- `uriunescape "$@"`
+set -- `uriunescape "$@" | sed -e 's/\+/ /g'`
+#set -- `uriunescape "$@"`
app_raw="$1"
app=`simpleword "$1"`; shift
@@ -37,6 +48,11 @@ urldecode=0
export SMS_PHONE urldecode
case "$SMS_REALM" in
+ test)
+ provider="dummy"
+ mdpath="/home/hearth/public_webdata/hearth/content/sms"
+ export mdpath
+ ;;
hello)
provider="local"
# provider="coolsms"
@@ -50,10 +66,15 @@ case "$SMS_REALM" in
export mdpath
;;
*)
- exit1 "unknown realm \"$SMS_REALM\""
+ exit1 "unknown realm \"$SMS_REALM\"!"
;;
esac
case "$provider" in
+ dummy)
+ dummy=1
+ ADMIN_OK=1
+ export ADMIN_OK dummy
+ ;;
local)
export SMS_SMSC
;;
@@ -79,102 +100,66 @@ case "$provider" in
SMS_SMSC="X"
SMS_DLR_MASK="7"
SMS_DLR_URL="http://helloearth.jones.dk/test.cgi?type=dlr&msgid=XXX&smsid=%I&from=%p&to=%P&time=%t&unixtime=%T&dlr=%d&dlrmsg=%A"
+ SMS_VALIDITY="1"
stripprefix="1"
- export SMS_SMSC SMS_DLR_MASK SMS_DLR_URL stripprefix
+ export SMS_SMSC SMS_DLR_MASK SMS_DLR_URL SMS_VALIDITY stripprefix
+ ;;
+ routo)
+ SMS_SMSC="Y"
+ export SMS_SMSC
;;
*)
- exit1 "unknown provider \"$provider\""
+ exit1 "unknown provider \"$provider\"!"
;;
esac
-# by now sms connection should work, so let sender get errors too
-exit1() {
- echo >&2 "Error: $1"
- /usr/local/sbin/localsendsms "$to" "Error: $1"
- echo >&2 "Exiting..."
- exit 1
-}
-
-return1() {
- echo >&2 "Error: $1"
- echo "$1"
- exit 1
-}
-
-vardir="/var/lib/kannel/hello"
-findobjects() {
- set -e
- object="$1"; shift || return1 "Internal error in routine \"findobjects\" (empty object)!"
- limit="$@"
- regex="$(echo "$limit" | perl -ne '/^\/(.+)\/$/ and print $1')"
- args="$(echo "$limit" | perl -ne 's/.*?([a-z0-9]+).*?/ $1/g and print')"
- [ -d "$vardir/$object" ] || return
- if [ -z "$*" ]; then
- cd "$vardir/$object" && find * -maxdepth 1 -type d
- elif [ -n "$regex" ]; then
- cd "$vardir/$object" && find * -maxdepth 1 -type d -regex "$regex"
- elif [ -n $args ]; then
- cd "$vardir/$object" && ls -1d $args
- else
- return1 "Internal error in routine \"findobjects\" (illegal limit)!"
- fi
-}
-addobject() {
- set -e
- object="$1"
- name="$2"
- oldname="$(findobjects "$object" "$name")" || return1 "$oldname"
- [ -z "$oldname" ] || return1 "$object \"$name\" already exist."
- [ -n "$name" ] || return1 "Internal error in routine \"addobject\" (empty name)!"
- mkdir -p "$vardir/$object/$name"
- chgrp --reference="$vardir" "$vardir/$object/$name"
- echo "$name"
-}
-
+if [ -n "$REDIRECT_OK" ]; then
case "$app" in
@*)
- [ -n "$REDIRECT_OK" ] || exit1 "Redirection not permitted here!"
to="$(echo "$app" | perl -pe 's/^@//;' -e 's/^([^+])/+45\1/')"
# TODO: silence errors - or better: bounce those back to original sender
- /usr/local/sbin/localmarkdown2sms "$to" "$@"
- ;;
-# !*)
-# [ -n "$GROUP_OK" ] || exit1 "Redirection to group not permitted here!"
-# group="$(echo "$app" | perl -pe 's/^!//;')"
-# for to in $(echo "$group" | perl ...); do
-# /usr/local/sbin/localmarkdown2sms "$to" "$@"
-# done
-# ;;
- /*)
- [ -n "$ADMIN_OK" ] || exit1 "Administrative commands not permitted here!"
- cmd="$(echo "$app" | perl -pe 's/^\///;')"
- case "$cmd" in
- add|create)
- case "$1" in
- user|group)
- object="$1"; shift || exit1 "Internal error while adding object."
- name="$(addobject "$object" "$@")" || exit1 "Failed adding $object${name+: $name}!"
- /usr/local/sbin/localsendsms "$to" "$object \"$name\" added."
- ;;
- *)
- exit1 "Cannot add \"$1\" (try \"add user\" or \"add group\" instead)."
- ;;
- esac
- ;;
- status)
- msg="$(/usr/local/sbin/localshowkannelstatus)"
- /usr/local/sbin/localsendsms "$to" "$msg"
- ;;
- *)
- exit1 "unknown command \"$cmd\""
- ;;
- esac
+ $sbindir/localmarkdown2sms "$to" "$@"
+ exit 0
;;
- yb)
- s="$(links -dump "http://www.yubnub.org/parser/parse?command=$@")"
- /usr/local/sbin/localsendsms "$to" "$s"
+esac
+fi
+
+if [ -n "$GROUP_OK" ]; then
+case "$app" in
+ !*)
+ group="$(echo "$app" | perl -pe 's/^!//;')"
+ members=$(cd "$vardir/user" && grep -lF "$group" */group | perl -pe "s,/group$,,") || members=
+ [ -n "$members" ] || exit1 "Message redirected for none: no members resolved in group \"$group\"!"
+ for member in $members; do
+ phone=$(head -n 1 "$vardir/user/$member/phone") || nophone="${nophone+$nophone }$member"
+ [ -z "$phone" ] || $sbindir/localmarkdown2sms "$phone" "$@"
+ done
+ [ -n "$members" ] || exit1 "Message redirected for none: no members resolved in group \"$group\"!"
+ membercount=$(echo "$members" | wc --word)
+ [ -z "$nophone" ] || nophonecount=$(echo "$nophone" | wc --word)
+ [ -z "$nophone" ] || exit1 "Message redirected for $membercount members of group \"$group\", but failed for $nophonecount of them (could not resolve phone number)!"
+ exit0 "Message redirected for $membercount members of group \"$group\"."
;;
- *)
- /usr/local/sbin/localmarkdown2sms "$to" "$app_raw" "$@"
+esac
+fi
+
+case "$app" in
+ /*)
+ candidates=$(cd "$vardir/user" && grep -lF "$to" */phone | perl -pe "s,/phone$,,") || candidates=
+ [ -z "$candidates" ] || $(grep -vqF "$candidates" "$vardir/group/admin/user") || admin=true
+ if [ -n "$ADMIN_OK" ] && [ -n "$admin" ]; then
+ cmd="$(echo "$app" | perl -pe 's/^\///;')"
+ str="$($sbindir/localsmsadmin "$cmd" "$@" 2>&1)" || exit1 "$str"
+ $sbindir/localsendsms "$to" $str
+ exit 0
+ fi
;;
esac
+
+# yb)
+# s="$(links -dump "http://www.yubnub.org/parser/parse?command=$@")"
+# $sbindir/localsendsms "$to" "$s"
+# exit 0
+# ;;
+
+$sbindir/localmarkdown2sms "$to" "$app_raw" "$@"