fix(scripts): جلوگیری از خرابی Basic Auth با کوتیشنکردن مقدارهای دارای $
docker compose مقادیر .env را خودش تفسیر میکند؛ هش htpasswd شامل $apr1$... است و بدون کوتیشن، $apr1 و بخشهای بعدی بهعنوان متغیر خالی جایگزین میشدند (برچسب تبدیل به preview:/OBoRS/... میشد) و پیشنمایش خصوصی هرگز رمز را نمیپذیرفت. حالا env_set مقدارهای دارای $ را تککوتیشن میگذارد و env_get کوتیشن را برمیدارد.
This commit is contained in:
@@ -21,25 +21,31 @@ cd "$(dirname "$0")/.."
|
||||
ENV_FILE=.env
|
||||
[ -f "$ENV_FILE" ] || { echo "فایل .env پیدا نشد — اول bash scripts/gen-env.sh" >&2; exit 1; }
|
||||
|
||||
# مقدار فعلی یک کلید در .env (یا خالی)
|
||||
# مقدار فعلی یک کلید در .env (یا خالی) — کوتیشن تکنویسهای هم برداشته میشود
|
||||
env_get() {
|
||||
local key="$1"
|
||||
sed -n "s/^${key}=//p" "$ENV_FILE" | tail -1
|
||||
sed -n "s/^${key}=//p" "$ENV_FILE" | tail -1 | sed -e "s/^'//" -e "s/'\$//"
|
||||
}
|
||||
|
||||
# تنظیم/جایگزینی یک کلید در .env (بدون آسیب به بقیه خطوط)
|
||||
# نکتهٔ مهم: docker compose مقادیر .env را خودش تفسیر میکند؛ هش htpasswd شامل
|
||||
# $apr1$... است و اگر کوتیشن نخورد، $apr1 و بخشهای بعدی بهعنوان متغیر خالی
|
||||
# جایگزین میشوند و Basic Auth هرگز رمز را نمیپذیرد. پس هر مقدار دارای $ را
|
||||
# تککوتیشن میگذاریم (compose کوتیشن را برمیدارد و مقدار را عیناً میخواند).
|
||||
env_set() {
|
||||
local key="$1" value="$2"
|
||||
if grep -q "^${key}=" "$ENV_FILE"; then
|
||||
# جداکننده | تا کاراکترهای ویژه مقدار (مثل / و $) مشکلی نسازند
|
||||
python3 - "$ENV_FILE" "$key" "$value" <<'PY'
|
||||
import io, sys
|
||||
path, key, value = sys.argv[1], sys.argv[2], sys.argv[3]
|
||||
if "$" in value:
|
||||
value = "'" + value + "'"
|
||||
lines = io.open(path, encoding="utf-8").read().split("\n")
|
||||
out = [f"{key}={value}" if line.startswith(f"{key}=") else line for line in lines]
|
||||
io.open(path, "w", encoding="utf-8", newline="\n").write("\n".join(out))
|
||||
PY
|
||||
else
|
||||
if [ "${value#*\$}" != "$value" ]; then value="'$value'"; fi
|
||||
printf '\n%s=%s\n' "$key" "$value" >> "$ENV_FILE"
|
||||
fi
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user