From a137411051d61c2bcbc4dd88fc664f02c53d86f0 Mon Sep 17 00:00:00 2001 From: Joachim Hummel Date: Mon, 1 Dec 2025 08:02:04 +0000 Subject: [PATCH] Add script to change MQTT admin password MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- change-mqtt-admin-password.sh | 124 ++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100755 change-mqtt-admin-password.sh diff --git a/change-mqtt-admin-password.sh b/change-mqtt-admin-password.sh new file mode 100755 index 0000000..9584e54 --- /dev/null +++ b/change-mqtt-admin-password.sh @@ -0,0 +1,124 @@ +#!/bin/bash + +# Script to change MQTT Admin Password +# Usage: ./change-mqtt-admin-password.sh + +set -e + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +# Check if password argument is provided +if [ -z "$1" ]; then + echo -e "${RED}Error: No password provided${NC}" + echo "Usage: $0 " + exit 1 +fi + +NEW_PASSWORD="$1" + +# Validate password (minimum 8 characters recommended) +if [ ${#NEW_PASSWORD} -lt 8 ]; then + echo -e "${YELLOW}Warning: Password is shorter than 8 characters${NC}" + read -p "Continue anyway? (y/n) " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + exit 1 + fi +fi + +echo -e "${GREEN}Starting MQTT Admin Password Change...${NC}" +echo + +# Step 1: Update .env file +echo -e "${YELLOW}Step 1: Updating .env file...${NC}" + +if [ ! -f .env ]; then + echo -e "${RED}Error: .env file not found${NC}" + exit 1 +fi + +# Check if MQTT_ADMIN_PASSWORD exists in .env +if grep -q "^MQTT_ADMIN_PASSWORD=" .env; then + # Update existing password + sed -i "s/^MQTT_ADMIN_PASSWORD=.*/MQTT_ADMIN_PASSWORD=${NEW_PASSWORD}/" .env + echo -e "${GREEN}✓ Updated MQTT_ADMIN_PASSWORD in .env${NC}" +else + # Add password if it doesn't exist + echo "MQTT_ADMIN_PASSWORD=${NEW_PASSWORD}" >> .env + echo -e "${GREEN}✓ Added MQTT_ADMIN_PASSWORD to .env${NC}" +fi + +echo + +# Step 2: Restart containers +echo -e "${YELLOW}Step 2: Restarting containers...${NC}" +docker-compose restart +echo -e "${GREEN}✓ Containers restarted${NC}" +echo + +# Step 3: Wait for app to be ready +echo -e "${YELLOW}Step 3: Waiting for app to be ready...${NC}" +sleep 5 +echo -e "${GREEN}✓ App should be ready${NC}" +echo + +# Step 4: Trigger sync via internal Node.js script +echo -e "${YELLOW}Step 4: Triggering MQTT configuration sync...${NC}" + +# Create a temporary Node.js script to trigger sync +cat > /tmp/trigger-mqtt-sync.js << 'EOF' +// Trigger MQTT Sync from inside the container +async function triggerSync() { + try { + // Import the sync function + const { syncMosquittoConfig } = require('./lib/mosquitto-sync'); + + console.log('Triggering Mosquitto sync...'); + const result = await syncMosquittoConfig(); + + if (result.success) { + console.log('✓ Sync successful'); + console.log('Message:', result.message); + process.exit(0); + } else { + console.error('✗ Sync failed'); + console.error('Message:', result.message); + process.exit(1); + } + } catch (error) { + console.error('✗ Sync error:', error.message); + process.exit(1); + } +} + +triggerSync(); +EOF + +# Copy script into container and execute +docker cp /tmp/trigger-mqtt-sync.js location-tracker:/app/trigger-mqtt-sync.js + +# Execute the sync script inside the container +if docker exec location-tracker node trigger-mqtt-sync.js; then + echo -e "${GREEN}✓ MQTT configuration synced successfully${NC}" +else + echo -e "${RED}✗ Sync failed, but password is updated in .env${NC}" + echo -e "${YELLOW}You can manually trigger sync from the Admin Panel${NC}" +fi + +# Cleanup +docker exec location-tracker rm -f trigger-mqtt-sync.js +rm -f /tmp/trigger-mqtt-sync.js + +echo +echo -e "${GREEN}========================================${NC}" +echo -e "${GREEN}MQTT Admin Password Change Complete!${NC}" +echo -e "${GREEN}========================================${NC}" +echo +echo -e "New password: ${YELLOW}${NEW_PASSWORD}${NC}" +echo +echo -e "${YELLOW}Note:${NC} All MQTT connections using the old admin password will need to reconnect." +echo