fix(scripts): جلوگیری از تولید راز خالی و اجرای اسکریپت پیشنمایش با python3
- gen-env.sh: rand با دو آرگومان صدا زده میشد ولی فقط $1 را میخواند؛ openssl rand -hex بدون تعداد بایت خروجی خالی و کد ۰ میدهد، پس fallback هرگز اجرا نمیشد و .env با رازهای خالی ساخته میشد. حالا تعداد بایت رعایت میشود و اگر مقداری خالی بماند، اسکریپت با خطا متوقف میشود. - preview-mode.sh: python روی اوبونتو ۲۴.۰۴ وجود ندارد (فقط python3).
This commit is contained in:
+7
-1
@@ -15,13 +15,19 @@ if [ -f .env ] && [ "${1:-}" != "--force" ]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
rand() { openssl rand -"$1" 2>/dev/null || head -c 64 /dev/urandom | od -An -tx1 | tr -d ' \n'; }
|
||||
rand() { local bytes="${2:-32}"; openssl rand -hex "$bytes" 2>/dev/null || head -c "$bytes" /dev/urandom | od -An -tx1 | tr -d ' \n'; }
|
||||
|
||||
SECRET_KEY="$(rand hex 48)"
|
||||
POSTGRES_PASSWORD="$(rand hex 16)"
|
||||
MINIO_ROOT_PASSWORD="$(rand hex 16)"
|
||||
ADMIN_PASSWORD="$(rand hex 12)"
|
||||
|
||||
# بدون این بررسی، شکست تولید تصادفی به .env خالی میرسد و بعداً با خطای مبهم
|
||||
# ${VAR:?} در compose ظاهر میشود.
|
||||
for v in SECRET_KEY POSTGRES_PASSWORD MINIO_ROOT_PASSWORD ADMIN_PASSWORD; do
|
||||
[ -n "${!v}" ] || { echo "خطا: تولید مقدار تصادفی برای $v ناموفق بود" >&2; exit 1; }
|
||||
done
|
||||
|
||||
cat > .env <<EOF
|
||||
# تولیدشده با scripts/gen-env.sh — این فایل هرگز به گیت نمیرود.
|
||||
# پیش از انتشار واقعی، ADMIN_PASSWORD را به مقداری که به یاد میسپارید اما قوی است تغییر دهید:
|
||||
|
||||
@@ -32,7 +32,7 @@ env_set() {
|
||||
local key="$1" value="$2"
|
||||
if grep -q "^${key}=" "$ENV_FILE"; then
|
||||
# جداکننده | تا کاراکترهای ویژه مقدار (مثل / و $) مشکلی نسازند
|
||||
python - "$ENV_FILE" "$key" "$value" <<'PY'
|
||||
python3 - "$ENV_FILE" "$key" "$value" <<'PY'
|
||||
import io, sys
|
||||
path, key, value = sys.argv[1], sys.argv[2], sys.argv[3]
|
||||
lines = io.open(path, encoding="utf-8").read().split("\n")
|
||||
@@ -57,7 +57,7 @@ make_htpasswd() {
|
||||
|
||||
# رمز تصادفی خوانا (بدون نویسههای گیجکننده)
|
||||
random_password() {
|
||||
python - <<'PY'
|
||||
python3 - <<'PY'
|
||||
import secrets, string
|
||||
alphabet = string.ascii_letters + string.digits
|
||||
print("".join(secrets.choice(alphabet) for _ in range(16)))
|
||||
|
||||
Reference in New Issue
Block a user