fix(install): пустые OAUTH_* не ломают .env и docker compose
Установщик писал значения OAuth в кавычках, а при повторной установке снимал их из .env вместе с кавычками и добавлял новые: получалось `OAUTH_GITHUB_CLIENT_ID=""""`, и docker compose отказывался читать .env («unexpected character "\"" in variable name»), из-за чего стек не поднимался после --reconfigure. Теперь oauth_value снимает кавычки при чтении, а env_quote ставит их только значениям со спецсимволами. Заодно уже испорченный .env лечится сам: кавычки снимаются, значение записывается пустым.
This commit is contained in:
+26
-16
@@ -640,14 +640,13 @@ generate_secrets() {
|
|||||||
# (оператор задал при запуске), затем из существующего .env.
|
# (оператор задал при запуске), затем из существующего .env.
|
||||||
oauth_value() {
|
oauth_value() {
|
||||||
local key="$1"
|
local key="$1"
|
||||||
local from_env="${!key:-}"
|
local value="${!key:-}"
|
||||||
if [ -n "$from_env" ]; then
|
if [ -z "$value" ] && [ "$env_existing" = "1" ]; then
|
||||||
printf '%s' "$from_env"
|
value="$(env_get "$key" || true)"
|
||||||
return
|
|
||||||
fi
|
|
||||||
if [ "$env_existing" = "1" ]; then
|
|
||||||
env_get "$key" || true
|
|
||||||
fi
|
fi
|
||||||
|
# Кавычки из .env снимаем: иначе при перезаписи файла они удваиваются
|
||||||
|
# (`KEY=""` → `KEY=""""`) и docker compose отказывается читать .env.
|
||||||
|
printf '%s' "${value//\"/}"
|
||||||
}
|
}
|
||||||
|
|
||||||
secret_or_new() {
|
secret_or_new() {
|
||||||
@@ -750,6 +749,16 @@ ensure_age_key() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
write_env_file() {
|
write_env_file() {
|
||||||
|
# env_quote оформляет значение для .env: простые значения пишем как есть,
|
||||||
|
# сложные — в кавычках (docker compose разбирает .env своим парсером).
|
||||||
|
env_quote() {
|
||||||
|
local value="$1"
|
||||||
|
case "$value" in
|
||||||
|
*[!A-Za-z0-9._~:/@+=-]*) printf '"%s"' "${value//\"/\\\"}" ;;
|
||||||
|
*) printf '%s' "$value" ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
info "пишем ${GLCHAT_ENV_FILE}"
|
info "пишем ${GLCHAT_ENV_FILE}"
|
||||||
if [ "$DRY_RUN" = "1" ]; then
|
if [ "$DRY_RUN" = "1" ]; then
|
||||||
log_file_only "DRY-RUN: .env не записывается"
|
log_file_only "DRY-RUN: .env не записывается"
|
||||||
@@ -935,15 +944,16 @@ LIVEKIT_API_KEY=${LIVEKIT_API_KEY}
|
|||||||
LIVEKIT_API_SECRET=${LIVEKIT_API_SECRET}
|
LIVEKIT_API_SECRET=${LIVEKIT_API_SECRET}
|
||||||
LIVEKIT_PUBLIC_URL=${LIVEKIT_PUBLIC_URL}
|
LIVEKIT_PUBLIC_URL=${LIVEKIT_PUBLIC_URL}
|
||||||
|
|
||||||
# OAuth-провайдеры (Фаза 7): пусто — провайдер выключен. Кавычки обязательны:
|
# OAuth-провайдеры (Фаза 7): пусто — провайдер выключен. Кавычки добавляет
|
||||||
# секреты провайдеров содержат символы, значимые для оболочки.
|
# установщик только для значений со спецсимволами (docker compose разбирает
|
||||||
OAUTH_GITHUB_CLIENT_ID="${OAUTH_GITHUB_CLIENT_ID:-}"
|
# .env своим парсером и пустые кавычки ему не нравятся).
|
||||||
OAUTH_GITHUB_CLIENT_SECRET="${OAUTH_GITHUB_CLIENT_SECRET:-}"
|
OAUTH_GITHUB_CLIENT_ID=$(env_quote "$OAUTH_GITHUB_CLIENT_ID")
|
||||||
OAUTH_GOOGLE_CLIENT_ID="${OAUTH_GOOGLE_CLIENT_ID:-}"
|
OAUTH_GITHUB_CLIENT_SECRET=$(env_quote "$OAUTH_GITHUB_CLIENT_SECRET")
|
||||||
OAUTH_GOOGLE_CLIENT_SECRET="${OAUTH_GOOGLE_CLIENT_SECRET:-}"
|
OAUTH_GOOGLE_CLIENT_ID=$(env_quote "$OAUTH_GOOGLE_CLIENT_ID")
|
||||||
OAUTH_DISCORD_CLIENT_ID="${OAUTH_DISCORD_CLIENT_ID:-}"
|
OAUTH_GOOGLE_CLIENT_SECRET=$(env_quote "$OAUTH_GOOGLE_CLIENT_SECRET")
|
||||||
OAUTH_DISCORD_CLIENT_SECRET="${OAUTH_DISCORD_CLIENT_SECRET:-}"
|
OAUTH_DISCORD_CLIENT_ID=$(env_quote "$OAUTH_DISCORD_CLIENT_ID")
|
||||||
OAUTH_REDIRECT_BASE="${OAUTH_REDIRECT_BASE:-}"
|
OAUTH_DISCORD_CLIENT_SECRET=$(env_quote "$OAUTH_DISCORD_CLIENT_SECRET")
|
||||||
|
OAUTH_REDIRECT_BASE=$(env_quote "$OAUTH_REDIRECT_BASE")
|
||||||
|
|
||||||
# Offsite-бэкапы: цель и срок хранения задаются вручную после установки.
|
# Offsite-бэкапы: цель и срок хранения задаются вручную после установки.
|
||||||
BACKUP_OFFSITE_TARGET=${BACKUP_OFFSITE_TARGET:-}
|
BACKUP_OFFSITE_TARGET=${BACKUP_OFFSITE_TARGET:-}
|
||||||
|
|||||||
Reference in New Issue
Block a user