diff --git a/bin/update-ldap-paheko.sh b/bin/update-ldap-paheko.sh index 81e6683..72fe3e7 100755 --- a/bin/update-ldap-paheko.sh +++ b/bin/update-ldap-paheko.sh @@ -3,34 +3,38 @@ #KI: didi #KOI: lire les emails secours et tel sur chaque fiche paheko et les rajouter/modifier le ldap #KAN: 21/08/2026 +#KAN: le 25/10/2026 +# grosse modif, il faut passer des argumens pour modifier les quotas, le mail secours ou le nuro de tel #on récupère toutes les variables et mdp -KAZ_ROOT=/kaz -#KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd) +#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="" +PRG=$(basename $0) +RACINE=$(echo $PRG | awk '{print $1}') 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 +FICLDIF=/tmp/${RACINE}.ldif IfExistRec() { T_EMAIL=$1 - T_MOBILE=$2 - T_MAILSECOURS=$3 + #T_MOBILE=$2 + #T_MAILSECOURS=$3 + #T_QUOTA=$4 SEARCH_OBJECT_CLASS="inetOrgPerson" TAB_REP="" T_REP="" T_VAL="" COUNT=0 - for T_VAL in mail mailDeSecours mobile + for T_VAL in mail mailDeSecours mobile quota do T_REP="${T_REP} $(ldapsearch -H ldap://${LDAP_IP} \ -x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \ @@ -39,7 +43,9 @@ IfExistRec() | grep -e ^${T_VAL}: \ | sed -e 's/'"${T_VAL}"': //g' \ | tr -d [:space:] )" - if [ $(echo -n "${T_REP}" | wc -c) -le "3" ] + # si la longueur moins de 1 alors on a une valeur et on la mets dans le tableau + # sinon on met le nom du champ ( ce qui veut dire que la valeur est vide et qu'il faudra la modifier + if [ $(echo -n "${T_REP}" | wc -c) -le "1" ] then [ "${COUNT}" -eq "0" ] && TAB_REP="${TAB_REP}${T_VAL}" || TAB_REP="${TAB_REP} ${T_VAL}" else @@ -49,7 +55,8 @@ IfExistRec() COUNT=$(expr ${COUNT} + 1 ) done # on retourne les valeurs trouvées - [ "${TAB_REP}" = "mail mailDeSecours mobile" ] && { echo "vide" ; exit 1 ; } + # si tout le tableau ne contient que les noms de champs alors c'est que tout est + [ "${TAB_REP}" = "mail mailDeSecours mobile quota" ] && { echo "vide" ; exit 1 ; } [ -z "${TAB_REP}" ] && { echo "vide" ; exit 1 ; } || echo ${TAB_REP} } @@ -59,23 +66,27 @@ LdapUpdateAll() 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) \ + for line in $(curl -s ${URL_PAHEKO}/api/sql -d "SELECT u."email" , u."telephone" , u."email_secours", u."quota_disque" 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') + | jq -r '.results[] | [.email,.telephone,.email_secours,.quota_disque]| @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'}) + QUOTA=$(echo ${line} | awk -F',' {'print $4'} | sed -e 's/"//g') + #A_REP=$(IfExistRec ${EMAIL} ${MOBILE} ${MAILSECOURS} ${QUOTA}) + A_REP=$(IfExistRec ${EMAIL}) A_MAIL=$(echo ${A_REP} | awk {'print $1'}) + A_MAILSECOURS=$(echo ${A_REP} | awk {'print $2'}) + A_MOBILE=$(echo ${A_REP} | awk {'print $3'}) + A_QUOTA=$(echo ${A_REP} | awk {'print $4'}) # 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")" + [ "${A_QUOTA}" != "${QUOTA}" ] && TAB_MODIF="${TAB_MODIF}$(echo -e "replace: quota\nquota: ${QUOTA}\n-\n")" if [ ! -z "${TAB_MODIF}" ] then echo -e "\ndn: cn=${EMAIL},ou=users,${ldap_root}" >>${FICLDIF} @@ -93,22 +104,33 @@ LdapUpdateUniq() EMAIL=$1 MOBILE=$2 MAILSECOURS=$3 + QUOTA=$4 + 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é" + I_REP=$(IfExistRec ${EMAIL}) + [ "${I_REP}" = "vide" ] && { echo "Le mail ${EMAIL} n'existe pas dans l'annuaire Ldap" ; exit 1;} + [ "${MOBILE}" = IDEM ] && MOBILE=$(echo ${I_REP} | awk {'print $3'}) + [ "${MAILSECOURS}" = IDEM ] && MAILSECOURS=$(echo ${I_REP} | awk {'print $2'}) + [ "${QUOTA}" = IDEM ] && QUOTA=$(echo ${I_REP} | awk {'print $4'}) + [[ ${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é" + [[ ${QUOTA} =~ ^[0-9]+$ ]] || echo "le quota doit être en chiffres" [ ! -z "${PBARGU}" ] && { echo ${PBARGU};exit 1; } - PBARGU="" - I_REP=$(IfExistRec ${EMAIL} ${MOBILE} ${MAILSECOURS}) - [ "${I_REP}" = "vide" ] && { echo "Pas de mail ${EMAIL}" ; exit 1;} + + # a chaque fois qu'un élément est différent on le dit dans la variable PBARGU en commencant par un - + # ça va permettre de compter les tirets pour déterminer si quelque chose est a changer + COMPTEUR=0 # 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à" + [ "$(echo ${I_REP} | awk {'print $3'})" = "${MOBILE}" ] && { PBARGU="${PBARGU} -Le numéro est ok" ; COMPTEUR=$((COMPTEUR+1)) ; } # 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à" + [ "$(echo ${I_REP} | awk {'print $2'})" = "${MAILSECOURS}" ] && { PBARGU="${PBARGU} -Le mail de secours est ok" ; COMPTEUR=$((COMPTEUR+1)) ; } + # si le quota est le même on le met dans la variable + [ "$(echo ${I_REP} | awk {'print $4'})" = "${QUOTA}" ] && { PBARGU="${PBARGU} -Le quota est déjà ok" ; COMPTEUR=$((COMPTEUR+1)) ; } # 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 ) + # 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 autres valeurs (puisque celles qui existent sont ok ) # 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}" + [ ! -z "${PBARGU}" ] && [ "$COMPTEUR" -eq "3" ] && { echo "Tout es ok : rien à faire ";exit 1; } || echo "Info : ${PBARGU}" >${FICLDIF} echo -e "dn: cn=${EMAIL},ou=users,${ldap_root}" >>${FICLDIF} echo -e "changeType: modify">>${FICLDIF} @@ -118,49 +140,61 @@ LdapUpdateUniq() echo -e "replace: mobile">>${FICLDIF} echo -e "mobile: ${MOBILE}">>${FICLDIF} echo -e "-" >>${FICLDIF} + echo -e "replace: quota">>${FICLDIF} + echo -e "quota: ${QUOTA}">>${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}" + cat ${FICLDIF} | ldapmodify -c -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${LDAP_ADMIN_PASSWORD}" >/dev/null } usage() { - echo " Usage $0 [ -u -a ]" + echo " Usage $0 [ -a ] [ -u mail -s mailsecours -m mobile -q quota ]" 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 " Ce script intérroge paheko et met à jour des champs tous les comptes ldap" + echo " Ou peut juste mettre un enregistrement à jour " + echo " - Les options :" + echo " ------------------" 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 " + echo " -u suivi du mail ( obligatoire ) et des options à changer " + echo " (Les options sont cummulables )" + echo " -u d'un mail" + echo " -m d'un telephone au format 06 ou 07 XXXXXXXXXX : 10 chiffres donc ..:-)" + echo " -s le mail de secours " + echo " -q et le mail de secours" + echo " ----------------------------------------" + echo " - Exemple pour modifier juste le quota" + echo " $0 -u mail -q 10" + echo " - Exemple pour changer le quota et le mail de secours" + echo " $0 -u mail -q 10 -s mail_secours" + echo " ----------------------------------------" } ## MAIN -# on traite les arguments du script +MOBILE="" +MAIL="" +MAILSEC="" +QUOTA="" +OPTION="" [ $# -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;} +echo "$@" | grep "\-a" >/dev/null && [ "${#}" -gt "1" ] && { echo "-a doit être seule" ; exit 1 ; } +while getopts "au:q:s:m:" flag; do + case "${flag}" in + a) OPTION="TOUT" ;; + u) MAIL=$OPTARG ;; + q) QUOTA=$OPTARG ;; + s) MAILSEC=$OPTARG ;; + m) MOBILE=$OPTARG ;; + esac 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 +if [ "${OPTION}" = "TOUT" ] && [ "${#}" -eq "1" ] +then + LdapUpdateAll >${KAZ_ROOT}/log/$0-$(date +%d-%m-%y-%H:%M:%S).log + exit +fi + +[ -z "$MAIL" ] && { echo "usage -u -q -s -m (-u obligatoire )" ; exit ; } +[ -z "$QUOTA" ] && [ -z "$MOBILE" ] && [ -z "$MAILSEC" ] && { echo "-u ne peut pas être seul" ; exit 1 ;} + + +LdapUpdateUniq ${MAIL} ${MOBILE:-IDEM} ${MAILSEC:-IDEM} ${QUOTA:-IDEM}