From b29f6f948c432519d88ffef10a053d9e14205dc7 Mon Sep 17 00:00:00 2001 From: didier Date: Wed, 21 Oct 2026 08:18:09 +0200 Subject: [PATCH] ajout de ldap paheko --- bin/update-ldap-paheko.sh | 166 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100755 bin/update-ldap-paheko.sh diff --git a/bin/update-ldap-paheko.sh b/bin/update-ldap-paheko.sh new file mode 100755 index 0000000..81e6683 --- /dev/null +++ b/bin/update-ldap-paheko.sh @@ -0,0 +1,166 @@ +#!/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