Les orgas + qques changements pour getpasswords.sh
This commit is contained in:
@@ -6,8 +6,6 @@ setKazVars
|
||||
|
||||
RUN_PASS_DIR="secret"
|
||||
TMPL_PASS_DIR="secret.tmpl"
|
||||
RUN_PASS_FILE="${RUN_PASS_DIR}/SetAllPass.sh"
|
||||
TMPL_PASS_FILE="${TMPL_PASS_DIR}/SetAllPass.sh"
|
||||
NEED_GEN=
|
||||
|
||||
########################################
|
||||
@@ -48,7 +46,12 @@ getVars () {
|
||||
# get lvalues in script
|
||||
getSettedVars () {
|
||||
# $1 : filename
|
||||
grep "^[^#]*=..*" $1 | grep -v '^[^#]*=".*--clean_val--.*"' | grep -v '^[^#]*="${' | sort -u
|
||||
grep -E "^[^=#]*(USER|PASS|TOKEN|DATABASE|ACCOUNT|LOGIN|KEY)[^#]*=..*" ./* | grep -vE '^[^#=]*=.*@@(user|pass|db|token|gv|cv)@@.*' | sort -u
|
||||
}
|
||||
|
||||
getUnsettedVars () {
|
||||
# $1 : filename
|
||||
grep -vE '^[^#=]*=.*@@(user|pass|db|token|gv|cv)@@.*' ./* | sort -u
|
||||
}
|
||||
|
||||
getVarFormVal () {
|
||||
@@ -57,60 +60,6 @@ getVarFormVal () {
|
||||
grep "^[^#]*=$1" $2 | sed 's/\s*\([^=]*\).*/\1/'
|
||||
}
|
||||
|
||||
########################################
|
||||
# synchronized SetAllPass.sh (find missing lvalues)
|
||||
updatePassFile () {
|
||||
# $1 : ref filename
|
||||
# $2 : target filename
|
||||
|
||||
REF_FILE="$1"
|
||||
TARGET_FILE="$2"
|
||||
NEED_UPDATE=
|
||||
while : ; do
|
||||
declare -a listRef listTarget missing
|
||||
listRef=($(getVars "${REF_FILE}"))
|
||||
listTarget=($(getVars "${TARGET_FILE}"))
|
||||
missing=($(comm -23 <(printf "%s\n" ${listRef[@]}) <(printf "%s\n" ${listTarget[@]})))
|
||||
if [ -n "${missing}" ]; then
|
||||
echo "missing vars in ${YELLOW}${BOLD}${TARGET_FILE}${NC}:${RED}${BOLD}" ${missing[@]} "${NC}"
|
||||
read -p "Do you want to add them? [y/n]: " yn
|
||||
case $yn in
|
||||
""|[Yy]*)
|
||||
emacs "${REF_FILE}" "${TARGET_FILE}"
|
||||
NEED_UPDATE=true
|
||||
break
|
||||
;;
|
||||
[Nn]*)
|
||||
break
|
||||
;;
|
||||
esac
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
updatePassFile "${TMPL_PASS_FILE}" "${RUN_PASS_FILE}"
|
||||
[ -n "${NEED_UPDATE}" ] && NEED_GEN=true
|
||||
updatePassFile "${RUN_PASS_FILE}" "${TMPL_PASS_FILE}"
|
||||
|
||||
########################################
|
||||
# check empty pass in TMPL_PASS_FILE
|
||||
declare -a settedVars
|
||||
settedVars=($(getSettedVars "${TMPL_PASS_FILE}"))
|
||||
if [ -n "${settedVars}" ]; then
|
||||
echo "unclear password in ${YELLOW}${BOLD}${TMPL_PASS_FILE}${NC}:${BLUE}${BOLD}"
|
||||
for var in ${settedVars[@]}; do
|
||||
echo -e "\t${var}"
|
||||
done
|
||||
echo "${NC}"
|
||||
read -p "Do you want to clear them? [y/n]: " yn
|
||||
case $yn in
|
||||
""|[Yy]*)
|
||||
emacs "${TMPL_PASS_FILE}"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
########################################
|
||||
# check new files env-*
|
||||
@@ -146,7 +95,7 @@ createMissingEnv "${TMPL_PASS_DIR}" "${RUN_PASS_DIR}"
|
||||
declare -a listTmpl listRun listCommonFiles
|
||||
listTmplFiles=($(cd "${TMPL_PASS_DIR}"; ls -1 env-* | grep -v '~$'))
|
||||
listRunFiles=($(cd "${RUN_PASS_DIR}"; ls -1 env-* | grep -v '~$'))
|
||||
listCommonFiles=($(comm -3 <(printf "%s\n" ${listTmplFiles[@]}) <(printf "%s\n" ${listRunFiles[@]})))
|
||||
listCommonFiles=($(comm -12 <(printf "%s\n" ${listTmplFiles[@]}) <(printf "%s\n" ${listRunFiles[@]})))
|
||||
for envFile in ${listCommonFiles[@]}; do
|
||||
while : ; do
|
||||
TMPL_FILE="${TMPL_PASS_DIR}/${envFile}"
|
||||
@@ -224,21 +173,19 @@ if [ -n "${missing}" ]; then
|
||||
fi
|
||||
|
||||
########################################
|
||||
# check env-* in updateDockerPassword.sh
|
||||
missing=($(for DIR in "${RUN_PASS_DIR}" "${TMPL_PASS_DIR}"; do
|
||||
# check extention in dockers.env
|
||||
declare -a missing
|
||||
unsetted=($(for DIR in "${RUN_PASS_DIR}"; do
|
||||
for envFile in $(ls -1 "${DIR}/"env-* | grep -v '~$'); do
|
||||
val="${envFile#*env-}"
|
||||
varName=$(getVarFormVal "${val}" "${DOCKERS_ENV}")
|
||||
[ -z "${varName}" ] && continue
|
||||
prefixe=$(grep "^\s*updateEnv.*${varName}" "${KAZ_BIN_DIR}/updateDockerPassword.sh" |
|
||||
sed 's/\s*updateEnv[^"]*"\([^"]*\)".*/\1/' | sort -u)
|
||||
if [ -z "${prefixe}" ]; then
|
||||
echo "${envFile#*/}_(\${KAZ_KEY_DIR}/env-\${"${varName}"})"
|
||||
if [ -z "${varName}" ]; then
|
||||
echo "${val}"
|
||||
fi
|
||||
done
|
||||
done | sort -u))
|
||||
if [ -n "${missing}" ]; then
|
||||
echo "missing update in ${GREEN}${BOLD}${KAZ_BIN_DIR}/updateDockerPassword.sh${NC}:${BLUE}${BOLD}"
|
||||
echo "missing def in ${GREEN}${BOLD}${DOCKERS_ENV}${NC}:${BLUE}${BOLD}"
|
||||
for var in ${missing[@]}; do
|
||||
echo -e "\t${var}"
|
||||
done
|
||||
@@ -246,53 +193,17 @@ if [ -n "${missing}" ]; then
|
||||
read -p "Do you want to add them? [y/n]: " yn
|
||||
case $yn in
|
||||
""|[Yy]*)
|
||||
emacs "${KAZ_BIN_DIR}/updateDockerPassword.sh"
|
||||
emacs "${DOCKERS_ENV}"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
########################################
|
||||
# synchronized SetAllPass.sh and env-*
|
||||
updateEnvFiles () {
|
||||
# $1 secret dir
|
||||
DIR=$1
|
||||
listRef=($(getVars "${DIR}/SetAllPass.sh"))
|
||||
missing=($(for envFile in $(ls -1 "${DIR}/"env-* | grep -v '~$'); do
|
||||
val="${envFile#*env-}"
|
||||
varName=$(getVarFormVal "${val}" "${DOCKERS_ENV}")
|
||||
[ -z "${varName}" ] && continue
|
||||
prefixe=$(grep "^\s*updateEnv.*${varName}" "${KAZ_BIN_DIR}/updateDockerPassword.sh" |
|
||||
sed 's/\s*updateEnv[^"]*"\([^"]*\)".*/\1/' | sort -u)
|
||||
[ -z "${prefixe}" ] && continue
|
||||
listVarsInEnv=($(getVars "${envFile}"))
|
||||
for var in ${listVarsInEnv[@]}; do
|
||||
[[ ! " ${listRef[@]} " =~ " ${prefixe}_${var} " ]] && echo "${prefixe}_${var}"
|
||||
done
|
||||
# XXX doit exister dans SetAllPass.sh avec le prefixe
|
||||
done))
|
||||
if [ -n "${missing}" ]; then
|
||||
echo "missing update in ${GREEN}${BOLD}${DIR}/SetAllPass.sh${NC}:${BLUE}${BOLD}"
|
||||
for var in ${missing[@]}; do
|
||||
echo -e "\t${var}"
|
||||
done
|
||||
echo "${NC}"
|
||||
read -p "Do you want to add them? [y/n]: " yn
|
||||
case $yn in
|
||||
""|[Yy]*)
|
||||
emacs "${DIR}/SetAllPass.sh"
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
}
|
||||
|
||||
updateEnvFiles "${RUN_PASS_DIR}"
|
||||
updateEnvFiles "${TMPL_PASS_DIR}"
|
||||
|
||||
# XXX chercher les variables non utilisées dans les SetAllPass.sh
|
||||
|
||||
if [ -n "${NEED_GEN}" ]; then
|
||||
while : ; do
|
||||
read -p "Do you want to generate blank values? [y/n]: " yn
|
||||
read -p "Do you want to generate missing values? [y/n]: " yn
|
||||
case $yn in
|
||||
""|[Yy]*)
|
||||
"${KAZ_BIN_DIR}/secretGen.sh"
|
||||
|
@@ -192,7 +192,7 @@ saveComposes () {
|
||||
saveDB ${etherpadDBName} "${etherpadDB_MYSQL_USER}" "${etherpadDB_MYSQL_PASSWORD}" "${etherpadDB_MYSQL_DATABASE}" etherpad mysql
|
||||
;;
|
||||
framadate)
|
||||
echo "save date"
|
||||
echo "save date"
|
||||
. $KAZ_BIN_DIR/getPasswords.sh framadateDB
|
||||
saveDB ${framadateDBName} "${framadateDB_MYSQL_USER}" "${framadateDB_MYSQL_PASSWORD}" "${framadateDB_MYSQL_DATABASE}" framadate mysql
|
||||
;;
|
||||
@@ -255,6 +255,11 @@ saveComposes () {
|
||||
. $KAZ_KEY_DIR/orgas/$ORGA/env-wpDB
|
||||
saveDB "${ORGA}-DB" "${MYSQL_USER}" "${MYSQL_PASSWORD}" "${MYSQL_DATABASE}" "${ORGA}-wordpress" mysql
|
||||
fi
|
||||
if grep -q "spip:" "${KAZ_COMP_DIR}/${compose}/docker-compose.yml" 2> /dev/null ; then
|
||||
echo " => spip"
|
||||
. $KAZ_KEY_DIR/orgas/$ORGA/env-spipDB
|
||||
saveDB "${ORGA}-DB" "${MYSQL_USER}" "${MYSQL_PASSWORD}" "${MYSQL_DATABASE}" "${ORGA}-spip" mysql
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
@@ -12,27 +12,21 @@ setKazVars
|
||||
# - pour les DB si on déclare un nouveau login, alors les privilèges sont créé mais les anciens pas révoqués
|
||||
|
||||
. "${DOCKERS_ENV}"
|
||||
. "${KAZ_KEY_DIR}/SetAllPass.sh"
|
||||
|
||||
createMysqlUser(){
|
||||
# $1 = envName
|
||||
# $2 = containerName of DB
|
||||
|
||||
. $KAZ_BIN_DIR/getPasswords.sh $1
|
||||
. $KAZ_KEY_DIR/env-$1
|
||||
|
||||
rootPass="$1_MYSQL_ROOT_PASSWORD"
|
||||
dbName="$1_MYSQL_DATABASE"
|
||||
userName="$1_MYSQL_USER"
|
||||
userPass="$1_MYSQL_PASSWORD"
|
||||
|
||||
# seulement si pas de mdp pour root
|
||||
# pb oeuf et poule (il faudrait les anciennes valeurs) :
|
||||
# * si rootPass change, faire à la main
|
||||
# * si dbName change, faire à la main
|
||||
checkDockerRunning "$2" "$2" || return
|
||||
echo "change DB pass on docker $2"
|
||||
echo "grant all privileges on ${!dbName}.* to '${!userName}' identified by '${!userPass}';" | \
|
||||
docker exec -i $2 bash -c "mysql --user=root --password=${!rootPass}"
|
||||
echo "grant all privileges on ${MYSQL_DATABASE}.* to '${MYSQL_USER}' identified by '${MYSQL_PASSWORD}';" | \
|
||||
docker exec -i $2 bash -c "mysql --user=root --password=${MYSQL_ROOT_PASSWORD}"
|
||||
}
|
||||
|
||||
|
||||
|
@@ -1,12 +1,15 @@
|
||||
#!/bin/bash
|
||||
#Ki: Gael
|
||||
#Kan: 2025
|
||||
#Koi: gestion mots de passe
|
||||
|
||||
KAZ_ROOT=/kaz
|
||||
|
||||
KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd)
|
||||
. "${KAZ_ROOT}/bin/.commonFunctions.sh"
|
||||
PRG=$(basename $0)
|
||||
QUIET=1
|
||||
|
||||
usage() {
|
||||
echo "${PRG} [OPTIONS] [envname ...]
|
||||
echo "getPasswords.sh [OPTIONS] [envname ...]
|
||||
Récupère les variables d'environnement présentes dans /kaz/secret/env-envname et crée des variables à partir de ces noms là.
|
||||
Les variables sont du type envname_NOMVARIABLE=valeur
|
||||
On peut passer plusieurs fichiers env, à partir du moment ou ils sont tous dans le même répertoire !
|
||||
@@ -19,13 +22,17 @@ OPTIONS
|
||||
"
|
||||
}
|
||||
|
||||
if [ ! -d "${KAZ_KEY_DIR}/tmp" ]; then
|
||||
mkdir "${KAZ_KEY_DIR}/tmp"
|
||||
fi
|
||||
|
||||
for ARG in "$@"; do
|
||||
if [ -n "${DIRECTORYARG}" ]; then # après un -d
|
||||
SUBDIRECTORY="${ARG}"
|
||||
DIRECTORYARG=
|
||||
unset DIRECTORYARG
|
||||
elif [ -n "${ECHOVARARG}" ]; then # après un -e
|
||||
VARTOECHO="${ARG}"
|
||||
ECHOVARARG=
|
||||
unset ECHOVARARG
|
||||
QUIET="/dev/null" # pour ne pas avoir d'autres bruits ...
|
||||
else
|
||||
|
||||
@@ -46,6 +53,11 @@ for ARG in "$@"; do
|
||||
fi
|
||||
done
|
||||
|
||||
getVars () {
|
||||
# $1 : filename
|
||||
grep "^[^#]*=" $1 | sed 's/\([^=]*\).*/\1/' | sort -u
|
||||
}
|
||||
|
||||
NB_FILES=$(echo "${ENVFILES}" | wc -w )
|
||||
|
||||
if [[ $NB_FILES = 0 ]]; then
|
||||
@@ -55,10 +67,10 @@ fi
|
||||
|
||||
for ENVFILE in $ENVFILES; do
|
||||
FILENAME="$KAZ_KEY_DIR/env-$ENVFILE"
|
||||
VARNAME="$ENVFILE"_
|
||||
VARSUFFIX="$ENVFILE"_
|
||||
if [ -n "${SUBDIRECTORY}" ]; then
|
||||
FILENAME="$KAZ_KEY_DIR/orgas/$SUBDIRECTORY/env-$ENVFILE"
|
||||
VARNAME="${SUBDIRECTORY}-${ENVFILE}_"
|
||||
VARSUFFIX="${SUBDIRECTORY}-${ENVFILE}_"
|
||||
fi
|
||||
|
||||
if ! [ -f "$FILENAME" ]; then
|
||||
@@ -66,11 +78,17 @@ for ENVFILE in $ENVFILES; do
|
||||
continue
|
||||
fi
|
||||
|
||||
# formule magique qui crée des variables envname_NOMVARIABLE=la valeur trouvé (le sed vire les commentaires et les lignes vides)
|
||||
# on pourrait se contenter d'un "source env-file", mais avec un prefix dans les variables pour savoir ce qu'on manipule c'est bien aussi ...
|
||||
$SIMU export $(sed -e 's/#.*//' -e '/^\s*$/d' "$FILENAME" | awk -F= -v ENV="$VARNAME" '{output=output" "ENV$1"="$2} END {print output}')
|
||||
. $FILENAME # on récupère les variables
|
||||
vars=$(getVars $FILENAME)
|
||||
for var in $vars; do
|
||||
$SIMU declare $VARSUFFIX$var=${!var}
|
||||
unset $var
|
||||
done
|
||||
unset FILENAME VARSUFFIX vars
|
||||
done
|
||||
|
||||
if [ -n "$VARTOECHO" ]; then
|
||||
echo ${!VARTOECHO}
|
||||
fi
|
||||
|
||||
unset ENVFILES KAZ_ROOT SUBDIRECTORY SIMU QUIET NB_FILES VARTOECHO
|
Reference in New Issue
Block a user