From 3f9e643984906da9117995615ef1815de53f9ed6 Mon Sep 17 00:00:00 2001 From: Didier Denoual Date: Tue, 20 Jan 2026 17:02:53 +0100 Subject: [PATCH] modif des notifications en cas d'erreurs par mail et sur mattermost --- bin/interoPaheko.sh | 261 +++++++++++++++++++++++--------------------- 1 file changed, 136 insertions(+), 125 deletions(-) diff --git a/bin/interoPaheko.sh b/bin/interoPaheko.sh index 91c0395..fd26235 100755 --- a/bin/interoPaheko.sh +++ b/bin/interoPaheko.sh @@ -1,12 +1,12 @@ #!/bin/bash - -KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd) - +# Ki : did pour créer le fichier createusers.txt +# kan : le 20 janvier 2026 +#KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd) +KAZ_ROOT=/kaz . $KAZ_ROOT/bin/.commonFunctions.sh setKazVars . $DOCKERS_ENV - . $KAZ_KEY_DIR/env-paheko . $KAZ_KEY_DIR/env-kaz @@ -20,10 +20,9 @@ TFILE_INT_PAHEKO_IDFILE=$(mktemp /tmp/XXXXXXXX_TFILE_INT_PAHEKO_IDFILE.json) FILE_CREATEUSER="$KAZ_ROOT/tmp/createUser.txt" FILE_NOTIFICATION="${KAZ_TEMP_DIR}/${PRG}.txt" sep=' ' - -#trap "rm -f ${TFILE_INT_PAHEKO_IDFILE} ${TFILE_INT_PAHEKO_ACTION} " 0 1 2 3 15 - +ERRMSG="" ############################################ Fonctions ####################################################### + TEXTE=" # -- fichier de création des comptes KAZ # -- @@ -52,132 +51,144 @@ TEXTE=" # exemple pour un compte asso de l'orga gogol avec le service dédié NC uniquement + une équipe dans l'agora # dupont ; jean-louis; jean-louis.dupont@kaz.bzh ; gregomondo@kaz.bzh; gogol ; O; O; N; N; N; N;N;;gogol_team; 10 " +PostMattermost() { + PostM=$1 + CHANNEL="kaz:Creation-Comptes" + . $KAZ_KEY_DIR/env-mattermostAdmin + docker exec -ti ${mattermostServName} bin/mmctl --suppress-warnings auth login $httpProto://$URL_AGORA --name local-server --username $mattermost_user --password $mattermost_pass >/dev/null 2>&1 + docker exec -ti mattermostServ bin/mmctl post create ${CHANNEL} --message ${PostM} >/dev/null 2>&1 +} + ExpMail() { MAIL_DEST=$1 MAIL_SUJET=$2 MAIL_TEXTE=$3 - printf "Subject:${MAIL_SUJET}\n${MAIL_TEXTE}" | msmtp ${MAIL_DEST} + echo "$MAIL_TEXTE" | mail -s ${MAIL_SUJET} ${MAIL_DEST} } - + Int_paheko_Action() { - # $1 est une action; - ACTION=$1 - OPTION=$2 - # on envoie la requête sur le serveur paheko avec la clause à créer - curl -s ${URL_PAHEKO}/api/sql -d "SELECT * from users where action_auto='${ACTION}';" >>${TFILE_INT_PAHEKO_ACTION} - [ ! -z ${TFILE_INT_PAHEKO_ACTION} ] || { echo "probleme de fichier ${TFILE_INT_PAHEKO_ACTION}" ; exit 1;} - REP_ID=$(jq -c '.results[].id ' ${TFILE_INT_PAHEKO_ACTION} 2>/dev/null) - if [ ! -z "${REP_ID}" ] - then - [ "$OPTION" = "silence" ] || echo -e "${RED}Nombre de compte ${ACTION} ${NC}= ${GREEN} $(echo ${REP_ID} | wc -w) ${NC}" - if [ -f "$FILE_CREATEUSER" ] - then - mv $FILE_CREATEUSER $FILE_CREATEUSER.$(date +%d-%m-%Y-%H:%M:%S) - fi - echo "# -------- Fichier généré le $(date +%d-%m-%Y-%H:%M:%S) ----------">${FILE_CREATEUSER} - echo "${TEXTE}" >>${FILE_CREATEUSER} - for VAL_ID in ${REP_ID} - do - jq -c --argjson val "${VAL_ID}" '.results[] | select (.id == $val)' ${TFILE_INT_PAHEKO_ACTION} > ${TFILE_INT_PAHEKO_IDFILE} - for VAL_GAR in id_category action_auto nom email email_secours quota_disque admin_orga nom_orga responsable_organisation responsable_email agora cloud wordpress garradin docuwiki id_service - do - eval $VAL_GAR=$(jq .$VAL_GAR ${TFILE_INT_PAHEKO_IDFILE}) - done - ################################ - # test du mail valide en $domain - echo ${email} | grep -i "${domain}" >/dev/null || { echo "Erreur : le mail ${email} n'est pas en ${domain}"; exit ;} - ################################ - #comme tout va bien on continue - #on compte le nom de champs dans la zone nom pour gérer les noms et prénoms composés - # si il y a 3 champs, on associe les 2 premieres valeurs avec un - et on laisse le 3ème identique - # si il y a 4 champs on associe les 1 et le 2 avec un tiret et le 3 et 4 avec un tiret - # on met les champs nom_ok et prenom_ok à blanc - nom_ok="" - prenom_ok="" - # on regarde si le nom de l' orga est renseigné ou si le nom de l' orga est null et l' activité de membre est 7 (membre rattaché) - # si c' est le cas alors le nom est le nom de l' orga et le prénom est forcé à la valeur Organisation - if [[ "$nom_orga" = null ]] || [[ "$nom_orga" != null && "$id_service" = "7" ]] - then - [ "$OPTION" = "silence" ] || echo -e "${NC}Abonné ${GREEN}${nom}${NC}" - #si lactivité est membre rattaché on affiche a quelle orga il est rattaché - if [ "$id_service" = "7" ] && [ "$OPTION" != "silence" ] && [ "$nom_orga" != null ] - then - echo -e "${NC}Orga Rattachée : ${GREEN}${nom_orga}${NC}" + # $1 est une action; + ACTION=$1 + OPTION=$2 + # on envoie la requête sur le serveur paheko avec la clause à créer + curl -s ${URL_PAHEKO}/api/sql -d "SELECT * from users where action_auto='${ACTION}';" >>${TFILE_INT_PAHEKO_ACTION} + [ ! -z ${TFILE_INT_PAHEKO_ACTION} ] || { echo "probleme de fichier ${TFILE_INT_PAHEKO_ACTION}" ; exit 1;} + REP_ID=$(jq -c '.results[].id ' ${TFILE_INT_PAHEKO_ACTION} 2>/dev/null) + if [ ! -z "${REP_ID}" ] + then + [ "$OPTION" = "silence" ] || echo -e "${RED}Nombre de compte ${ACTION} ${NC}= ${GREEN} $(echo ${REP_ID} | wc -w) ${NC}" + if [ -f "$FILE_CREATEUSER" ] + then + mv $FILE_CREATEUSER $FILE_CREATEUSER.$(date +%d-%m-%Y-%H:%M:%S) + fi + echo "# -------- Fichier généré le $(date +%d-%m-%Y-%H:%M:%S) ----------">${FILE_CREATEUSER} + echo "${TEXTE}" >>${FILE_CREATEUSER} + for VAL_ID in ${REP_ID} + do + jq -c --argjson val "${VAL_ID}" '.results[] | select (.id == $val)' ${TFILE_INT_PAHEKO_ACTION} > ${TFILE_INT_PAHEKO_IDFILE} + for VAL_GAR in id_category action_auto nom email email_secours quota_disque admin_orga nom_orga responsable_organisation responsable_email agora cloud wordpress garradin docuwiki id_service + do + eval $VAL_GAR=$(jq .$VAL_GAR ${TFILE_INT_PAHEKO_IDFILE}) + done + ################################ + # test du mail valide en $domain : si oui on remplie la variable ERRMSG et on créé le fichier de notification" + echo ${email} | grep -i "${domain}" >/dev/null || { ERRMSG="- Le mail ${email} n'est pas en ${domain}";touch ${FILE_NOTIFICATION} 2>/dev/null;} + ################################ + #on compte le nom de champs dans la zone nom pour gérer les noms et prénoms composés + # si il y a 3 champs, on associe les 2 premieres valeurs avec un - et on laisse le 3ème identique + # si il y a 4 champs on associe les 1 et le 2 avec un tiret et le 3 et 4 avec un tiret + # on met les champs nom_ok et prenom_ok à blanc + nom_ok="" + prenom_ok="" + # on regarde si le nom de l' orga est renseigné ou si le nom de l' orga est null et l' activité de membre est 7 (membre rattaché) + # si c' est le cas alors le nom est le nom de l' orga et le prénom est forcé à la valeur Organisation + if [[ "$nom_orga" = null ]] || [[ "$nom_orga" != null && "$id_service" = "7" ]] + then + [ "$OPTION" = "silence" ] || echo -e "${NC}Abonné ${GREEN}${nom}${NC}" + COMPTE_NOM=$(echo $nom | awk -F' ' '{for (i=1; i != NF; i++); print i;}') + echo "${COMPTE_NOM}" + case "${COMPTE_NOM}" in + 0|1) + ERRMSG="${ERRMSG} - Il faut corriger le champ nom (il manque un nom ou prénom)" + ;; + 2) + nom_ok=$(echo $nom | awk -F' ' '{print $1}') + prenom_ok=$(echo $nom | awk -F' ' '{print $2}') + ;; + *) + nom_ok= + prenom_ok= + for i in ${nom}; do grep -q '^[A-Z]*$' <<<"${i}" && nom_ok="${nom_ok}${sep}${i}" || prenom_ok="${prenom_ok}${sep}${i}"; done + nom_ok="${nom_ok#${sep}}" + prenom_ok="${prenom_ok#${sep}}" + if [ -z "${nom_ok}" ] || [ -z "${prenom_ok}" ] + then + ERRMSG="${ERRMSG} - Il faut corriger le champ nom qui contient plus de 2 infos" + fi + esac + # comme l' orga est à null nom orga est a vide, pas d' admin orga, on met dans l' agora générale + # pas d' équipe agora et de groupe nextcloud spécifique + nom_orga=" " + admin_orga="N" + nc_base="O" + equipe_agora=" " + groupe_nc_base=" " + else + # L' orga est renseigné dans paheko donc les nom et prenoms sont forcé a nom_orga et Organisation + # un équipe agora portera le nom de l' orga, le compte ne sera pas créé dans le nextcloud général + # et le compte est admin de son orga + nom_orga=$(echo $nom_orga | tr [:upper:] [:lower:]) + [ "$OPTION" = "silence" ] || echo -e "${NC}Orga : ${GREEN}${nom_orga}${NC}" + nom_ok=$nom_orga + # test des caractères autorisés dans le nom d' orga: lettres, chiffres et/ou le tiret + if ! [[ "${nom_ok}" =~ ^[[:alnum:]-]+$ ]] + then + ERRMSG="${ERRMSG} - L' orga doit être avec des lettres et/ou des chiffres. Le séparateur doit être le tiret" + fi + prenom_ok=organisation + equipe_agora=$nom_orga + groupe_nc_base=" " + nc_base="N" + admin_orga="O" + fi + #On met le mail et le mail de secours en minuscules + email=$(echo $email | tr [:upper:] [:lower:]) + email_secours=$(echo $email_secours | tr [:upper:] [:lower:]) + # Pour le reste on renomme les null en N ( non ) et les valeurs 1 en O ( Oui) + cloud=$(echo $cloud | sed -e 's/0/N/g' | sed -e 's/1/O/g') + paheko=$(echo $garradin | sed -e 's/0/N/g' | sed -e 's/1/O/g') + wordpress=$(echo $wordpress | sed -e 's/0/N/g' | sed -e 's/1/O/g') + agora=$(echo $agora | sed -e 's/0/N/g' | sed -e 's/1/O/g') + docuwiki=$(echo $docuwiki | sed -e 's/0/N/g' | sed -e 's/1/O/g') + # et enfin on écrit dans le fichier si pas d'erreurs + if ! [[ -z ${ERRMSG} ]] + then + OLDIFS=${IFS} + IFS='' + # si l'envoi de mail est ok et qu'on a pas déjà écrit alors on envoi un mail + if [[ "${IP_MAIL}" = "true" && "$(cat ${FILE_NOTIFICATION})" -ne "1" ]] + then + ExpMail ${IP_MAILDEST} "Erreur dans la fiche paheko" "${ERRMSG}" + PostMattermost "Erreur dans la fiche paheko ${email}" + echo 1 >${FILE_NOTIFICATION} + fi + IFS=${OLDIFS} + [ "$OPTION" = "silence" ] || echo ${ERRMSG} + exit + else + # on créé le fichier et on met 0 le fichier de notification + echo "$nom_ok;$prenom_ok;$email;$email_secours;$nom_orga;$admin_orga;$cloud;$paheko;$wordpress;$agora;$docuwiki;$nc_base;$groupe_nc_base;$equipe_agora;$quota_disque">>${FILE_CREATEUSER} + #on met 0 dans le fichier de notifiction + echo 0 >${FILE_NOTIFICATION} + fi + done + else + [ "$OPTION" = "silence" ] || echo "Rien à créer" + exit 2 fi - COMPTE_NOM=$(echo $nom | awk -F' ' '{for (i=1; i != NF; i++); print i;}') - case "${COMPTE_NOM}" in - 0|1) - echo "Il faut corriger le champ nom (il manque un nom ou prénom) de paheko" - echo "je quitte et supprime le fichier ${FILE_CREATEUSER}" - rm -f $FILE_CREATEUSER - exit 2 - ;; - 2) - nom_ok=$(echo $nom | awk -F' ' '{print $1}') - prenom_ok=$(echo $nom | awk -F' ' '{print $2}') - ;; - *) - nom_ok= - prenom_ok= - for i in ${nom}; do grep -q '^[A-Z]*$' <<<"${i}" && nom_ok="${nom_ok}${sep}${i}" || prenom_ok="${prenom_ok}${sep}${i}"; done - nom_ok="${nom_ok#${sep}}" - prenom_ok="${prenom_ok#${sep}}" - if [ -z "${nom_ok}" ] || [ -z "${prenom_ok}" ]; then - ERRMSG="Erreur : Il faut corriger le champ nom qui contient plus de 2 infos dans paheko" - OLDIFS=${IFS} - IFS='' - [ "${IP_MAIL}" = "true" ] && ExpMail ${IP_MAILDEST} "Erreur dans la fiche paheko" "${ERRMSG}" || echo ${ERRMSG} - rm -f $FILE_CREATEUSER - exit - fi - esac - # comme l' orga est à null nom orga est a vide, pas d' admin orga, on met dans l' agora générale - # pas d' équipe agora et de groupe nextcloud spécifique - nom_orga=" " - admin_orga="N" - nc_base="O" - equipe_agora=" " - groupe_nc_base=" " - else - # L' orga est renseigné dans paheko donc les nom et prenoms sont forcé a nom_orga et Organisation - # un équipe agora portera le nom de l' orga, le compte ne sera pas créé dans le nextcloud général - # et le compte est admin de son orga - nom_orga=$(echo $nom_orga | tr [:upper:] [:lower:]) - [ "$OPTION" = "silence" ] || echo -e "${NC}Orga : ${GREEN}${nom_orga}${NC}" - nom_ok=$nom_orga - # test des caractères autorisés dans le nom d' orga: lettres, chiffres et/ou le tiret - if ! [[ "${nom_ok}" =~ ^[[:alnum:]-]+$ ]] - then - OLDIFS=${IFS} - IFS='' - ERRMSG="Erreur : l' orga doit être avec des lettres et/ou des chiffres. Le séparateur doit être le tiret" - [ "${IP_MAIL}" = "true" ] && ExpMail ${IP_MAILDEST} "Erreur dans la fiche Paheko" "${ERRMSG}" || echo ${ERRMSG} - rm -f $FILE_CREATEUSER - exit 2 - fi - prenom_ok=organisation - equipe_agora=$nom_orga - groupe_nc_base=" " - nc_base="N" - admin_orga="O" - fi - #On met le mail et le mail de secours en minuscules - email=$(echo $email | tr [:upper:] [:lower:]) - email_secours=$(echo $email_secours | tr [:upper:] [:lower:]) - # Pour le reste on renomme les null en N ( non ) et les valeurs 1 en O ( Oui) - cloud=$(echo $cloud | sed -e 's/0/N/g' | sed -e 's/1/O/g') - paheko=$(echo $garradin | sed -e 's/0/N/g' | sed -e 's/1/O/g') - wordpress=$(echo $wordpress | sed -e 's/0/N/g' | sed -e 's/1/O/g') - agora=$(echo $agora | sed -e 's/0/N/g' | sed -e 's/1/O/g') - docuwiki=$(echo $docuwiki | sed -e 's/0/N/g' | sed -e 's/1/O/g') - # et enfin on écrit dans le fichier - echo "$nom_ok;$prenom_ok;$email;$email_secours;$nom_orga;$admin_orga;$cloud;$paheko;$wordpress;$agora;$docuwiki;$nc_base;$groupe_nc_base;$equipe_agora;$quota_disque">>${FILE_CREATEUSER} - done - else - [ "$OPTION" = "silence" ] || echo "Rien à créer" - exit 2 - fi } # Main +# on créé le fichier de notif au cas ou il serait éffacé +touch ${FILE_NOTIFICATION} >/dev/null 2>&1 Int_paheko_Action "A créer" "silence" exit 0