A tester : la génération des mots de passe !
This commit is contained in:
		
							
								
								
									
										166
									
								
								bin/secretGen.sh
									
									
									
									
									
								
							
							
						
						
									
										166
									
								
								bin/secretGen.sh
									
									
									
									
									
								
							@@ -8,65 +8,131 @@ 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
 | 
			
		||||
 | 
			
		||||
NEW_FILE="${NEW_DIR}/SetAllPass-new.sh"
 | 
			
		||||
TMPL_FILE="${NEW_DIR}/SetAllPass.sh"
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
while read line ; do
 | 
			
		||||
    if [[ "${line}" =~ ^# ]] || [ -z "${line}" ] ; then
 | 
			
		||||
	echo "${line}"
 | 
			
		||||
	continue
 | 
			
		||||
    fi
 | 
			
		||||
    if [[ "${line}" =~  "--clean_val--" ]] ; then
 | 
			
		||||
	case "${line}" in
 | 
			
		||||
	    *jirafeau_DATA_DIR*)
 | 
			
		||||
		JIRAFEAU_DIR=$(getValInFile "${DOCKERS_ENV}" "jirafeauDir")
 | 
			
		||||
		[ -z "${JIRAFEAU_DIR}" ] &&
 | 
			
		||||
		    echo "${line}" ||
 | 
			
		||||
			sed "s%\(.*\)--clean_val--\(.*\)%\1${JIRAFEAU_DIR}\2%" <<< ${line}
 | 
			
		||||
		continue
 | 
			
		||||
		;;
 | 
			
		||||
	    *DATABASE*|*DB_NAME*)
 | 
			
		||||
		dbName="$(sed "s/\([^_]*\)_.*/\1/" <<< ${line})_$(apg -n 1 -m 2 -M NCL | cut -c 1-2)"
 | 
			
		||||
		sed "s/\(.*\)--clean_val--\(.*\)/\1${dbName}\2/" <<< ${line}
 | 
			
		||||
		continue
 | 
			
		||||
		;;
 | 
			
		||||
	    *ROOT_PASSWORD*|*PASSWORD*|*SECRET*)
 | 
			
		||||
		pass="$(apg -n 1 -m 16 -M NCL)"
 | 
			
		||||
		sed "s/\(.*\)--clean_val--\(.*\)/\1${pass}\2/" <<< ${line}
 | 
			
		||||
		continue
 | 
			
		||||
		;;
 | 
			
		||||
	    *USER*)
 | 
			
		||||
		user="$(sed "s/\([^_]*\)_.*/\1/" <<< ${line})_$(apg -n 1 -m 2 -M NCL | cut -c 1-2)"
 | 
			
		||||
		sed "s/\(.*\)--clean_val--\(.*\)/\1${user}\2/" <<< ${line}
 | 
			
		||||
		continue
 | 
			
		||||
		;;
 | 
			
		||||
	    *RAIN_LOOP*|*office_password*|*mattermost_*|*sympa_*|*gitea_*)
 | 
			
		||||
		pass="$(apg -n 1 -m 16 -M NCL)"
 | 
			
		||||
		sed "s/\(.*\)--clean_val--\(.*\)/\1${pass}\2/" <<< ${line}
 | 
			
		||||
		continue
 | 
			
		||||
		;;
 | 
			
		||||
	    *vaultwarden_ADMIN_TOKEN*)
 | 
			
		||||
		pass="$(apg -n 1 -m 32 -M NCL)"
 | 
			
		||||
		sed "s/\(.*\)--clean_val--\(.*\)/\1${pass}\2/" <<< ${line}
 | 
			
		||||
		continue
 | 
			
		||||
		;;
 | 
			
		||||
	esac
 | 
			
		||||
	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
 | 
			
		||||
	echo "${line}"
 | 
			
		||||
	continue
 | 
			
		||||
 | 
			
		||||
      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
 | 
			
		||||
    printKazError "${line}" >&2
 | 
			
		||||
done < "${TMPL_FILE}" > "${NEW_FILE}"
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
mv "${NEW_FILE}" "${TMPL_FILE}"
 | 
			
		||||
NB_FILES=$(echo "${ENVFILES}" | wc -w )
 | 
			
		||||
 | 
			
		||||
chmod a+x "${TMPL_FILE}"
 | 
			
		||||
. "${TMPL_FILE}"
 | 
			
		||||
"${KAZ_BIN_DIR}/updateDockerPassword.sh"
 | 
			
		||||
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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user