#!/bin/bash set -eu echo "=> Setting up mautrix-whatsapp bridge" # Create necessary directories mkdir -p /app/data mkdir -p /app/data/logs # For Cloudron, we run as the cloudron user UID=$(id -u cloudron) GID=$(id -g cloudron) # Set ownership early to avoid permission issues chown -R cloudron:cloudron /app/data # Configuration file paths CONFIG_PATH="/app/data/config.yaml" REGISTRATION_PATH="/app/data/registration.yaml" BACKUP_PATH="/app/data/config.yaml.bak" # Create example config from built-in template if [ ! -f "$CONFIG_PATH" ]; then echo "=> Generating example configuration" /usr/local/bin/gosu cloudron:cloudron /app/pkg/mautrix-whatsapp -g -c "$CONFIG_PATH" -r "$REGISTRATION_PATH" # Configure for Cloudron environment if [ -n "${CLOUDRON_POSTGRESQL_URL:-}" ]; then echo "=> Configuring PostgreSQL database" yq eval ".database = \"$CLOUDRON_POSTGRESQL_URL\"" -i "$CONFIG_PATH" fi if [ -n "${CLOUDRON_APP_DOMAIN:-}" ]; then echo "=> Configuring homeserver and appservice settings" BASE_DOMAIN=$(echo "$CLOUDRON_APP_DOMAIN" | cut -d. -f2-) # Update homeserver configuration yq eval ".homeserver.address = \"https://matrix.$BASE_DOMAIN\"" -i "$CONFIG_PATH" yq eval ".homeserver.domain = \"$BASE_DOMAIN\"" -i "$CONFIG_PATH" # Update appservice configuration yq eval ".appservice.address = \"https://$CLOUDRON_APP_DOMAIN\"" -i "$CONFIG_PATH" yq eval ".appservice.hostname = \"0.0.0.0\"" -i "$CONFIG_PATH" yq eval ".appservice.port = 29318" -i "$CONFIG_PATH" fi # Set log file path yq eval ".logging.handlers.file.filename = \"/app/data/logs/mautrix-whatsapp.log\"" -i "$CONFIG_PATH" chown cloudron:cloudron "$CONFIG_PATH" "$REGISTRATION_PATH" echo "=> Initial configuration complete" echo "=> IMPORTANT: Please review $CONFIG_PATH and configure your Matrix homeserver settings" echo "=> You will need to:" echo " 1. Copy $REGISTRATION_PATH to your Matrix homeserver" echo " 2. Update your homeserver configuration to include the registration file" echo " 3. Restart your Matrix homeserver" echo " 4. Restart this bridge app" echo " 5. Authenticate with WhatsApp using QR code scanning" else echo "=> Using existing configuration" fi # Final permission fix before starting chown -R cloudron:cloudron /app/data # Create a health check endpoint (run in background) mkdir -p /run/health echo '#!/bin/bash echo "HTTP/1.1 200 OK" echo "Content-Type: text/plain" echo "" echo "OK"' > /run/health/server.sh chmod +x /run/health/server.sh (cd /run/health && nohup nc -l -p 29318 -e ./server.sh > /dev/null 2>&1) & # Start the bridge echo "=> Starting mautrix-whatsapp bridge" exec /usr/local/bin/gosu cloudron:cloudron /app/pkg/mautrix-whatsapp -c "$CONFIG_PATH"