#!/bin/bash # Build Nextcloud CLI tools with compile-time credentials # Usage: ./build.sh set -e # Check arguments if [ $# -ne 3 ]; then echo "Usage: $0 " 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 "Enter IMAP and SMTP credentials for nextcloud-mail" echo "Press Enter on each line to input value, or use the defaults shown in parentheses" # Prompt for email credentials echo "" read -p "IMAP Server hostname [default: teamworkapps.com]: " IMAP_SERVER if [ -z "$IMAP_SERVER" ]; then IMAP_SERVER="teamworkapps.com" fi read -p "IMAP Port [default: 993 for SSL, 143 for STARTTLS]: " IMAP_PORT if [ -z "$IMAP_PORT" ]; then IMAP_PORT="993" fi read -p "IMAP Username [required]: " IMAP_USER while [ -z "$IMAP_USER" ]; do echo "❌ Error: IMAP username cannot be empty" read -p "IMAP Username [required]: " IMAP_USER done read -sp "IMAP Password [required]: " IMAP_PASS if [ -z "$IMAP_PASS" ]; then echo "❌ Error: IMAP password cannot be empty" read -sp "IMAP Password [required]: " IMAP_PASS fi echo "" read -p "SMTP Server hostname [default: teamworkapps.com]: " SMTP_SERVER if [ -z "$SMTP_SERVER" ]; then SMTP_SERVER="teamworkapps.com" fi read -p "SMTP Port [default: 465 for SSL, 587 for STARTTLS]: " SMTP_PORT if [ -z "$SMTP_PORT" ]; then SMTP_PORT="465" fi read -p "SMTP Username [default: same as IMAP]: " SMTP_USER 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 # Only use IMAP defaults if user pressed Enter on SMTP prompts SMTP_PASS="$IMAP_PASS" 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 "━━━━━━━━━━━━━━━━━━━━━━━━━━" 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 # 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 if [ $? -eq 0 ]; then echo "✓ nextcloud-mail built successfully" else echo "❌ nextcloud-mail build failed" exit 1 fi echo "" echo "━━━━━━━━━━━━━━━━━━━━━━━━" echo " Build Verification Summary" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "" echo " IMAP Server: $IMAP_SERVER" echo " IMAP Port: $IMAP_PORT" echo " IMAP Username: $IMAP_USER" echo " SMTP Server: $SMTP_SERVER" echo " SMTP Port: $SMTP_PORT" echo " SMTP Username: $SMTP_USER" echo " Use SSL: $USE_SSL" echo " Ignore Certs: $IGNORE_CERTS" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "" if [ -z "$IMAP_USER" ] || [ -z "$IMAP_PASS" ] || [ -z "$SMTP_USER" ] || [ -z "$SMTP_PASS" ]; then echo "⚠️ Warning: IMAP username/password or SMTP username/password appear to be empty!" echo " The binary was built but may not work correctly." echo " If this is incorrect, please rebuild with valid credentials." echo " To rebuild: ./build.sh " 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."