From 6ee26695e09be417d72800a26b0cbef24d6e7f6d Mon Sep 17 00:00:00 2001 From: Aravinda-HWK Date: Mon, 18 May 2026 14:54:11 +0530 Subject: [PATCH 1/3] Implement user invitation link automation and enhance SMTP configuration in Thunder setup --- scripts/thunder/02-sample-resources.sh | 148 ++++++++++++++++++++++++- services/.env.example | 12 ++ services/config-scripts/gen-thunder.sh | 26 ++++- 3 files changed, 182 insertions(+), 4 deletions(-) diff --git a/scripts/thunder/02-sample-resources.sh b/scripts/thunder/02-sample-resources.sh index e31cdb16..75722464 100755 --- a/scripts/thunder/02-sample-resources.sh +++ b/scripts/thunder/02-sample-resources.sh @@ -4,14 +4,36 @@ set -e SCRIPT_DIR="$(dirname "${BASH_SOURCE[0]:-$0}")" source "${SCRIPT_DIR}/common.sh" -# Load .env values when available (useful for local execution). -ENV_FILE="${SCRIPT_DIR}/.env" +# Load values from the single services/.env file (useful for local execution). +ENV_FILE="${SCRIPT_DIR}/../../services/.env" if [[ -f "$ENV_FILE" ]]; then set -a source "$ENV_FILE" set +a fi +# Resolve primary domain from conf/silver.yaml; used as the new OU handle. +SILVER_CONF_FILE="${SCRIPT_DIR}/../../conf/silver.yaml" +MAIL_DOMAIN=$(grep -m 1 '^\s*-\s*domain:' "${SILVER_CONF_FILE}" | sed 's/.*domain:\s*//' | xargs) +if [[ -z "${MAIL_DOMAIN}" ]]; then + echo "ERROR: No domain configured in ${SILVER_CONF_FILE}" >&2 + exit 1 +fi + +# Derive a human-readable OU name from the domain (e.g. example.com -> "Example Com"). +DOMAIN_OU_NAME=$(echo "${MAIL_DOMAIN}" | sed 's/\./ /g' | awk '{for(i=1;i<=NF;i++) $i=toupper(substr($i,1,1)) substr($i,2)}1') +DOMAIN_OU_HANDLE="${MAIL_DOMAIN}" +DOMAIN_USER_SCHEMA_NAME="${THUNDER_DOMAIN_USER_SCHEMA_NAME:-Contact}" +CONTACT_USERNAME="${THUNDER_CONTACT_USERNAME:-contact}" +# Contact user password: take THUNDER_SMTP_PASSWORD from services/.env so the +# Thunder user and the SMTP credentials in deployment.yaml stay in sync. +# Falls back to a generated random value if the env var is empty. +CONTACT_PASSWORD="${THUNDER_SMTP_PASSWORD:-}" +if [[ -z "${CONTACT_PASSWORD}" ]]; then + CONTACT_PASSWORD=$(LC_ALL=C tr -dc 'A-Za-z0-9' Date: Mon, 18 May 2026 15:57:25 +0530 Subject: [PATCH 2/3] Enhance domain resolution in sample resources script and update docker-compose to include silver.yaml --- scripts/thunder/02-sample-resources.sh | 26 ++++++++++++++++++++++---- services/docker-compose.yaml | 4 ++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/scripts/thunder/02-sample-resources.sh b/scripts/thunder/02-sample-resources.sh index 75722464..517b5c82 100755 --- a/scripts/thunder/02-sample-resources.sh +++ b/scripts/thunder/02-sample-resources.sh @@ -12,11 +12,29 @@ if [[ -f "$ENV_FILE" ]]; then set +a fi -# Resolve primary domain from conf/silver.yaml; used as the new OU handle. -SILVER_CONF_FILE="${SCRIPT_DIR}/../../conf/silver.yaml" -MAIL_DOMAIN=$(grep -m 1 '^\s*-\s*domain:' "${SILVER_CONF_FILE}" | sed 's/.*domain:\s*//' | xargs) +# Resolve primary domain. Prefer MAIL_DOMAIN env (set by docker-compose) so the +# script works the same on the host and inside the thunder-setup container. +# Falls back to scanning silver.yaml at a few well-known paths. +MAIL_DOMAIN="${MAIL_DOMAIN:-}" if [[ -z "${MAIL_DOMAIN}" ]]; then - echo "ERROR: No domain configured in ${SILVER_CONF_FILE}" >&2 + SILVER_CONF_FILE="" + for candidate in \ + "${SCRIPT_DIR}/silver.yaml" \ + "${SCRIPT_DIR}/../../conf/silver.yaml" \ + "/opt/thunder/bootstrap/silver.yaml"; do + if [[ -f "$candidate" ]]; then + SILVER_CONF_FILE="$candidate" + break + fi + done + if [[ -z "${SILVER_CONF_FILE}" ]]; then + echo "ERROR: Could not locate silver.yaml; set MAIL_DOMAIN or mount conf/silver.yaml" >&2 + exit 1 + fi + MAIL_DOMAIN=$(grep -m 1 '^\s*-\s*domain:' "${SILVER_CONF_FILE}" | sed 's/.*domain:\s*//' | xargs) +fi +if [[ -z "${MAIL_DOMAIN}" ]]; then + echo "ERROR: No domain configured (MAIL_DOMAIN env unset and silver.yaml domain empty)" >&2 exit 1 fi diff --git a/services/docker-compose.yaml b/services/docker-compose.yaml index 1c1a5293..9ba50b49 100644 --- a/services/docker-compose.yaml +++ b/services/docker-compose.yaml @@ -167,9 +167,13 @@ services: - ./silver-config/thunder/deployment.yaml:/opt/thunder/repository/conf/deployment.yaml:ro - ./../scripts/thunder/01-default-resources.sh:/opt/thunder/bootstrap/01-default-resources.sh - ./../scripts/thunder/02-sample-resources.sh:/opt/thunder/bootstrap/02-sample-resources.sh + - ./../conf/silver.yaml:/opt/thunder/bootstrap/silver.yaml:ro environment: - THUNDER_ADMIN_USERNAME=${THUNDER_ADMIN_USERNAME:-admin} - THUNDER_ADMIN_PASSWORD=${THUNDER_ADMIN_PASSWORD:-admin} + - THUNDER_SMTP_PASSWORD=${THUNDER_SMTP_PASSWORD:-} + - THUNDER_CONTACT_USERNAME=${THUNDER_CONTACT_USERNAME:-contact} + - THUNDER_DOMAIN_USER_SCHEMA_NAME=${THUNDER_DOMAIN_USER_SCHEMA_NAME:-Contact} depends_on: thunder-db-init: condition: service_completed_successfully From 5c4352d4442ed260f9dada735918626b145803fd Mon Sep 17 00:00:00 2001 From: Aravinda-HWK Date: Mon, 18 May 2026 17:15:50 +0530 Subject: [PATCH 3/3] Fix SMTP host configuration in gen-thunder.sh to use 'mail' instead of 'smtp' --- services/config-scripts/gen-thunder.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/config-scripts/gen-thunder.sh b/services/config-scripts/gen-thunder.sh index b4e0c5fb..45b9a743 100644 --- a/services/config-scripts/gen-thunder.sh +++ b/services/config-scripts/gen-thunder.sh @@ -23,7 +23,7 @@ if [[ -f "${ROOT_DIR}/.env" ]]; then fi # SMTP values derived from the primary domain (password from .env, optional). -readonly SMTP_HOST="smtp.${MAIL_DOMAIN}" +readonly SMTP_HOST="mail.${MAIL_DOMAIN}" readonly SMTP_USERNAME="contact@${MAIL_DOMAIN}" readonly SMTP_FROM_ADDRESS="contact@${MAIL_DOMAIN}" readonly SMTP_PASSWORD="${THUNDER_SMTP_PASSWORD:-}"