#!/usr/bin/env bash set -e; usage() { USAGE=$(cat <'. EOF ) echo "$USAGE"; } # check for config file source_config() { local config=$1; local configFallback=$2; if [[ ! -f "$config" ]]; then if [[ ! -f "$configFallback" ]]; then echo "No config file specified and could not find default in '$configFallback'!"; echo ""; usage; exit 1; else config=$configFallback; fi fi set -a; source "$config"; set +a; } apply_defaults() { if [ -z ${DYNV6_MAIL_ENABLED} ]; then DYNV6_MAIL_ENABLED=false; fi if [ -z ${DYNV6_MAIL_ADDRESS} ]; then DYNV6_MAIL_ADDRESS=""; fi if [ -z ${DYNV6_TOKEN} ]; then DYNV6_TOKEN=""; fi if [ -z ${DYNV6_HOSTNAME} ]; then DYNV6_HOSTNAME=""; fi if [ -z ${DYNV6_IPV4_ENABLED} ]; then DYNV6_IPV4_ENABLED=true; fi if [ -z ${DYNV6_IPV6_ENABLED} ]; then DYNV6_IPV6_ENABLED=true; fi } check_required() { if [ -z ${DYNV6_TOKEN} ]; then echo "DYNV6_TOKEN is required" exit 1; fi if [ -z ${DYNV6_HOSTNAME} ]; then echo "DYNV6_HOSTNAME is required" exit 1; fi } # check requirements CONFIG_FILE="$1"; FALLBACK_CONFIG_FILE="${HOME}/.dynv6.conf"; source_config "${CONFIG_FILE}" "${FALLBACK_CONFIG_FILE}"; apply_defaults; check_required; # DO NOT CHANGE token=${DYNV6_TOKEN} hostname=${DYNV6_HOSTNAME} echo "Checking ${hostname}" # check via service # ipv6 if [ "${DYNV6_IPV6_ENABLED}" = "true" ]; then echo "Testing IPv6"; ipv6Address=$(curl -s "https://v6.ident.me/") ipv6Res=$(curl -fsS "http://ipv6.dynv6.com/api/update?hostname=${hostname}&ipv6=${ipv6Address}&token=${token}") ipv6Changed=true; if [ "${ipv6Res}" = "addresses unchanged" ]; then ipv6Changed=false; fi if [ "${ipv6Changed}" = "true" ]; then echo "IPv6 changed" if [ "${DYNV6_MAIL_ENABLED}" = "true" ]; then HOSTMACHINE=$(hostname) echo -e "IPv6 for ${hostname} on host ${HOSTMACHINE} changed to ${ipv6Address}" | mailx -s "[dynv6 IPv6 ${HOSTMACHINE}] IPv6 changed for ${hostname}" "${DYNV6_MAIL_ADDRESS}" fi fi fi # ipv4 if [ "${DYNV6_IPV4_ENABLED}" = "true" ]; then echo "Testing IPv4"; ipv4Address=$(curl -s "https://v4.ident.me/") ipv4Res=$(curl -fsS "http://ipv4.dynv6.com/api/update?hostname=${hostname}&ipv4=${ipv4Address}&token=${token}") ipv4Changed=true; if [ "$ipv4Res" = "addresses unchanged" ]; then ipv4Changed=false; fi if [ "${ipv4Changed}" = "true" ]; then echo "IPv4 changed" if [ "${DYNV6_MAIL_ENABLED}" = "true" ]; then HOSTMACHINE=$(hostname) echo -e "IPv4 for ${hostname} on host ${HOSTMACHINE} changed changed to ${ipv4Address}" | mailx -s "[dynv6 IPv4 ${HOSTMACHINE}] IPv4 changed for ${hostname}" "${DYNV6_MAIL_ADDRESS}" fi fi fi