#!/bin/bash
# ============================================================
#  Adobe telemetry/privacy domain block script (macOS)
#  Blocks ONLY data-reporting domains. Does NOT touch
#  activation/licensing/verification servers.
#
#  Usage:
#    sudo ./adobe_telemetry_block.sh              = add blocks
#    sudo ./adobe_telemetry_block.sh --uninstall  = remove blocks
# ============================================================

set -euo pipefail

HOSTS="/etc/hosts"
TAG="# adobe-tel"

# -----------------------------------------------------------
# Data-collection / telemetry / analytics domains to block
# -----------------------------------------------------------
# [Tel] hlrcv.*        = phone-home / telemetry
# [Ana] omtrdc/smetrics = Adobe Analytics / usage tracking
# [CR]  crs/crashrep   = crash reporter / error logging
# [AM]  demdex         = Audience Manager / Experience Cloud ID
# [Geo] geo2/stats     = geo-location / usage stats
# [Sur] survey         = in-app surveys / feedback
# [DTM] adobedtm       = Dynamic Tag Management assets
#
# NOT blocked - activation & licensing:
#   activate* / practivate / lm.licenses / ereg* / wip3 /
#   prod.adobegenuine / crl / ocsp / ts1 / ts2 / lcs-* / ims-prod*
# -----------------------------------------------------------
DOMAINS=(
    "hlrcv.stage.adobe.com"
    "hl2rcv.stage.adobe.com"
    "hlrcv.stage6.adobe.com"
    "hl2rcv.stage6.adobe.com"
    "data.adobegc.com"
    "adobe.tt.omtrdc.net"
    "sc.omtrdc.net"
    "smetrics.adobe.com"
    "dpm.demdex.net"
    "demdex.net"
    "assets.adobedtm.com"
    "adobedtm.com"
    "crs.cr.adobe.com"
    "crashreporter.adobe.com"
    "geo2.adobe.com"
    "stats.adobe.com"
    "survey.adobe.com"
)

# -----------------------------------------------------------
# Check for root privileges
# -----------------------------------------------------------
if [[ $EUID -ne 0 ]]; then
    echo "This script requires root privileges."
    echo "Please run: sudo $0 $*"
    exit 1
fi

# -----------------------------------------------------------
# Flush DNS cache
# -----------------------------------------------------------
flush_dns() {
    echo "Flushing DNS cache..."
    dscacheutil -flushcache 2>/dev/null || true
    killall -HUP mDNSResponder 2>/dev/null || true
    echo "DNS cache flushed."
}

# -----------------------------------------------------------
# Backup hosts file
# -----------------------------------------------------------
backup_hosts() {
    local ts
    ts=$(date +%Y%m%d_%H%M%S)
    local bak="${HOSTS}.bak_${ts}"
    cp "$HOSTS" "$bak"
    echo "Backup: $bak"
}

# -----------------------------------------------------------
# UNINSTALL mode
# -----------------------------------------------------------
if [[ "${1:-}" == "--uninstall" ]]; then
    echo "============================================"
    echo "  Removing entries added by this script"
    echo "============================================"
    echo

    backup_hosts

    # Remove all lines tagged with TAG
    sed -i '' "/${TAG}/d" "$HOSTS"

    echo "Removed all entries tagged: ${TAG}"

    flush_dns
    echo
    echo "Done."
    exit 0
fi

# -----------------------------------------------------------
# INSTALL mode (default)
# -----------------------------------------------------------
echo "============================================"
echo "  Adobe telemetry domain block (macOS)"
echo "============================================"
echo "Target: ${HOSTS}"
echo

backup_hosts

# Ensure hosts file ends with a newline
echo "" >> "$HOSTS"

COUNT=0
SKIP=0

for domain in "${DOMAINS[@]}"; do
    if grep -qF "$domain" "$HOSTS"; then
        SKIP=$((SKIP + 1))
        echo "[.] ${domain} already present, skipped"
    else
        echo "127.0.0.1 ${domain} ${TAG}" >> "$HOSTS"
        COUNT=$((COUNT + 1))
        echo "[+] 127.0.0.1 ${domain}"
    fi
done

echo
echo "============================================"
echo "  Done: added ${COUNT}, skipped ${SKIP}"
echo "============================================"

flush_dns

echo
echo "To restore, run: sudo $0 --uninstall"
exit 0
