Files
Senko-san 1b251869c4 initial
2026-06-08 12:49:45 +03:00

23 lines
904 B
Bash

# Secret generation. Secrets are generated, never requested from the user,
# and never printed. URL-safe alphanumerics only (avoid shell/URL/env quoting
# pitfalls in .env and connection strings).
#
# Note: we deliberately avoid `... | head -c N` here. Under `set -o pipefail`
# head closes the pipe early, the upstream producer dies with SIGPIPE, and the
# whole script would abort. Instead we read a full chunk and slice in bash.
# gen_secret [LENGTH] — alphanumeric token, default 32 chars. Sets SECRET.
gen_secret() {
local len="${1:-32}" raw=""
while ((${#raw} < len)); do
# openssl finishes before tr reads EOF — no early pipe close.
raw+="$(openssl rand -base64 $((len + 16)) | LC_ALL=C tr -dc 'A-Za-z0-9')"
done
SECRET="${raw:0:len}"
}
# gen_hex BYTES — hex string (e.g. JWT secret). Sets SECRET.
gen_hex() {
SECRET="$(openssl rand -hex "${1:-32}")"
}