version du script avec option -c pour une création de mail en non intereactif

This commit is contained in:
2026-10-04 21:24:19 +02:00
parent 0f32ba4d0c
commit a0b44af705
+73 -37
View File
@@ -3,7 +3,8 @@
# Ki : Did # Ki : Did
# koi : gestion globale des users Kaz mais aussi les users d'autres domaines hébergés # koi : gestion globale des users Kaz mais aussi les users d'autres domaines hébergés
KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd) #KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd)
KAZ_ROOT=/kaz
. $KAZ_ROOT/bin/.commonFunctions.sh . $KAZ_ROOT/bin/.commonFunctions.sh
setKazVars setKazVars
@@ -31,7 +32,7 @@ LISTMASTER=$(echo ${LISTMASTERS} | cut -d',' -f1)
#### Test du serveur sur lequel s' execute le script #### #### Test du serveur sur lequel s' execute le script ####
echo ${site} | grep -E 'prod1|dev' || { echo "Le script ne fonctionne que sur Prod1 et Dev ";exit;} echo ${site} | grep -E 'prod1|dev' >/dev/null 2>&1 || { echo "Le script ne fonctionne que sur Prod1 et Dev ";exit;}
############################## ##############################
TFILE_EMAILS=$(mktemp /tmp/$RACINE.XXXXXXXXX.TFILE_EMAILS) TFILE_EMAILS=$(mktemp /tmp/$RACINE.XXXXXXXXX.TFILE_EMAILS)
@@ -62,8 +63,8 @@ PostMattermost() {
. $KAZ_KEY_DIR/env-mattermostAdmin . $KAZ_KEY_DIR/env-mattermostAdmin
PostM=$1 PostM=$1
CHANNEL=$2 CHANNEL=$2
TEAMID=$(curl -s -H "Authorization: Bearer ${mattermost_token}" "${URL_AGORA_API}/teams/name/${EQUIPE}" | jq -r .id ) TEAMID=$(curl -s -H "Authorization: Bearer ${mattermost_token}" "${URL_AGORA_API}/teams/name/${EQUIPE}" | jq -r .id )
CHANNELID=$(curl -s -H "Authorization: Bearer ${mattermost_token}" ${URL_AGORA_API}/teams/${TEAMID}/channels/name/${CHANNEL} | jq -r .id ) CHANNELID=$(curl -s -H "Authorization: Bearer ${mattermost_token}" ${URL_AGORA_API}/teams/${TEAMID}/channels/name/${CHANNEL} | jq -r .id )
curl -s i-X POST -i -H "Authorization: Bearer ${mattermost_token}" -d "{\"channel_id\":\"${CHANNELID}\",\"message\":\"${PostM}\"}" "${URL_AGORA_API}/posts" >/dev/null 2>&1 curl -s i-X POST -i -H "Authorization: Bearer ${mattermost_token}" -d "{\"channel_id\":\"${CHANNELID}\",\"message\":\"${PostM}\"}" "${URL_AGORA_API}/posts" >/dev/null 2>&1
} }
@@ -521,7 +522,8 @@ createMail() {
CREATE_AUTO=${1} CREATE_AUTO=${1}
EMAIL_SOUHAITE=${2} EMAIL_SOUHAITE=${2}
EMAIL_SECOURS=${3} EMAIL_SECOURS=${3}
# Si on est en interactif, On demande le mail souhaite on regarde si c' est valide et si ça existe déjà # Si on est en interactif, On demande le mail souhaite le mail secours et on demande le nom et prenom
# et on regarde si c' est valide et si ça existe déjà
if [ "${CREATE_AUTO}" != "TRUE" ] if [ "${CREATE_AUTO}" != "TRUE" ]
then then
while [ $fait -eq 0 ] while [ $fait -eq 0 ]
@@ -535,39 +537,33 @@ createMail() {
EMAIL_SOUHAITE=$(unaccent utf8 ${EMAIL_SOUHAITE}) EMAIL_SOUHAITE=$(unaccent utf8 ${EMAIL_SOUHAITE})
if [[ ${EMAIL_SOUHAITE} =~ ${regexMail} ]] if [[ ${EMAIL_SOUHAITE} =~ ${regexMail} ]]
then then
ldapsearch -H ldap://${LDAP_IP} \ ldapsearch -H ldap://${LDAP_IP} \
-x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \ -x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \
-w "${LDAP_ADMIN_PASSWORD}" \ -w "${LDAP_ADMIN_PASSWORD}" \
-b "${ldap_root}" "(&(objectclass=inetOrgPerson)(cn=${EMAIL_SOUHAITE}))" cn | grep ^cn | sed -e 's/^cn: //' >$TFILE_EMAILS -b "${ldap_root}" "(&(objectclass=inetOrgPerson)(cn=${EMAIL_SOUHAITE}))" cn | grep ^cn | sed -e 's/^cn: //' >$TFILE_EMAILS
if grep -q "^${EMAIL_SOUHAITE}$" "${TFILE_EMAILS}" if grep -q "^${EMAIL_SOUHAITE}$" "${TFILE_EMAILS}"
then then
printKazError " - Le mail ${EMAIL_SOUHAITE} existe déjà" printKazError " - Le mail ${EMAIL_SOUHAITE} existe déjà"
fait=0 fait=0
elif ! grep $(echo ${EMAIL_SOUHAITE} | sed -e 's/^.*@//') ${KAZ_CONF_DIR}/autorized-domains.txt >/dev/null elif ! grep $(echo ${EMAIL_SOUHAITE} | sed -e 's/^.*@//') ${KAZ_CONF_DIR}/autorized-domains.txt >/dev/null
then then
printKazMsg "Le domaine n' est pas dans la liste autorisée" printKazMsg "Le domaine n' est pas dans la liste autorisée"
sleep 2 sleep 2
fait=0 fait=0
else else
fait=1 fait=1
fi fi
else else
printKazError " - Mail invalide !" printKazError " - Mail invalide !"
sleep 2 sleep 2
fait=0 fait=0
fi fi
done done
else # on renseigne le domaine en cours pour les options qui concernent pas le domaine kaz.bzh
echo "on aura fait les tests avant ou la c'est comme on veut" # ----------------------------------------------------------------------
fi DOMAINE_EN_COURS=$(echo ${EMAIL_SOUHAITE} | sed -e 's/^.*@//')
# on renseigne le domaine en cours pour les options qui concernent pas le domaine kaz.bzh echo " ---- Domaine: " ${DOMAINE_EN_COURS} ----
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
DOMAINE_EN_COURS=$(echo ${EMAIL_SOUHAITE} | sed -e 's/^.*@//')
echo " ---- Domaine: " ${DOMAINE_EN_COURS} ----
# ----------------------------------------------------------------------
# Si on est en interactif, On demande le mail de secours, le nom et prenom et on teste si c' est un mail valide
if [ "${CREATE_AUTO}" != "TRUE" ]
then
fait=0 fait=0
while [ $fait -eq 0 ] while [ $fait -eq 0 ]
do do
@@ -596,7 +592,32 @@ createMail() {
read -p "Nom : " NOM read -p "Nom : " NOM
done done
else else
echo "on invente un nom et prénom et on aura testé avant si le mail de secours est valide" echo "on invente un nom et prénom"
ERRMAILAUTO=""
# on renseigne DOMAINE EN COURS pour cette partie de script ( puisque l'autre déclaration se fait dasn la boucle interactive
DOMAINE_EN_COURS=$(echo ${EMAIL_SOUHAITE} | sed -e 's/^.*@//')
NOM=kaz
PRENOM=$(echo ${EMAIL_SOUHAITE} | sed -e 's/@.*$//')
# on cherche le mail dans l'annuaire
ldapsearch -H ldap://${LDAP_IP} \
-x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \
-w "${LDAP_ADMIN_PASSWORD}" \
-b "${ldap_root}" "(&(objectclass=inetOrgPerson)(cn=${EMAIL_SOUHAITE}))" cn | grep ^cn | sed -e 's/^cn: //' >$TFILE_EMAILS
if grep -q "^${EMAIL_SOUHAITE}$" "${TFILE_EMAILS}"
then
ERRMAILAUTO="${ERRMAILAUTO} Le mail ${EMAIL_SOUHAITE} existe déjà"
fi
if ! grep $(echo ${EMAIL_SOUHAITE} | sed -e 's/^.*@//') ${KAZ_CONF_DIR}/autorized-domains.txt >/dev/null
then
ERRMAILAUTO="${ERRMAILAUTO} Le domaine ${DOMAINE_EN_COURS} n' est pas dans la liste autorisée"
fi
if [ ! -z "${ERRMAILAUTO}" ]
then
PostMattermost "Erreur de script auto : ${ERRMAILAUTO}" "Creation-Comptes"
echo "Erreur de script auto : ${ERRMAILAUTO}"
exit
fi
fi fi
# On constitue l' ident kaz pour le ldap # On constitue l' ident kaz pour le ldap
IDENT_KAZ=$(unaccent utf8 "${PRENOM,,}.${NOM,,}") IDENT_KAZ=$(unaccent utf8 "${PRENOM,,}.${NOM,,}")
@@ -649,6 +670,7 @@ agoraEnabled: ${TRUE_KAZ}\n\
userPassword: {CRYPT}${LDAPPASS}\n\n' | ldapmodify -c -H ldap://${LDAP_IP} -D \"cn=${LDAP_ADMIN_USERNAME},${ldap_root}\" -x -w ${LDAP_ADMIN_PASSWORD}" >${TFILE_CREATE_MAIL} userPassword: {CRYPT}${LDAPPASS}\n\n' | ldapmodify -c -H ldap://${LDAP_IP} -D \"cn=${LDAP_ADMIN_USERNAME},${ldap_root}\" -x -w ${LDAP_ADMIN_PASSWORD}" >${TFILE_CREATE_MAIL}
# on execute le fichier avec les données ldap pour créer l' entrée dans l' annuaire # on execute le fichier avec les données ldap pour créer l' entrée dans l' annuaire
bash ${TFILE_CREATE_MAIL} >/dev/null bash ${TFILE_CREATE_MAIL} >/dev/null
#DID
# on colle le compte et le mot de passe dans le fichier # on colle le compte et le mot de passe dans le fichier
echo "Création de : ${EMAIL_SOUHAITE} avec le mot de passe : ${PASSWORD}" >>${TFILE_CREATE_MAIL} echo "Création de : ${EMAIL_SOUHAITE} avec le mot de passe : ${PASSWORD}" >>${TFILE_CREATE_MAIL}
OLDIFS=${IFS} OLDIFS=${IFS}
@@ -675,7 +697,20 @@ fi
createMailAuto() createMailAuto()
{ {
echo echo $@
if [ "$#" -ne "3" ]
then
echo "$0 pas assez d'arguments"
PostMattermost "Erreur de script $0 ,constacter les sysadmins " "Creation-Comptes"
exit 1
fi
if [[ ${2} =~ ${regexMail} ]] && [[ ${3} =~ ${regexMail} ]]
then
createMail TRUE ${2} ${3}
else
echo "Les mails sont invalides"
PostMattermost "Erreur de script $0 ,les mails demandés sont malformés" "Creation-Comptes"
fi
} }
createAlias() { createAlias() {
@@ -1181,6 +1216,9 @@ updateUser() {
usage () { usage () {
printKazMsg "$PRG [-h] [-v]" printKazMsg "$PRG [-h] [-v]"
printKazMsg "script de gestion des kaznautes" printKazMsg "script de gestion des kaznautes"
printKazMsg " -c permet de créer un mail avec son mail de secours en non intereactif"
printKazMsg " syntax : $0 -c mail mailsecours"
printKazMsg " exemple $0 user@kaz.bzh user@apple.fr"
printKazMsg " -h aide sur ce script" printKazMsg " -h aide sur ce script"
printKazMsg " -v version du script." printKazMsg " -v version du script."
} }
@@ -1223,9 +1261,7 @@ case "$CHOICE" in
'2' ) '2' )
updateUser updateUser
;; ;;
'3' ) '3' )
# echo "La fonction est supprimée"
# read -p "==> Entrée pour continuer <=="
gestPassword gestPassword
;; ;;
'4' ) '4' )