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

# Functions for starting the Sensor Log daemon and required services with
# appropriate blessings. Expected to be run with V23_CREDENTIALS or through
# an agent.

set -eu

function kill_child_processes() {
  kill -TERM -- -"${BASHPID}" || true
  sleep 1
  kill -KILL -- -"${BASHPID}" || true
}
export -f kill_child_processes

function run_mounttabled() {
  local -r BLESSNAME="$1"
  local -r NAME="$2"
  local -r IPADDR_PORT="$3"
  "${JIRI_ROOT}"/release/go/bin/vbecome -name="${BLESSNAME}/sl/mounttabled/${NAME}" \
    "${JIRI_ROOT}"/release/go/bin/mounttabled -v23.tcp.address "${IPADDR_PORT}" \
    &
  sleep 1
}
export -f run_mounttabled

function run_syncbased() {
  local -r BLESSNAME="$1"
  local -r MT="$2"
  local -r NAME="$3"
  local -r TMPDIR="$4"
  local -r DEF_BLESSING_ROOT="$("${JIRI_ROOT}"/release/go/bin/principal dump -s | cut -d ' ' -f 1 | cut -d ',' -f 1)"
  local -r DEF_BLESSING_RUNNER="${DEF_BLESSING_ROOT}/${BLESSNAME}/sl/${NAME}"
  # Everyone can Resolve to be able to join the syncgroup.
  echo "$DEF_BLESSING_RUNNER"
  local -r PERMISSIONS_LITERAL="{\
\"Admin\":{\"In\":[\"${DEF_BLESSING_RUNNER}\"]}, \
\"Read\":{\"In\":[\"${DEF_BLESSING_RUNNER}\"]}, \
\"Write\":{\"In\":[\"${DEF_BLESSING_RUNNER}\"]}, \
\"Debug\":{\"In\":[\"${DEF_BLESSING_RUNNER}\"]}, \
\"Resolve\":{\"In\":[\"...\"]} \
}"
  "${JIRI_ROOT}"/release/go/bin/vbecome -name="${BLESSNAME}/sl/syncbased/${NAME}" \
    "${JIRI_ROOT}"/release/go/bin/syncbased -v23.namespace.root "${MT}" \
    -name "syncbased/${NAME}" -engine leveldb -root-dir "${TMPDIR}/syncbased/${NAME}" \
    -v23.permissions.literal="${PERMISSIONS_LITERAL}" \
    &
  sleep 1
}
export -f run_syncbased

function run_measured() {
  local -r BLESSNAME="$1"
  local -r MT="$2"
  local -r NAME="$3"
  local -r TMPDIR="$4"
  run_syncbased "${BLESSNAME}" "${MT}" "measured/${NAME}" "${TMPDIR}"
  "${JIRI_ROOT}"/release/go/bin/vbecome -name="${BLESSNAME}/sl/measured/${NAME}" \
    "${JIRI_ROOT}"/experimental/projects/sensorlog_lite/bin/measured -v23.namespace.root "${MT}" \
    -service "syncbased/measured/${NAME}" -alsologtostderr \
    &
  sleep 1
}
export -f run_measured
