#!/usr/bin/env bash

# there are a few different ways to resolve public-ip,
# keep trying until we get a result

# dig
if [[ -n $(command -v 'dig') ]]; then
    # via opendns
    address=$(dig '@resolver1.opendns.com' -4 'myip.opendns.com' A '+short')
    if [[ "$?" -ne '0' ]]; then
        # dig was unsuccessful
        echo "${address}" 1>&2
        address=''
    fi
fi

# curl
if [[ -z "${address}" ]] && [[ -n $(command -v 'curl') ]]; then
    # via ipinfo.io
    address=$(curl -4 --fail --silent --show-error 'https://ipinfo.io/ip')

    if [[ -z "${address}" ]]; then
        # via google
        address=$(curl -4 --fail --silent --show-error 'https://domains.google.com/checkip')
    fi
fi

# wget
if [[ -z "${address}" ]] && [[ -n $(command -v 'wget') ]]; then
    # via ipinfo.io
    address=$(wget -4 --quiet --output-document - 'https://ipinfo.io/ip')

    if [[ -z "${address}" ]]; then
        # via google
        address=$(wget -4 --quiet --output-document - 'https://domains.google.com/checkip')
    fi
fi

if [[ -n "${address}" ]]; then
    echo "${address}"
else
    echo 'Tried everything, unable to resolve IP address.' 1>&2
fi

