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
+43 -23
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=' '
@@ -207,7 +207,7 @@ infoEmail() {
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}"
@@ -395,7 +395,9 @@ 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}
@@ -410,6 +412,9 @@ gestPassword() {
else else
ADRESSE_SEC="OUI" ADRESSE_SEC="OUI"
fi fi
# 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 # 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 # si c' est le cas ça veut dire qu' il faut changer le mot de passe dans le cloud de l' orga
@@ -420,6 +425,7 @@ gestPassword() {
then 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 read -p "ON CONTINUE ? [ o / n ]: " SEARCH_RESET_INPUT
if [ "$SEARCH_RESET_INPUT" = "n" ] || [ "$SEARCH_RESET_INPUT" = "N" ] if [ "$SEARCH_RESET_INPUT" = "n" ] || [ "$SEARCH_RESET_INPUT" = "N" ]
@@ -427,20 +433,29 @@ gestPassword() {
clear clear
gestPassword gestPassword
fi 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" ] 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')
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 Compte à modifier = $RED ${COMPTE_A_MODIFIER} ${NC}"
echo -e "$GREEN Mail de secours = $RED ${MAIL_SECOURS} ${NC}" echo -e "$GREEN Mail de secours = $RED ${MAIL_SECOURS} ${NC}"
echo -e "$GREEN Compte $RED $(searchMattermost $COMPTE_A_MODIFIER) ${NC}" echo -e "$GREEN ID Mattermost $RED ${USER_ID_MATTERMOST} ${NC}"
echo -e "$GREEN Compte Nextcloud $RED ${USER_NEXTCLOUD_MODIF} ${NC}" echo -e "$GREEN Compte Nextcloud $RED ${USER_NEXTCLOUD_MODIF} ${NC}"
echo -e "$GREEN Le mot de passe sera = $RED ${PASSWORD} ${NC}" echo -e "$GREEN Le mot de passe sera = $RED ${PASSWORD} ${NC}"
read -p "entrée pour continuer"
#maj du mdp sur mattermost avec l'api et non plus avec mmctl fi
#docker exec -ti mattermostServ bin/mmctl user change-password $(searchMattermost ${COMPTE_A_MODIFIER}) -p ${PASSWORD} >/dev/null 2>&1 #maj du mdp sur mattermost avec l'api si l'id n'est pas vide
USER_ID=$(searchMattermost "${COMPTE_A_MODIFIER}") if [ "${USER_ID_MATTERMOST}" != "" ]
#echo "user_id = "$USER_ID then
USER_ID_MATTERMOST=$(searchMattermost "${COMPTE_A_MODIFIER}")
. "$KAZ_KEY_DIR/env-mattermostAdmin" . "$KAZ_KEY_DIR/env-mattermostAdmin"
#il arrive que l'api MM sorte un 401, je boucle #il arrive que l'api MM sorte un 401, je boucle
while true while true
@@ -449,11 +464,8 @@ gestPassword() {
-X PUT \ -X PUT \
-H "Authorization: Bearer ${mattermost_token}" \ -H "Authorization: Bearer ${mattermost_token}" \
-H "Content-Type: application/json" \ -H "Content-Type: application/json" \
"${URL_AGORA_API}/users/${USER_ID}/password" \ "${URL_AGORA_API}/users/${USER_ID_MATTERMOST}/password" \
-d "{\"new_password\":\"${PASSWORD}\"}") -d "{\"new_password\":\"${PASSWORD}\"}")
#echo "Mattermost : HTTP <${HTTP_CODE}>"
if [ "${HTTP_CODE}" = "200" ] if [ "${HTTP_CODE}" = "200" ]
then then
break break
@@ -468,18 +480,23 @@ gestPassword() {
return 1 return 1
fi fi
done 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 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,
@@ -499,15 +516,12 @@ 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