#!/usr/bin/env bash # Pi-hole: A black hole for Internet advertisements # (c) 2017 Pi-hole, LLC (https://pi-hole.net) # Network-wide ad blocking via your own hardware. # # shows version numbers # # This file is copyright under the latest version of the EUPL. # Please see LICENSE file for your rights under this license. # Variables DEFAULT="-1" PHGITDIR="/etc/.pihole/" WEBGITDIR="/var/www/html/admin/" getLocalVersion() { # Get the tagged version of the local repository local directory="${1}" local version cd "${directory}" || { echo "${DEFAULT}"; return 1; } version=$(git describe --tags --always || \ echo "${DEFAULT}") if [[ "${version}" =~ ^v ]]; then echo "${version}" elif [[ "${version}" == "${DEFAULT}" ]]; then echo "ERROR" return 1 else echo "Untagged" fi return 0 } getLocalHash() { # Get the short hash of the local repository local directory="${1}" local hash cd "${directory}" || { echo "${DEFAULT}"; return 1; } hash=$(git rev-parse --short HEAD || \ echo "${DEFAULT}") if [[ "${hash}" == "${DEFAULT}" ]]; then echo "ERROR" return 1 else echo "${hash}" fi return 0 } getRemoteVersion(){ # Get the version from the remote origin local daemon="${1}" local version version=$(curl --silent --fail https://api.github.com/repos/pi-hole/${daemon}/releases/latest | \ awk -F: '$1 ~/tag_name/ { print $2 }' | \ tr -cd '[[:alnum:]]._-') if [[ "${version}" =~ ^v ]]; then echo "${version}" else echo "ERROR" return 1 fi return 0 } #PHHASHLATEST=$(curl -s https://api.github.com/repos/pi-hole/pi-hole/commits/master | \ # grep sha | \ # head -n1 | \ # awk -F ' ' '{ print $2 }' | \ # tr -cd '[[:alnum:]]._-') #WEBHASHLATEST=$(curl -s https://api.github.com/repos/pi-hole/AdminLTE/commits/master | \ # grep sha | \ # head -n1 | \ # awk -F ' ' '{ print $2 }' | \ # tr -cd '[[:alnum:]]._-') normalOutput() { echo "::: Pi-hole version is $(getLocalVersion "${PHGITDIR}") (Latest version is $(getRemoteVersion pi-hole))" if [ -d "${WEBGITDIR}" ]; then echo "::: Web-Admin version is $(getLocalVersion "${WEBGITDIR}") (Latest version is $(getRemoteVersion AdminLTE))" fi } webOutput() { if [ -d "${WEBGITDIR}" ]; then case "${1}" in "-l" | "--latest" ) echo $(getRemoteVersion AdminLTE);; "-c" | "--current" ) echo $(getLocalVersion "${WEBGITDIR}");; "-h" | "--hash" ) echo $(getLocalHash "${WEBGITDIR}");; * ) echo "::: Invalid Option!"; exit 1; esac else echo "::: Web interface not installed!"; exit 1; fi } coreOutput() { case "${1}" in "-l" | "--latest" ) echo $(getRemoteVersion pi-hole);; "-c" | "--current" ) echo $(getLocalVersion "${PHGITDIR}");; "-h" | "--hash" ) echo $(getLocalHash "${PHGITDIR}");; * ) echo "::: Invalid Option!"; exit 1; esac } helpFunc() { cat << EOM ::: ::: Show Pi-hole/Web Admin versions ::: ::: Usage: pihole -v [ -a | -p ] [ -l | -c ] ::: ::: Options: ::: -a, --admin Show both current and latest versions of web admin ::: -p, --pihole Show both current and latest versions of Pi-hole core files ::: -l, --latest (Only after -a | -p) Return only latest version ::: -c, --current (Only after -a | -p) Return only current version ::: -h, --help Show this help dialog ::: EOM exit 0 } if [[ $# = 0 ]]; then normalOutput fi case "${1}" in "-a" | "--admin" ) shift; webOutput "$@";; "-p" | "--pihole" ) shift; coreOutput "$@" ;; "-h" | "--help" ) helpFunc;; esac