#!/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 echo "━━━━━━━━━━━━━━━━━━━━━━━━" echo "Email Integration Setup (IMAP/SMTP)" echo "━━━━━━━━━━━━━━━━━━━━━━" echo "" echo "IMAP and SMTP credentials will be embedded at compile time." echo "Provide values below, or press Enter to leave a field empty (uses default)." echo "" read -p "IMAP Server hostname [required]: " IMAP_SERVER IMAP_SERVER="${IMAP_SERVER:-teamworkapps.com}" read -p "IMAP Port [default: 993]: " 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]: " SMTP_PORT SMTP_PORT="${SMTP_PORT:-465}" read -p "SMTP Username [default: same as IMAP]: " SMTP_USER read -sp "SMTP Username" if [ -z "$SMTP_USER" ]; then SMTP_USER="$IMAP_USER" fi read -sp "SMTP Password [default: same as IMAP]: " SMTP_PASS if [ -z "$SMTP_PASS" ]; then SMTP_PASS="$IMAP_PASS" fi read -p "Use SSL/TLS? [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? [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 "Build Summary" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "" echo " IMAP Server: $IMAP_SERVER" echo " IMAP Port: $IMAP_PORT" echo " IMAP Username: $IMAP_USER" echo " IMAP Password: [hidden]" echo " SMTP Server: $SMTP_SERVER" echo " SMTP Port: $SMTP_PORT" echo " SMTP Username: $SMTP_USER" echo " SMTP Password: [hidden]" 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 -X "name"="value" format ensures Go receives actual strings, not empty defaults 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."