#!/usr/bin/env bash
# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

#### CATEGORY=Other
### register host tools at MacOS Application Firewall
## Register host tools at MacOS Application Firewall
##
## NOTE: This script uses sudo and will thus ask for your password!
##
##   -n|--dry-run         Just print all steps, don't do any configuration

source "$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"/lib/vars.sh || exit $?
fx-config-read

FIREWALL_CMD="/usr/libexec/ApplicationFirewall/socketfilterfw"

# TODO(65725): produce build manifest of this information instead.
FIREWALL_TOOLS=(
  ascendd
  bootserver
  device-finder
  diag_tool
  dockyard_host
  ffx
  loglistener
  netaddr
  netcp
  netls
  netruncmd
  onet
  pm
  scrutiny
  sockscripter
  traceutil
  triage
  whereiscl
  zxdb
)

function dryer {
  if ! "$dryrun"; then
    "${@}"
    return $?
  fi
  echo >&2 "+ $@"
  return 0
}

function list_tools {
  TOOL_LIST="$(${FIREWALL_CMD} --listapps | grep "${FUCHSIA_DIR}" | awk '{print $3}')"
  for f in "${TOOL_LIST[@]}"; do
    echo "${f}"
  done
}

function clear_tools {
  TOOL_LIST="$(${FIREWALL_CMD} --listapps | grep "${FUCHSIA_DIR}" | awk '{print $3}')"
  for f in ${TOOL_LIST}; do
    dryer sudo ${FIREWALL_CMD} --remove "${f}" > /dev/null
  done
}

function allow_tools {
  for tool in "${FIREWALL_TOOLS[@]}"; do
    for f in "${FUCHSIA_BUILD_DIR}/host-tools/${tool}" "${FUCHSIA_BUILD_DIR}"/host_*/"${tool}" "${FUCHSIA_BUILD_DIR}"/host_*/exe.unstripped/"${tool}"; do
      dryer sudo ${FIREWALL_CMD} --add "$f" --unblockapp "$f" > /dev/null
    done
  done
}

function main {
  echo "  clearing firewall rules.."
  clear_tools
  echo "  adding firewall rules.."
  allow_tools

  # Activate the changes
  dryer sudo ${FIREWALL_CMD} --setglobalstate off > /dev/null
  dryer sudo ${FIREWALL_CMD} --setglobalstate on > /dev/null
  echo "..done"

  echo "  following tools are registered in the firewall rules:"
  echo " "
  list_tools
  echo " "
}

dryrun=false
while [[ $# > 0 ]]; do
  case "$1" in
  -n|--dry-run)
    fx-warn "Running in dry-run mode"
    dryrun=true
    ;;
  -h|--help|*)
    fx-command-help
    exit 1
    ;;
  esac
  shift
done

main
