#!/bin/bash # Build Nextcloud CLI tools with compile-time credentials # Usage: ./build.sh set -e # Check arguments if [ $# -ne 3 ]; then echo "Usage: $0 " 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."