#!/bin/bash
#
# vault_pki_enroll
#
# Author        : Nohaj
# Contact       : johan@slashroot.fr
# Date          : 20/10/20
# Version       : 1.0 
# Description   : Script qui permet de generer un certificat au sein de notre PKI vault
# Require       : jq, vault client and rights to enroll a certificate
#

#
# Checks
#
if [[ $# -ne 1 ]] ; then
    echo "Le script a besoin d'un FQDN en parametre"
    exit 1
fi

type jq &> /dev/null || { echo >&2 "ERREUR - Ce script a besoin de jq pour fonctionner"; exit 1; }
type vault &> /dev/null || { echo >&2 "ERREUR - Ce script a besoin de vault pour fonctionner"; exit 1; }

vault token lookup &> /dev/null || { echo >&2 "ERREUR - Etes vous sur d'avoir un token vault fonctionnel ?"; exit 1; }

# Validation
echo ""
echo -n "On genere le certificat pour $1 ? [o/N] : " ; read reponse
echo ""

if [[ $reponse == "o" ]] || [[ $reponse == "O" ]] ; then

    domain=$(echo $1 | cut -d "." -f 2,3)

    if [[ $domain == "slashroot.fr" ]] ; then
        role="slashroot-fr-all"
    elif [[ $domain == "slashroot.net" ]] ; then
        role="slashroot-net-all"
    else
        echo "ERREUR - Le script ne gere que du slashroot.fr ou slashroot.net"
        exit 1
    fi

    # On genere la cle privee et le certificat
    tmp_file=$(mktemp)
    vault write -format=json service/pki/interca/issue/$role common_name=$1 > $tmp_file

    if [[ $? -ne 0 ]] ; then
        echo "ERREUR - Impossible de generer le certificat"
        rm -f $tmp_file
        exit 1
    fi

    # On affiche les infos
    echo ""
    echo "--- Private key ---"
    echo ""
    jq -r '.data.private_key' $tmp_file 
    echo ""
    echo "Appuyer sur une touche pour passer au certificat" ; read next
    echo "--- Certificate ---" 
    echo ""
    tmp_file_2=$(mktemp)
    jq -r '.data.certificate' $tmp_file > $tmp_file_2
    jq -r '.data.ca_chain[]' $tmp_file >> $tmp_file_2
    cat $tmp_file_2
    echo ""
    rm -f $tmp_file ; rm -f $tmp_file_2
else
    echo "Abandon - On annule tout"
    exit 2
fi
