iajout du -r reset mot de passe en mode non interctif

This commit is contained in:
2026-10-20 20:33:26 +02:00
parent 42f625b08a
commit c252444d88
+88 -68
View File
@@ -3,8 +3,8 @@
# Ki : Did # Ki : Did
# koi : gestion globale des users Kaz mais aussi les users d'autres domaines hébergés # koi : gestion globale des users Kaz mais aussi les users d'autres domaines hébergés
#KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd) KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd)
KAZ_ROOT=/kaz #KAZ_ROOT=/kaz
. $KAZ_ROOT/bin/.commonFunctions.sh . $KAZ_ROOT/bin/.commonFunctions.sh
setKazVars setKazVars
@@ -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="04-10-2026" VERSION="20-10-2026"
PRG=$(basename $0) PRG=$(basename $0)
RACINE=$(echo $PRG | awk '{print $1}') RACINE=$(echo $PRG | awk '{print $1}')
IFS=' ' 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 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 "${NC}"
echo -ne " - Place disque des mails : " echo -ne " - Place disque des mails : "
cd ${DOCK_VOL}/postfix_mailData/_data/${DOMAINE_EN_COURS} cd ${DOCK_VOL}/postfix_mailData/_data/${DOMAINE_EN_COURS}
echo -ne "${GREEN}" echo -ne "${GREEN}"
du -sh $(echo ${CHOIX_MAIL} | sed -e 's/@.*//') | cut -c 1-4 [ -d ${CHOIX_MAIL} ] && du -sh $(echo ${CHOIX_MAIL} | sed -e 's/@.*//') | cut -c 1-4
echo -ne "${NC}" echo -ne "${NC}"
echo -n " - Quota Nextcloud (Ldap) : " echo -n " - Quota Nextcloud (Ldap) : "
echo -ne "${GREEN}" 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 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() { gestPassword() {
ACTION_EN_COURS="Gestion du mot de passe d'un compte" 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 #cree un mdp acceptable par postfix/nc/mattermost
PASSWORD=_`apg -n 1 -m 10 -M NCL -d`_ PASSWORD=_`apg -n 1 -m 10 -M NCL -d`_
COMPTE_A_MODIFIER=${CHOIX_MAIL} 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} \ MAIL_SECOURS=$(ldapsearch -H ldap://${LDAP_IP} \
-x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \ -x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \
-w "${LDAP_ADMIN_PASSWORD}" \ -w "${LDAP_ADMIN_PASSWORD}" \
@@ -410,76 +412,91 @@ gestPassword() {
else else
ADRESSE_SEC="OUI" ADRESSE_SEC="OUI"
fi fi
############################################################################## # si on est mode non interactif
# on cherche le moyen de savoir si ce mail est le mail dans une orga if [ -z "${1}" ]
# 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 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 !!!" printKazError "L'adresse apparait dans plusieurs orga comme mails rattaché IL EST PREFERABLE DE REPONDRE NON !!!"
fi 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" ] read -p "ON CONTINUE ? [ o / n ]: " SEARCH_RESET_INPUT
then if [ "$SEARCH_RESET_INPUT" = "n" ] || [ "$SEARCH_RESET_INPUT" = "N" ]
clear then
gestPassword clear
gestPassword
fi
else
# on est en mode non interactif donc on force la réponse précedente à oui
SEARCH_RESET_INPUT="o"
fi fi
if [ "$SEARCH_RESET_INPUT" = "o" ] || [ "$SEARCH_RESET_INPUT" = "O" ] if [ "$SEARCH_RESET_INPUT" = "o" ] || [ "$SEARCH_RESET_INPUT" = "O" ]
then 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') 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}" USER_ID_MATTERMOST=$(searchMattermost $COMPTE_A_MODIFIER)
echo -e "$GREEN Mail de secours = $RED ${MAIL_SECOURS} ${NC}" [ $(echo ${USER_ID_MATTERMOST} | grep "missing") ] && USER_ID_MATTERMOST=""
echo -e "$GREEN Compte $RED $(searchMattermost $COMPTE_A_MODIFIER) ${NC}" # on passe la message de résumé en mode non intéractif
echo -e "$GREEN Compte Nextcloud $RED ${USER_NEXTCLOUD_MODIF} ${NC}" if [ -z "${1}" ]
echo -e "$GREEN Le mot de passe sera = $RED ${PASSWORD} ${NC}" then
echo -e "$GREEN Compte à modifier = $RED ${COMPTE_A_MODIFIER} ${NC}"
#maj du mdp sur mattermost avec l'api et non plus avec mmctl echo -e "$GREEN Mail de secours = $RED ${MAIL_SECOURS} ${NC}"
#docker exec -ti mattermostServ bin/mmctl user change-password $(searchMattermost ${COMPTE_A_MODIFIER}) -p ${PASSWORD} >/dev/null 2>&1 echo -e "$GREEN ID Mattermost $RED ${USER_ID_MATTERMOST} ${NC}"
USER_ID=$(searchMattermost "${COMPTE_A_MODIFIER}") echo -e "$GREEN Compte Nextcloud $RED ${USER_NEXTCLOUD_MODIF} ${NC}"
#echo "user_id = "$USER_ID echo -e "$GREEN Le mot de passe sera = $RED ${PASSWORD} ${NC}"
read -p "entrée pour continuer"
. "$KAZ_KEY_DIR/env-mattermostAdmin" fi
#il arrive que l'api MM sorte un 401, je boucle #maj du mdp sur mattermost avec l'api si l'id n'est pas vide
while true if [ "${USER_ID_MATTERMOST}" != "" ]
do then
HTTP_CODE=$(curl -sS -o /dev/null -w "%{http_code}" \ USER_ID_MATTERMOST=$(searchMattermost "${COMPTE_A_MODIFIER}")
-X PUT \ . "$KAZ_KEY_DIR/env-mattermostAdmin"
-H "Authorization: Bearer ${mattermost_token}" \ #il arrive que l'api MM sorte un 401, je boucle
-H "Content-Type: application/json" \ while true
"${URL_AGORA_API}/users/${USER_ID}/password" \ do
-d "{\"new_password\":\"${PASSWORD}\"}") HTTP_CODE=$(curl -sS -o /dev/null -w "%{http_code}" \
-X PUT \
#echo "Mattermost : HTTP <${HTTP_CODE}>" -H "Authorization: Bearer ${mattermost_token}" \
-H "Content-Type: application/json" \
if [ "${HTTP_CODE}" = "200" ] "${URL_AGORA_API}/users/${USER_ID_MATTERMOST}/password" \
then -d "{\"new_password\":\"${PASSWORD}\"}")
if [ "${HTTP_CODE}" = "200" ]
then
break break
fi fi
if [ "${HTTP_CODE}" = "401" ] if [ "${HTTP_CODE}" = "401" ]
then then
echo "Authentification Mattermost refusée, nouvelle tentative dans 2 secondes..." echo "Authentification Mattermost refusée, nouvelle tentative dans 2 secondes..."
sleep 2 sleep 2
else else
echo "ERREUR : changement du mot de passe Mattermost : HTTP ${HTTP_CODE}" echo "ERREUR : changement du mot de passe Mattermost : HTTP ${HTTP_CODE}"
return 1 return 1
fi fi
done done
fi
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 # 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}) pass=$(mkpasswd -m sha512crypt ${PASSWORD})
echo -e "\n\ndn: cn=${COMPTE_A_MODIFIER},ou=users,${ldap_root}\n\ echo -e "\n\ndn: cn=${COMPTE_A_MODIFIER},ou=users,${ldap_root}\n\
changeType: modify\n\ changeType: modify\n\
replace: userPassword\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}" 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
echo -e "Envoi d'un message dans mattermost pour la modification du mot de passe" [ -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" PostMattermost "Le mot de passe du compte ${COMPTE_A_MODIFIER} a été modifié" "Creation-Comptes"
if [ ${ADRESSE_SEC} == "OUI" ] if [ ${ADRESSE_SEC} == "OUI" ]
then 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=" MAIL_CHANG="
Hello, Hello,
@@ -498,16 +515,13 @@ Ainsi, tout le monde pourra répondre mais aussi bénéficier des réponses appo
Bonne journée 😉 Bonne journée 😉
" "
ExpMail ${MAIL_SECOURS} "Modification du compte" "${MAIL_CHANG}" ExpMail ${MAIL_SECOURS} "Modification du compte" "${MAIL_CHANG}"
read -p " ---------------------- Appuyer sur une touche pour continuer -------------------------"
fi fi
if [ ${ADRESSE_SEC} == "NON" ] if [ ${ADRESSE_SEC} == "NON" ]
then then
echo -e "${RED} Pas d adresse de secours ${NC}" echo -e "${RED} Pas d adresse de secours ${NC}"
fi fi
fi fi
} }
createMail() { createMail() {
@@ -1217,6 +1231,8 @@ usage () {
printKazMsg " -c permet de créer un mail avec son mail de secours en non intereactif" printKazMsg " -c permet de créer un mail avec son mail de secours en non intereactif"
printKazMsg " syntax : $0 -c mail mailsecours" printKazMsg " syntax : $0 -c mail mailsecours"
printKazMsg " exemple $0 user@kaz.bzh user@apple.fr" 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 " -h aide sur ce script"
printKazMsg " -v version du script." printKazMsg " -v version du script."
} }
@@ -1312,6 +1328,10 @@ case "$1" in
createMailAuto $@ createMailAuto $@
exit exit
;; ;;
'-r' )
[[ ${2} =~ ${regexMail} ]] && gestPassword $2 || echo "le 2ème argument doit être un mail"
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