Files
nextcloud-integration/build.sh
T
WLTBAgent 5dbebc0f44 Add validation to prevent empty usernames/passwords
Build script now validates that IMAP username and password
are not empty before proceeding with the build.

This prevents the binary from being built with empty
credentials which would cause connection errors like:
  "dial tcp :143" (empty hostname)
2026-02-23 22:20:51 +00:00

149 lines
5.1 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
SMTP_USER=${SMTP_USER:-$IMAP_USER}
read -sp "SMTP Password (default: same as IMAP): " SMTP_PASS
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"
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."