#!/bin/bash

# version 0.0.4

usage() {
  >&2 echo 'usage: tinc-check $net_name [-n]'
  exit 1
}

if [ "$#" -eq 0 ]; then
  usage
fi

net_name="$1"
shift

dummy=false
while [ $# -ne 0 ]; do
  case "$1" in
    '-n')
      dummy=true
    ;;
    *)
      usage
    ;;
  esac
  shift
done

. '/etc/tinc-extras.conf'

restart() {
  if ${dummy}; then
    echo 'needs restart'
  else
    if [ -f '/etc/rc.d/tinc' ]; then
      /etc/rc.d/tinc restart
    elif [ -f '/etc/init.d/tinc' ]; then
      rc-service -D tinc restart
    else
      systemctl restart tinc.service
    fi
  fi
  exit
}

if [ -z "$(pgrep -af "tincd -n ${net_name}")" ]; then
  restart
fi

if ! ls "/etc/tinc/${net_name}/hosts" \
| grep -vxFf <(
  tinc -n "${net_name}" dump reachable nodes \
  | cut -d ' ' -f1
) \
| sed '
  s@^@'"/etc/tinc/${net_name}/hosts/"'@
' \
| xargs -r sed -n '
  s/^Address\s*=\s*//
  T
  p
' \
| parallel -j0 -n1 dig +short \
| grep -v '^;' \
| grep -v '^10\.' \
| grep -v '^192\.'; then
  restart
fi
