ajout de la suppression en non interactif

This commit is contained in:
Didier committed 2026-11-01 11:49:41 +01:00
1 parent 390b0e5db2
commit 4cd82fb5bf
1 file changed
+125 -81
+125 -81
View File
@@ -14,7 +14,7 @@ setKazVars
. $KAZ_KEY_DIR/env-sympaServ . $KAZ_KEY_DIR/env-sympaServ
. $KAZ_KEY_DIR/env-paheko . $KAZ_KEY_DIR/env-paheko
VERSION="20-10-2026" VERSION="01-11-2026"
PRG=$(basename $0) PRG=$(basename $0)
RACINE=$(echo $PRG | awk '{print $1}') RACINE=$(echo $PRG | awk '{print $1}')
IFS=' ' IFS=' '
@@ -142,8 +142,8 @@ searchMattermost() {
. $KAZ_KEY_DIR/env-mattermostAdmin . $KAZ_KEY_DIR/env-mattermostAdmin
curl -s -H "Authorization: Bearer ${mattermost_token}" "${URL_AGORA_API}/users/email/${1}" >${TFILE_CPT_MATTERMOST} 2>/dev/null 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}) REP_SEARCH_MATTERMOST=$(jq -r .id ${TFILE_CPT_MATTERMOST})
if [ ! -z ${REP_SEARCH_MATTERMOST} ] if [ ! -z ${REP_SEARCH_MATTERMOST} ]
then then
if [ "$2" = "DETAILS" ] if [ "$2" = "DETAILS" ]
then then
echo -e -n "${RED} Compte : ${GREEN} " ; jq -r .username ${TFILE_CPT_MATTERMOST} echo -e -n "${RED} Compte : ${GREEN} " ; jq -r .username ${TFILE_CPT_MATTERMOST}
@@ -152,9 +152,9 @@ searchMattermost() {
else else
echo "${REP_SEARCH_MATTERMOST}" echo "${REP_SEARCH_MATTERMOST}"
fi fi
else else
echo "" echo ""
fi fi
} }
@@ -163,9 +163,9 @@ infoEmail() {
while : while :
do do
clear clear
echo "------------------------------------------------" echo "------------------------------------------------"
printKazMsg "${ACTION_EN_COURS}" printKazMsg "${ACTION_EN_COURS}"
echo "------------------------------------------------" echo "------------------------------------------------"
read -p "Alias ou Mail ? (R pour retour ou M/A [M] :" RINFOMAIL read -p "Alias ou Mail ? (R pour retour ou M/A [M] :" RINFOMAIL
case ${RINFOMAIL} in case ${RINFOMAIL} in
"" | M | m ) "" | M | m )
@@ -270,9 +270,12 @@ infoEmail() {
} }
searchDestroy() { 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 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="" CHOIX_MAIL=""
searchEmail searchEmail
REP_SEARCH_DESTROY=$CHOIX_MAIL REP_SEARCH_DESTROY=$CHOIX_MAIL
@@ -284,29 +287,47 @@ searchDestroy() {
echo "Mail de secours = ${MAIL_SECOURS}" echo "Mail de secours = ${MAIL_SECOURS}"
echo "Domaine en cours : ${DOMAINE_EN_COURS}" echo "Domaine en cours : ${DOMAINE_EN_COURS}"
echo "--------------------------------- SUPPRESION ----------------------------------------" 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 : while :
do do
echo "----------------------------------------------------------------------" # Si on est en intarctif on affiche la demande de validation
printKazMsg "${GREEN}${ACTION_EN_COURS}${NC}" if [ "${DEL_AUTO}" != "TRUE" ]
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 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 fi
if [ "$SEARCH_DESTROY_INPUT" = "o" ] || [ "$SEARCH_DESTROY_INPUT" = "O" ] if [ "$SEARCH_DESTROY_INPUT" = "o" ] || [ "$SEARCH_DESTROY_INPUT" = "O" ]
then then
#################################################################################################################### ####################################################################################################################
# si le domaine en cours est Kaz alors on cherche dans mattermost, dans nextcloud et on supprime # si le domaine en cours est Kaz alors on cherche dans mattermost, dans nextcloud et on supprime
# le mail dans sympa # le mail dans sympa
#################################################################################################################### ####################################################################################################################
if [ "${DOMAINE_EN_COURS}" = "${domain}" ] if [ "${DOMAINE_EN_COURS}" = "${domain}" ]
then then
MM_USER_ID=$(searchMattermost $REP_SEARCH_DESTROY) MM_USER_ID=$(searchMattermost $REP_SEARCH_DESTROY)
if [ ! -z ${MM_USER_ID} ] if [ ! -z ${MM_USER_ID} ]
then 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 \ status_del=$(curl -s --request DELETE \
--header 'Accept: application/json' \ --header 'Accept: application/json' \
-H "Authorization: Bearer ${mattermost_token}" \ -H "Authorization: Bearer ${mattermost_token}" \
@@ -315,80 +336,80 @@ searchDestroy() {
then then
printKazMsg "Suppresion ok" printKazMsg "Suppresion ok"
else else
printKazError -e "Erreur de suppression" printKazError -e "Erreur de suppression"
fi fi
echo " ----------------- " echo " ----------------- "
else else
echo "Rien a supprimer dans mattermost" [ "${DEL_AUTO}" != "TRUE" ] && echo "Rien a supprimer dans mattermost"
fi fi
echo -e "${NC}" echo -e "${NC}"
echo -e "Recherche de ${GREEN} ${REP_SEARCH_DESTROY} ${NC} dans nextcloud" 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') 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} ] if [ ! -z ${USER_NEXTCLOUD_SUPPR} ]
then then
printKazMsg "le user trouvé est : ${USER_NEXTCLOUD_SUPPR}" if [ "${DEL_AUTO}" != "TRUE" ]
echo -e "${RED} Suppresion de ${USER_NEXTCLOUD_SUPPR}" 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 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" ] if [ "$?" -eq "0" ]
then then
printKazMsg "Suppresion ok" printKazMsg "Suppresion ok"
else else
printKazError "Erreur de suppression" printKazError "Erreur de suppression"
fi fi
else else
printKazMsg "Rien à supprimer dans Nextcloud" [ "${DEL_AUTO}" != "TRUE" ] && printKazMsg "Rien à supprimer dans Nextcloud"
fi fi
echo -e "${NC}" echo -e "${NC}"
echo "" echo ""
echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} et ${MAIL_SECOURS} dans la liste info de sympa" [ "${DEL_AUTO}" != "TRUE" ] && echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} et ${MAIL_SECOURS} dans la liste info de sympa"
echo -e "${NC}" echo -e "${NC}"
echo "" echo ""
#avec ancien 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 -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 -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
#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 -e "${NC}"
echo "" echo ""
echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} dans le serveur de mail" [ "${DEL_AUTO}" != "TRUE" ] && echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} dans le serveur de mail"
echo -e "${NC}" echo -e "${NC}"
echo "" echo ""
else
echo "-------------------------------"
echo "Le domaine n' est pas Kaz.bzh"
echo "-------------------------------"
fi fi
############################## - Fin du cas de Kaz ########################################################################################## ############################## - Fin du cas de Kaz ##########################################################################################
echo -e "${NC}" echo -e "${NC}"
echo "" echo ""
echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} dans le ldap" [ "${DEL_AUTO}" != "TRUE" ] && echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} dans le ldap"
echo -e "${NC}" echo -e "${NC}"
echo "" 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}" 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" ] if [ "$?" -eq "0" ]
then then
printKazMsg "Suppresion ok" [ "${DEL_AUTO}" != "TRUE" ] && printKazMsg "Suppresion ok"
cd ${DOCK_VOL}/postfix_mailData/_data/${DOMAINE_EN_COURS} cd ${DOCK_VOL}/postfix_mailData/_data/${DOMAINE_EN_COURS}
USER_DEL_MAIL=$(echo ${REP_SEARCH_DESTROY} | sed -e 's/@.*//') USER_DEL_MAIL=$(echo ${REP_SEARCH_DESTROY} | sed -e 's/@.*//')
echo "Suppression des données ${USER_DEL_MAIL}" [ "${DEL_AUTO}" != "TRUE" ] && echo "Suppression des données ${USER_DEL_MAIL}"
rm -rf ${USER_DEL_MAIL} 2>/dev/null rm -rf ${USER_DEL_MAIL} 2>/dev/null
sleep 2 sleep 2
else
else [ "${DEL_AUTO}" != "TRUE" ] && printKazError "Erreur de suppression"
printKazError "Erreur de suppression" fi
fi [ "${DEL_AUTO}" != "TRUE" ] && printKazMsg "Envoi d'un message dans mattermost pour la suppression du compte"
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"
PostMattermost "Le compte ${REP_SEARCH_DESTROY} est supprimé , mail envoyé à ${MAIL_SECOURS}" "Creation-Comptes" MAIL_SUPPR="Le compte ${REP_SEARCH_DESTROY} est supprimé"
MAIL_SUPPR="Le compte ${REP_SEARCH_DESTROY} est supprimé" OLDIFS=${IFS}
OLDIFS=${IFS} IFS=''
IFS='' ExpMail ${MAIL_SECOURS} "Suppression de Compte" ${MAIL_SUPPR}
ExpMail ${MAIL_SECOURS} "Suppression de Compte" ${MAIL_SUPPR} echo -e "${NC}"
echo -e "${NC}" IFS=${OLDIFS}
IFS=${OLDIFS} # si on est en interactif on affiche le message
if [ "${DEL_AUTO}" != "TRUE" ]
then
read -p " ---------------------- Appuyer sur une touche pour continuer -------------------------" read -p " ---------------------- Appuyer sur une touche pour continuer -------------------------"
searchDestroy searchDestroy
else
exit 0
fi
fi fi
done done
} }
@@ -712,19 +733,36 @@ createMailAuto()
{ {
if [ "$#" -ne "3" ] if [ "$#" -ne "3" ]
then then
echo "$0 pas assez d'arguments" echo "CreateMail : $0 pas assez d'arguments"
PostMattermost "Erreur de script $0 ,constacter les sysadmins " "Creation-Comptes" PostMattermost "CreateMail : Erreur de script $0 ,constacter les sysadmins " "Creation-Comptes"
exit 1 exit 1
fi fi
if [[ ${2} =~ ${regexMail} ]] && [[ ${3} =~ ${regexMail} ]] if [[ ${2} =~ ${regexMail} ]] && [[ ${3} =~ ${regexMail} ]]
then then
createMail TRUE ${2} ${3} createMail TRUE ${2} ${3}
else else
echo "Les mails sont invalides" echo "Createmail : Les mails sont invalides"
PostMattermost "Erreur de script $0 ,les mails demandés sont malformés" "Creation-Comptes" PostMattermost "CreateMail : Erreur de script $0 ,les mails demandés sont malformés" "Creation-Comptes"
fi 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() { createAlias() {
ACTION_EN_COURS="création d' un alias de messagerie" ACTION_EN_COURS="création d' un alias de messagerie"
fait=0 fait=0
@@ -1226,11 +1264,13 @@ updateUser() {
############################################################################################################## ##############################################################################################################
############################################################################################################## ##############################################################################################################
usage () { usage () {
echo "$PRG [-c] [-h] [-r] [-v]" echo "$PRG [-c] [-d] [-h] [-r] [-v]"
echo "script de gestion des kaznautes" echo "script de gestion des kaznautes"
echo " -c permet de créer un mail avec son mail de secours en non intereactif" echo " -c permet de créer un mail avec son mail de secours en non intereactif"
echo " syntax : $0 -c mail mailsecours" echo " syntax : $0 -c mail mailsecours"
echo " exemple $0 user@kaz.bzh user@apple.fr" 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 " -r permet de reset un mot de passe de compte en mode non interactif"
echo " syntax : $0 -r mail" echo " syntax : $0 -r mail"
echo " -h aide sur ce script" 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" [[ ${2} =~ ${regexMail} ]] && gestPassword $2 || echo "le 2ème argument doit être un mail"
exit exit
;; ;;
'-d' )
delMailauto $@
exit
;;
esac esac
# on teste la présence du domaine du site dans le fichier autorized-domains.txt # on teste la présence du domaine du site dans le fichier autorized-domains.txt