#!/bin/bash

uso () {
    echo "=> Script para insertar en el Json de descripción de centro las passwords cifradas (SHA)."
    echo "=> Deben pasarse 2 parámetros:"
    echo "=> 1) El Json de descripción del centro (p.d. usr/share/vitalinux/conf-centro/vx-centro.conf.json)"
    echo "=> 2) El Json con los usuarios y passwords (p.d. otros_archivos/vx-passwords_usuarios.json)"
    echo "=> Si no se indican parametros se usarán los valores por defecto"
    echo "Ej. vx-passwords_usuarios-json usr/share/vitalinux/conf-centro/vx-centro.conf.json otros_archivos/vx-passwords_usuarios.json"
}

if (( ${#} == 0 )) ; then
    RUTA1="usr/share/vitalinux/conf-centro/vx-centro.conf.json"
    RUTA2="otros_archivos/vx-passwords_usuarios.json"
elif (( ${#} == 2 )) ; then
    RUTA1="${1}"
    RUTA2="${2}"
else
    uso && exit 1
fi


# Comprobamos que tiene instalado el paquete moreutils para poder usar la utilidad sponge:
if ! ( dpkg -l | tr -s " " " " | cut -d" " -f2 | grep ^moreutils > /dev/null 2>&1 ) ; then
    echo -e "=> Debes instalar el paquete moreutils para usar sponge: \n\tsudo apt-get install moreutils"
fi

#RUTA="/usr/share/vitalinux/conf-centro/vx-centro.conf.json"
[ ! -z "${RUTA1}" ] && [ -f "${RUTA1}" ] && \
    {
        echo "=> Comprobamos el fichero pasado como FICHJSON: ${RUTA1}"
        #jq -e < "${RUTA1}" > /dev/null 2>&1 && \
        python -m json.tool "${RUTA1}" /dev/null 2>&1 && \
        FICHJSON="${RUTA1}" && \
        echo "=> Se ha adoptado con FICHJSON: ${FICHJSON}" || \
        {
            echo "=> Problema con FICHJSON: ${FICHJSON}" ;
            exit 1;
        }
    } || \
    {
        uso && exit 1;
    }


# Comprobamos que como segundo parámetro hay un Json con los usuarios y contraseñas:
[ ! -z "${RUTA2}" ] && {
    echo "=> Comprobamos el fichero Json de usuarios y passwords: ${RUTA2}"
    [ -f "${RUTA2}" ] && \
    python -m json.tool "${RUTA2}" /dev/null 2>&1 && \
    {
        JSONPASS="${RUTA2}" ;
        echo "=> Se adopta como JSONPASS: ${JSONPASS}" ;
    } || \
    {
        uso && exit 1
    }
} || \
{
    uso && exit 1 ;
}

echo "=> Vamos a trabajar con el archivo: ${FICHJSON}"
# 1) Comprobamos cuantas passwords por etiquetas|cids se configuran:
NUM1="$(jq '.usuarios.passwords | length' "${FICHJSON}")"
echo "=> Hay ${NUM1} conjuntos de passwords a asignar por etiquetas|cids ..."
# 2) Hacemos un bucle para asignar passwords:
CONT1=0
while (( ${CONT1} < ${NUM1} )) ; do
    CONT2=0
    NUM2="$(jq ".usuarios.passwords[${CONT1}].passusus | length" "${FICHJSON}")"
    while (( ${CONT2} < ${NUM2} )) ; do
      USU="$(jq -r ".usuarios.passwords[${CONT1}].passusus[${CONT2}] | .usuario" "${FICHJSON}")"
      [[ ! -z "${USU}" ]] && \
      {
        PASSUSU="$(jq -r ".passusus[] | select ( .usuario == \"${USU}\" ) | .password" "${JSONPASS}")" ;
        [[ ! -z "${PASSUSU}" ]] && \
        {
          PASSUSUSHA="$(mkpasswd -m sha-512 "${PASSUSU}")" ;
          jq ". | \
          .usuarios.passwords[${CONT1}].passusus[${CONT2}].password = \"${PASSUSUSHA}\"" \
          "${FICHJSON}" | sponge "${FICHJSON}" ;
          echo "=> Asignación Passwords: ${USU}:${PASSUSU}:${PASSUSUSHA}:Ok!!"
        } || \
        {
          echo "=> No hay password para el usuario: ${USU}" ;
        }
      }
      ((CONT2++))
    done
    ((CONT1++))
done

