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
+90 -70
View File
@@ -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