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
|
exit 1
|
||||||
fi
|
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)"
|
SECRET_KEY="$(rand hex 48)"
|
||||||
POSTGRES_PASSWORD="$(rand hex 16)"
|
POSTGRES_PASSWORD="$(rand hex 16)"
|
||||||
MINIO_ROOT_PASSWORD="$(rand hex 16)"
|
MINIO_ROOT_PASSWORD="$(rand hex 16)"
|
||||||
ADMIN_PASSWORD="$(rand hex 12)"
|
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
|
cat > .env <<EOF
|
||||||
# تولیدشده با scripts/gen-env.sh — این فایل هرگز به گیت نمیرود.
|
# تولیدشده با scripts/gen-env.sh — این فایل هرگز به گیت نمیرود.
|
||||||
# پیش از انتشار واقعی، ADMIN_PASSWORD را به مقداری که به یاد میسپارید اما قوی است تغییر دهید:
|
# پیش از انتشار واقعی، ADMIN_PASSWORD را به مقداری که به یاد میسپارید اما قوی است تغییر دهید:
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ env_set() {
|
|||||||
local key="$1" value="$2"
|
local key="$1" value="$2"
|
||||||
if grep -q "^${key}=" "$ENV_FILE"; then
|
if grep -q "^${key}=" "$ENV_FILE"; then
|
||||||
# جداکننده | تا کاراکترهای ویژه مقدار (مثل / و $) مشکلی نسازند
|
# جداکننده | تا کاراکترهای ویژه مقدار (مثل / و $) مشکلی نسازند
|
||||||
python - "$ENV_FILE" "$key" "$value" <<'PY'
|
python3 - "$ENV_FILE" "$key" "$value" <<'PY'
|
||||||
import io, sys
|
import io, sys
|
||||||
path, key, value = sys.argv[1], sys.argv[2], sys.argv[3]
|
path, key, value = sys.argv[1], sys.argv[2], sys.argv[3]
|
||||||
lines = io.open(path, encoding="utf-8").read().split("\n")
|
lines = io.open(path, encoding="utf-8").read().split("\n")
|
||||||
@@ -57,7 +57,7 @@ make_htpasswd() {
|
|||||||
|
|
||||||
# رمز تصادفی خوانا (بدون نویسههای گیجکننده)
|
# رمز تصادفی خوانا (بدون نویسههای گیجکننده)
|
||||||
random_password() {
|
random_password() {
|
||||||
python - <<'PY'
|
python3 - <<'PY'
|
||||||
import secrets, string
|
import secrets, string
|
||||||
alphabet = string.ascii_letters + string.digits
|
alphabet = string.ascii_letters + string.digits
|
||||||
print("".join(secrets.choice(alphabet) for _ in range(16)))
|
print("".join(secrets.choice(alphabet) for _ in range(16)))
|
||||||
|
|||||||
Reference in New Issue
Block a user