#!/bin/bash KAZ_ROOT=$(cd "$(dirname $0)/.."; pwd) . "${KAZ_ROOT}/bin/.commonFunctions.sh" setKazVars cd "${KAZ_ROOT}" NEW_DIR="secret" TMPL_DIR="secret.tmpl" SORTIESTANDARD=1 DIR=$KAZ_KEY_DIR ORGA= if [ ! -d "${NEW_DIR}/" ]; then rsync -a "${TMPL_DIR}/" "${NEW_DIR}/" fi usage() { echo "${PRG} [OPTIONS] [filename ...] # PARCOURE LES ENV FILE ET REMPLIT LES --clean_val-- qui n'ont pas été complétés. on cherche des @@pass@@***@@p@@ -> on génère un mot de passe 16car (les *** permettent d'identifier le mot de passe, s'il doit être utilisé ailleurs) @@db@@***@@d@@ -> on génère une base de données (pareil identifié par ***) @@user@@***@@u@@ -> on génère un user @@token@@***@@t@@ -> on génère un token @@globalvar@@***@@gv@@ -> on cherche la variable globale *** @@crossvar@@envname_varname@@cv@@ -> on retrouve la variable dans les envfiles Si on précise des fichiers, alors il ne remplace que dans ceux là (et on "lie" les clean-val ensemble !!!) OPTIONS -h|--help Cette aide :-) -n|--simu SIMULATION -q|--quiet Sans bruits de fond -d foldername prend les envfiles dans un sous dossier /kaz/secret/orgas/foldername/ (pour les orgas !) - " } for ARG in "$@"; do if [ -n "${DIRECTORYARG}" ]; then # après un -d DIR=$KAZ_KEY_DIR/orgas/${ARG} ORGA=${ARG} DIRECTORYARG= else case "${ARG}" in '-d' | '--directory' | '-f' | '--folder' | '--foldername') DIRECTORYARG="ON ATTEND UN REPERTOIRE APRES CA" ;; '-h' | '--help' ) usage && exit ;; '-n' | '--simu') SIMU="echo" ;; '-q' | '--quiet') SORTIESTANDARD="/dev/null" ;; *) ENVFILES="${ENVFILES} ${ARG%}";; esac fi done NB_FILES=$(echo "${ENVFILES}" | wc -w ) if [[ $NB_FILES = 0 ]]; then ENVFILES=$(grep -lE '@@pass@@|@@db@@|@@user@@|@@token@@|@@globalvar@@|@@crossvar@@' $DIR/* | sed 's/.*\///') # fi secretGen(){ # $1 Le env-file à compléter FILENAME=$DIR/$1 NBMATCH=$(grep -lE '@@pass@@|@@db@@|@@user@@|@@token@@|@@globalvar@@' $FILENAME | wc -l) # est ce qu'il y a des choses à génrérer if [[ $NBMATCH = 0 ]]; then true # rien à faire dans ce fichier, on passe else echo "Remplissage $FILENAME" >& $SORTIESTANDARD db="$1$(apg -n 1 -m 2 -M NCL | cut -c 1-2)" pass="$(apg -n 1 -m 16 -M NCL)" token="$(apg -n 1 -m 32 -M NCL)" user="$1$(apg -n 1 -m 2 -M NCL | cut -c 1-2)" dbs=$(grep -Eo '@@db@@[^@]*@@d@@' $FILENAME | sed -e 's/@@db@@//' -e 's/@@d@@//') passwords=$(grep -Eo '@@pass@@[^@]*@@p@@' $FILENAME | sed -e 's/@@pass@@//' -e 's/@@p@@//') tokens=$(grep -Eo '@@token@@[^@]*@@t@@' $FILENAME | sed -e 's/@@token@@//' -e 's/@@t@@//') users=$(grep -Eo '@@user@@[^@]*@@u@@' $FILENAME | sed -e 's/@@user@@//' -e 's/@@u@@//') globalvars=$(grep -Eo '@@globalvar@@[^@]*@@gv@@' $FILENAME | sed -e 's/@@globalvar@@//' -e 's/@@gv@@//') for dbName in $dbs; do sed -i "s/@@db@@$dbName@@d@@/${dbName}_$db" $DIR/*; done for pw in $passwords; do sed -i "s/@@pass@@$pw@@p@@/${pw}" $DIR/*; done for tk in $tokens; do sed -i "s/@@token@@$tk@@t@@/${tk}" $DIR/*; done for u in $users; do sed -i "s/@@user@@$u@@u@@/${u}_$user" $DIR/*; done for var in $globalvars; do sed -i "s/@@globalvar@@$var@@gv@@/${!var}" $DIR/*; done fi } crossVarComplete(){ # $1 Le env-file à compléter FILENAME=$DIR/$1 NBMATCH=$(grep -lE '@@crossvar@@' $FILENAME | wc -l) # est ce qu'il y a des cross-var à récupérer if [[ $NBMATCH = 0 ]]; then true # rien à faire dans ce fichier, on passe else echo "Remplissage $FILENAME" >& $SORTIESTANDARD varnames=$(grep -Eo '@@crossvar@@[^@]*@@cv@@' $FILENAME | sed -e 's/@@crossvar@@//' -e 's/@@cv@@//') for varname in $varnames; do envname=${varname%_} value=$(/$KAZ_BIN_DIR/getPasswords.sh -e $varname $envname -d $ORGA) sed -i "s/@@crossvar@@$varname@@cv@@/${value}" $DIR/*; done fi } for ENVFILE in $ENVFILES; do secretGen "$ENVFILE" done for ENVFILE in $ENVFILES; do crossVarComplete "$ENVFILE" done exit 0