#!/bin/sh
# Configura Veyon en el puesto maestro: idioma, autenticacion por clave de fichero e
# importacion del par de claves (privada + publica).
# Se ejecuta desde el postinst y puede relanzarse manualmente en cualquier momento.
set -e

CONF_FILE=/etc/vx-dga-l-veyon-master/vx-dga-l-veyon-master.conf
DATA_DIR=/usr/share/vx-dga-l-veyon-master

# --- Valores por defecto (sobreescribibles desde $CONF_FILE) ---
VEYON_LANGUAGE=es_ES

# Nombre interno de la clave en el almacen de Veyon (solo letras, sin espacios)
VEYON_AUTH_KEY_NAME=teacher

# Grupos del sistema con acceso de lectura a cada clave.
# El grupo debe existir antes de ejecutar este script.
VEYON_AUTH_PRIVATE_GROUP=profesores
VEYON_AUTH_PUBLIC_GROUP=profesores

# Puerto TCP al que el maestro se conectara en los clientes (debe coincidir con el del cliente)
VEYON_SERVER_PORT=11100

# Rutas a los ficheros PEM instalados por el paquete.
# Cambia estas variables en $CONF_FILE para usar claves propias.
VEYON_PRIVATE_KEY=$DATA_DIR/llaves-genericas_private_key.pem
VEYON_PUBLIC_KEY=$DATA_DIR/llaves-genericas_public_key.pem

# Cargar configuracion local si existe (sobreescribe los valores por defecto)
if [ -f "$CONF_FILE" ]; then
    # shellcheck disable=SC1090
    . "$CONF_FILE"
fi

# Cargar fragmentos adicionales desde conf.d/ en orden alfabetico.
# Permiten que otros paquetes o el administrador sobreescriban variables concretas
# sin modificar el fichero de configuracion principal.
CONF_D=/etc/vx-dga-l-veyon-master/conf.d
if [ -d "$CONF_D" ]; then
    for _snippet in "$CONF_D"/*.conf; do
        # El test -f descarta la expansion literal cuando no hay ficheros .conf
        # shellcheck disable=SC1090
        [ -f "$_snippet" ] && . "$_snippet"
    done
    unset _snippet
fi

# Veyon puede no estar disponible en entornos de build; se omite sin error fatal
if ! command -v veyon-cli >/dev/null 2>&1; then
    echo "[vx-dga-l-veyon-master] Aviso: veyon-cli no esta disponible, se omite la configuracion."
    exit 0
fi

# Establecer el idioma de la interfaz de Veyon Master
veyon-cli config set UI/Language "$VEYON_LANGUAGE"

# Puerto de conexion con los clientes (el maestro conecta a este puerto en cada cliente)
veyon-cli config set Network/VeyonServerPort "$VEYON_SERVER_PORT"

# Activar autenticacion por clave de fichero.
# En LAN con clave compartida este metodo es suficiente y evita depender de credenciales
# del sistema operativo, que pueden variar entre equipos.
veyon-cli config set Authentication/Method "Key file authentication"

# Importar la clave privada: necesaria en el maestro para iniciar sesiones remotas.
# Solo el grupo $VEYON_AUTH_PRIVATE_GROUP podra leer este fichero.
if [ -f "$VEYON_PRIVATE_KEY" ]; then
    veyon-cli authkeys import "${VEYON_AUTH_KEY_NAME}/private" "$VEYON_PRIVATE_KEY" || true
    veyon-cli authkeys setaccessgroup "${VEYON_AUTH_KEY_NAME}/private" "$VEYON_AUTH_PRIVATE_GROUP" || true
else
    echo "[vx-dga-l-veyon-master] Aviso: llave privada no encontrada: $VEYON_PRIVATE_KEY"
fi

# Importar la clave publica: el maestro tambien la necesita para completar la
# verificacion mutua con los clientes.
if [ -f "$VEYON_PUBLIC_KEY" ]; then
    veyon-cli authkeys import "${VEYON_AUTH_KEY_NAME}/public" "$VEYON_PUBLIC_KEY" || true
    veyon-cli authkeys setaccessgroup "${VEYON_AUTH_KEY_NAME}/public" "$VEYON_AUTH_PUBLIC_GROUP" || true
else
    echo "[vx-dga-l-veyon-master] Aviso: llave publica no encontrada: $VEYON_PUBLIC_KEY"
fi

# Actualizar el formato interno de configuracion si Veyon fue actualizado desde la
# ultima ejecucion de este script
veyon-cli config upgrade

exit 0
