#!/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