summaryrefslogtreecommitdiff
path: root/localkannel-dispatch
diff options
context:
space:
mode:
authorroot <root@jones.dk>2010-05-04 12:03:48 +0200
committerroot <root@jones.dk>2010-05-04 12:03:48 +0200
commitb33708b7bad20a5ced676f80f16188bb523613a6 (patch)
tree89d129547c733d4c485372451b0b1c1f35bbf353 /localkannel-dispatch
parent154d5bd7eb031369256a24a29684e87df98a2e24 (diff)
Add/update sms- and Kannel-related scripts.
Diffstat (limited to 'localkannel-dispatch')
-rwxr-xr-xlocalkannel-dispatch179
1 files changed, 179 insertions, 0 deletions
diff --git a/localkannel-dispatch b/localkannel-dispatch
new file mode 100755
index 0000000..ac2aae4
--- /dev/null
+++ b/localkannel-dispatch
@@ -0,0 +1,179 @@
+#!/bin/sh
+
+set -e
+
+exit1() {
+ echo >&2 "Error: $1"
+ echo >&2 "Exiting..."
+ exit 1
+}
+
+simpleword() {
+# echo "$1" | tr '[A-Z]' '[a-z]' | egrep '^[a-z][a-z0-9-]+$' || exit 1
+ echo "$1" | tr '[A-Z]' '[a-z]' | egrep '^[a-zæøåÆØÅ!@/][a-zæøåÆØÅ0-9-]+$' || exit 1
+}
+
+uriunescape() {
+ if [ 0 = "$urldecode" ]; then
+ echo "$@"
+ else
+ echo "$@" | perl -e 'use URI::Escape; print lc(uri_unescape(<STDIN>));'
+ fi
+}
+
+#from=`uriunescape "$1" | sed -e 's/\+/ /g'`; shift
+from=`uriunescape "$1"`; shift
+#to=`uriunescape "$1" | sed -e 's/\+/ /g'`; shift
+to=`uriunescape "$1"`; shift
+#set -- `uriunescape "$@" | sed -e 's/\+/ /g'`
+set -- `uriunescape "$@"`
+app_raw="$1"
+app=`simpleword "$1"`; shift
+
+export debug
+
+SMS_PHONE="$from"
+urldecode=0
+export SMS_PHONE urldecode
+
+case "$SMS_REALM" in
+ hello)
+ provider="local"
+# provider="coolsms"
+# provider="clickatell"
+ mdpath="/home/hearth/public_webdata/hearth/content/sms"
+ export mdpath
+ ;;
+ cyber)
+ provider="local"
+ mdpath="/home/cyberhus/public_webdata/mdsms/content/sms"
+ export mdpath
+ ;;
+ *)
+ exit1 "unknown realm \"$SMS_REALM\""
+ ;;
+esac
+case "$provider" in
+ local)
+ export SMS_SMSC
+ ;;
+ coolsms)
+ unset SMS_SMSC
+ SMS_URL="https://sms.coolsmsc.dk:8081/"
+ SMS_USER="drjones1"
+ SMS_PW="rahYSeGY"
+ SMS_CP="cp1252"
+ SMS_MSGTAG="message"
+ export SMS_URL SMS_USER SMS_PW SMS_CP SMS_MSGTAG
+ ;;
+ clickatell)
+# unset SMS_SMSC
+# SMS_URL="https://api.clickatell.com/http/sendmsg"
+# SMS_USER="jonas"
+# SMS_PW="inaritab6"
+# SMS_CP="cp1252"
+# SMS_USERTAG="user"
+# SMS_API="3231280"
+# SMS_CONCAT="3"
+# export SMS_URL SMS_USER SMS_PW SMS_CP SMS_USERTAG SMS_API SMS_CONCAT
+ 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"
+ export SMS_SMSC SMS_DLR_MASK SMS_DLR_URL
+ ;;
+ *)
+ 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"
+}
+
+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
+ ;;
+ yb)
+ s="$(links -dump "http://www.yubnub.org/parser/parse?command=$@")"
+ /usr/local/sbin/localsendsms "$to" "$s"
+ ;;
+ *)
+ /usr/local/sbin/localmarkdown2sms "$to" "$app_raw" "$@"
+ ;;
+esac