55 lines
1.2 KiB
Bash
Executable File
55 lines
1.2 KiB
Bash
Executable File
#!/bin/sh
|
|
set -eu
|
|
|
|
ROOT=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
|
|
ENV_FILE="$ROOT/.env"
|
|
|
|
if [ ! -f "$ENV_FILE" ]; then
|
|
echo "Missing $ENV_FILE. Copy .env.example to .env first." >&2
|
|
exit 1
|
|
fi
|
|
|
|
for command in openssl perl; do
|
|
if ! command -v "$command" >/dev/null 2>&1; then
|
|
echo "Required command is unavailable: $command" >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
current=$(
|
|
perl -ne '
|
|
if (/^METRICS_TOKEN=(.*)$/) {
|
|
print $1;
|
|
exit;
|
|
}
|
|
' "$ENV_FILE"
|
|
)
|
|
|
|
if [ -n "$current" ]; then
|
|
chmod 600 "$ENV_FILE"
|
|
echo "METRICS_TOKEN already exists; no secret was changed."
|
|
exit 0
|
|
fi
|
|
|
|
new_metrics_token=$(openssl rand -hex 32)
|
|
tmp_env=$(mktemp "${ENV_FILE}.metrics.XXXXXX")
|
|
trap 'rm -f "$tmp_env"' EXIT HUP INT TERM
|
|
chmod 600 "$tmp_env"
|
|
|
|
NEW_METRICS_TOKEN=$new_metrics_token perl -0pe '
|
|
if (s/^METRICS_TOKEN=.*$/METRICS_TOKEN=$ENV{NEW_METRICS_TOKEN}/m) {
|
|
$replaced = 1;
|
|
}
|
|
|
|
END {
|
|
print "\nMETRICS_TOKEN=$ENV{NEW_METRICS_TOKEN}\n" unless $replaced;
|
|
}
|
|
' "$ENV_FILE" >"$tmp_env"
|
|
|
|
mv "$tmp_env" "$ENV_FILE"
|
|
chmod 600 "$ENV_FILE"
|
|
trap - EXIT HUP INT TERM
|
|
unset new_metrics_token
|
|
|
|
echo "Generated METRICS_TOKEN in the ignored .env without printing it."
|