Files

87 lines
3.0 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
set -euo pipefail
# Этот скрипт адаптирует пароль по умолчанию Stalwart.
APP_DIR="$(readlink -f "$(dirname "${BASH_SOURCE[0]}")/..")"
APP_DATA_DIR="$APP_DIR/data"
CONFIG_FILE="$APP_DATA_DIR/etc/config.toml"
# Файл Sentinel для проверки, был ли уже инициализирован администратор
ADMIN_SENTINEL="${APP_DATA_DIR}/.admin_created"
# Максимальное количество попыток проверки файла конфигурации
MAX_RETRIES=10
RETRY_DELAY=2
# Проверьте, инициализирован ли уже пароль администратора
check_already_processed() {
if [ -f "$ADMIN_SENTINEL" ]; then
echo "Admin already initialized. Skipping..."
exit 0
fi
}
# Подождите, пока файл конфигурации станет доступен с повторными попытками.
wait_for_config() {
local retries=0
while [ $retries -lt $MAX_RETRIES ]; do
if [ -f "$CONFIG_FILE" ]; then
echo "Config file found at $CONFIG_FILE"
return 0
fi
retries=$((retries + 1))
echo "Config file not found. Retry $retries/$MAX_RETRIES in ${RETRY_DELAY}s..."
sleep $RETRY_DELAY
done
echo "Error: Config file not found at $CONFIG_FILE after $MAX_RETRIES attempts"
exit 1
}
# Замените секрет в файле конфигурации
update_secret() {
if [ -z "${APP_PASSWORD:-}" ]; then
echo "Error: APP_PASSWORD environment variable not set"
exit 1
fi
# Создайте новый секрет, используя ту же соль
NEW_SECRET=$(openssl passwd -6 -salt 8woP51TKJO.JKOp9 "${APP_PASSWORD}")
# Проверьте, существует ли раздел Fallback-admin.
if ! grep -q "\[authentication.fallback-admin\]" "$CONFIG_FILE"; then
echo "Error: [authentication.fallback-admin] section not found in config file"
exit 1
fi
# Заменить секретное значение
sed -i.bak "/^\[authentication\.fallback-admin\]/,/^\[/s|^secret = .*|secret = \"$NEW_SECRET\"|" "$CONFIG_FILE"
# Удалить файл резервной копии
rm -f "$CONFIG_FILE.bak"
# Создайте дозорный файл, чтобы пометить администратора как инициализированного.
touch "$ADMIN_SENTINEL"
echo "Successfully updated admin password in $CONFIG_FILE"
echo "Restarting app to apply new password..."
"${DFWEBOS_ROOT}/scripts/app" restart "${APP_ID}" &
}
# Основное исполнение
echo "Starting Stalwart post-start configuration..."
# Проверьте, обработано ли оно уже
check_already_processed
# Подождите файл конфигурации
wait_for_config
# Обновить секрет
update_secret
echo "Stalwart post-start configuration completed."