#!/bin/bash
# gestion des utilisateurs de kaz ( mail, cloud général, mattermost )
# Ki : Did
# koi : gestion globale des users Kaz mais aussi les users d'autres domaines hébergés

KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd)
. $KAZ_ROOT/bin/.commonFunctions.sh
setKazVars

. $DOCKERS_ENV
. $KAZ_KEY_DIR/env-ldapServ
. $KAZ_KEY_DIR/env-nextcloudServ
. $KAZ_KEY_DIR/env-sympaServ
. $KAZ_KEY_DIR/env-paheko

VERSION="09-08-2026"
PRG=$(basename $0)
RACINE=$(echo $PRG | awk '{print $1}')
IFS=' '
BLINK='\033[0;5m'

LOG=$RACINE".log"
URL_NC=$(echo $cloudHost).$(echo $domain)
URL_AGORA=$(echo $matterHost).$(echo $domain)
URL_LISTE=$(echo $sympaHost).$(echo $domain)
URL_PAHEKO="$httpProto://${API_USER}:${API_PASSWORD}@kaz-paheko.$(echo $domain)"
NL_LIST=infos@listes.kaz.bzh
URL_AGORA_API=${httpProto}://${URL_AGORA}/api/v4
EQUIPE=kaz
LISTMASTER=$(echo ${LISTMASTERS} | cut -d',' -f1)


#### 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;}
##############################

TFILE_EMAILS=$(mktemp /tmp/$RACINE.XXXXXXXXX.TFILE_EMAILS)
TFILE_EMAILS_LIST=$(mktemp /tmp/$RACINE.XXXXXXXXX.TFILE_EMAILS_LIST)
TFILE_MAILS_TROUVE=$(mktemp /tmp/$RACINE.XXXXXXXXX.TFILE_MAILS_TROUVE)
TFILE_CPT_MATTERMOST=$(mktemp /tmp/$RACINE.XXXXXXXXTFILE_CPT_MATTERMOST)
TFILE_CREATE_MAIL=$(mktemp /tmp/$RACINE.XXXXXXXXTFILE_CREATE_MAIL.sh)
LDAP_IP=$(docker inspect -f '{{.NetworkSettings.Networks.ldapNet.IPAddress}}' ldapServ)

regexMail="^(([A-Za-z0-9]+((\.|\-|\_|\+)?[A-Za-z0-9]?)*[A-Za-z0-9]+)|[A-Za-z0-9]+)@(([A-Za-z0-9]+)+((\.|\-|\_)?([A-Za-z0-9]+)+)*)+\.([A-Za-z]{2,})+$"


rm -rf /tmp/$RACINE*
rm -rf /tmp/*.json

############################################ Fonctions #######################################################

ExpMail() {

	. $KAZ_KEY_DIR/env-mail
        MAIL_DEST=$1
        MAIL_SUJET=$2
        MAIL_TEXTE=$3
        printf "Subject:${MAIL_SUJET}\n${MAIL_TEXTE}" | msmtp ${MAIL_DEST}
}

PostMattermost() {
	. $KAZ_KEY_DIR/env-mattermostAdmin
        PostM=$1
        CHANNEL=$2
				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 )
        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
}


searchEmail() {
		# on peut appeler cette fonction avec un paramêtre
		# qui doit être une adresse email
		CHOIX_MAIL=""
		SEARCH_OBJECT_CLASS="inetOrgPerson"
		[ "$1" = "alias" ] && SEARCH_OBJECT_CLASS="PostfixBookMailForward"
		rm -rf $TFILE_MAILS_TROUVE
		rm -rf $TFILE_MAILS
		fait=0
		while [ ${fait} = 0 ]
		do
			clear
			echo "----------------------------------------------------------------------"
			printKazMsg "${ACTION_EN_COURS}"
			echo "----------------------------------------------------------------------"
			read -p "Adresse ou caractere contenu dans cette adresse (r ou R pour retour ) ? : " RMAIL
			[[ ${RMAIL} =~ ^[rRqQ]$ ]] && Main
			if [ "${RMAIL}" == "" ]
			then
				fait=0
			else
				fait=1
			fi
		done
		ldapsearch -H ldap://${LDAP_IP} \
		-x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \
		-w "${LDAP_ADMIN_PASSWORD}" \
		-b "${ldap_root}" "(&(objectclass=${SEARCH_OBJECT_CLASS})(cn=*${RMAIL}*))" cn | grep ^cn | sed -e 's/^cn: //' >$TFILE_EMAILS
		COMPTEUR_LIGNE=0
		while read LIGNE
		do
			COMPTEUR_LIGNE=$(expr $COMPTEUR_LIGNE + 1)
			printf "%d - %s\n" $COMPTEUR_LIGNE $LIGNE  >>$TFILE_MAILS_TROUVE
		done <$TFILE_EMAILS
		if [ $COMPTEUR_LIGNE -gt 0 ]
		then
			fait=0
			while [ ${fait} = 0 ]
			do
				echo "----------------------------------------------------------------------"
				cat $TFILE_MAILS_TROUVE
				echo "----------------------------------------------------------------------"
				read -p  "Choisir le numéro correspondant ( R ou r ou 0 pour retour ): " NB_LIGNE_MAIL
				# si on tape r ou r ou Q ou q ou 0 on relance le menu de recherche de mail
				[[ $NB_LIGNE_MAIL =~ [rRqQ0] ]] && searchEmail $1
				CHOIX_MAIL=$(cat ${TFILE_MAILS_TROUVE} | grep "^${NB_LIGNE_MAIL}\b" | awk '{print $3}' | tr -d '[:space:]')

				# si on répond par entrée nb_ligne_mail sera vide
				# si on donne une réponse qui est une lettre ou un mauvais chiffre choix_mail sera vide
				# alors on reboucle sur la liste des mails

				if [ "$CHOIX_MAIL" == "" ] || [ "$NB_LIGNE_MAIL" == "" ]
				then
					CHOIX_MAIL=""
					fait=0
				else
					# on renseigne le domaine en cours pour gérer les options non kaz.bzh
					#  ----------------------------------------------------------------------
				        DOMAINE_EN_COURS=$(echo ${CHOIX_MAIL} | sed -e 's/^.*@//')
					#  ----------------------------------------------------------------------
					fait=1
				fi
			done
		else
			searchEmail $1
		fi
}

searchMattermost() {
		#Ici $1 est une adresse email
		. $KAZ_KEY_DIR/env-mattermostAdmin
		curl -s -H "Authorization: Bearer ${mattermost_token}" "${URL_AGORA_API}/users/email/${1}" >${TFILE_CPT_MATTERMOST} 2>/dev/null
		REP_SEARCH_MATTERMOST=$(jq -r .id ${TFILE_CPT_MATTERMOST})
    if [ ! -z ${REP_SEARCH_MATTERMOST} ]
    then
			if [ "$2" = "DETAILS" ]
			then
				echo -e -n "${RED} Compte : ${GREEN} " ; jq -r .username ${TFILE_CPT_MATTERMOST}
				echo -e -n "${RED} Mail   : ${GREEN} " ; jq -r .email ${TFILE_CPT_MATTERMOST}
				echo -e -n "${RED} Role   : ${GREEN} " ; jq -r .roles ${TFILE_CPT_MATTERMOST}
			else
				echo "${REP_SEARCH_MATTERMOST}"
			fi
    else
    	echo ""
    fi
}


infoEmail() {
		ACTION_EN_COURS="Information sur un compte"
		while :
		do
			clear
    	echo "------------------------------------------------"
			printKazMsg "${ACTION_EN_COURS}"
      echo "------------------------------------------------"
			read -p "Alias ou Mail ? (R pour retour ou M/A [M] :" RINFOMAIL
			case ${RINFOMAIL} in
			"" | M | m )
					infofait=O
				 	searchEmail
					clear
					echo "------------------------------------------------"
					printKazMsg " ADRESSE DE MESSAGERIE :  $CHOIX_MAIL"
					echo "------------------------------------------------"
					printKazMsg "  DETAILS DU COMPTE DANS MATTERMOST"
					searchMattermost $CHOIX_MAIL DETAILS
					echo " ------------------------------------------------"
					printKazMsg " DETAILS DU COMPTE DANS NEXTCLOUD PRINCIPAL"
					echo -e ""
					echo -ne "${NC}"
					echo -ne " - Nextcloud enable : "
					echo -ne "${GREEN}"
					ldapsearch -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${LDAP_ADMIN_PASSWORD}" -b "cn=${CHOIX_MAIL},ou=users,${ldap_root}" | grep -i nextcloudEnabled | cut -c 18-30
					echo -ne "${NC}"
					echo -e "${NC} ------------------------------------------------"
					printKazMsg " DETAILS DU COMPTE DANS LDAP ET PAHEKO"
					echo ""
					curl -s ${URL_PAHEKO}/api/sql -d "SELECT nom,adresse,code_postal,ville,email,email_secours,admin_orga,nom_orga,quota_disque,serveur_prod FROM users where email='${CHOIX_MAIL}' LIMIT 1;" >/tmp/$CHOIX_MAIL-paheko.json
					jq -r .results[].nom /tmp/$CHOIX_MAIL-paheko.json
					jq -r .results[].adresse /tmp/$CHOIX_MAIL-paheko.json
					jq -r .results[].code_postal /tmp/$CHOIX_MAIL-paheko.json
					jq -r .results[].ville /tmp/$CHOIX_MAIL-paheko.json
					SERVEUR_PROD=$(jq -r .results[].serveur_prod /tmp/$CHOIX_MAIL-paheko.json)
					NOM_ORGA=$(jq -r .results[].nom_orga /tmp/$CHOIX_MAIL-paheko.json)
					[ "${NOM_ORGA}" = "null" ] || echo -e " - ORGA : ${GREEN}${NOM_ORGA}${NC} sur serveur ${GREEN}${SERVEUR_PROD}${NC} "
					echo -n " - Quota (Paheko) : "
					echo -ne "${GREEN}"
					jq -r .results[].quota_disque /tmp/$CHOIX_MAIL-paheko.json
					echo -ne "${NC}"
					echo -n " - Quota Mail (Ldap) : "
					echo -ne "${GREEN}"
					ldapsearch -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${LDAP_ADMIN_PASSWORD}" -b "cn=${CHOIX_MAIL},ou=users,${ldap_root}" | grep -i mailquota | cut -c 11-60
					echo -ne "${NC}"
					echo -ne " - Place disque des mails : "
          cd ${DOCK_VOL}/postfix_mailData/_data/${DOMAINE_EN_COURS}
          echo -ne "${GREEN}"
          du -sh $(echo ${CHOIX_MAIL} | sed -e 's/@.*//') | cut -c 1-4
          echo -ne "${NC}"
					echo -n " - Quota Nextcloud (Ldap) : "
					echo -ne "${GREEN}"
					ldapsearch -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${LDAP_ADMIN_PASSWORD}" -b "cn=${CHOIX_MAIL},ou=users,${ldap_root}" | grep -i nextcloudquota | cut -c 17-60
					echo -ne "${NC}"
					echo -n " - Mail de secours (Paheko ): "
					echo -ne "${GREEN}"
					jq -r .results[].email_secours /tmp/$CHOIX_MAIL-paheko.json
					echo -ne "${NC}"
					echo -n " - Mail de secours (Ldap): "
					echo -ne "${GREEN}"
					ldapsearch -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${LDAP_ADMIN_PASSWORD}" -b "cn=${CHOIX_MAIL},ou=users,${ldap_root}" | grep -i maildeSecours | sed -e 's/mailDeSecours://'
					echo -ne "${NC}"
					echo -ne " - Tel Mobile : "
					echo -ne "${GREEN}"
					REPMOBILE=$(ldapsearch -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${LDAP_ADMIN_PASSWORD}" -b "cn=${CHOIX_MAIL},ou=users,${ldap_root}" | grep -i mobile | sed -e 's/mobile://')
					[ -z ${REPMOBILE} ] && echo "NC" || echo ${REPMOBILE}
					echo -ne "${NC}"
					echo -n " - Alias (Ldap) : "
					echo -ne "${GREEN}"
					LDAP_ALIAS=$(ldapsearch -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${LDAP_ADMIN_PASSWORD}" -b "cn=${CHOIX_MAIL},ou=users,${ldap_root}" | grep -i alias | cut -c 11-60)
					echo -ne "${NC}"
					echo -ne "${GREEN}"
					for ldap_alias in ${LDAP_ALIAS}
					do
						echo "${ldap_alias}" | tr -d [:space:]
						echo -n " "
					done
					echo -e "${NC}"
					echo " - L' adresse apparait dans :"
					echo -n -e "${GREEN}"
					curl -s ${URL_PAHEKO}/api/sql -d "SELECT * FROM users where emails_Rattaches like '%$CHOIX_MAIL%' ;" |  jq -r .results[].nom
					echo -e "${NC}"
					read -p "         ==> Entrée pour continuer <=="
					;;
			A | a )
					searchEmail alias
          echo "------------------------------------------------"
					echo  " Alias : ${CHOIX_MAIL} "
					echo ""
					for INFOALIAS in $(ldapsearch -H ldap://${LDAP_IP} -x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \
          -w "${LDAP_ADMIN_PASSWORD}" -b "${ldap_root}" "(&(objectclass=PostfixBookMailForward)(cn=*${CHOIX_MAIL}*))" mail \
					| grep ^mail: | sed -e 's/^mail://')
					do
						echo -ne "=====> ${GREEN}  "
						echo "${INFOALIAS}" | tr -d [:space:]
						echo "${NC}"
					done
					echo ""
					read -p "==> Entrée pour continuer <=="
					;;
			r | R  )
					Main
					;;
			* )
					echo ""
					;;
			esac
		done
}

searchDestroy() {
			ACTION_EN_COURS="Suppression d'un compte"
			clear
			#TODO pourquoi REP_SEARCH_DESTROY=$(searchEmail) ne marche pas et fait déconner la fonction search_mail, j' en suis la à m' esbaudir
			CHOIX_MAIL=""
			searchEmail
			REP_SEARCH_DESTROY=$CHOIX_MAIL
			MAIL_SECOURS=$(ldapsearch -H ldap://${LDAP_IP} \
			-x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \
			-w "${LDAP_ADMIN_PASSWORD}" \
			-b "${ldap_root}" "(&(objectclass=inetOrgPerson)(cn=*${REP_SEARCH_DESTROY}*))" | grep ^mailDeSecours | sed -e 's/^mailDeSecours: //')
			echo "Mail en cours = $REP_SEARCH_DESTROY"
			echo "Mail de secours = ${MAIL_SECOURS}"
			echo "Domaine en cours : ${DOMAINE_EN_COURS}"
			echo "---------------------------------   SUPPRESION ----------------------------------------"
			while :
			do
	          echo "----------------------------------------------------------------------"
        	  printKazMsg "${GREEN}${ACTION_EN_COURS}${NC}"
            echo "----------------------------------------------------------------------"
				echo -e "${BLINK}           TOUT RETOUR EN ARRIERE EST IMPOSSIBLE ${NC}"
  			read -p "ON CONTINUE ? [ o / n ]: " SEARCH_DESTROY_INPUT
				if [ "$SEARCH_DESTROY_INPUT" = "n" ] || [ "$SEARCH_DESTROY_INPUT" = "N" ]
				then
					searchDestroy
				fi
				if [ "$SEARCH_DESTROY_INPUT" = "o" ] || [ "$SEARCH_DESTROY_INPUT" = "O" ]
				then
				####################################################################################################################
					# si le domaine en cours est Kaz alors on cherche dans mattermost, dans nextcloud et on supprime
					# le mail dans sympa
				####################################################################################################################
					if [ "${DOMAINE_EN_COURS}" = "${domain}" ]
					then
						MM_USER_ID=$(searchMattermost $REP_SEARCH_DESTROY)
						if [ ! -z ${MM_USER_ID} ]
						then
							echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} trouvé dans mattermost ${NC}"
							status_del=$(curl -s --request DELETE \
							--header 'Accept: application/json' \
							-H "Authorization: Bearer ${mattermost_token}" \
							"${URL_AGORA_API}/api/v4/users/${MM_USER_ID}")
							if [ "$(echo ${status_del} | jq -r .status)" -eq "200" ]
							then
								printKazMsg "Suppresion ok"
							else
                printKazError -e "Erreur de suppression"
              fi
							echo "               -----------------              "
						else
							echo "Rien a supprimer dans mattermost"
						fi
						echo -e "${NC}"
						echo -e "Recherche de ${GREEN} ${REP_SEARCH_DESTROY} ${NC} dans nextcloud"
						USER_NEXTCLOUD_SUPPR=$(curl -s -X GET -H 'OCS-APIRequest:true' $httpProto://admin:$NEXTCLOUD_ADMIN_PASSWORD@$URL_NC/ocs/v1.php/cloud/users?search=${REP_SEARCH_DESTROY} | grep element | sed -s 's/[ \<\>\/]//g' | sed  's/element//g')
						if [ ! -z ${USER_NEXTCLOUD_SUPPR} ]
						then
							printKazMsg "le user trouvé est : ${USER_NEXTCLOUD_SUPPR}"
							echo -e "${RED} Suppresion de ${USER_NEXTCLOUD_SUPPR}"
							curl -H 'OCS-APIREQUEST: true' -X DELETE $httpProto://admin:$NEXTCLOUD_ADMIN_PASSWORD@$URL_NC/ocs/v1.php/cloud/users/${USER_NEXTCLOUD_SUPPR} >/dev/null 2>&1
							if [ "$?" -eq "0" ]
                        				then
								printKazMsg "Suppresion ok"
                        				else
                            					printKazError "Erreur de suppression"
                        				fi
						else
							printKazMsg "Rien à supprimer dans Nextcloud"
						fi
							echo -e "${NC}"
							echo ""
							echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} et ${MAIL_SECOURS} dans la liste info de sympa"
							echo -e "${NC}"
							echo ""
							docker exec -ti sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=USER_EMAIL=${LISTMASTER} --service=del --service_parameters="${NL_LIST},${REP_SEARCH_DESTROY}"
							docker exec -ti sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=USER_EMAIL=${LISTMASTER} --service=del --service_parameters="${NL_LIST},${MAIL_SECOURS}"
							echo -e "${NC}"
							echo ""
							echo  -e "${RED} suppression de ${REP_SEARCH_DESTROY} dans le serveur de mail"
							echo -e "${NC}"
							echo ""
					else
						echo "-------------------------------"
						echo "Le domaine n' est pas Kaz.bzh"
						echo "-------------------------------"
					fi
					############################## - Fin du cas de Kaz   ##########################################################################################
						echo -e "${NC}"
                                                echo ""
                                                echo  -e "${RED} suppression de ${REP_SEARCH_DESTROY} dans le ldap"
                                                echo -e "${NC}"
                                                echo ""
						ldapdelete -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${LDAP_ADMIN_PASSWORD}" "cn=${REP_SEARCH_DESTROY},ou=users,${ldap_root}"
						if [ "$?" -eq "0" ]
						then
							printKazMsg "Suppresion ok"
							cd ${DOCK_VOL}/postfix_mailData/_data/${DOMAINE_EN_COURS}
                                                        USER_DEL_MAIL=$(echo ${REP_SEARCH_DESTROY} | sed -e 's/@.*//')
                                                        echo "Suppression des données ${USER_DEL_MAIL}"
                                                        rm -rf ${USER_DEL_MAIL} 2>/dev/null
                                                        sleep 2

						else
							printKazError "Erreur de suppression"
						fi
						printKazMsg  "Envoi d'un message dans mattermost pour la suppression du compte"
						PostMattermost "Le compte ${REP_SEARCH_DESTROY} est supprimé , mail envoyé à ${MAIL_SECOURS}" "Creation-Comptes"
						MAIL_SUPPR="Le compte ${REP_SEARCH_DESTROY} est supprimé"
						OLDIFS=${IFS}
		                                IFS=''
						ExpMail ${MAIL_SECOURS} "Suppression de Compte" ${MAIL_SUPPR}
						echo -e "${NC}"
						IFS=${OLDIFS}
						read -p " ---------------------- Appuyer sur une touche pour continuer -------------------------"
						searchDestroy
				fi
			done
}

gestPassword() {
		ACTION_EN_COURS="Gestion du mot de passe d' un compte"
		searchEmail
		#cree un mdp acceptable par postfix/nc/mattermost
		PASSWORD=_`apg -n 1 -m 10 -M NCL -d`_
		COMPTE_A_MODIFIER=${CHOIX_MAIL}
    # On considère le mot de passe de secours de ldap
		MAIL_SECOURS=$(ldapsearch -H ldap://${LDAP_IP} \
                -x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \
                -w "${LDAP_ADMIN_PASSWORD}" \
                -b "${ldap_root}" "(&(objectclass=inetOrgPerson)(cn=*${CHOIX_MAIL}*))" | grep ^mailDeSecours | sed -e 's/^mailDeSecours: //')
		if [ "$MAIL_SECOURS" = "" ]
                then
			ADRESSE_SEC="NON"
		else
			ADRESSE_SEC="OUI"
                fi
		##############################################################################
		# on cherche le moyen de savoir si ce mail est le mail dans une orga
		# si c' est le cas ça veut dire qu' il faut changer le mot de passe dans le cloud de l' orga
		rm -rf /tmp/FICMAILORGA*
		EMAIL_ORGA_TROUVE=0
		EMAIL_ORGA_TROUVE=$(curl -s ${URL_PAHEKO}/api/sql -d "SELECT id FROM users where emails_Rattaches like '%$CHOIX_MAIL%' ;" |  jq .results[].id | wc -l)
		if [ $EMAIL_ORGA_TROUVE -ge 1 ]
		then
			printKazError "L' adresse apparait dans plusieurs orga comme mails rattaché IL EST PREFERABLE DE REPONDRE NON !!!"
		fi
		##########################################################################
		read -p "ON CONTINUE ? [ o / n ]: " SEARCH_RESET_INPUT
                if [ "$SEARCH_RESET_INPUT" = "n" ] || [ "$SEARCH_RESET_INPUT" = "N" ]
		then
			clear
			gestPassword
		fi
		if [ "$SEARCH_RESET_INPUT" = "o" ] || [ "$SEARCH_RESET_INPUT" = "O" ]
		then
			USER_NEXTCLOUD_MODIF=$(curl -s -X GET -H 'OCS-APIRequest:true' $httpProto://admin:$NEXTCLOUD_ADMIN_PASSWORD@$URL_NC/ocs/v1.php/cloud/users?search=${COMPTE_A_MODIFIER} | grep element | sed -e 's/[ \<\>\/]//g' -e 's/element//g')
			echo -e "$GREEN Compte à modifier = $RED ${COMPTE_A_MODIFIER}  ${NC}"
			echo -e "$GREEN Mail de secours = $RED ${MAIL_SECOURS}  ${NC}"
			echo -e "$GREEN Compte $RED $(searchMattermost $COMPTE_A_MODIFIER)  ${NC}"
			echo -e "$GREEN Compte Nextcloud $RED ${USER_NEXTCLOUD_MODIF} ${NC}"
			echo -e "$GREEN Le mot de passe sera = $RED ${PASSWORD} ${NC}"
			docker exec -ti mattermostServ bin/mmctl user change-password $(searchMattermost ${COMPTE_A_MODIFIER}) -p ${PASSWORD} >/dev/null 2>&1
			curl -H 'OCS-APIREQUEST: true' -X PUT $httpProto://admin:$NEXTCLOUD_ADMIN_PASSWORD@$URL_NC/ocs/v1.php/cloud/users/${USER_NEXTCLOUD_MODIF} -d key=password -d value=${PASSWORD} >/dev/null 2>&1
			pass=$(mkpasswd -m sha512crypt ${PASSWORD})
			echo -e "\n\ndn: cn=${COMPTE_A_MODIFIER},ou=users,${ldap_root}\n\
changeType: modify\n\
replace: userPassword\n\
userPassword: {CRYPT}${pass}\n\n" | ldapmodify -c -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${LDAP_ADMIN_PASSWORD}"
			echo -e "Envoi d'un message dans mattermost pour la modification du mot de passe"
			PostMattermost "Le mot de passe du compte ${COMPTE_A_MODIFIER} a été modifié" "Creation-Comptes"
			if [ ${ADRESSE_SEC} == "OUI" ]
			then
				echo -e "Envoi d'un message à l' adresse de secours : $GREEN${MAIL_SECOURS}${NC}"
				MAIL_CHANG="
Hello,

le nouveau mot de passe de ${COMPTE_A_MODIFIER} est : ${PASSWORD}

le webmail est disponible à https://webmail.kaz.bzh
Le site d' aide pour la configuration des services : https://wiki.kaz.bzh
Le site Web de Kaz : https://kaz.bzh
Le mail de la collégiale : contact@kaz.bzh

A bientôt"
				ExpMail ${MAIL_SECOURS} "Modification du compte" ${MAIL_CHANG}
			fi
			if [ ${ADRESSE_SEC} == "NON" ]
			then
				echo -e "${RED} Pas d adresse de secours ${NC}"
			fi
		fi

}

createMail() {
	ACTION_EN_COURS="Création d' une adresse de messagerie"
	PRENOM=""
	NOM=""
	QUOTA=1
	TRUE_KAZ=TRUE
	fait=0
	# On demande le mail souhaite on regarde si c' est valide et si ça existe déjà
	while [ $fait -eq 0 ]
	do
		clear
		echo "----------------------------------------------------------------------"
		printKazMsg "${ACTION_EN_COURS}"
		echo "----------------------------------------------------------------------"
		read -p "Mail souhaité (r ou R pour quitter ) : " EMAIL_SOUHAITE
		[[ ${EMAIL_SOUHAITE} =~ ^[rRqQ]$ ]] && Main
		EMAIL_SOUHAITE=$(unaccent utf8 ${EMAIL_SOUHAITE})
		if [[ ${EMAIL_SOUHAITE} =~ ${regexMail} ]]
		then
			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
				printKazError " - Le mail ${EMAIL_SOUHAITE} existe déjà"
				fait=0
			elif ! grep $(echo ${EMAIL_SOUHAITE} | sed -e 's/^.*@//') ${KAZ_CONF_DIR}/autorized-domains.txt >/dev/null
			then
				printKazMsg  "Le domaine n' est pas dans la liste autorisée"
				sleep 2
				fait=0
			else
				fait=1
			fi
		else
			printKazError  " - Mail invalide !"
			sleep 2
			fait=0
		fi
	done
	# on renseigne le domaine en cours pour  les options qui concernent pas le domaine kaz.bzh
	#  ----------------------------------------------------------------------
        DOMAINE_EN_COURS=$(echo ${EMAIL_SOUHAITE} | sed -e 's/^.*@//')
        echo "   ---- Domaine: " ${DOMAINE_EN_COURS} ----
	#  ----------------------------------------------------------------------
	# On demande le mail de secours et on teste si c' est un mail valide
	fait=0
	while [ $fait -eq 0 ]
        do
                read -p "Mail de secours : " EMAIL_SECOURS
                if [[ ${EMAIL_SECOURS} =~ ${regexMail} ]] && [ "${EMAIL_SECOURS}" != "" ]
                then
			fait=1
                else
                        printKazError "Mail invalide"
                        fait=0
                fi
		if [ "${EMAIL_SECOURS}" = "${EMAIL_SOUHAITE}" ]
                then
                         echo -e "${RED}Le mail de secours ne peut pas etre le meme que le mail demande${NC}"
                         fait=0
                 fi
        done
	# On demande le prenom
        while [ "${PRENOM}" = "" ]
        do
                read -p "Prenom : " PRENOM
        done
        # On demande le nom
        while [ "${NOM}" = "" ]
        do
                read -p "Nom : " NOM
        done
	# On constitue l' ident kaz pour le ldap
	IDENT_KAZ=$(unaccent utf8 "${PRENOM,,}.${NOM,,}")
	# on créé le mot de passe
	PASSWORD=_`apg -n 1 -m 10 -M NCL -d`_
	# on constitue le user,domain et pass crypté pour le ldap
       	LDAPUSER=$(echo ${EMAIL_SOUHAITE} | awk -F '@' '{print $1}')
       	LDAPDOMAIN=$(echo ${EMAIL_SOUHAITE} | awk -F '@' '{print $2}')
       	LDAPPASS=$(mkpasswd -m sha512crypt ${PASSWORD})
	[ "${DOMAINE_EN_COURS}" != "${domain}" ] && TRUE_KAZ=FALSE
	echo "${GREEN}Mail souhaité : ${NC}${EMAIL_SOUHAITE}"
	echo "${GREEN}Mail secours  : ${NC}${EMAIL_SECOURS}"
	echo "${GREEN}Prénom        : ${NC}${PRENOM}"
	echo "${GREEN}Nom           : ${NC}${NOM}"
	echo "${GREEN}Mot de passe  : ${NC}${PASSWORD}"
	RCREATION=""
	repRegEx='^[oOnN]$'
	while ! [[ ${RCREATION} =~ ${repRegEx} ]]
	do
		read -p "Création ? o/n : " RCREATION
	done
	if [ ${RCREATION} = "n" ] || [ ${RCREATION} = "N" ]
	then
		Main
	fi
       	echo "echo -e '\n\ndn: cn=${EMAIL_SOUHAITE},ou=users,${ldap_root}\n\
changeType: add\n\
objectclass: inetOrgPerson\n\
objectClass: PostfixBookMailAccount\n\
objectClass: nextcloudAccount\n\
objectClass: kaznaute\n\
sn: ${PRENOM} ${NOM}\n\
mail: ${EMAIL_SOUHAITE}\n\
mailEnabled: TRUE\n\
mailGidNumber: 5000\n\
mailHomeDirectory: /var/mail/${LDAPDOMAIN}/${LDAPUSER}/\n\
mailQuota: ${QUOTA}G\n\
mailStorageDirectory: maildir:/var/mail/${LDAPDOMAIN}/${LDAPUSER}/\n\
mailUidNumber: 5000\n\
mailDeSecours: ${EMAIL_SECOURS}\n\
identifiantKaz: ${IDENT_KAZ}\n\
quota: ${QUOTA}\n\
nextcloudEnabled: FALSE\n\
nextcloudQuota: ${QUOTA} GB\n\
mobilizonEnabled: ${TRUE_KAZ}\n\
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}
# on execute le fichier avec les données ldap pour créer l' entrée dans l' annuaire
bash ${TFILE_CREATE_MAIL} >/dev/null
# 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}
OLDIFS=${IFS}
IFS=''
MSG_CREATION_MAIL="Bonjour

Le compte de messagerie ${EMAIL_SOUHAITE} a été créé avec le mot de passe ${PASSWORD}

Le mot de passe peut être changé à l' adresse https://mdp.${domain}

$(cat ${KAZ_CONF_DIR}/domains/${DOMAINE_EN_COURS})

Bonne journée"
ExpMail ${EMAIL_SECOURS} "Creation de ${EMAIL_SOUHAITE}" ${MSG_CREATION_MAIL}
PostMattermost "création du compte ${EMAIL_SOUHAITE} avec l' adresse de secours ${EMAIL_SECOURS}" "Creation-Comptes"
IFS=${OLDIFS}
echo " --------------------------------------------------------------------"
echo "!            INFO :                                                  !"
echo "!            Le Mot de passe                                         !"
echo "!            Est dans le fichier                                     !"
echo "!            ${TFILE_CREATE_MAIL}          !"
echo " --------------------------------------------------------------------"
echo
read -p " -  ENTREE pour continuer - "
# Retour au menu principal
Main
}

createAlias() {
	ACTION_EN_COURS="création d' un alias de messagerie"
	fait=0
	# On demande alias souhaite on regarde si c' est valide et si ça existe déjà
	while [ $fait -eq 0 ]
	do
		clear
		echo "-------------------------------------------------"
		printKazMsg "${ACTION_EN_COURS}"
		echo "-------------------------------------------------"
		read -p "Alias souhaité (r ou q pour quitter ) : " AMAIL
		[[ ${AMAIL} =~ ^[rRqQ]$ ]] && Main
		if [[ ${AMAIL} =~ ${regexMail} ]]
		then
			RESU_ALIAS=$(ldapsearch -H ldap://${LDAP_IP} \
			-x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \
			-w "${LDAP_ADMIN_PASSWORD}" \
			-b "${ldap_root}" "(&(objectclass=PostfixBookMailForward)(cn=*${AMAIL}*))" | grep ^cn | sed -e 's/^cn: //')
			RESU_ALIAS_IS_MAIL=$(ldapsearch -H ldap://${LDAP_IP} \
 	                -x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \
			-w "${LDAP_ADMIN_PASSWORD}" \
             		-b "${ldap_root}" "(&(objectclass=inetOrgPerson)(cn=*${AMAIL}*))" cn | grep ^cn | sed -e 's/^cn: //')

	        	if echo ${RESU_ALIAS} | grep -q "^${AMAIL}$" || echo ${RESU_ALIAS_IS_MAIL} | grep -q "^${AMAIL}$"
			then
				echo "${GREEN} - alias ou mail ${AMAIL} déjà dans présent l' annuaire${NC}"
				sleep 2
				fait=0
			elif ! grep $(echo ${AMAIL} | sed -e 's/^.*@//') ${KAZ_CONF_DIR}/autorized-domains.txt >/dev/null
			then
				echo -e "${GREEN}Le domaine n' est pas dans la liste autorisée${NC}"
				sleep 2
				fait=0
			else
				fait=1
			fi
		else
			echo -e "${GREEN} - Mail invalide !${NC}"
			sleep 2
			fait=0
		fi
	done
	echo "Alias : ${AMAIL} peut être créé"
	declare -a TABAMAIL
	fait=0
	while [ $fait -eq 0 ]
	do
		clear
		echo "-----------------------------------------------------------------"
		echo "Ajout de mail pour cet alias"
		echo "-----------------------------------------------------------------"
		[ "${TABAMAIL[*]}" == "" ] || echo -e "Liste des mails dans cet alias: [ ${GREEN}${TABAMAIL[*]}${NC} ]"
		read -p "ENTREE ou F ( pour fin :-) pour une liste vide ou saisir une adresse et enfin saisir F pour arrêter : " RALIAS
		if [[ ${RALIAS} =~ ^[Ff]$ ]] || [ "${RALIAS}" == "" ]
		then
			fait=1
		else
			if echo ${TABAMAIL[*]} | grep -i ${RALIAS} >/dev/null 2>&1
			then
				echo -e "${GREEN}l' alias est déjà dans la liste ${NC}"
				sleep 2
			else
				if [[ ${RALIAS} =~ ${regexMail} ]]
				then
					TABAMAIL+=(${RALIAS})
				else
					echo -e "${GREEN} - Mail invalide !${NC}"
					sleep 2
				fi
			fi
		fi
	done
	fait=0
	while [ "$fait" = 0 ]
	do
		clear
		echo "--------------------------------------------------"
		echo -e "${GREEN}résumé de la situation${NC}"
		echo "--------------------------------------------------"
		echo -e "création d' un alias : ${GREEN}${AMAIL}${NC}"
		echo -e "avec le(s) Mail suivant : ${GREEN}${TABAMAIL[*]}${NC}"
		echo "--------------------------------------------------"
		RCREATONALIAS=""
		read -p "OK pour la création ?(o/n) : " RCREATIONALIAS
		case "$RCREATIONALIAS" in
		o | O )
			for ALIASMAIL in ${TABAMAIL[*]}
			do
				LDAPALAISMAIL="${LDAPALAISMAIL}$(echo mail :${ALIASMAIL})\n"
			done
			echo -e "\n\ndn: cn=${AMAIL},ou=mailForwardings,${ldap_root}\n\
changeType: add\n\
objectClass: organizationalRole\n\
objectClass: PostfixBookMailForward\n\
mailAlias: ${AMAIL}\n\
${LDAPALAISMAIL}\n\n" | ldapmodify -c -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" -x -w ${LDAP_ADMIN_PASSWORD}
			fait=1
			printKazMsg "Création de ${AMAIL}"
			sleep 3
			createAlias
			;;
		 n | N )
			printKazMsg "abandon de création"
			sleep 2
			createAlias
			;;
		* )
			fait=0
			;;
		esac
	done
}

delAlias() {
	ACTION_EN_COURS="Suppresion d' un alias de messagerie"
 	fait=0
        while [ $fait -eq 0 ]
        do
		RALIAS=""
		CHOIX_MAIL=""
		RESU_ALIAS=""
		searchEmail alias
		RALIAS=${CHOIX_MAIL}
                [[ ${RALIAS} =~ ^[rRqQ]$ ]] && Main
                if [[ ${RALIAS} =~ ${regexMail} ]]
                then
                	RESU_ALIAS=$(ldapsearch -H ldap://${LDAP_IP} \
                        -x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \
                        -w "${LDAP_ADMIN_PASSWORD}" \
                        -b "${ldap_root}" "(&(objectclass=PostfixBookMailForward)(cn=${RALIAS}))" cn | grep ^cn | sed -e 's/^cn: //')
			if [ ! -z ${RESU_ALIAS} ]
			then
				faitdel=0
				while [ ${faitdel} = 0 ]
				do
					read -p "suppression de ${RESU_ALIAS} ? (o/n): " REPDELALIAS
					case "${REPDELALIAS}" in
					o | O )
                        			ldapdelete -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${LDAP_ADMIN_PASSWORD}" "cn=${RESU_ALIAS},ou=mailForwardings,${ldap_root}"
						printKazMsg "suppression ${RESU_ALIAS} effectuée"
						sleep 2
						faitdel=1
						;;
					n | N )
						faitdel=1
						;;
					"" | * )
						faitdel=0
						;;

					esac
				done
			else
				fait=0
			fi

                else
                         printKazError " - format alias invalide !"
                         sleep 2
                         fait=0
                fi
        done
	delAlias
}

modifyAlias()
{
        ACTION_EN_COURS="Modfication d' un alias de messagerie"
	MRESU_ALIAS=""
	LISTE_MAIL_ALIAS=""
	NEW_LISTE_MAIL_ALIAS=""
	ACHANGE=0
	searchEmail alias
	LISTE_MAIL_ALIAS=$(ldapsearch -H ldap://${LDAP_IP} \
        -x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \
        -w "${LDAP_ADMIN_PASSWORD}" \
        -b "${ldap_root}" "(&(objectclass=PostfixBookMailForward)(cn=*${CHOIX_MAIL}*))" \
	| grep -i ^mail: | sed -e 's/^mail: /_/' | tr -d [:space:] | sed -s 's/_/ /g')
	echo "-------------------------------------------------------------------"
	echo "-------------------------------------------------------------------"
	echo -e "${GREEN} [  ${LISTE_MAIL_ALIAS}  ] ${NC} "
	echo "-------------------------------------------------------------------"
	BOUCLE_M_MAIL=0
	NEW_LISTE_MAIL_ALIAS=""
	for M_MAIL in ${LISTE_MAIL_ALIAS}
        do
        read -p " - On garde l' alias ${M_MAIL} (o/n) ? [o] : " READM_MAIL
        case  ${READM_MAIL} in
        "" | o | O )
			NEW_LISTE_MAIL_ALIAS="${NEW_LISTE_MAIL_ALIAS} ${M_MAIL}"
                  	;;
        n | N )
			ACHANGE=$(expr ${ACHANGE} + 1)
        		NEW_LISTE_MAIL_ALIAS=${NEW_LISTE_MAIL_ALIAS}
                  	;;
	* )
			NEW_LISTE_MAIL_ALIAS="${NEW_LISTE_MAIL_ALIAS} ${M_MAIL}"
			;;
        esac
        done
	TALIAS_SUPP=""
	BOUCLE_ADD_MAIL=0
	BOUCLE_ALIAS=0
	read -p "Ajouter un alias ? (o/n) [n] :" RALIAS_SUPP
	while [ $BOUCLE_ADD_MAIL = 0 ]
	do
       	case ${RALIAS_SUPP} in
	o | O )
        		while [ ${BOUCLE_ADD_MAIL} = 0 ]
        		do
       				read -p " - Nouvel Alias: ( F pour finir ) :  " ALIAS_SUPP
        			if [[ ${ALIAS_SUPP} =~ ${regexMail} ]]
				then
					if echo ${NEW_LISTE_MAIL_ALIAS} | grep -w ${ALIAS_SUPP} >/dev/null
               				then
						printKazMsg "Alias déjà existant"
						BOUCLE_ADD_MAIL=0
               				else
						NEW_LISTE_MAIL_ALIAS="${NEW_LISTE_MAIL_ALIAS} ${ALIAS_SUPP}"
						ACHANGE=$(expr ${ACHANGE} + 1)
               				fi
         			elif [[ ${ALIAS_SUPP} =~ ^[[fF]+$ ]]
         			then
					BOUCLE_ADD_MAIL=1
				else
					printKazMsg "erreur de mail"
				fi
        		done
         		;;
	 "" | n | N )
			BOUCLE_ADD_MAIL=1
			;;
	* )
			BOUCLE_ADD_MAIL=1
			;;
	esac
	done
		if [ "${ACHANGE}" -gt "0" ]
		then
			printKazMsg "Changement à effectuer : ${NEW_LISTE_MAIL_ALIAS}"
			sleep 3
			FIC_MODIF_LDIF=$(mktemp /tmp/$RACINE.XXXXXXXXX.TFIC_MODIF_LDIF.ldif)
			echo "dn: cn=${CHOIX_MAIL},ou=mailForwardings,${ldap_root}" >${FIC_MODIF_LDIF}
			echo "changeType: modify" >>${FIC_MODIF_LDIF}
			echo "replace: mail" >>${FIC_MODIF_LDIF}
			for key in ${NEW_LISTE_MAIL_ALIAS}
	                do
				echo "mail: ${key}" >>${FIC_MODIF_LDIF}
			done
			echo "-" >>${FIC_MODIF_LDIF}
		 	ldapmodify -c -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \
			-x -w ${LDAP_ADMIN_PASSWORD} \
			-f ${FIC_MODIF_LDIF} >/dev/null
		else
			printKazMsg "Pas de changement"
			sleep 3
		fi
}

updateUser() {
	rm -rf /tmp/*attributs.txt
	ACTION_EN_COURS="Modification d'un compte"
	ATTRIB_MAILS="mailDeSecours mailAlias"
	ATTRIB_QUOTA="mailQuota nextcloudQuota"
	rm -rf /tmp/*fic_attributs.txt
	while :
	do
		FIC_ATTRIBUTS=$(mktemp /tmp/XXXXfic_attributs.txt)
		CHOIX_MAIL=""
		declare -a ATTRIB
		searchEmail
		MAILDESECOURSACTUEL=""
		MAILDESECOURS=""
		Ucompteur=1
		for attribut in mailDeSecours mailAlias mailQuota nextcloudQuota mobile
		do
			ATTRIB+=([${attribut}]=$(ldapsearch -H ldap://${LDAP_IP} \
	               	-x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \
                	-w "${LDAP_ADMIN_PASSWORD}" \
                	-b "${ldap_root}" "(&(objectclass=inetOrgPerson)(cn=*${CHOIX_MAIL}*))" \
			 | grep ^"${attribut}": | sed -e 's/^'${attribut}': //' | tr -s '[:space:]' ' ' ))
			# si l' attribut est mailDesecours on l' attrape et on on le stocke pour pouvoir l' enlever de sympa
			[ ${attribut} = mailDeSecours ] && MAILDESECOURSACTUEL=${ATTRIB[${attribut}]}
			echo -e "${Ucompteur} - ${attribut} = ${ATTRIB[${attribut}]}" >>${FIC_ATTRIBUTS}
			Ucompteur=$(expr ${Ucompteur} + 1)
		done
		faitAttrib=0
		declare -A CHANGED
		while [ ${faitAttrib} = 0 ]
		do
			clear
			echo "---------------------------------------------------"
			printKazMsg "${ACTION_EN_COURS} ${CHOIX_MAIL}"
			echo "---------------------------------------------------"
			[ "${#CHANGED[@]}" -gt "0" ] && echo "------   Les Modification en cours   -------------"
			for key in "${!CHANGED[@]}"
			do
				echo "${GREEN}${key}${NC}: ${CHANGED[$key]}"
			done
			[ "${#CHANGED[@]}" -gt "0" ] && echo "---------------------------------------------------"
			cat ${FIC_ATTRIBUTS}
			read -p "Quel attribut est à changer  ? (R ou r pour retour F pour Finir ): " REP_ATTRIBUT
			case "${REP_ATTRIBUT}" in
			r | R )
				if [ "${#CHANGED[@]}" -gt "0" ]
				then
					echo "------------------------------------------------------------------------"
					read -p "=====> ATTENTION : il y a des modifs en cours abandonner ?(o ou n) ? <===== : " RABANDON
					case "${RABANDON}" in
					o | O )
						faitAttrib=1
						;;
					n | N )
						faitAttrib=0
						;;
					* )
						echo ""
						;;
					esac
				else
					faitAttrib=1
				fi
				;;
			[0-9] )
				if [ "${REP_ATTRIBUT}" -gt "$(expr ${Ucompteur} - 1 )" ]
				then
					printKazMsg "Chiffre invalide"
					sleep 3
				else
					# pour être sur de virer tous les espaces et les tab etc on utilise [:space:]
					# on affiche tout les arguments ( les $1 $2 $2 avec la boucle for)
					# on ajoute de ___ pour pouvoir le remplace par un espace entre chaque variable
					# afin d' afficher un beau contenu1 contenu2 contenu 3

					ATTRIBUT_EN_COURS=$(cat ${FIC_ATTRIBUTS} | grep "^${REP_ATTRIBUT}\b" | awk '{print $3}')
					CONTENU_ATTRIBUT=$(cat ${FIC_ATTRIBUTS} | grep "^${REP_ATTRIBUT}\b" \
					| awk '{for (i=5; i<=NF; i++) print $i"___"}'\
					| tr -d [:space:] | sed -e 's/___/ /g')

					case ${ATTRIBUT_EN_COURS} in
					mailQuota | nextcloudQuota )
							echo "------------------------------------------------"
							read -p " - Nouveau ${ATTRIBUT_EN_COURS} (R ou r pour retour) : " RCHANGE
							if [[ ${RCHANGE} =~ ^[0-9]+$ ]]
							then
								[ "${ATTRIBUT_EN_COURS}" = "mailQuota" ] && CHANGED+=([mailQuota]="${RCHANGE}G")
								[ "${ATTRIBUT_EN_COURS}" = "nextcloudQuota" ] && CHANGED+=([nextcloudQuota]="${RCHANGE} GB")
							else
								printKazError "Valeur incorecte"
								sleep 3
							fi
							faitAttrib=0
							;;
					mobile )
							read -p "Quel est le numéo du mobile au format 0XXXXXXXXXXX : " RCHANGE
							if [[ ${RCHANGE} =~ ^[0-9]+$ ]] && [ "$(echo ${RCHANGE} | wc -L)" -eq "10" ]
							then
								# prévoir un passage en +33XXXXXXXXXX ?
					  		CHANGED+=([mobile]="${RCHANGE}")
							else
								echo "Valeur incorecte"
		            sleep 3
		          fi
							faitAttrib=0
							;;
					mailDeSecours )
							echo "------------------------------------------------"
							read -p " - Nouveau Mail de Secours  : " RCHANGE
							if [[ ${RCHANGE} =~ ${regexMail} ]]
							then
								CHANGED+=([mailDeSecours]=${RCHANGE})
							else
								printKazMsg "Mail invalide"
								sleep 3
							fi
							faitAttrib=0
							;;
					mailAlias )
							NEW_CONTENU_ATTRIBUT=""
							READVALMAIL=""
							ALIAS_SUPP=""
							RALIAS_SUPP=""
							TALIAS_SUPP=""
							BOUCLE_ADD_MAIL=0
							MAILALIAS_CHANGE=0
							for VALMAIL in ${CONTENU_ATTRIBUT}
							do
								read -p " - On garde ${VALMAIL} (o/n) [o] ? : " READVALMAIL
								case  ${READVALMAIL} in
								"" | o | O )
									NEW_CONTENU_ATTRIBUT="${NEW_CONTENU_ATTRIBUT} ${VALMAIL}"
									;;
								n | N )
									NEW_CONTENU_ATTRIBUT="${NEW_CONTENU_ATTRIBUT}"
									MAILALIAS_CHANGE=$(expr ${MAILALIAS_INCHANGE} + 1)
									;;
								* )
									printKazError "Erreur"
									sleep 2
								esac
							done
							read -p "Ajouter un alias ? (o/n) [n] :" RALIAS_SUPP
							case ${RALIAS_SUPP} in
							o | O )
								while [ ${BOUCLE_ADD_MAIL} = 0 ]
								do
									read -p " - ${GREEN}Nouvel Alias: ( F pour finir ) :${NC} " ALIAS_SUPP
									BOUCLE_ADD_MAIL=0
									if [[ ${ALIAS_SUPP} =~ ${regexMail} ]]
									then
										if echo "${CONTENU_ATTRIBUT}" | grep  "^${ALIAS_SUPP}$"
										then
											printKazMsg "Alias déjà existant"
											sleep 3
										else
											TALIAS_SUPP="${TALIAS_SUPP} ${ALIAS_SUPP}"
											MAILALIAS_CHANGE=$(expr ${MAILALIAS_INCHANGE} + 1)
										fi
									fi
									if [[ ${ALIAS_SUPP} =~ ^[[fF]+$ ]]
									then
										BOUCLE_ADD_MAIL=1
									fi
								done
								;;
							"" | n | N  )
									CHANGED+=([mailAlias]="${NEW_CONTENU_ATTRIBUT}")
									;;
							* )
									printKazMsg "Erreur"
									sleep 2
									;;
							esac
							[ "${MAILALIAS_CHANGE}" -gt "0" ] && CHANGED+=([mailAlias]="${NEW_CONTENU_ATTRIBUT} ${TALIAS_SUPP}")
							faitattrib=0
							;;
					esac
				fi
				;;
			f | F )
				if [ "${#CHANGED[@]}" -eq "0" ]
				then
					printKazMsg "Il n'y a pas eu de modif"
					sleep 3
					updateUser
				else
					echo "Départ des modifs"
					LISTE_MODIF_USER=""
					FIC_MODIF_LDIF=$(mktemp /tmp/$RACINE.XXXXXXXXX.TFIC_MODIF_LDIF.ldif)
					echo "dn: cn=${CHOIX_MAIL},ou=users,${ldap_root}" >${FIC_MODIF_LDIF}
					echo "changeType: modify" >>${FIC_MODIF_LDIF}
					for key in "${!CHANGED[@]}"
	                         	do
						if [ ${key} = "mailDeSecours" ]
						then
							MAILDESECOURS=${CHANGED[mailDeSecours]}
						fi
						if [ ${key} = "mailAlias" ]
						then
							echo "replace: ${key}" >>${FIC_MODIF_LDIF}
							for KEY_MAILALIAS in ${CHANGED[$key]}
							do
								echo "${key}: ${KEY_MAILALIAS}" >>${FIC_MODIF_LDIF}
							done
							echo "-" >>${FIC_MODIF_LDIF}
						else
							echo "replace: ${key}" >>${FIC_MODIF_LDIF}
							echo "${key}: ${CHANGED[$key]}" >>${FIC_MODIF_LDIF}
							echo "-" >>${FIC_MODIF_LDIF}
						fi
					done
					cat ${FIC_MODIF_LDIF}
					sleep 3
					ldapmodify -c -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \
					-x -w ${LDAP_ADMIN_PASSWORD} \
					-f ${FIC_MODIF_LDIF}
					if [ ! -z ${MAILDESECOURS} ]
					then
						# suppression du mail de secours de la liste infos
						docker exec -ti sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=USER_EMAIL=${LISTMASTER} --service=del --service_parameters="${NL_LIST},${MAILDESECOURSACTUEL}"
						# ajout de l' adresse  de la nouvelle adresse de secours
						docker exec -ti sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=USER_EMAIL=${LISTMASTER} --service=add --service_parameters="${NL_LIST},${MAILDESECOURS}"
					fi
					updateUser
				fi
				;;
			"" | * )
				faitAttrib=0
				;;
			esac
		done
	done

}
##############################################################################################################
##############################################################################################################
usage () {
        printKazMsg "$PRG [-h] [-v]"
        printKazMsg "script de gestion des kaznautes"
        printKazMsg "   -h aide sur ce script"
        printKazMsg "   -v version du script."
}
##############################################################################################################
# test des dépendances
type -P jq | grep -i jq >/dev/null || { echo "erreur jq n' est pas installé ( apt install jq ? ) " ; exit;}
################ Main loop ############################################
Main() {

echo -e "${NC}"
while true
do
clear
echo "-------------------------------------------------"
echo "$PRG, version : $VERSION ($KAZ_ROOT)"
echo "-------------------------------------------------"
echo -e "${BOLD}COMPTES : "
echo -e "${NC}*********"
echo -e "${NC}"
echo -e " ${NC}1 - Information sur un compte (alias ou Mail )"
echo -e " ${YELLOW}2 - Modification d' un compte"
echo -e " ${NC}3 - Changement de mot de passe d' un compte (HS)"
echo -e " ${GREEN}4 - Suppression d' un compte "
echo -e " ${NC}5 - Création d' une adresse de messagerie"
echo -e "${NC}"
echo -e "${BOLD}ALIAS : "
echo -e "${NC}*******"
echo -e "${NC}"
echo -e " ${NC}6 - Création d' un alias Général pour mails Externes"
echo -e " ${YELLOW}7 - Modification d' un alias Général pour mails Externes"
echo -e " ${GREEN}8 - Suppression d' un alias Général pour mails Externes"
echo -e "${NC}"
echo "-------------------------------------------------"
echo -e "${NC}"
read -p "Choix ? (Q pour quitter) ==> : " CHOICE
case "$CHOICE" in
        '1' )
		infoEmail
		;;
        '2' )
		updateUser
		;;
				'3' )
		echo "La fonction est supprimée"
		read -p "==> Entrée pour continuer <=="
		;;
        '4' )
		searchDestroy
		;;
        '5' )
		createMail
		;;
        '6' )
		createAlias
		;;
        '7' )
		modifyAlias
		;;
        '8' )
		delAlias
		;;
        'h'| "H" )
		clear
		echo "--------------------------------------------"
                usage
		echo "--------------------------------------------"
		;;
        'q'| "Q" )
                exit
		;;
	""|'*' )
		clear
		;;
esac
done
}


##################################################################################################################################

# Lancement de la boucle principale
#traitement des options ( usage )

case "$1" in
	'-h' )
		usage
		exit
		;;
	'-v' )
		printKazMsg "$PRG version $VERSION"
		exit
		;;
esac

# on teste la présence du domaine du site dans le fichier autorized-domains.txt
[ ! -e ${KAZ_CONF_DIR}/autorized-domains.txt ] && { echo "création de ${KAZ_CONF_DIR}/autorized-domains.txt" ; touch ${KAZ_CONF_DIR}/autorized-domains.txt;}
! grep $domain ${KAZ_CONF_DIR}/autorized-domains.txt && echo $domain >> ${KAZ_CONF_DIR}/autorized-domains.txt
Main
