diff --git a/bin/gestUsers.sh b/bin/gestUsers.sh index 27e62fa..ccf03a8 100755 --- a/bin/gestUsers.sh +++ b/bin/gestUsers.sh @@ -14,7 +14,7 @@ setKazVars . $KAZ_KEY_DIR/env-sympaServ . $KAZ_KEY_DIR/env-paheko -VERSION="20-10-2026" +VERSION="01-11-2026" PRG=$(basename $0) RACINE=$(echo $PRG | awk '{print $1}') IFS=' ' @@ -142,8 +142,8 @@ searchMattermost() { . $KAZ_KEY_DIR/env-mattermostAdmin curl -s -H "Authorization: Bearer ${mattermost_token}" "${URL_AGORA_API}/users/email/${1}" >${TFILE_CPT_MATTERMOST} 2>/dev/null REP_SEARCH_MATTERMOST=$(jq -r .id ${TFILE_CPT_MATTERMOST}) - if [ ! -z ${REP_SEARCH_MATTERMOST} ] - then + if [ ! -z ${REP_SEARCH_MATTERMOST} ] + then if [ "$2" = "DETAILS" ] then echo -e -n "${RED} Compte : ${GREEN} " ; jq -r .username ${TFILE_CPT_MATTERMOST} @@ -152,9 +152,9 @@ searchMattermost() { else echo "${REP_SEARCH_MATTERMOST}" fi - else - echo "" - fi + else + echo "" + fi } @@ -163,9 +163,9 @@ infoEmail() { while : do clear - echo "------------------------------------------------" + echo "------------------------------------------------" printKazMsg "${ACTION_EN_COURS}" - echo "------------------------------------------------" + echo "------------------------------------------------" read -p "Alias ou Mail ? (R pour retour ou M/A [M] :" RINFOMAIL case ${RINFOMAIL} in "" | M | m ) @@ -270,9 +270,12 @@ infoEmail() { } searchDestroy() { - ACTION_EN_COURS="Suppression d'un compte" + ACTION_EN_COURS="Suppression d'un compte" + DEL_AUTO=${1} + DEL_MAIL=${2} + if [ "${DEL_AUTO}" != "TRUE" ] + then clear - #TODO pourquoi REP_SEARCH_DESTROY=$(searchEmail) ne marche pas et fait déconner la fonction search_mail, j' en suis la à m' esbaudir CHOIX_MAIL="" searchEmail REP_SEARCH_DESTROY=$CHOIX_MAIL @@ -284,29 +287,47 @@ searchDestroy() { echo "Mail de secours = ${MAIL_SECOURS}" echo "Domaine en cours : ${DOMAINE_EN_COURS}" echo "--------------------------------- SUPPRESION ----------------------------------------" + else + MAIL_SECOURS=$(ldapsearch -H ldap://${LDAP_IP} \ + -x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \ + -w "${LDAP_ADMIN_PASSWORD}" \ + -b "${ldap_root}" "(&(objectclass=inetOrgPerson)(cn=*${DEL_MAIL}*))" | grep ^mailDeSecours | sed -e 's/^mailDeSecours: //') + REP_SEARCH_DESTROY=$(ldapsearch -H ldap://${LDAP_IP} \ + -x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \ + -w "${LDAP_ADMIN_PASSWORD}" \ + -b "${ldap_root}" "(&(objectclass=inetOrgPerson)(cn=*${DEL_MAIL}*))" | grep ^cn | sed -e 's/cn: //' ) + [ "${REP_SEARCH_DESTROY}" = "" ] && exit 1 + fi while : do - echo "----------------------------------------------------------------------" - printKazMsg "${GREEN}${ACTION_EN_COURS}${NC}" - echo "----------------------------------------------------------------------" - echo -e "${BLINK} TOUT RETOUR EN ARRIERE EST IMPOSSIBLE ${NC}" - read -p "ON CONTINUE ? [ o / n ]: " SEARCH_DESTROY_INPUT - if [ "$SEARCH_DESTROY_INPUT" = "n" ] || [ "$SEARCH_DESTROY_INPUT" = "N" ] + # Si on est en intarctif on affiche la demande de validation + if [ "${DEL_AUTO}" != "TRUE" ] then - searchDestroy + echo "----------------------------------------------------------------------" + printKazMsg "${GREEN}${ACTION_EN_COURS}${NC}" + echo "----------------------------------------------------------------------" + echo -e "${BLINK} TOUT RETOUR EN ARRIERE EST IMPOSSIBLE ${NC}" + read -p "ON CONTINUE ? [ o / n ]: " SEARCH_DESTROY_INPUT + if [ "$SEARCH_DESTROY_INPUT" = "n" ] || [ "$SEARCH_DESTROY_INPUT" = "N" ] + then + searchDestroy + fi + else + # sinon on force la réponse à oui + SEARCH_DESTROY_INPUT="o" fi if [ "$SEARCH_DESTROY_INPUT" = "o" ] || [ "$SEARCH_DESTROY_INPUT" = "O" ] then #################################################################################################################### - # si le domaine en cours est Kaz alors on cherche dans mattermost, dans nextcloud et on supprime - # le mail dans sympa + # si le domaine en cours est Kaz alors on cherche dans mattermost, dans nextcloud et on supprime + # le mail dans sympa #################################################################################################################### if [ "${DOMAINE_EN_COURS}" = "${domain}" ] then MM_USER_ID=$(searchMattermost $REP_SEARCH_DESTROY) if [ ! -z ${MM_USER_ID} ] then - echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} trouvé dans mattermost ${NC}" + [ "${DEL_AUTO}" != "TRUE" ] && echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} trouvé dans mattermost ${NC}" status_del=$(curl -s --request DELETE \ --header 'Accept: application/json' \ -H "Authorization: Bearer ${mattermost_token}" \ @@ -315,80 +336,80 @@ searchDestroy() { then printKazMsg "Suppresion ok" else - printKazError -e "Erreur de suppression" - fi - echo " ----------------- " + printKazError -e "Erreur de suppression" + fi + echo " ----------------- " else - echo "Rien a supprimer dans mattermost" + [ "${DEL_AUTO}" != "TRUE" ] && echo "Rien a supprimer dans mattermost" fi echo -e "${NC}" echo -e "Recherche de ${GREEN} ${REP_SEARCH_DESTROY} ${NC} dans nextcloud" USER_NEXTCLOUD_SUPPR=$(curl -s -X GET -H 'OCS-APIRequest:true' $httpProto://admin:$NEXTCLOUD_ADMIN_PASSWORD@$URL_NC/ocs/v1.php/cloud/users?search=${REP_SEARCH_DESTROY} | grep element | sed -s 's/[ \<\>\/]//g' | sed 's/element//g') if [ ! -z ${USER_NEXTCLOUD_SUPPR} ] then - printKazMsg "le user trouvé est : ${USER_NEXTCLOUD_SUPPR}" - echo -e "${RED} Suppresion de ${USER_NEXTCLOUD_SUPPR}" + if [ "${DEL_AUTO}" != "TRUE" ] + then + [ "${DEL_AUTO}" != "TRUE" ] && printKazMsg "le user trouvé est : ${USER_NEXTCLOUD_SUPPR}" + [ "${DEL_AUTO}" != "TRUE" ] && echo -e "${RED} Suppresion de ${USER_NEXTCLOUD_SUPPR}" + fi curl -H 'OCS-APIREQUEST: true' -X DELETE $httpProto://admin:$NEXTCLOUD_ADMIN_PASSWORD@$URL_NC/ocs/v1.php/cloud/users/${USER_NEXTCLOUD_SUPPR} >/dev/null 2>&1 if [ "$?" -eq "0" ] then - printKazMsg "Suppresion ok" - else - printKazError "Erreur de suppression" + printKazMsg "Suppresion ok" + else + printKazError "Erreur de suppression" fi else - printKazMsg "Rien à supprimer dans Nextcloud" + [ "${DEL_AUTO}" != "TRUE" ] && printKazMsg "Rien à supprimer dans Nextcloud" fi - echo -e "${NC}" - echo "" - echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} et ${MAIL_SECOURS} dans la liste info de sympa" - echo -e "${NC}" - echo "" - #avec ancien client soap - #docker exec -ti sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=USER_EMAIL=${LISTMASTER} --service=del --service_parameters="${NL_LIST},${REP_SEARCH_DESTROY}" - #docker exec -ti sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=USER_EMAIL=${LISTMASTER} --service=del --service_parameters="${NL_LIST},${MAIL_SECOURS}" - #avec nouveau client soap - docker exec -i sympaServ sympa test soap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=\"USER_EMAIL=${LISTMASTER}\" --service=del --service_parameters=\"${NL_LIST},${REP_SEARCH_DESTROY}\" ${httpProto}://${URL_LISTE}/sympasoap - docker exec -i sympaServ sympa test soap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=\"USER_EMAIL=${LISTMASTER}\" --service=del --service_parameters=\"${NL_LIST},${MAIL_SECOURS}\" ${httpProto}://${URL_LISTE}/sympasoap + echo -e "${NC}" + echo "" + [ "${DEL_AUTO}" != "TRUE" ] && echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} et ${MAIL_SECOURS} dans la liste info de sympa" + echo -e "${NC}" + echo "" + docker exec -i sympaServ sympa test soap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=\"USER_EMAIL=${LISTMASTER}\" --service=del --service_parameters=\"${NL_LIST},${REP_SEARCH_DESTROY}\" ${httpProto}://${URL_LISTE}/sympasoap + docker exec -i sympaServ sympa test soap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=\"USER_EMAIL=${LISTMASTER}\" --service=del --service_parameters=\"${NL_LIST},${MAIL_SECOURS}\" ${httpProto}://${URL_LISTE}/sympasoap - echo -e "${NC}" - echo "" - echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} dans le serveur de mail" - echo -e "${NC}" - echo "" - else - echo "-------------------------------" - echo "Le domaine n' est pas Kaz.bzh" - echo "-------------------------------" + echo -e "${NC}" + echo "" + [ "${DEL_AUTO}" != "TRUE" ] && echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} dans le serveur de mail" + echo -e "${NC}" + echo "" fi ############################## - Fin du cas de Kaz ########################################################################################## - echo -e "${NC}" - echo "" - echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} dans le ldap" - echo -e "${NC}" - echo "" - ldapdelete -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${LDAP_ADMIN_PASSWORD}" "cn=${REP_SEARCH_DESTROY},ou=users,${ldap_root}" - if [ "$?" -eq "0" ] - then - printKazMsg "Suppresion ok" - cd ${DOCK_VOL}/postfix_mailData/_data/${DOMAINE_EN_COURS} - USER_DEL_MAIL=$(echo ${REP_SEARCH_DESTROY} | sed -e 's/@.*//') - echo "Suppression des données ${USER_DEL_MAIL}" - rm -rf ${USER_DEL_MAIL} 2>/dev/null - sleep 2 - - else - printKazError "Erreur de suppression" - fi - printKazMsg "Envoi d'un message dans mattermost pour la suppression du compte" - PostMattermost "Le compte ${REP_SEARCH_DESTROY} est supprimé , mail envoyé à ${MAIL_SECOURS}" "Creation-Comptes" - MAIL_SUPPR="Le compte ${REP_SEARCH_DESTROY} est supprimé" - OLDIFS=${IFS} - IFS='' - ExpMail ${MAIL_SECOURS} "Suppression de Compte" ${MAIL_SUPPR} - echo -e "${NC}" - IFS=${OLDIFS} + echo -e "${NC}" + echo "" + [ "${DEL_AUTO}" != "TRUE" ] && echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} dans le ldap" + echo -e "${NC}" + echo "" + ldapdelete -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${LDAP_ADMIN_PASSWORD}" "cn=${REP_SEARCH_DESTROY},ou=users,${ldap_root}" + if [ "$?" -eq "0" ] + then + [ "${DEL_AUTO}" != "TRUE" ] && printKazMsg "Suppresion ok" + cd ${DOCK_VOL}/postfix_mailData/_data/${DOMAINE_EN_COURS} + USER_DEL_MAIL=$(echo ${REP_SEARCH_DESTROY} | sed -e 's/@.*//') + [ "${DEL_AUTO}" != "TRUE" ] && echo "Suppression des données ${USER_DEL_MAIL}" + rm -rf ${USER_DEL_MAIL} 2>/dev/null + sleep 2 + else + [ "${DEL_AUTO}" != "TRUE" ] && printKazError "Erreur de suppression" + fi + [ "${DEL_AUTO}" != "TRUE" ] && printKazMsg "Envoi d'un message dans mattermost pour la suppression du compte" + PostMattermost "Le compte ${REP_SEARCH_DESTROY} est supprimé , mail envoyé à ${MAIL_SECOURS}" "Creation-Comptes" + MAIL_SUPPR="Le compte ${REP_SEARCH_DESTROY} est supprimé" + OLDIFS=${IFS} + IFS='' + ExpMail ${MAIL_SECOURS} "Suppression de Compte" ${MAIL_SUPPR} + echo -e "${NC}" + IFS=${OLDIFS} + # si on est en interactif on affiche le message + if [ "${DEL_AUTO}" != "TRUE" ] + then read -p " ---------------------- Appuyer sur une touche pour continuer -------------------------" searchDestroy + else + exit 0 + fi fi done } @@ -712,19 +733,36 @@ createMailAuto() { if [ "$#" -ne "3" ] then - echo "$0 pas assez d'arguments" - PostMattermost "Erreur de script $0 ,constacter les sysadmins " "Creation-Comptes" + echo "CreateMail : $0 pas assez d'arguments" + PostMattermost "CreateMail : Erreur de script $0 ,constacter les sysadmins " "Creation-Comptes" exit 1 fi if [[ ${2} =~ ${regexMail} ]] && [[ ${3} =~ ${regexMail} ]] then createMail TRUE ${2} ${3} else - echo "Les mails sont invalides" - PostMattermost "Erreur de script $0 ,les mails demandés sont malformés" "Creation-Comptes" + echo "Createmail : Les mails sont invalides" + PostMattermost "CreateMail : Erreur de script $0 ,les mails demandés sont malformés" "Creation-Comptes" fi } +delMailauto() +{ + if [ "$#" -ne "2" ] + then + echo "DelMail : $0 pas assez d'arguments" + PostMattermost "Delmail : Erreur de script $0 ,constacter les sysadmins " "Creation-Comptes" + exit 1 + fi + if [[ ${2} =~ ${regexMail} ]] + then + searchDestroy TRUE ${2} + else + echo "DelMail : Les mails sont invalides" + PostMattermost "Delmail : Erreur de script $0 ,les mails demandés sont malformés" "Creation-Comptes" + fi + +} createAlias() { ACTION_EN_COURS="création d' un alias de messagerie" fait=0 @@ -1226,11 +1264,13 @@ updateUser() { ############################################################################################################## ############################################################################################################## usage () { - echo "$PRG [-c] [-h] [-r] [-v]" + echo "$PRG [-c] [-d] [-h] [-r] [-v]" echo "script de gestion des kaznautes" echo " -c permet de créer un mail avec son mail de secours en non intereactif" echo " syntax : $0 -c mail mailsecours" echo " exemple $0 user@kaz.bzh user@apple.fr" + echo " -d permet de supprimer un compte en non intereactif" + echo " syntax : $0 -d mail" echo " -r permet de reset un mot de passe de compte en mode non interactif" echo " syntax : $0 -r mail" echo " -h aide sur ce script" @@ -1340,6 +1380,10 @@ case "$1" in [[ ${2} =~ ${regexMail} ]] && gestPassword $2 || echo "le 2ème argument doit être un mail" exit ;; + '-d' ) + delMailauto $@ + exit + ;; esac # on teste la présence du domaine du site dans le fichier autorized-domains.txt