add new files
authorLaurent Mazet <mazet@softndesign.org>
Wed, 13 Mar 2019 22:38:32 +0000 (23:38 +0100)
committerLaurent Mazet <mazet@softndesign.org>
Wed, 13 Mar 2019 22:38:32 +0000 (23:38 +0100)
convert2sms.rc [new file with mode: 0644]
convert2sms.sh [new file with mode: 0755]
procmailrc [new file with mode: 0644]

diff --git a/convert2sms.rc b/convert2sms.rc
new file mode 100644 (file)
index 0000000..472ef34
--- /dev/null
@@ -0,0 +1,6 @@
+    # -*- shell-script -*-
+
+    # configuration variables
+    GATEWAY=smsbox
+    PASSWORD=my_password
+    DOMAINS='@softndesign.org @oelm.org'
diff --git a/convert2sms.sh b/convert2sms.sh
new file mode 100755 (executable)
index 0000000..f110459
--- /dev/null
@@ -0,0 +1,109 @@
+#!/bin/bash
+
+# constants
+MYDIR=$(dirname $0)
+PROGNAME=$(basename $0)
+
+# configuration variables
+CONFIG=$MYDIR/convert2sms.rc
+DOMAINS=$(hostname -d | awk '{ print "@" $0 }')
+[ -f "$CONFIG" ] && source $CONFIG
+[ -z "$GATEWAY" -o -z "$PASSWORD" ] \
+    && { echo "No valid configuration"; exit 1; }
+
+# default variables
+DRYRUN=
+PHONE=
+TEMPFILE=$HOME/tmp/smsto.$$
+
+# urlencode function
+function urlencode () {
+    string=$*
+
+    #[ "$DRYRUN" ] && { echo $string; return; }
+
+    for ((i = 0 ; i < ${#string} ; i++ )); do
+        c=${string:$i:1}
+        case "$c" in
+        [-_.~a-zA-Z0-9]) echo -n $c;;
+       *) printf '%%%02x' "'$c"
+       esac
+    done
+}
+
+# log function
+function log () {
+    [ "$DRYRUN" ] && echo -e "\033[1;34m$*\033[0;0m" \
+        || logger -i -t SMSTO "$*"
+}
+
+# usage function
+function usage () {
+    echo "usage: $PROGNAME [-h] [-p ..........]"
+    echo "   -d: dryrun"
+    echo "   -h: help message"
+    echo "   -p: phone number"
+    exit $1
+}
+
+# get phone number from argument
+while [ $# -ne 0 ]; do
+    case "$1" in
+    -d) DRYRUN=1;;
+    -h) usage 0;;
+    -p) shift; PHONE=$1;;
+    *) usage 1;;
+    esac
+    shift
+done
+[ "$PHONE" ] || usage 1
+
+# clean up when done
+trap "/bin/rm -f $TEMPFILE" 0 1 2 3 15
+
+# get mail from standard input
+while read -t 1 line; do
+    echo "$line" >> $TEMPFILE
+done
+[ -f "$TEMPFILE" ] || { echo "No input email"; exit 1; }
+
+# analyse message to get sender and subject
+FROM=$(awk '$1 == "From:" { sub(/[^ ]*: */, ""); print }' $TEMPFILE)
+SUBJECT=$(awk '$1 == "Subject:" { sub(/[^ ]*: */, ""); print }' $TEMPFILE)
+MESSAGE=$(awk '/^$/,0 { if (/^--/) exit; if (!/^$/) print }' $TEMPFILE)
+
+# check sender domain
+ERR=1
+[ "$DOMAINS" ] || ERR=0
+for d in $DOMAINS; do
+    [ "$FROM" ] || break;
+    [[ $FROM =~ $d ]] && { ERR=0; break; }
+done
+[ $ERR -ne 0 ] && { log "Reject from '$FROM'"; exit 1; }
+
+# check the right pattern of the number
+[[ "$PHONE" =~ ^0[0-9]*$ ]] \
+    || { log "Incorrect phone number '$PHONE' from '$FROM'"; exit 1; }
+[[ "$PHONE" =~ ^00 ]] \
+    && { log "International phone number '$PHONE' from '$FROM'"; exit 1; }
+[ ${#PHONE} -eq 10 ] \
+    || { log "Non standard phone number '$PHONE' from '$FROM'"; exit 1; }
+
+# log message
+log "Accept from '$FROM' to $PHONE"
+
+# build message
+EMAIL=${FROM/#*<}; EMAIL=${EMAIL/%>*}
+FROM=${FROM/%<*}; FROM=${FROM/% }
+[ "$FROM" ] || FROM=EMAIL
+[ "$SUBJECT" ] && SUBJECT=" "$SUBJECT":"
+[ "$MESSAGE" ] && MESSAGE=$'\n'$MESSAGE
+
+MESSAGE=$(urlencode "[$FROM]$SUBJECT$MESSAGE")
+
+# send http command
+[ "$DRYRUN" ] && echo "SMS: $MESSAGE" \
+    || wget --quiet --output-document=/dev/null \
+        "http://$GATEWAY:9090/sendsms?phone=$PHONE&text=$MESSAGE&password=$PASSWORD"
+
+exit $?
diff --git a/procmailrc b/procmailrc
new file mode 100644 (file)
index 0000000..08f51c5
--- /dev/null
@@ -0,0 +1,15 @@
+PATH=$HOME/bin:/usr/bin:/bin:/usr/local/bin
+LOGFILE=$HOME/log.`date +%y-%m-%d`
+LOCKFILE=$HOME/.lockmail
+VERBOSE=yes
+
+SMSDEST=$1
+
+:0
+{
+        :0 c
+        | $HOME/bin/convert2sms.sh -p $SMSDEST
+
+        :0
+        Maildir/transmitted/
+}