- Implemented a comprehensive health check utility to monitor system dependencies including NocoDB, SMTP, Represent API, disk space, and memory usage. - Created a logger utility using Winston for structured logging with daily rotation and various log levels. - Developed a metrics utility using Prometheus client to track application performance metrics such as email sends, HTTP requests, and user activity. - Added a backup script for automated backups of NocoDB data, uploaded files, and environment configurations with optional S3 support. - Introduced a toggle script to switch between development (MailHog) and production (ProtonMail) SMTP configurations.
205 lines
8.4 KiB
Bash
Executable File
205 lines
8.4 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Toggle SMTP Configuration Script
|
|
# Switches between development (MailHog) and production (ProtonMail) SMTP settings
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
ENV_FILE="$SCRIPT_DIR/../.env"
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
echo -e "${BLUE}"
|
|
cat << "EOF"
|
|
╔══════════════════════════════════════════════════╗
|
|
║ SMTP Configuration Toggle Tool ║
|
|
║ Influence Campaign Application ║
|
|
╚══════════════════════════════════════════════════╝
|
|
EOF
|
|
echo -e "${NC}"
|
|
|
|
# Check if .env file exists
|
|
if [ ! -f "$ENV_FILE" ]; then
|
|
echo -e "${RED}Error: .env file not found at $ENV_FILE${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
# Detect current mode
|
|
if grep -q "^SMTP_HOST=mailhog" "$ENV_FILE"; then
|
|
CURRENT_MODE="development"
|
|
CURRENT_HOST="mailhog"
|
|
elif grep -q "^SMTP_HOST=smtp.protonmail.ch" "$ENV_FILE"; then
|
|
CURRENT_MODE="production"
|
|
CURRENT_HOST="smtp.protonmail.ch"
|
|
else
|
|
CURRENT_MODE="unknown"
|
|
CURRENT_HOST=$(grep "^SMTP_HOST=" "$ENV_FILE" | cut -d'=' -f2)
|
|
fi
|
|
|
|
echo -e "${YELLOW}Current Configuration:${NC}"
|
|
echo -e " Mode: ${BLUE}$CURRENT_MODE${NC}"
|
|
echo -e " SMTP Host: ${BLUE}$CURRENT_HOST${NC}"
|
|
echo -e " Email Test Mode: ${BLUE}$(grep "^EMAIL_TEST_MODE=" "$ENV_FILE" | cut -d'=' -f2)${NC}"
|
|
echo -e " Node Environment: ${BLUE}$(grep "^NODE_ENV=" "$ENV_FILE" | cut -d'=' -f2)${NC}"
|
|
echo ""
|
|
|
|
# Ask user what mode they want
|
|
echo "Select SMTP configuration mode:"
|
|
echo " 1) Development (MailHog - emails captured locally)"
|
|
echo " 2) Production (ProtonMail - emails sent to real recipients)"
|
|
echo " 3) Cancel"
|
|
echo ""
|
|
read -p "Enter your choice (1-3): " choice
|
|
|
|
case $choice in
|
|
1)
|
|
TARGET_MODE="development"
|
|
;;
|
|
2)
|
|
TARGET_MODE="production"
|
|
;;
|
|
3)
|
|
echo -e "${YELLOW}Cancelled. No changes made.${NC}"
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo -e "${RED}Invalid choice. Exiting.${NC}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
# Confirm if already in target mode
|
|
if [ "$CURRENT_MODE" = "$TARGET_MODE" ]; then
|
|
echo -e "${GREEN}Already in $TARGET_MODE mode. No changes needed.${NC}"
|
|
exit 0
|
|
fi
|
|
|
|
# Create backup
|
|
BACKUP_FILE="${ENV_FILE}.backup_$(date +%Y%m%d_%H%M%S)"
|
|
cp "$ENV_FILE" "$BACKUP_FILE"
|
|
echo -e "${GREEN}✓ Backup created: $BACKUP_FILE${NC}"
|
|
|
|
# Apply configuration based on target mode
|
|
if [ "$TARGET_MODE" = "development" ]; then
|
|
echo ""
|
|
echo -e "${BLUE}Switching to DEVELOPMENT mode...${NC}"
|
|
echo ""
|
|
|
|
# Comment out production SMTP settings
|
|
sed -i 's/^SMTP_HOST=smtp.protonmail.ch/# SMTP_HOST=smtp.protonmail.ch/' "$ENV_FILE"
|
|
sed -i 's/^SMTP_PORT=587$/# SMTP_PORT=587/' "$ENV_FILE"
|
|
sed -i 's/^SMTP_SECURE=false$/# SMTP_SECURE=false/' "$ENV_FILE"
|
|
sed -i 's/^SMTP_USER=cmlite@bnkops.ca/# SMTP_USER=cmlite@bnkops.ca/' "$ENV_FILE"
|
|
sed -i 's/^SMTP_PASS=QMLDV1E2MWDHNJMY/# SMTP_PASS=QMLDV1E2MWDHNJMY/' "$ENV_FILE"
|
|
sed -i 's/^SMTP_FROM_EMAIL=cmlite@bnkops.ca/# SMTP_FROM_EMAIL=cmlite@bnkops.ca/' "$ENV_FILE"
|
|
sed -i 's/^SMTP_FROM_NAME="BNKops Influence Campaign"$/# SMTP_FROM_NAME="BNKops Influence Campaign"/' "$ENV_FILE"
|
|
|
|
# Uncomment development SMTP settings
|
|
sed -i 's/^# SMTP_HOST=mailhog-changemaker$/SMTP_HOST=mailhog-changemaker/' "$ENV_FILE"
|
|
sed -i 's/^# SMTP_PORT=1025$/SMTP_PORT=1025/' "$ENV_FILE"
|
|
sed -i 's/^# SMTP_SECURE=false$/SMTP_SECURE=false/' "$ENV_FILE"
|
|
sed -i 's/^# SMTP_USER=test$/SMTP_USER=test/' "$ENV_FILE"
|
|
sed -i 's/^# SMTP_PASS=test$/SMTP_PASS=test/' "$ENV_FILE"
|
|
sed -i 's/^# SMTP_FROM_EMAIL=dev@albertainfluence.local$/SMTP_FROM_EMAIL=dev@albertainfluence.local/' "$ENV_FILE"
|
|
sed -i 's/^# SMTP_FROM_NAME="BNKops Influence Campaign (DEV)"$/SMTP_FROM_NAME="BNKops Influence Campaign (DEV)"/' "$ENV_FILE"
|
|
|
|
# Update other settings
|
|
sed -i 's/^NODE_ENV=production$/NODE_ENV=development/' "$ENV_FILE"
|
|
sed -i 's/^EMAIL_TEST_MODE=false$/EMAIL_TEST_MODE=true/' "$ENV_FILE"
|
|
sed -i 's|^APP_URL=https://influence.cmlite.org$|APP_URL=http://localhost:3333|' "$ENV_FILE"
|
|
|
|
echo -e "${GREEN}✓ Configured for DEVELOPMENT mode${NC}"
|
|
echo ""
|
|
echo -e "${YELLOW}Development Configuration:${NC}"
|
|
echo " • SMTP: MailHog (mailhog-changemaker:1025)"
|
|
echo " • Web UI: http://localhost:8025"
|
|
echo " • Email Test Mode: Enabled"
|
|
echo " • Node Environment: development"
|
|
echo " • App URL: http://localhost:3333"
|
|
echo ""
|
|
echo -e "${YELLOW}Next Steps:${NC}"
|
|
echo " 1. Ensure MailHog is running (from root directory):"
|
|
echo -e " ${BLUE}cd .. && docker compose up -d mailhog${NC}"
|
|
echo ""
|
|
echo " 2. Start the Influence app:"
|
|
echo -e " ${BLUE}docker compose up -d${NC}"
|
|
echo ""
|
|
echo " 3. Access MailHog UI to view captured emails:"
|
|
echo -e " ${BLUE}http://localhost:8025${NC}"
|
|
|
|
elif [ "$TARGET_MODE" = "production" ]; then
|
|
echo ""
|
|
echo -e "${BLUE}Switching to PRODUCTION mode...${NC}"
|
|
echo ""
|
|
|
|
# Confirm production switch
|
|
echo -e "${RED}⚠️ WARNING: Production mode will send REAL emails!${NC}"
|
|
read -p "Are you sure you want to switch to production? (yes/no): " confirm
|
|
|
|
if [ "$confirm" != "yes" ]; then
|
|
echo -e "${YELLOW}Cancelled. Restoring backup...${NC}"
|
|
mv "$BACKUP_FILE" "$ENV_FILE"
|
|
echo -e "${GREEN}✓ Original configuration restored${NC}"
|
|
exit 0
|
|
fi
|
|
|
|
# Comment out development SMTP settings
|
|
sed -i 's/^SMTP_HOST=mailhog-changemaker$/# SMTP_HOST=mailhog-changemaker/' "$ENV_FILE"
|
|
sed -i 's/^SMTP_PORT=1025$/# SMTP_PORT=1025/' "$ENV_FILE"
|
|
sed -i 's/^SMTP_SECURE=false$/# SMTP_SECURE=false/' "$ENV_FILE"
|
|
sed -i 's/^SMTP_USER=test$/# SMTP_USER=test/' "$ENV_FILE"
|
|
sed -i 's/^SMTP_PASS=test$/# SMTP_PASS=test/' "$ENV_FILE"
|
|
sed -i 's/^SMTP_FROM_EMAIL=dev@albertainfluence.local$/# SMTP_FROM_EMAIL=dev@albertainfluence.local/' "$ENV_FILE"
|
|
sed -i 's/^SMTP_FROM_NAME="BNKops Influence Campaign (DEV)"$/# SMTP_FROM_NAME="BNKops Influence Campaign (DEV)"/' "$ENV_FILE"
|
|
|
|
# Uncomment production SMTP settings
|
|
sed -i 's/^# SMTP_HOST=smtp.protonmail.ch$/SMTP_HOST=smtp.protonmail.ch/' "$ENV_FILE"
|
|
sed -i 's/^# SMTP_PORT=587$/SMTP_PORT=587/' "$ENV_FILE"
|
|
sed -i 's/^# SMTP_SECURE=false$/SMTP_SECURE=false/' "$ENV_FILE"
|
|
sed -i 's/^# SMTP_USER=cmlite@bnkops.ca$/SMTP_USER=cmlite@bnkops.ca/' "$ENV_FILE"
|
|
sed -i 's/^# SMTP_PASS=QMLDV1E2MWDHNJMY$/SMTP_PASS=QMLDV1E2MWDHNJMY/' "$ENV_FILE"
|
|
sed -i 's/^# SMTP_FROM_EMAIL=cmlite@bnkops.ca$/SMTP_FROM_EMAIL=cmlite@bnkops.ca/' "$ENV_FILE"
|
|
sed -i 's/^# SMTP_FROM_NAME="BNKops Influence Campaign"$/SMTP_FROM_NAME="BNKops Influence Campaign"/' "$ENV_FILE"
|
|
|
|
# Update other settings
|
|
sed -i 's/^NODE_ENV=development$/NODE_ENV=production/' "$ENV_FILE"
|
|
sed -i 's/^EMAIL_TEST_MODE=true$/EMAIL_TEST_MODE=false/' "$ENV_FILE"
|
|
sed -i 's|^APP_URL=http://localhost:3333$|APP_URL=https://influence.cmlite.org|' "$ENV_FILE"
|
|
|
|
echo -e "${GREEN}✓ Configured for PRODUCTION mode${NC}"
|
|
echo ""
|
|
echo -e "${YELLOW}Production Configuration:${NC}"
|
|
echo " • SMTP: ProtonMail (smtp.protonmail.ch)"
|
|
echo " • Email Test Mode: Disabled"
|
|
echo " • Node Environment: production"
|
|
echo " • App URL: https://influence.cmlite.org"
|
|
echo ""
|
|
echo -e "${RED}⚠️ IMPORTANT: Emails will be sent to REAL recipients!${NC}"
|
|
echo ""
|
|
echo -e "${YELLOW}Next Steps:${NC}"
|
|
echo " 1. Restart the application:"
|
|
echo -e " ${BLUE}docker compose down && docker compose up -d${NC}"
|
|
echo ""
|
|
echo " 2. Verify SMTP connection:"
|
|
echo -e " ${BLUE}docker compose logs -f${NC}"
|
|
fi
|
|
|
|
echo ""
|
|
echo -e "${GREEN}════════════════════════════════════════════════${NC}"
|
|
echo -e "${GREEN}✓ Configuration updated successfully!${NC}"
|
|
echo -e "${GREEN}════════════════════════════════════════════════${NC}"
|
|
echo ""
|
|
echo "Current settings:"
|
|
grep "^SMTP_HOST=" "$ENV_FILE"
|
|
grep "^NODE_ENV=" "$ENV_FILE"
|
|
grep "^EMAIL_TEST_MODE=" "$ENV_FILE"
|
|
grep "^APP_URL=" "$ENV_FILE"
|
|
echo ""
|
|
echo -e "Backup saved at: ${BLUE}$BACKUP_FILE${NC}"
|