Files
proxmox/scripts/list-npmplus-proxy-hosts-cert-status.sh.bak

56 lines
2.5 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
# List all NPMplus proxy hosts and whether each has a certificate assigned.
# Uses .env for NPM_URL, NPM_EMAIL, NPM_PASSWORD.
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
cd "$PROJECT_ROOT"
_orig_npm_url="${NPM_URL:-}"
_orig_npm_email="${NPM_EMAIL:-}"
_orig_npm_password="${NPM_PASSWORD:-}"
[ -f .env ] && { set +u; set -a; source .env 2>/dev/null || true; set +a; set -u; }
[ -n "$_orig_npm_url" ] && NPM_URL="$_orig_npm_url"
[ -n "$_orig_npm_email" ] && NPM_EMAIL="$_orig_npm_email"
[ -n "$_orig_npm_password" ] && NPM_PASSWORD="$_orig_npm_password"
NPM_URL="${NPM_URL:-https://192.168.11.167:81}"
NPM_EMAIL="${NPM_EMAIL:-admin@example.org}"
NPM_PASSWORD="${NPM_PASSWORD:-}"
[ -z "$NPM_PASSWORD" ] && { echo "NPM_PASSWORD required (e.g. in .env)"; exit 1; }
AUTH_JSON=$(jq -n --arg identity "$NPM_EMAIL" --arg secret "$NPM_PASSWORD" '{identity:$identity,secret:$secret}')
TOKEN=$(curl -s -k -X POST "$NPM_URL/api/tokens" -H "Content-Type: application/json" -d "$AUTH_JSON" | jq -r '.token // empty')
[ -z "$TOKEN" ] || [ "$TOKEN" = "null" ] && { echo "Auth failed"; exit 1; }
PROXY_JSON=$(curl -s -k -X GET "$NPM_URL/api/nginx/proxy-hosts" -H "Authorization: Bearer $TOKEN")
TOTAL=$(echo "$PROXY_JSON" | jq 'length')
WITH_CERT=$(echo "$PROXY_JSON" | jq '[.[] | select(.certificate_id != null and .certificate_id > 0)] | length')
NO_CERT=$(echo "$PROXY_JSON" | jq '[.[] | select(.certificate_id == null or .certificate_id == 0)] | length')
echo ""
echo "NPMplus Proxy Hosts vs Certificates"
echo "Total proxy hosts: $TOTAL | With cert: $WITH_CERT | No cert: $NO_CERT"
echo ""
printf "%-6s %-50s %-10s\n" "ID" "Domain(s)" "Cert ID"
echo "--------------------------------------------------------------------------------"
echo "$PROXY_JSON" | jq -c '.[]' | while read -r host; do
id=$(echo "$host" | jq -r '.id')
domains=$(echo "$host" | jq -r '.domain_names // [] | if type == "array" then join(", ") else . end' | head -c 48)
cert_id=$(echo "$host" | jq -r '.certificate_id // 0')
[ "$cert_id" = "null" ] || [ -z "$cert_id" ] && cert_id="0"
[ "$cert_id" = "0" ] && cert_display="— none —" || cert_display="$cert_id"
printf "%-6s %-50s %-10s\n" "$id" "$domains" "$cert_display"
done
echo ""
if [ "$NO_CERT" -gt 0 ]; then
echo "Hosts without a certificate (request cert in NPM UI or run request-npmplus-certificates.sh):"
echo "$PROXY_JSON" | jq -r '.[] | select(.certificate_id == null or .certificate_id == 0) | " \(.id) \(.domain_names | join(", "))"'
echo ""
fi