Merge pull request 'fix: feat: disinto secrets add — accept piped stdin for non-interactive imports (#776)' (#786) from fix/issue-776 into main
All checks were successful
ci/woodpecker/push/ci Pipeline was successful

This commit is contained in:
dev-bot 2026-04-15 14:19:47 +00:00
commit d6c8fd8127

View file

@ -1180,30 +1180,51 @@ disinto_secrets() {
case "$subcmd" in case "$subcmd" in
add) add)
local name="${2:-}" # Parse flags
local force=false
shift # consume 'add'
while [ $# -gt 0 ]; do
case "$1" in
-f|--force) force=true; shift ;;
-*) echo "Unknown flag: $1" >&2; exit 1 ;;
*) break ;;
esac
done
local name="${1:-}"
if [ -z "$name" ]; then if [ -z "$name" ]; then
echo "Usage: disinto secrets add <NAME>" >&2 echo "Usage: disinto secrets add [-f|--force] <NAME>" >&2
exit 1 exit 1
fi fi
_secrets_ensure_age_key _secrets_ensure_age_key
mkdir -p "$secrets_dir" mkdir -p "$secrets_dir"
printf 'Enter value for %s: ' "$name" >&2
local value local value
IFS= read -rs value if [ -t 0 ]; then
echo >&2 # Interactive TTY — prompt with hidden input (original behavior)
printf 'Enter value for %s: ' "$name" >&2
IFS= read -rs value
echo >&2
else
# Piped/redirected stdin — read raw bytes verbatim
IFS= read -r -d '' value || true
fi
if [ -z "$value" ]; then if [ -z "$value" ]; then
echo "Error: empty value" >&2 echo "Error: empty value" >&2
exit 1 exit 1
fi fi
local enc_path="${secrets_dir}/${name}.enc" local enc_path="${secrets_dir}/${name}.enc"
if [ -f "$enc_path" ]; then if [ -f "$enc_path" ] && [ "$force" = false ]; then
printf 'Secret %s already exists. Overwrite? [y/N] ' "$name" >&2 if [ -t 0 ]; then
local confirm printf 'Secret %s already exists. Overwrite? [y/N] ' "$name" >&2
read -r confirm local confirm
if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then read -r confirm
echo "Aborted." >&2 if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
echo "Aborted." >&2
exit 1
fi
else
echo "Error: secret ${name} already exists (use -f to overwrite)" >&2
exit 1 exit 1
fi fi
fi fi