#!/bin/sh
# Roda o CLI do Gateway como o usuario do servico e com o mesmo ambiente que a unidade
# systemd usa -- se o `login` rodasse como root ou como voce, a identidade nasceria num
# diretorio que o servico nao le, e o Gateway ficaria "registrado" e parado.
#
#   gti-iot-gateway login --instance jjpplasticos
#   gti-iot-gateway run   --instance jjpplasticos     (primeiro plano, para depurar)
set -e

RAIZ=/opt/gti-iot-gateway
USUARIO=gtigw

# A instancia sai dos proprios argumentos, para carregar o mesmo EnvironmentFile da
# unidade. Sem --instance, vale "default", como no CLI.
INSTANCIA=default
ANTERIOR=""
for arg in "$@"; do
    case "$ANTERIOR" in
        --instance) INSTANCIA="$arg" ;;
    esac
    case "$arg" in
        --instance=*) INSTANCIA=${arg#--instance=} ;;
    esac
    ANTERIOR="$arg"
done

CONFIG="/etc/gti-iot-gateway/$INSTANCIA.env"
[ -f "$CONFIG" ] || CONFIG=/dev/null

if [ "$(id -un)" = "$USUARIO" ]; then
    EXECUTA=""
elif [ "$(id -u)" = "0" ]; then
    EXECUTA="setpriv --reuid=$USUARIO --regid=$USUARIO --clear-groups --"
else
    echo "Rode como root (sudo) ou como o usuario $USUARIO." >&2
    exit 1
fi

# shellcheck disable=SC1090
set -a
. "$CONFIG"
set +a

export PYTHONPATH="$RAIZ/app"
export GTI_IOT_SHARED_DATA_DIR="${GTI_IOT_SHARED_DATA_DIR:-/var/lib/gti-iot-gateway}"
export GTI_IOT_DATA_DIR="${GTI_IOT_DATA_DIR:-/var/lib/gti-iot-gateway/app}"
# Sem isto o `login` gravaria o token em formato legivel e o servico, que le com a
# chave, nao o abriria.
export GTI_IOT_HOST_KEY_FILE="${GTI_IOT_HOST_KEY_FILE:-/etc/gti-iot-gateway/host.key}"
umask 0077

exec $EXECUTA "$RAIZ/venv/bin/python" -m gti_iot_app.gateway.cli "$@"
