From b33708b7bad20a5ced676f80f16188bb523613a6 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 4 May 2010 12:03:48 +0200 Subject: Add/update sms- and Kannel-related scripts. --- localkannel-dispatch | 179 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100755 localkannel-dispatch (limited to 'localkannel-dispatch') 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());' + 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 -- cgit v1.2.3