From c252444d88dfb6c3440cbe185cc17475d3250e1b Mon Sep 17 00:00:00 2001 From: didier Date: Tue, 20 Oct 2026 20:32:58 +0200 Subject: [PATCH] iajout du -r reset mot de passe en mode non interctif --- bin/gestUsers.sh | 160 ++++++++++++++++++++++++++--------------------- 1 file changed, 90 insertions(+), 70 deletions(-) diff --git a/bin/gestUsers.sh b/bin/gestUsers.sh index 8d9f353..3a619c2 100755 --- a/bin/gestUsers.sh +++ b/bin/gestUsers.sh @@ -3,8 +3,8 @@ # Ki : Did # koi : gestion globale des users Kaz mais aussi les users d'autres domaines hébergés -#KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd) -KAZ_ROOT=/kaz +KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd) +#KAZ_ROOT=/kaz . $KAZ_ROOT/bin/.commonFunctions.sh setKazVars @@ -14,7 +14,7 @@ setKazVars . $KAZ_KEY_DIR/env-sympaServ . $KAZ_KEY_DIR/env-paheko -VERSION="04-10-2026" +VERSION="20-10-2026" PRG=$(basename $0) RACINE=$(echo $PRG | awk '{print $1}') IFS=' ' @@ -205,10 +205,10 @@ infoEmail() { ldapsearch -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${LDAP_ADMIN_PASSWORD}" -b "cn=${CHOIX_MAIL},ou=users,${ldap_root}" | grep -i mailquota | cut -c 11-60 echo -ne "${NC}" echo -ne " - Place disque des mails : " - cd ${DOCK_VOL}/postfix_mailData/_data/${DOMAINE_EN_COURS} - echo -ne "${GREEN}" - du -sh $(echo ${CHOIX_MAIL} | sed -e 's/@.*//') | cut -c 1-4 - echo -ne "${NC}" + cd ${DOCK_VOL}/postfix_mailData/_data/${DOMAINE_EN_COURS} + echo -ne "${GREEN}" + [ -d ${CHOIX_MAIL} ] && du -sh $(echo ${CHOIX_MAIL} | sed -e 's/@.*//') | cut -c 1-4 + echo -ne "${NC}" echo -n " - Quota Nextcloud (Ldap) : " echo -ne "${GREEN}" ldapsearch -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${LDAP_ADMIN_PASSWORD}" -b "cn=${CHOIX_MAIL},ou=users,${ldap_root}" | grep -i nextcloudquota | cut -c 17-60 @@ -395,11 +395,13 @@ searchDestroy() { gestPassword() { ACTION_EN_COURS="Gestion du mot de passe d'un compte" - searchEmail + # si on a passé un argument à la fonction on force le mail + # on est mode non interactif + [ -z "${1}" ] && searchEmail || CHOIX_MAIL="${1}" #cree un mdp acceptable par postfix/nc/mattermost PASSWORD=_`apg -n 1 -m 10 -M NCL -d`_ COMPTE_A_MODIFIER=${CHOIX_MAIL} - # On considère le mot de passe de secours de ldap + # On considère le mot de passe de secours de ldap MAIL_SECOURS=$(ldapsearch -H ldap://${LDAP_IP} \ -x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \ -w "${LDAP_ADMIN_PASSWORD}" \ @@ -410,76 +412,91 @@ gestPassword() { else ADRESSE_SEC="OUI" fi - ############################################################################## - # on cherche le moyen de savoir si ce mail est le mail dans une orga - # si c' est le cas ça veut dire qu' il faut changer le mot de passe dans le cloud de l' orga - rm -rf /tmp/FICMAILORGA* - EMAIL_ORGA_TROUVE=0 - EMAIL_ORGA_TROUVE=$(curl -s ${URL_PAHEKO}/api/sql -d "SELECT id FROM users where emails_Rattaches like '%$CHOIX_MAIL%' ;" | jq .results[].id | wc -l) - if [ $EMAIL_ORGA_TROUVE -ge 1 ] + # si on est mode non interactif + if [ -z "${1}" ] then + ############################################################################## + # on cherche le moyen de savoir si ce mail est le mail dans une orga + # si c' est le cas ça veut dire qu' il faut changer le mot de passe dans le cloud de l' orga + rm -rf /tmp/FICMAILORGA* + EMAIL_ORGA_TROUVE=0 + EMAIL_ORGA_TROUVE=$(curl -s ${URL_PAHEKO}/api/sql -d "SELECT id FROM users where emails_Rattaches like '%$CHOIX_MAIL%' ;" | jq .results[].id | wc -l) + if [ $EMAIL_ORGA_TROUVE -ge 1 ] + then printKazError "L'adresse apparait dans plusieurs orga comme mails rattaché IL EST PREFERABLE DE REPONDRE NON !!!" - fi - ########################################################################## - read -p "ON CONTINUE ? [ o / n ]: " SEARCH_RESET_INPUT - if [ "$SEARCH_RESET_INPUT" = "n" ] || [ "$SEARCH_RESET_INPUT" = "N" ] - then - clear - gestPassword + fi + echo -e "$GREEN Mail de secours = $RED ${MAIL_SECOURS} ${NC}" + ########################################################################## + read -p "ON CONTINUE ? [ o / n ]: " SEARCH_RESET_INPUT + if [ "$SEARCH_RESET_INPUT" = "n" ] || [ "$SEARCH_RESET_INPUT" = "N" ] + then + clear + gestPassword + fi + else + # on est en mode non interactif donc on force la réponse précedente à oui + SEARCH_RESET_INPUT="o" fi if [ "$SEARCH_RESET_INPUT" = "o" ] || [ "$SEARCH_RESET_INPUT" = "O" ] then USER_NEXTCLOUD_MODIF=$(curl -s -X GET -H 'OCS-APIRequest:true' $httpProto://admin:$NEXTCLOUD_ADMIN_PASSWORD@$URL_NC/ocs/v1.php/cloud/users?search=${COMPTE_A_MODIFIER} | grep element | sed -e 's/[ \<\>\/]//g' -e 's/element//g') - echo -e "$GREEN Compte à modifier = $RED ${COMPTE_A_MODIFIER} ${NC}" - echo -e "$GREEN Mail de secours = $RED ${MAIL_SECOURS} ${NC}" - echo -e "$GREEN Compte $RED $(searchMattermost $COMPTE_A_MODIFIER) ${NC}" - echo -e "$GREEN Compte Nextcloud $RED ${USER_NEXTCLOUD_MODIF} ${NC}" - echo -e "$GREEN Le mot de passe sera = $RED ${PASSWORD} ${NC}" - - #maj du mdp sur mattermost avec l'api et non plus avec mmctl - #docker exec -ti mattermostServ bin/mmctl user change-password $(searchMattermost ${COMPTE_A_MODIFIER}) -p ${PASSWORD} >/dev/null 2>&1 - USER_ID=$(searchMattermost "${COMPTE_A_MODIFIER}") - #echo "user_id = "$USER_ID - - . "$KAZ_KEY_DIR/env-mattermostAdmin" - #il arrive que l'api MM sorte un 401, je boucle - while true - do - HTTP_CODE=$(curl -sS -o /dev/null -w "%{http_code}" \ - -X PUT \ - -H "Authorization: Bearer ${mattermost_token}" \ - -H "Content-Type: application/json" \ - "${URL_AGORA_API}/users/${USER_ID}/password" \ - -d "{\"new_password\":\"${PASSWORD}\"}") - - #echo "Mattermost : HTTP <${HTTP_CODE}>" - - if [ "${HTTP_CODE}" = "200" ] - then + USER_ID_MATTERMOST=$(searchMattermost $COMPTE_A_MODIFIER) + [ $(echo ${USER_ID_MATTERMOST} | grep "missing") ] && USER_ID_MATTERMOST="" + # on passe la message de résumé en mode non intéractif + if [ -z "${1}" ] + then + echo -e "$GREEN Compte à modifier = $RED ${COMPTE_A_MODIFIER} ${NC}" + echo -e "$GREEN Mail de secours = $RED ${MAIL_SECOURS} ${NC}" + echo -e "$GREEN ID Mattermost $RED ${USER_ID_MATTERMOST} ${NC}" + echo -e "$GREEN Compte Nextcloud $RED ${USER_NEXTCLOUD_MODIF} ${NC}" + echo -e "$GREEN Le mot de passe sera = $RED ${PASSWORD} ${NC}" + read -p "entrée pour continuer" + fi + #maj du mdp sur mattermost avec l'api si l'id n'est pas vide + if [ "${USER_ID_MATTERMOST}" != "" ] + then + USER_ID_MATTERMOST=$(searchMattermost "${COMPTE_A_MODIFIER}") + . "$KAZ_KEY_DIR/env-mattermostAdmin" + #il arrive que l'api MM sorte un 401, je boucle + while true + do + HTTP_CODE=$(curl -sS -o /dev/null -w "%{http_code}" \ + -X PUT \ + -H "Authorization: Bearer ${mattermost_token}" \ + -H "Content-Type: application/json" \ + "${URL_AGORA_API}/users/${USER_ID_MATTERMOST}/password" \ + -d "{\"new_password\":\"${PASSWORD}\"}") + if [ "${HTTP_CODE}" = "200" ] + then break - fi - - if [ "${HTTP_CODE}" = "401" ] - then - echo "Authentification Mattermost refusée, nouvelle tentative dans 2 secondes..." - sleep 2 - else - echo "ERREUR : changement du mot de passe Mattermost : HTTP ${HTTP_CODE}" - return 1 - fi - done - - curl -H 'OCS-APIREQUEST: true' -X PUT $httpProto://admin:$NEXTCLOUD_ADMIN_PASSWORD@$URL_NC/ocs/v1.php/cloud/users/${USER_NEXTCLOUD_MODIF} -d key=password -d value=${PASSWORD} >/dev/null 2>&1 + fi + + if [ "${HTTP_CODE}" = "401" ] + then + echo "Authentification Mattermost refusée, nouvelle tentative dans 2 secondes..." + sleep 2 + else + echo "ERREUR : changement du mot de passe Mattermost : HTTP ${HTTP_CODE}" + return 1 + fi + done + fi + # si le user nextcloud n'est pas vide alors on lui change son mot de passe + if [ "${USER_NEXTCLOUD_MODIF}" != "" ] + then + curl -H 'OCS-APIREQUEST: true' -X PUT $httpProto://admin:$NEXTCLOUD_ADMIN_PASSWORD@$URL_NC/ocs/v1.php/cloud/users/${USER_NEXTCLOUD_MODIF} -d key=password -d value=${PASSWORD} >/dev/null 2>&1 + fi + # on fait un mot de passe pour ldap en shacrypt pass=$(mkpasswd -m sha512crypt ${PASSWORD}) echo -e "\n\ndn: cn=${COMPTE_A_MODIFIER},ou=users,${ldap_root}\n\ changeType: modify\n\ replace: userPassword\n\ -userPassword: {CRYPT}${pass}\n\n" | ldapmodify -c -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${LDAP_ADMIN_PASSWORD}" - echo -e "Envoi d'un message dans mattermost pour la modification du mot de passe" +userPassword: {CRYPT}${pass}\n\n" | ldapmodify -c -H ldap://${LDAP_IP} -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${LDAP_ADMIN_PASSWORD}" >/dev/null 2>&1 + [ -z "${1}" ] && echo -e "Envoi d'un message dans mattermost pour la modification du mot de passe" PostMattermost "Le mot de passe du compte ${COMPTE_A_MODIFIER} a été modifié" "Creation-Comptes" - if [ ${ADRESSE_SEC} == "OUI" ] + if [ ${ADRESSE_SEC} == "OUI" ] then - echo -e "Envoi d'un message à l' adresse de secours : $GREEN${MAIL_SECOURS}${NC}" + [ -z "${1}" ] && echo -e "Envoi d'un message à l' adresse de secours : $GREEN${MAIL_SECOURS}${NC}" MAIL_CHANG=" Hello, @@ -498,16 +515,13 @@ Ainsi, tout le monde pourra répondre mais aussi bénéficier des réponses appo Bonne journée 😉 " - ExpMail ${MAIL_SECOURS} "Modification du compte" "${MAIL_CHANG}" -read -p " ---------------------- Appuyer sur une touche pour continuer -------------------------" - + ExpMail ${MAIL_SECOURS} "Modification du compte" "${MAIL_CHANG}" fi if [ ${ADRESSE_SEC} == "NON" ] then echo -e "${RED} Pas d adresse de secours ${NC}" fi fi - } createMail() { @@ -1217,6 +1231,8 @@ usage () { printKazMsg " -c permet de créer un mail avec son mail de secours en non intereactif" printKazMsg " syntax : $0 -c mail mailsecours" printKazMsg " exemple $0 user@kaz.bzh user@apple.fr" + printKazMsg " -r permet de reset un mot de passe de compte en mode non interactif" + printKazMsg " syntax : $0 -r mail" printKazMsg " -h aide sur ce script" printKazMsg " -v version du script." } @@ -1312,6 +1328,10 @@ case "$1" in createMailAuto $@ exit ;; + '-r' ) + [[ ${2} =~ ${regexMail} ]] && gestPassword $2 || echo "le 2ème argument doit être un mail" + exit + ;; esac # on teste la présence du domaine du site dans le fichier autorized-domains.txt