Files
nextcloud-integration/build.sh
T
WLTBAgent c9e957c5da Fix: Use double quotes around ldflags to pass actual string values
Changed from:
  -ldflags=-X main.BuildIMAPServer= (no quotes)
To:
  -ldflags=-X main.BuildIMAPServer="" (with quotes)

This ensures Go receives the actual IMAP/SMTP credentials
instead of empty strings from defaults in Go code.
2026-02-24 01:49:39 +00:00

168 lines
5.5 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>"
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 ""
# Prompt for email credentials
echo "━━━━━━━━━━━━━━━━━━━━━━"
echo "Enter IMAP and SMTP credentials for nextcloud-mail"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "Nextcloud Mail uses different credentials from other Nextcloud tools."
echo "These are IMAP/SMTP credentials, not Nextcloud API credentials."
echo ""
# Prompt for email credentials with proper quoting
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 [required]: " IMAP_USER
if [ -z "$IMAP_USER" ]; then
echo "❌ Error: IMAP username cannot be empty"
exit 1
fi
read -sp "IMAP Password [required]: " IMAP_PASS
if [ -z "$IMAP_PASS" ]; then
echo "❌ Error: IMAP password cannot be empty"
exit 1
fi
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_INPUT
read -sp "SMTP Password [default: same as IMAP]: " SMTP_PASS_INPUT
echo ""
# Apply defaults for SMTP if user left them empty
if [ -z "$SMTP_USER_INPUT" ] && [ -z "$SMTP_PASS_INPUT" ]; then
SMTP_USER="$IMAP_USER"
SMTP_PASS="$IMAP_PASS"
else
SMTP_USER="${SMTP_USER_INPUT}"
SMTP_PASS="${SMTP_PASS_INPUT}"
fi
# Validate SMTP username/password if provided
if [ "$SMTP_USER_INPUT" ] && [ -z "$SMTP_USER" ]; then
echo "❌ Error: SMTP username is empty"
exit 1
fi
if [ "$SMTP_PASS_INPUT" ] && [ -z "$SMTP_PASS" ]; then
echo "❌ Error: SMTP password is empty"
exit 1
fi
read -p "Use SSL/TLS? [Y/n, default: Y]: " USE_SSL_INPUT
USE_SSL="${USE_SSL_INPUT:-Y}"
if [ "$USE_SSL_INPUT" = "Y" ] || [ "$USE_SSL_INPUT" = "y" ]; then
USE_SSL="true"
else
USE_SSL="false"
fi
read -p "Ignore certificate validity errors? [y/N, default: N]: " IGNORE_CERTS_INPUT
IGNORE_CERTS="${IGNORE_CERTS_INPUT:-N}"
if [ "$IGNORE_CERTS_INPUT" = "Y" ] || [ "$IGNORE_CERTS_INPUT" = "y" ]; then
IGNORE_CERTS="true"
else
IGNORE_CERTS="false"
fi
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━"
echo "Email Credentials Summary:"
echo "━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo " IMAP: $IMAP_USER@$IMAP_SERVER:$IMAP_PORT"
echo " SMTP: $SMTP_USER@$SMTP_SERVER:$SMTP_PORT"
echo " SSL: $USE_SSL"
echo " Ignore Certs: $IGNORE_CERTS"
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
# Each value is double-quoted to ensure Go receives them correctly
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
BUILD_STATUS=$?
if [ $BUILD_STATUS -eq 0 ]; then
echo "✓ nextcloud-mail built successfully"
else
echo "❌ nextcloud-mail build failed (exit code: $BUILD_STATUS)"
exit 1
fi
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."