141 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/bash
 | 
						|
 | 
						|
KAZ_ROOT=$(cd "$(dirname $0)/.."; pwd)
 | 
						|
. "${KAZ_ROOT}/bin/.commonFunctions.sh"
 | 
						|
setKazVars
 | 
						|
. $DOCKERS_ENV
 | 
						|
 | 
						|
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="$(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="$(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 $SIMU sed -i "s/@@db@@$dbName@@d@@/${dbName}_$db/"  $DIR/*; done
 | 
						|
		for pw in $passwords; do $SIMU sed -i "s/@@pass@@$pw@@p@@/${pass}/"  $DIR/*; done
 | 
						|
		for tk in $tokens; do $SIMU sed -i "s/@@token@@$tk@@t@@/${token}/"  $DIR/*; done
 | 
						|
		for u in $users; do $SIMU sed -i "s/@@user@@$u@@u@@/${u}_$user/"  $DIR/*; done
 | 
						|
		for var in $globalvars; do $SIMU 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
 | 
						|
 | 
						|
		. $$DIR/env-$envname
 | 
						|
 | 
						|
		varnames=$(grep -Eo '@@crossvar@@[^@]*@@cv@@' $FILENAME | sed -e 's/@@crossvar@@//' -e 's/@@cv@@//')
 | 
						|
		for varname in $varnames; do 
 | 
						|
			envname=${varname%%_*}
 | 
						|
			$SIMU sed -i "s/@@crossvar@@$varname@@cv@@/${!varname}/"  $DIR/*; 
 | 
						|
		
 | 
						|
		done
 | 
						|
 | 
						|
	fi
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
for ENVFILE in $ENVFILES; do
 | 
						|
	secretGen "$ENVFILE"
 | 
						|
done
 | 
						|
 | 
						|
 | 
						|
for ENVFILE in $ENVFILES; do
 | 
						|
	crossVarComplete "$ENVFILE"
 | 
						|
done
 | 
						|
 | 
						|
exit 0
 |