refactor(scripts): supprimer expect — passer le mdp via stdin à keepassxc-cli

This commit is contained in:
MaksTinyWorkshop
2026-03-26 18:52:36 +01:00
parent 8aab830b15
commit 8ecc8db217
2 changed files with 12 additions and 63 deletions

View File

@@ -13,11 +13,6 @@ _load_global_secrets() {
return 1
fi
if ! command -v expect >/dev/null 2>&1; then
echo "expect introuvable" >&2
return 1
fi
if [ -z "${KDBX_PASSWORD:-}" ]; then
printf "Mot de passe KeePassXC : " >&2
stty -echo
@@ -28,39 +23,21 @@ _load_global_secrets() {
echo "Chargement des secrets globaux..." >&2
# Export CSV complet — log_file capture tout dès le début du spawn
local tmpfile
tmpfile=$(mktemp)
KDBX_PASSWORD="$KDBX_PASSWORD" SECRETS_KDBX="$SECRETS_KDBX" TMPFILE="$tmpfile" expect <<'EOF'
log_user 0
log_file -noappend $env(TMPFILE)
set timeout 30
spawn keepassxc-cli export --format csv $env(SECRETS_KDBX)
expect "Saisir le mot de passe pour déverrouiller*"
send -- "$env(KDBX_PASSWORD)\r"
expect eof
catch wait result
exit [lindex $result 3]
EOF
local rc=$?
local csv
csv=$(cat "$tmpfile")
rm -f "$tmpfile"
[ $rc -ne 0 ] && { echo "Impossible d'exporter le coffre." >&2; return 1; }
csv=$(printf '%s\n' "$KDBX_PASSWORD" | keepassxc-cli export --format csv "$SECRETS_KDBX" 2>/dev/null) || {
echo "Impossible d'exporter le coffre." >&2
return 1
}
# Parser le CSV avec python3 — gère les champs multilignes et les virgules dans les valeurs
# On cherche la ligne d'en-tête CSV pour ignorer le bruit du buffer expect
local pairs
pairs=$(printf '%s' "$csv" | python3 -c "
import sys, csv, re, io
raw = sys.stdin.read()
# Trouver la ligne d'en-tête CSV
start = raw.find('\"Group\"')
if start == -1:
sys.exit(0)
clean = raw[start:]
reader = csv.DictReader(io.StringIO(clean))
reader = csv.DictReader(io.StringIO(raw[start:]))
for row in reader:
group = row.get('Group', '')
title = row.get('Title', '')