modif des notifications en cas d'erreurs par mail et sur mattermost
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user