#!/bin/bash

# **********************************
# * T-zones-sms                    * 
# * Written by Zdenek Zamecnik     *
# * December/2010                  *
# **********************************

username=xxx
password=yyy

agent="Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.13) Gecko/20101206 Linux Firefox/3.6.13"
cookies="/tmp/t-zones-sms.cookies"
timer="/tmp/t-zones-sms.timer"
login_url="https://www.t-mobile.cz/.gang/login/tzones"
logout_url="https://www.t-mobile.cz/.gang/logout/tzones"
sms1_url="https://sms.client.tmo.cz/"
sms2_url="https://sms.client.tmo.cz/closed.jsp"
lock="/tmp/t-zones-sms.lock"

function log()
  {
  if [ -z $quiet ]; then
    echo "$1"
  fi
  echo "$1" | logger -t "t-zones-sms"
  }

if [ $1 == "--help" ]; then
  echo 'Usage: t-zones-sms -n <phone number> -m "<message>" [OPTIONS]'
  echo '  -n	Comma delimited phone numbers of recipients'
  echo '  -m	Content of message'
  echo '  -q	Quiet, without progress information'
  echo '  -d	Send on display only'
  echo '  -c	Send delivery confirmation'
  echo '  -h    Save history in t-zones'
  exit 1
fi

type=0
confirm=0
history=""
while getopts "m:n:qdch" option; do
  case "$option" in
    n) recipients=$OPTARG;;
    m) message="$OPTARG";;
    q) quiet=y;;
    d) type=1;;
    c) confirm=1;;
    h) history="&history=on";;
    *) echo "Bad option: $option"
       exit 1
       ;;
  esac
done

if [ -z "$recipients" ]; then
  echo "Missing argument -n"
  exit 1
fi

if [ -z "$message" ]; then
  echo "Missing argument -m"
  exit 1
fi

wait=n
while [ $(pgrep $(echo $0 | sed 's/.*\///') | wc -l) -gt 1 ] && [ -f $lock ]; do
  if [ "$wait" == "n" ]; then
    log "Waiting because there is some concurrent sending"
    wait=y
  fi
  sleep 1
done
touch $lock

message=$(echo $message | sed -e's/./&\n/g' -e's/ /%20/g' | grep -v '^$' | while read CHAR; do test "${CHAR}" = "%20" && echo "${CHAR}" || echo "${CHAR}" | grep -E '[-[:alnum:]!*.'"'"'()]|\[|\]' || echo -n "${CHAR}" | od -t x1 | tr ' ' '\n' | grep '^[[:alnum:]]\{2\}$' | tr '[a-z]' '[A-Z]' | sed -e's/^/%/g'; done | sed -e's/%20/+/g' | tr -d '\n')

log "Connecting to t-zones"
wget $login_url \
	--save-cookies=$cookies \
	-U "$agent" \
	--keep-session-cookies -O /dev/null -q

logged=$(wget $login_url \
	--load-cookies=$cookies \
	--save-cookies=$cookies \
	-U "$agent" \
	--post-data="username=$username&password=$password" \
	--keep-session-cookies -O - -q | grep "$username" | wc -l)


if [ $logged -gt 0 ]; then
  log "Successfully logged in"
fi
wget $sms1_url \
	--load-cookies=$cookies \
	--save-cookies=$cookies \
	-U "$agent" \
	--keep-session-cookies \
	-O /dev/null -q


if [ -f $timer ]; then
  wait=n
  while [ $(($(date +%s)-$(cat $timer))) -lt 30 ]; do
    if [ "$wait" == "n" ]; then 
      log "Waiting due to operator limits"
      wait=y
    fi
    sleep 2
  done
fi

log "Sending message to $recipients"
counter=$(wget $sms2_url --load-cookies=$cookies --save-cookies=$cookies -U "$agent" --keep-session-cookies -O - -q | sed '/name="counter"/!d' | sed 's/.*value="//;s/".*//')
sent=$(wget $sms2_url \
	--load-cookies=$cookies \
	--save-cookies=$cookies \
	-U "$agent" \
	--post-data="counter=$counter&submit=Send&mtype=$type&confirmation=$confirm$history&text=$message&recipients=$recipients" \
	--keep-session-cookies \
	-O - -q | sed '/SMS zpráv[ay] byl[ay] odeslán[ay]/!d' | wc -l)

wget $logout_url \
	--load-cookies=$cookies \
	-U "$agent" \
	-O /dev/null -q
rm $cookies
rm $lock
date +%s > $timer

if [ $sent -eq 1 ]; then
  log "Message was sent"
else
  log "Sending failed!"
  exit 1
fi
