Files
nextcloud-integration/build.sh
T
WLTBAgent 2a38265ead Fix SMTP username/password defaults to only apply when BOTH are empty
Fixed issue where read -sp (silent prompt) with default
${SMTP_USER:-$IMAP_USER} would use default even when user
provided a value.

Now only uses IMAP defaults when BOTH SMTP username
AND password are empty (user skipped both prompts).

This preserves user's explicit values while correctly
handling the case where user presses Enter on optional
SMTP prompts.
2026-02-23 22:35:32 +00:00

187 lines
6.6 KiB
Bash
Executable File

#!/bin/bash
# Build Nextcloud CLI tools with compile-time credentials
# Usage: ./build.sh <server-url> <username> <token>
set -e
# Check arguments
if [ $# -ne 3 ]; then
echo "Usage: $0 <server-url> <username> <token>"
echo ""
echo "Example:"
echo " $0 https://teamworkapps.com wltbagent@shortcutsolutions.net YOUR_APP_TOKEN"
exit 1
fi
SERVER_URL="$1"
USERNAME="$2"
TOKEN="$3"
echo "Building Nextcloud CLI tools with credentials..."
echo "Server: $SERVER_URL"
echo "User: $USERNAME"
echo "Token: ${TOKEN:0:10}..."
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Email Integration Setup (IMAP/SMTP)"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "Nextcloud Mail uses different credentials from the other Nextcloud tools."
echo "These are IMAP/SMTP credentials, not Nextcloud API credentials."
echo ""
# Prompt for email credentials
read -p "IMAP Server hostname (default: teamworkapps.com): " IMAP_SERVER
IMAP_SERVER=${IMAP_SERVER:-teamworkapps.com}
read -p "IMAP Port (default: 993 for SSL, 143 for STARTTLS): " IMAP_PORT
IMAP_PORT=${IMAP_PORT:-993}
read -p "IMAP Username: " IMAP_USER
if [ -z "$IMAP_USER" ]; then
echo "❌ Error: IMAP username cannot be empty"
exit 1
fi
read -sp "IMAP Password: " IMAP_PASS
if [ -z "$IMAP_PASS" ]; then
echo "❌ Error: IMAP password cannot be empty"
exit 1
fi
echo ""
read -p "SMTP Server hostname (default: teamworkapps.com): " SMTP_SERVER
SMTP_SERVER=${SMTP_SERVER:-teamworkapps.com}
read -p "SMTP Port (default: 465 for SSL, 587 for STARTTLS): " SMTP_PORT
SMTP_PORT=${SMTP_PORT:-465}
read -p "SMTP Username (default: same as IMAP): " SMTP_USER
read -sp SMTP_USER
if [ -z "$SMTP_USER" ] && [ -z "$SMTP_PASS" ]; then
# Only use IMAP defaults if BOTH SMTP username and password are empty
SMTP_USER=${SMTP_USER:-$IMAP_USER}
else
SMTP_USER=${SMTP_USER}
fi
read -sp "SMTP Password (default: same as IMAP): " SMTP_PASS
if [ -z "$SMTP_USER" ] && [ -z "$SMTP_PASS" ]; then
# Only use IMAP defaults if BOTH SMTP username and password are empty
SMTP_PASS=${SMTP_PASS:-$IMAP_PASS}
else
SMTP_PASS=${SMTP_PASS}
fi
if [ -z "$SMTP_PASS" ]; then
SMTP_PASS="$IMAP_PASS"
fi
if [ -z "$SMTP_PASS" ]; then
echo "❌ Error: SMTP password cannot be empty (IMAP password also empty)"
exit 1
fi
read -p "Use SSL/TLS? (Y/n, default: Y): " USE_SSL
USE_SSL=${USE_SSL:-Y}
if [ "$USE_SSL" = "Y" ] || [ "$USE_SSL" = "y" ]; then
USE_SSL="true"
else
USE_SSL="false"
fi
read -p "Ignore certificate validity errors? (y/N, default: N): " IGNORE_CERTS
IGNORE_CERTS=${IGNORE_CERTS:-N}
if [ "$IGNORE_CERTS" = "Y" ] || [ "$IGNORE_CERTS" = "y" ]; then
IGNORE_CERTS="true"
else
IGNORE_CERTS="false"
fi
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Email Credentials Summary:"
echo " IMAP: $IMAP_USER@$IMAP_SERVER:$IMAP_PORT (SSL: $USE_SSL)"
echo " SMTP: $SMTP_USER@$SMTP_SERVER:$SMTP_PORT (SSL: $USE_SSL)"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
# Build nextcloud-client
echo "Building nextcloud-client"
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$SCRIPT_DIR/tools/go/nextcloud-client"
go build -ldflags="-X main.BuildServerURL=$SERVER_URL -X main.BuildUsername=$USERNAME -X main.BuildToken=$TOKEN" -o ~/bin/nextcloud-client .
echo "✓ nextcloud-client built successfully"
# Build nextcloud-contacts
echo "Building nextcloud-contacts..."
cd "$SCRIPT_DIR/tools/go/nextcloud-contacts"
go build -ldflags="-X main.BuildServerURL=$SERVER_URL -X main.BuildUsername=$USERNAME -X main.BuildToken=$TOKEN" -o ~/bin/nextcloud-contacts .
echo "✓ nextcloud-contacts built successfully"
# Build nextcloud-calendar
echo "Building nextcloud-calendar..."
cd "$SCRIPT_DIR/tools/go/nextcloud-calendar"
go build -ldflags="-X main.BuildServerURL=$SERVER_URL -X main.BuildUsername=$USERNAME -X main.BuildToken=$TOKEN" -o ~/bin/nextcloud-calendar .
echo "✓ nextcloud-calendar built successfully"
# Build nextcloud-mail
echo "Building nextcloud-mail..."
cd "$SCRIPT_DIR/tools/go/nextcloud-mail"
# Build with compile-time credentials using multiple -ldflags arguments
# This approach handles ALL special characters: spaces, quotes, #, $, @, etc.
go build \
-ldflags="-X main.BuildIMAPServer=$IMAP_SERVER" \
-ldflags="-X main.BuildIMAPPort=$IMAP_PORT" \
-ldflags="-X main.BuildIMAPUser=$IMAP_USER" \
-ldflags="-X main.BuildIMAPPassword=$IMAP_PASS" \
-ldflags="-X main.BuildSMTPServer=$SMTP_SERVER" \
-ldflags="-X main.BuildSMTPPort=$SMTP_PORT" \
-ldflags="-X main.BuildSMTPUser=$SMTP_USER" \
-ldflags="-X main.BuildSMTPPassword=$SMTP_PASS" \
-ldflags="-X main.BuildUseSSL=$USE_SSL" \
-ldflags="-X main.BuildIgnoreCerts=$IGNORE_CERTS" \
-o ~/bin/nextcloud-mail
echo "✓ nextcloud-mail built successfully"
# Verification: Show what credentials were embedded
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " Build Verification Summary"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo " IMAP Server: $IMAP_SERVER"
echo " IMAP Port: $IMAP_PORT"
echo " IMAP Username: $IMAP_USER"
echo " IMAP Password: [$(echo "$IMAP_PASS" | sed 's/./*/g')]"
echo " SMTP Server: $SMTP_SERVER"
echo " SMTP Port: $SMTP_PORT"
echo " SMTP Username: $SMTP_USER"
echo " SMTP Password: [$(echo "$SMTP_PASS" | sed 's/./*/g')]"
echo " Use SSL: $USE_SSL"
echo " Ignore Certs: $IGNORE_CERTS"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
if [ -z "$IMAP_USER" ] || [ -z "$IMAP_PASS" ]; then
echo "⚠️ Warning: IMAP username or password appears to be empty!"
echo " The binary was built but may not work correctly."
echo " If this is incorrect, please rebuild with valid credentials."
fi
echo ""
echo ""
echo "All tools built successfully!"
echo ""
echo "Binaries installed at:"
echo " ~/bin/nextcloud-client (WebDAV file operations)"
echo " ~/bin/nextcloud-contacts (CardDAV address books)"
echo " ~/bin/nextcloud-calendar (CalDAV events)"
echo " ~/bin/nextcloud-mail (IMAP/SMTP email)"
echo ""
echo "Security Note: These binaries contain credentials in clear text."
echo "Do not distribute them outside your trusted environment."