87 lines
3.0 KiB
Bash
Executable File
87 lines
3.0 KiB
Bash
Executable File
#!/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."
|