#!/bin/bash # PiVPN: list clients script # Updated Script to include Expiration Dates and # Clean up Escape Seq -- psgoundar INDEX="/etc/openvpn/easy-rsa/pki/index.txt" EASYRSA="/etc/openvpn/easy-rsa/easyrsa" err() { echo "[$(date +'%Y-%m-%dT%H:%M:%S%z')]: $*" >&2 } if [[ ! -f "${INDEX}" ]]; then err "The file: ${INDEX} was not found!" exit 1 fi if [[ ! -f "${EASYRSA}" ]]; then err "The file: ${EASYRSA} was not found!" exit 1 fi "${EASYRSA}" update-db >> /dev/null 2>&1 printf ": NOTE : The first entry is your server, " printf "which should always be valid!\n" printf "\\n" printf "\\e[1m::: Certificate Status List :::\\e[0m\\n" { printf "\\e[4mStatus\\e[0m \t \\e[4mName\\e[0m\\e[0m \t " printf "\\e[4mExpiration\\e[0m\\n" while read -r line || [[ -n "${line}" ]]; do STATUS="$(echo "${line}" | awk '{print $1}')" NAME="$(echo "${line}" | awk -FCN= '{print $2}')" EXPD="$(echo "${line}" \ | awk '{if (length($2) == 15) print $2; else print "20"$2}' \ | cut -b 1-8 \ | date +"%b %d %Y" -f -)" if [[ "${STATUS}" == "V" ]]; then printf "Valid" elif [[ "${STATUS}" == "R" ]]; then printf "Revoked" elif [[ "${STATUS}" == "E" ]]; then printf "Expired" else printf "Unknown" fi printf " \t %s \t %s\\n" "$(echo -e "${NAME}")" "${EXPD}" done < "${INDEX}" printf "\\n" } | column -t -s $'\t'