diff --git a/scripts/load-global-secrets.sh b/scripts/load-global-secrets.sh index 1ff153e..fe64f9a 100755 --- a/scripts/load-global-secrets.sh +++ b/scripts/load-global-secrets.sh @@ -28,23 +28,27 @@ _load_global_secrets() { echo "Chargement des secrets globaux..." >&2 - # Export CSV complet — une seule ouverture du coffre - local csv - csv=$(KDBX_PASSWORD="$KDBX_PASSWORD" SECRETS_KDBX="$SECRETS_KDBX" expect <<'EOF' + # Export CSV complet — via fichier temporaire pour capturer tout le stdout + local tmpfile + tmpfile=$(mktemp) + KDBX_PASSWORD="$KDBX_PASSWORD" SECRETS_KDBX="$SECRETS_KDBX" TMPFILE="$tmpfile" expect <<'EOF' log_user 0 set timeout 30 + set fh [open $env(TMPFILE) w] 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 + puts $fh $expect_out(buffer) + close $fh catch wait result - puts -nonewline $expect_out(buffer) exit [lindex $result 3] EOF - ) || { - echo "Impossible d'exporter le coffre." >&2 - return 1 - } + local rc=$? + local csv + csv=$(cat "$tmpfile") + rm -f "$tmpfile" + [ $rc -ne 0 ] && { 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 diff --git a/scripts/sync-service-secrets.sh b/scripts/sync-service-secrets.sh index 063890d..ae83381 100755 --- a/scripts/sync-service-secrets.sh +++ b/scripts/sync-service-secrets.sh @@ -39,23 +39,27 @@ _sync_service_secrets() { echo "Sync des secrets de service..." >&2 - # Export CSV complet — une seule ouverture du coffre - local csv - csv=$(KDBX_PASSWORD="$KDBX_PASSWORD" SECRETS_KDBX="$SECRETS_KDBX" expect <<'EOF' + # Export CSV complet — via fichier temporaire pour capturer tout le stdout + local tmpfile + tmpfile=$(mktemp) + KDBX_PASSWORD="$KDBX_PASSWORD" SECRETS_KDBX="$SECRETS_KDBX" TMPFILE="$tmpfile" expect <<'EOF' log_user 0 set timeout 30 + set fh [open $env(TMPFILE) w] 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 + puts $fh $expect_out(buffer) + close $fh catch wait result - puts -nonewline $expect_out(buffer) exit [lindex $result 3] EOF - ) || { - echo "Impossible d'exporter le coffre." >&2 - return 1 - } + local rc=$? + local csv + csv=$(cat "$tmpfile") + rm -f "$tmpfile" + [ $rc -ne 0 ] && { 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