NPM: try all creds-file admin pairs + factory default for token
npm_get_token now attempts the sourced NPM_ADMIN_* pair, then every email/pass pair present in the credentials file, then admin@example.com/ changeme. Makes proxy-host automation resilient to duplicate, reordered, or placeholder NPM entries regardless of how they got there. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
d4b28dd41b
commit
eadbb383e7
1 changed files with 34 additions and 7 deletions
|
|
@ -1080,15 +1080,42 @@ print(json.dumps(locs))
|
||||||
# ════════════════════════════════════════════════════════════════════════════
|
# ════════════════════════════════════════════════════════════════════════════
|
||||||
|
|
||||||
# Returns a Bearer token for the NPM API, or empty string on failure.
|
# Returns a Bearer token for the NPM API, or empty string on failure.
|
||||||
|
# Robust against a messy creds file: tries the currently-sourced NPM_ADMIN_*
|
||||||
|
# pair, then EVERY email/pass pair found in the creds file (handles duplicates,
|
||||||
|
# ordering, and stale placeholders), then the NPM factory default.
|
||||||
npm_get_token() {
|
npm_get_token() {
|
||||||
local npm_ip="10.10.10.3" # stable internal NPM IP (vmbr1) — API only needs internal reach
|
local npm_ip="10.10.10.3" # stable internal NPM IP (vmbr1) — API only needs internal reach
|
||||||
local email="${NPM_ADMIN_EMAIL:-manage@hotel.com}"
|
|
||||||
local pass="${NPM_ADMIN_PASS:-}"
|
_try_token() {
|
||||||
[[ -z "$pass" ]] && { echo ""; return; }
|
local email=$1 pass=$2 tok
|
||||||
curl -sf -X POST "http://${npm_ip}:81/api/tokens" \
|
[[ -z "$email" || -z "$pass" ]] && return 1
|
||||||
|
tok=$(curl -sf -X POST "http://${npm_ip}:81/api/tokens" \
|
||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
-d "{\"identity\":\"${email}\",\"secret\":\"${pass}\"}" \
|
-d "{\"identity\":\"${email}\",\"secret\":\"${pass}\"}" \
|
||||||
2>/dev/null | grep -o '"token":"[^"]*"' | cut -d'"' -f4 || echo ""
|
2>/dev/null | grep -o '"token":"[^"]*"' | cut -d'"' -f4)
|
||||||
|
[[ -n "$tok" ]] && { echo "$tok"; return 0; }
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# 1. Currently-sourced pair
|
||||||
|
_try_token "${NPM_ADMIN_EMAIL:-}" "${NPM_ADMIN_PASS:-}" && return
|
||||||
|
|
||||||
|
# 2. Every email→pass pair in the creds file (pair each EMAIL with the
|
||||||
|
# NPM_ADMIN_PASS that follows it)
|
||||||
|
if [[ -f "$CREDS_FILE" ]]; then
|
||||||
|
local email="" line key val
|
||||||
|
while IFS= read -r line; do
|
||||||
|
case "$line" in
|
||||||
|
NPM_ADMIN_EMAIL=*) email="${line#*=}" ;;
|
||||||
|
NPM_ADMIN_PASS=*) _try_token "$email" "${line#*=}" && return; email="" ;;
|
||||||
|
esac
|
||||||
|
done < "$CREDS_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 3. NPM factory default (fresh, unconfigured install)
|
||||||
|
_try_token "admin@example.com" "changeme" && return
|
||||||
|
|
||||||
|
echo ""
|
||||||
}
|
}
|
||||||
|
|
||||||
configure_npm_proxy_hosts() {
|
configure_npm_proxy_hosts() {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue