#!/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"
    echo "=> 2) El Json con los usuarios y passwords"
    echo "Ej. vx-passwords_usuarios-json usr/share/vitalinux/conf-centro/vx-centro.conf.json otros_archivos/vx-passwords_usuarios.json"
}

(( ${#} != 2 )) && uso && exit 1

# 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 "${1}" ] && [ -f "${1}" ] && \
    {
        echo "=> Comprobamos el fichero pasado como FICHJSON: ${1}"
        #jq -e < "${1}" > /dev/null 2>&1 && \
        python -m json.tool "${1}" /dev/null 2>&1 && \
        FICHJSON="${1}" && \
        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 "${2}" ] && {
    echo "=> Comprobamos el fichero Json de usuarios y passwords: ${2}"
    [ -f "${2}" ] && \
    python -m json.tool "${2}" /dev/null 2>&1 && \
    {
        JSONPASS="${2}" ;
        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

