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.
187 lines
6.6 KiB
Bash
Executable File
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."
|