fix: LNbits API version compatibility in get-lnbits-key.sh (#10)
Tracks Gitea issue token-gated-economy #19. ## Problem LNbits 0.12 removed the superuser wallet creation API. The old script silently fell through to generic manual instructions with no explanation. version_gte() using `sort -V` was also not supported on macOS (BSD sort). ## Changes to scripts/bitcoin-ln-node/get-lnbits-key.sh 1. **Unreachable health check — warning + exit 0** (was hard die) curl uses `|| true` — if response is empty, warns the operator to start LNbits, prints the export template, and exits 0. 2. **macOS-safe version_gte()** — replaced `sort -V -C` (GNU-only) with: - Primary: python3 inline script (parses major.minor.patch as int lists) - Fallback: pure-bash numeric comparison (no external tools required) All 6 test cases pass: 0.12.0==, 0.12.3>, 1.0.0>, 0.11.9<, 0.9.0<, 0.12.0>0.11.9. 3. **Version detection** — calls GET /api/v1/health, parses server_version via python3, prints it. Falls back to "0.12.0" (safe modern default) with a warning if unparseable. 4. **Version-branched flow** - >= 0.12: skips superuser API; prints 5-step Admin UI walk-through (/admin → Users → Create User → wallet → API Info → Admin key). - < 0.12: existing superuser detection (env file → secrets file → lnbits.log grep) + wallet creation API, unchanged. 5. **SQLite fallback removed** — the sqlite3 "SELECT id FROM accounts WHERE is_super_user=1" block targeted wrong schema on 0.12+. Deleted. 6. **Export template always printed** via print_export_template() helper called in every exit path: unreachable, >=0.12, <0.12 success, fallbacks. ## Changes to scripts/bitcoin-ln-node/setup.sh Added LNbits version compatibility note to the "Done" summary so operators know upfront that >=0.12 requires the Admin UI path. ## Verified - bash -n syntax OK on both files - version_gte(): 6/6 test cases correct with python3 comparator - Unreachable-LNbits path: warns, prints template, exits 0 (simulated) - No sqlite3/sort -V references remain in get-lnbits-key.sh
This commit is contained in:
@@ -24,8 +24,32 @@ die() { echo -e "${RED}[error]${NC} $*" >&2; exit 1; }
|
||||
|
||||
# ─── Helpers ─────────────────────────────────────────────────────────────────
|
||||
|
||||
# Return 0 (true) if $1 >= $2 (semantic version comparison)
|
||||
version_gte() { printf '%s\n%s\n' "$2" "$1" | sort -V -C; }
|
||||
# Return 0 (true) if $1 >= $2 (semver comparison, macOS/BSD-safe)
|
||||
# Uses python3 when available (already required for JSON parsing elsewhere),
|
||||
# otherwise falls back to pure-bash numeric major.minor.patch comparison.
|
||||
version_gte() {
|
||||
local v1="$1" v2="$2"
|
||||
if command -v python3 &>/dev/null; then
|
||||
python3 - "$v1" "$v2" <<'PYEOF'
|
||||
import sys
|
||||
def parse(v):
|
||||
parts = v.strip().split(".")
|
||||
return [int(x) for x in (parts + ["0","0","0"])[:3]]
|
||||
sys.exit(0 if parse(sys.argv[1]) >= parse(sys.argv[2]) else 1)
|
||||
PYEOF
|
||||
else
|
||||
# Pure-bash fallback: split on dots, compare numerically
|
||||
local IFS=.
|
||||
# shellcheck disable=SC2206
|
||||
local a=($v1) b=($v2)
|
||||
for i in 0 1 2; do
|
||||
local av="${a[$i]:-0}" bv="${b[$i]:-0}"
|
||||
if (( av > bv )); then return 0; fi
|
||||
if (( av < bv )); then return 1; fi
|
||||
done
|
||||
return 0 # equal
|
||||
fi
|
||||
}
|
||||
|
||||
# Print the export template the operator needs to paste into Replit Secrets
|
||||
print_export_template() {
|
||||
|
||||
@@ -328,6 +328,11 @@ echo " 1. Create your LND wallet: lncli --lnddir=$LND_DIR create"
|
||||
echo " 2. Check sync status: bash $SCRIPT_DIR/status.sh"
|
||||
echo " 3. Once synced, get key: bash $SCRIPT_DIR/get-lnbits-key.sh"
|
||||
echo ""
|
||||
echo " LNbits key retrieval (get-lnbits-key.sh):"
|
||||
echo " • LNbits < 0.12 — auto-creates a wallet via the superuser API"
|
||||
echo " • LNbits >= 0.12 — superuser API removed; script walks you through"
|
||||
echo " the Admin UI at http://localhost:5000/admin"
|
||||
echo ""
|
||||
echo " Secrets are in: $SECRETS_FILE"
|
||||
echo " Logs are in: $LOG_DIR/"
|
||||
echo ""
|
||||
|
||||
Reference in New Issue
Block a user