#!/bin/sh
# ddnsc.sh
# 2020-05-31
# by Gernot Walzl

URL="https://gernot-walzl.at/ddns.php"
USER="username"
PASS="password"
HOST="$(hostname)"
if [ -r /etc/ddnsc.conf ]; then
  . /etc/ddnsc.conf
fi

print_usage () {
  echo "Usage: $0 {checkip, update [addr], daemon [interval]}"
}

checkip () {
  wget -4 -q -O - "${URL}?checkip"
}

update () {
  local POST_DATA="hostname=$HOST"
  if [ ! -z "$1" ]; then
    POST_DATA="${POST_DATA}&addr=$1"
  fi
  wget -4 -q -O - \
    --http-user="$USER" --http-password="$PASS" \
    --post-data "$POST_DATA" "${URL}?update"
}

daemon () {
  local INTERVAL="$1"
  if [ -z "$INTERVAL" ]; then
    INTERVAL=600
  fi
  local CURRENT_ADDR;
  local UPDATED_ADDR;
  while :; do
    CURRENT_ADDR="$(checkip)"
    if [ "$CURRENT_ADDR" != "$UPDATED_ADDR" ]; then
      if update "$CURRENT_ADDR" > /dev/null ; then
        UPDATED_ADDR="$CURRENT_ADDR"
      fi
    fi
    sleep "$INTERVAL";
  done
}

case "$1" in
'checkip')
  checkip
  ;;
'update')
  update "$2"
  ;;
'daemon')
  daemon "$2" &
  ;;
*)
  print_usage
esac
