#!/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."