#!/bin/bash #KI: didi #KOI: lire les emails secours et tel sur chaque fiche paheko et les rajouter/modifier le ldap #KAN: 21/08/2026 #on récupère toutes les variables et mdp KAZ_ROOT=/kaz #KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd) . $KAZ_ROOT/bin/.commonFunctions.sh setKazVars . $DOCKERS_ENV . $KAZ_KEY_DIR/env-ldapServ . $KAZ_KEY_DIR/env-paheko OPTIONS="" URL_PAHEKO="https://${API_USER}:${API_PASSWORD}@kaz-paheko.kaz.bzh" 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,})+$" FICLDIF=/tmp/ficupdaemobile.ldif IfExistRec() { T_EMAIL=$1 T_MOBILE=$2 T_MAILSECOURS=$3 SEARCH_OBJECT_CLASS="inetOrgPerson" TAB_REP="" T_REP="" T_VAL="" COUNT=0 for T_VAL in mail mailDeSecours mobile do T_REP="${T_REP} $(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=${T_EMAIL}))" ${T_VAL}\ | grep -e ^${T_VAL}: \ | sed -e 's/'"${T_VAL}"': //g' \ | tr -d [:space:] )" if [ $(echo -n "${T_REP}" | wc -c) -le "3" ] then [ "${COUNT}" -eq "0" ] && TAB_REP="${TAB_REP}${T_VAL}" || TAB_REP="${TAB_REP} ${T_VAL}" else [ "${COUNT}" -eq "0" ] && TAB_REP="${TAB_REP}${T_REP}" || TAB_REP="${TAB_REP} ${T_REP}" fi T_REP="" COUNT=$(expr ${COUNT} + 1 ) done # on retourne les valeurs trouvées [ "${TAB_REP}" = "mail mailDeSecours mobile" ] && { echo "vide" ; exit 1 ; } [ -z "${TAB_REP}" ] && { echo "vide" ; exit 1 ; } || echo ${TAB_REP} } LdapUpdateAll() { >${FICLDIF} COUNT=0 # bon la requête je ne l'ai pas inventée vu mon niveau de sql # j'ai fait une recherche avancée dans paheko et ça propose de montrer la requête for line in $(curl -s ${URL_PAHEKO}/api/sql -d "SELECT u."email" , u."telephone" , u."email_secours" FROM users_view AS u INNER JOIN users_search AS us USING (id) \ WHERE (id_category in ('12','3') and u.telephone like '06%' or telephone like '07%' ) LIMIT 3000" \ | sed 's/\([0-9]\)[ \.]\([-0-9]\)/\1\2/g' \ | jq -r '.results[] | [.email,.telephone,.email_secours]| @csv') do TAB_MODIF="" MAILSECOURS=$(echo ${line} | awk -F',' {'print $3'} | sed -e 's/"//g') EMAIL=$(echo ${line} | awk -F',' {'print $1'} | sed -e 's/"//g') MOBILE=$(echo ${line} | awk -F',' {'print $2'} | sed -e 's/"//g') A_REP=$(IfExistRec ${EMAIL} ${MOBILE} ${MAILSECOURS}) A_MOBILE=$(echo ${A_REP} | awk {'print $3'}) A_MAILSECOURS=$(echo ${A_REP} | awk {'print $2'}) A_MAIL=$(echo ${A_REP} | awk {'print $1'}) # cas ou ça ne remonte rien donc on passe au suivant [ "${A_REP}" = "vide" ] && { continue; } [ "${A_MOBILE}" != "${MOBILE}" ] && { TAB_MODIF="${TAB_MODIF}$(echo -e "replace: mobile\nmobile: ${MOBILE}\n")" ; TAB_MODIF="${TAB_MODIF}\n$(echo "-\n")"; } [ "${A_MAILSECOURS}" != "${MAILSECOURS}" ] && TAB_MODIF="${TAB_MODIF}$(echo -e "replace: mailDeSecours\nmailDeSecours: ${MAILSECOURS}\n-\n")" if [ ! -z "${TAB_MODIF}" ] then echo -e "\ndn: cn=${EMAIL},ou=users,${ldap_root}" >>${FICLDIF} echo -e "changeType: modify" >>${FICLDIF} echo -e "${TAB_MODIF}\n" >>${FICLDIF} COUNT=$(expr ${COUNT} + 1 ) fi done echo "${COUNT} enregistrement(s) modifié(s)" cat ${FICLDIF} | ldapmodify -c -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${LDAP_ADMIN_PASSWORD}" >/dev/null 2>/dev/null } LdapUpdateUniq() { EMAIL=$1 MOBILE=$2 MAILSECOURS=$3 PBARGU="" [[ ${MOBILE} =~ ^[0-9]+$ ]] && [ "$(echo ${MOBILE} | wc -L)" -eq "10" ] && [[ ${MOBILE} =~ ^(0)[67] ]] || PBARGU="${PBARGU} - Le numéro est malformé" [[ ${EMAIL} =~ ${regexMail} ]] || PBARGU="${PBARGU} - Le mail est malformé" [[ ${MAILSECOURS} =~ ${regexMail} ]] || PBARGU="${PBARGU} - Le mail de secours est malformé" [ ! -z "${PBARGU}" ] && { echo ${PBARGU};exit 1; } PBARGU="" I_REP=$(IfExistRec ${EMAIL} ${MOBILE} ${MAILSECOURS}) [ "${I_REP}" = "vide" ] && { echo "Pas de mail ${EMAIL}" ; exit 1;} # si le numéro est connu on le dit dans la variable [ "$(echo ${I_REP} | awk {'print $3'})" = "${MOBILE}" ] && PBARGU="${PBARGU} -Le numéro est déjà celui là" # si le mail Secours est connu on le dit dans la variable [ "$(echo ${I_REP} | awk {'print $2'})" = "${MAILSECOURS}" ] && PBARGU="${PBARGU} -Le mail de secours est déjà celui là" # si PBARGU n'est pas vide et si le nombre de tiret est égal à 3 c'est que tout est déjà bon et je sors # mais si le nombre de tiret n'est pas 3 c'est que au moins un des élément est a changer et là je mets les 2 valeurs (puisque celle qui existe est quand même bonne ) # donc la remettre n'est pas bien grave [ ! -z "${PBARGU}" ] && [ $(echo ${PBARGU} | sed -e 's/[A-Za-z0-9 ]//g' | wc -c) -eq 3 ] && { echo ${PBARGU};exit 1; } || echo "Info : ${PBARGU}" >${FICLDIF} echo -e "dn: cn=${EMAIL},ou=users,${ldap_root}" >>${FICLDIF} echo -e "changeType: modify">>${FICLDIF} echo -e "replace: mailDeSecours">>${FICLDIF} echo -e "mailDeSecours: ${MAILSECOURS}">>${FICLDIF} echo -e "-" >>${FICLDIF} echo -e "replace: mobile">>${FICLDIF} echo -e "mobile: ${MOBILE}">>${FICLDIF} echo -e "-" >>${FICLDIF} #cat ${FICLDIF} cat ${FICLDIF} | ldapmodify -c -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${LDAP_ADMIN_PASSWORD}" } usage() { echo " Usage $0 [ -u -a ]" echo " ---" echo " Ce script intérroge paheko et met a jour le mobile sur tous les comptes ldap" echo " Ou peut juste mettre un enregistrement a jour " echo " -a c'est pour faire une mise à jour du ldap de tous les enregistrements de paheko" echo " cette commande produit un log dans ${KAZ_ROOT}/log avec le nom du script et la date" echo " -u suivi dans l'ordre : " echo " - d'un mail" echo " - d'un telephone au format 06 ou 07 XXXXXXXXXX : 10 chiffres donc ..:-)" echo " - et le mail de secours " } ## MAIN # on traite les arguments du script [ $# -eq 0 ] && { usage; exit 1;} for ARG in $@ do case "${ARG}" in -a | -A ) OPTIONS="${OPTIONS} TOUT" ;; -u | -U ) OPTIONS="${OPTIONS} UNIQUE" ;; esac echo ${OPTIONS} | grep "UNIQUE" >/dev/null && echo ${OPTIONS} | grep "TOUT" >/dev/null && { echo "les 2 valeurs ne peuvent pas être ensemble"; exit 1;} done # on vire tout les espaces en tout genre qui serait arrivés là, on ne sait comment OPTIONS=$(echo ${OPTIONS} | tr -d [:space:]) case "$OPTIONS" in TOUT ) [ $# -eq 1 ] && { LdapUpdateAll >${KAZ_ROOT}/log/$0-$(date +%d-%m-%y-%H:%M:%S).log; exit; } || { echo "-a doit ête seul" ;exit 1;} ;; UNIQUE ) [ $# -eq 4 ] && { LdapUpdateUniq $2 $3 $4 ; exit ; } || { echo "Il manque le mail ,le mobile ou le mail de secours" ;exit 1; } ;; * ) usage exit 1 ;; esac