hack-house/lab/host-chat.sh
leetcrypt 65ee9dee16 feat: add host-chat.sh — one-command server setup with friend instructions
Detects all available IPs (Tailscale, LAN, public), prints connect
command for friends to copy, prompts for password securely via getpass.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-05-25 22:40:57 -07:00

97 lines
2.6 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# host-chat.sh — Start cmd-chat server for remote friends
#
# Usage:
# ./lab/host-chat.sh # TLS on port 4000, prompts for password
# ./lab/host-chat.sh --port 5000 # Custom port
# ./lab/host-chat.sh --no-tls # Disable TLS (not recommended)
#
# After starting, give your friend:
# python3 cmd_chat.py connect YOUR_IP PORT theirname --insecure
#
set -euo pipefail
PORT="${1:-4000}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
NO_TLS=false
# Parse args
while [[ $# -gt 0 ]]; do
case "$1" in
--port) PORT="$2"; shift 2 ;;
--no-tls) NO_TLS=true; shift ;;
*) shift ;;
esac
done
cd "$PROJECT_ROOT"
# Check deps
echo "Checking dependencies..."
for pkg in sanic srp cryptography websockets rich requests; do
if ! python3 -c "import $pkg" 2>/dev/null; then
echo "Installing missing dependencies..."
python3 -m pip install -r requirements.txt --quiet 2>/dev/null
break
fi
done
# Get all IPs for display
echo ""
echo "========================================="
echo " cmd-chat Server Setup"
echo "========================================="
echo ""
echo "Your IP addresses:"
# Tailscale IP
TS_IP=$(tailscale ip -4 2>/dev/null || true)
if [[ -n "$TS_IP" ]]; then
echo " Tailscale: $TS_IP (recommended — encrypted tunnel)"
fi
# LAN IPs
for iface in $(ip -4 -o addr show scope global 2>/dev/null | awk '{print $2}' | sort -u); do
IP=$(ip -4 -o addr show "$iface" 2>/dev/null | awk '{print $4}' | cut -d/ -f1)
echo " $iface: $IP"
done
# Public IP
PUB_IP=$(curl -sf --max-time 3 ifconfig.me 2>/dev/null || true)
if [[ -n "$PUB_IP" ]]; then
echo " Public: $PUB_IP (requires port forwarding)"
fi
echo ""
echo "========================================="
# TLS flags
SERVER_FLAGS=""
PROTO="https"
CLIENT_FLAG="--insecure"
if $NO_TLS; then
SERVER_FLAGS="--no-tls"
PROTO="http"
CLIENT_FLAG="--no-tls"
fi
# Pick best IP for friend instructions
BEST_IP="${TS_IP:-$(ip -4 -o addr show scope global 2>/dev/null | head -1 | awk '{print $4}' | cut -d/ -f1)}"
echo ""
echo "Tell your friend to run:"
echo ""
echo " git clone https://github.com/leetcrypt/cmd-chat.git"
echo " cd cmd-chat && pip install -r requirements.txt"
echo " python3 cmd_chat.py connect $BEST_IP $PORT THEIR_NAME $CLIENT_FLAG"
echo ""
echo "They'll be prompted for the password (same one you're about to set)."
echo "========================================="
echo ""
# Start server — password will be prompted by cmd_chat
exec python3 cmd_chat.py serve 0.0.0.0 "$PORT" $SERVER_FLAGS