1166 lines
43 KiB
Bash
Executable File
1166 lines
43 KiB
Bash
Executable File
#!/bin/bash
|
|
# gestion des utilisateurs de kaz ( mail, cloud général, mattermost )
|
|
#KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd)
|
|
KAZ_ROOT=/kaz
|
|
. $KAZ_ROOT/bin/.commonFunctions.sh
|
|
setKazVars
|
|
|
|
. $DOCKERS_ENV
|
|
. $KAZ_ROOT/secret/SetAllPass.sh
|
|
|
|
VERSION="12-08-2024"
|
|
PRG=$(basename $0)
|
|
RACINE=$(echo $PRG | awk '{print $1}')
|
|
IFS=' '
|
|
BLINK='\033[0;5m'
|
|
|
|
LOG=$RACINE".log"
|
|
URL_NC=$(echo $cloudHost).$(echo $domain)
|
|
URL_AGORA=$(echo $matterHost).$(echo $domain)
|
|
URL_LISTE=$(echo $sympaHost).$(echo $domain)
|
|
URL_PAHEKO="$httpProto://${paheko_API_USER}:${paheko_API_PASSWORD}@kaz-paheko.$(echo $domain)"
|
|
SETUP_MAIL="docker exec -ti mailServ setup"
|
|
NL_LIST=infos@listes.kaz.bzh
|
|
URL_AGORA_API=${URL_AGORA}/api/v4
|
|
EQUIPE=kaz
|
|
LISTMASTER=$(echo ${sympa_LISTMASTERS} | cut -d',' -f1)
|
|
|
|
|
|
#### Test du serveur sur lequel s' execute le script ####
|
|
echo ${site} | grep -i prod2 && { echo "Le script ne fonctionne que sur Prod1 et Dev ";exit;}
|
|
##############################
|
|
|
|
TFILE_EMAILS=$(mktemp /tmp/$RACINE.XXXXXXXXX.TFILE_EMAILS)
|
|
TFILE_EMAILS_LIST=$(mktemp /tmp/$RACINE.XXXXXXXXX.TFILE_EMAILS_LIST)
|
|
TFILE_MAILS_TROUVE=$(mktemp /tmp/$RACINE.XXXXXXXXX.TFILE_MAILS_TROUVE)
|
|
TFILE_MAILS_MATTERMOST=$(mktemp /tmp/$RACINE.XXXXXXXXTFILE_MAILS_MATTERMOST)
|
|
TFILE_CREATE_MAIL=$(mktemp /tmp/$RACINE.XXXXXXXXTFILE_CREATE_MAIL.sh)
|
|
LDAP_IP=$(docker inspect -f '{{.NetworkSettings.Networks.ldapNet.IPAddress}}' ldapServ)
|
|
|
|
regexMail="^(([A-Za-z0-9]+((\.|\-|\_|\+)?[A-Za-z0-9]?)*[A-Za-z0-9]+)|[A-Za-z0-9]+)@(([A-Za-z0-9]+)+((\.|\-|\_)?([A-Za-z0-9]+)+)*)+\.([A-Za-z]{2,})+$"
|
|
|
|
|
|
rm -rf /tmp/$RACINE*
|
|
rm -rf /tmp/*.json
|
|
|
|
############################################ Fonctions #######################################################
|
|
|
|
ExpMail() {
|
|
MAIL_DEST=$1
|
|
MAIL_SUJET=$2
|
|
MAIL_TEXTE=$3
|
|
# a mettre ailleurs
|
|
mailexp=${service_mail}
|
|
mailpassword=${service_password}
|
|
mailserveur=${smtpHost}.${domain}
|
|
printf "Subject:${MAIL_SUJET}\n${MAIL_TEXTE}" | msmtp ${MAIL_DEST}
|
|
}
|
|
|
|
PostMattermost() {
|
|
PostM=$1
|
|
CHANNEL=$2
|
|
TEAMID=$(curl -s -H "Authorization: Bearer ${mattermost_token}" "${URL_AGORA_API}/teams/name/${EQUIPE}" | jq .id | sed -e 's/"//g')
|
|
CHANNELID=$(curl -s -H "Authorization: Bearer ${mattermost_token}" ${URL_AGORA_API}/teams/${TEAMID}/channels/name/${CHANNEL} | jq .id | sed -e 's/"//g')
|
|
curl -s i-X POST -i -H "Authorization: Bearer ${mattermost_token}" -d "{\"channel_id\":\"${CHANNELID}\",\"message\":\"${PostM}\"}" "${URL_AGORA_API}/posts" >/dev/null 2>&1
|
|
}
|
|
|
|
|
|
searchEmail() {
|
|
# on peut appeler cette fonction avec un paramêtre
|
|
# qui doit être une adresse email
|
|
CHOIX_MAIL=""
|
|
SEARCH_OBJECT_CLASS="inetOrgPerson"
|
|
[ "$1" = "alias" ] && SEARCH_OBJECT_CLASS="PostfixBookMailForward"
|
|
rm -rf $TFILE_MAILS_TROUVE
|
|
rm -rf $TFILE_MAILS
|
|
fait=0
|
|
while [ ${fait} = 0 ]
|
|
do
|
|
clear
|
|
echo "----------------------------------------------------------------------"
|
|
printKazMsg "${ACTION_EN_COURS}"
|
|
echo "----------------------------------------------------------------------"
|
|
read -p "Adresse ou caractere contenu dans cette adresse (r ou R pour retour ) ? : " RMAIL
|
|
[[ ${RMAIL} =~ ^[rRqQ]$ ]] && Main
|
|
if [ "${RMAIL}" == "" ]
|
|
then
|
|
fait=0
|
|
else
|
|
fait=1
|
|
fi
|
|
done
|
|
ldapsearch -H ldap://${LDAP_IP} \
|
|
-x -D "cn=${ldap_LDAP_ADMIN_USERNAME},${ldap_root}" \
|
|
-w "${ldap_LDAP_ADMIN_PASSWORD}" \
|
|
-b "${ldap_root}" "(&(objectclass=${SEARCH_OBJECT_CLASS})(cn=*${RMAIL}*))" cn | grep ^cn | sed -e 's/^cn: //' >$TFILE_EMAILS
|
|
COMPTEUR_LIGNE=0
|
|
while read LIGNE
|
|
do
|
|
COMPTEUR_LIGNE=$(expr $COMPTEUR_LIGNE + 1)
|
|
printf "%d - %s\n" $COMPTEUR_LIGNE $LIGNE >>$TFILE_MAILS_TROUVE
|
|
done <$TFILE_EMAILS
|
|
if [ $COMPTEUR_LIGNE -gt 0 ]
|
|
then
|
|
fait=0
|
|
while [ ${fait} = 0 ]
|
|
do
|
|
echo "----------------------------------------------------------------------"
|
|
cat $TFILE_MAILS_TROUVE
|
|
echo "----------------------------------------------------------------------"
|
|
read -p "Choisir le numéro correspondant ( R ou r ou 0 pour retour ): " NB_LIGNE_MAIL
|
|
# si on tape r ou r ou Q ou q ou 0 on relance le menu de recherche de mail
|
|
[[ $NB_LIGNE_MAIL =~ [rRqQ0] ]] && searchEmail $1
|
|
CHOIX_MAIL=$(cat ${TFILE_MAILS_TROUVE} | grep "^${NB_LIGNE_MAIL}\b" | awk '{print $3}' | tr -d '[:space:]')
|
|
|
|
# si on répond par entrée nb_ligne_mail sera vide
|
|
# si on donne une réponse qui est une lettre ou un mauvais chiffre choix_mail sera vide
|
|
# alors on reboucle sur la liste des mails
|
|
|
|
if [ "$CHOIX_MAIL" == "" ] || [ "$NB_LIGNE_MAIL" == "" ]
|
|
then
|
|
CHOIX_MAIL=""
|
|
fait=0
|
|
else
|
|
fait=1
|
|
fi
|
|
done
|
|
else
|
|
searchEmail $1
|
|
fi
|
|
}
|
|
|
|
searchMattermost() {
|
|
#Ici $1 est une adresse email
|
|
docker exec -ti ${mattermostServName} bin/mmctl --suppress-warnings auth login $httpProto://$URL_AGORA --name local-server --username $mattermost_user --password $mattermost_pass >/dev/null 2>&1
|
|
docker exec -ti ${mattermostServName} bin/mmctl --suppress-warnings config set ServiceSettings.EnableAPIUserDeletion "true" >/dev/null 2>&1
|
|
#on créé la list des mails dans mattermost
|
|
docker exec -ti ${mattermostServName} bin/mmctl --suppress-warnings user list --all >${TFILE_MAILS_MATTERMOST} 2>/dev/null
|
|
REP_SEARCH_MATTERMOST=$(cat ${TFILE_MAILS_MATTERMOST} | grep $1 | awk '{print $2}' | tr -d '[:space:]')
|
|
if [ ! -z ${REP_SEARCH_MATTERMOST} ]
|
|
then
|
|
if [ "$2" = "DETAILS" ]
|
|
then
|
|
touch /tmp/$1-mattermost.json
|
|
docker exec -ti ${mattermostServName} bin/mmctl --suppress-warnings --format json user search $1 >/tmp/$1-mattermost.json 2>/dev/null
|
|
echo -e "${RED} Compte : ${GREEN} " ;jq .username /tmp/$1-mattermost.json
|
|
echo -e "${RED} Mail : ${GREEN} " ; jq .email /tmp/$1-mattermost.json
|
|
echo -e "${RED} Role : ${GREEN} " ; jq .roles /tmp/$1-mattermost.json
|
|
else
|
|
echo "${REP_SEARCH_MATTERMOST}"
|
|
fi
|
|
else
|
|
echo ""
|
|
fi
|
|
}
|
|
|
|
|
|
infoEmail() {
|
|
ACTION_EN_COURS="Information sur un compte"
|
|
while :
|
|
do
|
|
clear
|
|
echo "------------------------------------------------"
|
|
printKazMsg "${ACTION_EN_COURS}"
|
|
echo "------------------------------------------------"
|
|
read -p "Alias ou Mail ? (R pour retour ou M/A [M] :" RINFOMAIL
|
|
case ${RINFOMAIL} in
|
|
"" | M | m )
|
|
infofait=O
|
|
searchEmail
|
|
clear
|
|
echo "------------------------------------------------"
|
|
printKazMsg " ADRESSE DE MESSAGERIE : $CHOIX_MAIL"
|
|
echo "------------------------------------------------"
|
|
printKazMsg " DETAILS DU COMPTE DANS MATTERMOST"
|
|
searchMattermost $CHOIX_MAIL DETAILS
|
|
echo " ------------------------------------------------"
|
|
printKazMsg " DETAILS DU COMPTE DANS NEXTCLOUD PRINCIPAL"
|
|
echo -e ""
|
|
#TEMP_USER_NC=$(mktemp /tmp/$RACINE.XXXXXXXXX.TEMP_USER_NC)
|
|
#curl -s -o $TEMP_USER_NC -X GET -H 'OCS-APIRequest:true' $httpProto://admin:$nextcloud_NEXTCLOUD_ADMIN_PASSWORD@$URL_NC/ocs/v1.php/cloud/users?search=$CHOIX_MAIL
|
|
#cat $TEMP_USER_NC | grep -i "element" | sed -e s/[\<\>\/]//g | sed -e s/element//g
|
|
echo -ne "${NC}"
|
|
echo -ne " - Nextcloud enable : "
|
|
echo -ne "${GREEN}"
|
|
ldapsearch -H ldap://${LDAP_IP} -D "cn=${ldap_LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${ldap_LDAP_ADMIN_PASSWORD}" -b "cn=${CHOIX_MAIL},ou=users,${ldap_root}" | grep -i nextcloudEnabled | cut -c 18-30
|
|
echo -ne "${NC}"
|
|
echo -e "${NC} ------------------------------------------------"
|
|
printKazMsg " DETAILS DU COMPTE DANS LDAP ET PAHEKO"
|
|
echo ""
|
|
curl -s ${URL_PAHEKO}/api/sql -d "SELECT nom,adresse,code_postal,ville,email,email_secours,admin_orga,nom_orga,quota_disque FROM users where email='${CHOIX_MAIL}' LIMIT 1;" >/tmp/$CHOIX_MAIL-paheko.json
|
|
jq .results[].nom /tmp/$CHOIX_MAIL-paheko.json
|
|
jq .results[].adresse /tmp/$CHOIX_MAIL-paheko.json
|
|
jq .results[].code_postal /tmp/$CHOIX_MAIL-paheko.json
|
|
jq .results[].ville /tmp/$CHOIX_MAIL-paheko.json
|
|
echo -n " - Quota (Paheko) : "
|
|
echo -ne "${GREEN}"
|
|
jq .results[].quota_disque /tmp/$CHOIX_MAIL-paheko.json
|
|
echo -ne "${NC}"
|
|
echo -n " - Quota Mail (Ldap) : "
|
|
echo -ne "${GREEN}"
|
|
ldapsearch -H ldap://${LDAP_IP} -D "cn=${ldap_LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${ldap_LDAP_ADMIN_PASSWORD}" -b "cn=${CHOIX_MAIL},ou=users,${ldap_root}" | grep -i mailquota | cut -c 11-60
|
|
echo -ne "${NC}"
|
|
echo -n " - Quota Nextcloud (Ldap) : "
|
|
echo -ne "${GREEN}"
|
|
ldapsearch -H ldap://${LDAP_IP} -D "cn=${ldap_LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${ldap_LDAP_ADMIN_PASSWORD}" -b "cn=${CHOIX_MAIL},ou=users,${ldap_root}" | grep -i nextcloudquota | cut -c 17-60
|
|
echo -ne "${NC}"
|
|
echo -n " - Mail de secours (Paheko ): "
|
|
echo -ne "${GREEN}"
|
|
jq .results[].email_secours /tmp/$CHOIX_MAIL-paheko.json | sed -e 's/"//g'
|
|
echo -ne "${NC}"
|
|
echo -n " - Mail de secours (Ldap): "
|
|
echo -ne "${GREEN}"
|
|
ldapsearch -H ldap://${LDAP_IP} -D "cn=${ldap_LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${ldap_LDAP_ADMIN_PASSWORD}" -b "cn=${CHOIX_MAIL},ou=users,${ldap_root}" | grep -i maildeSecours | sed -e 's/mailDeSecours://'
|
|
echo -ne "${NC}"
|
|
echo -n " - Alias (Ldap) : "
|
|
echo -ne "${GREEN}"
|
|
LDAP_ALIAS=$(ldapsearch -H ldap://${LDAP_IP} -D "cn=${ldap_LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${ldap_LDAP_ADMIN_PASSWORD}" -b "cn=${CHOIX_MAIL},ou=users,${ldap_root}" | grep -i alias | cut -c 11-60)
|
|
echo -ne "${NC}"
|
|
echo -ne "${GREEN}"
|
|
for ldap_alias in ${LDAP_ALIAS}
|
|
do
|
|
echo "${ldap_alias}" | tr -d [:space:]
|
|
echo -n " "
|
|
done
|
|
echo -e "${NC}"
|
|
echo " - L' adresse apparait dans :"
|
|
echo -n -e "${GREEN}"
|
|
curl -s ${URL_PAHEKO}/api/sql -d "SELECT * FROM users where emails_Rattaches like '%$CHOIX_MAIL%' ;" | jq .results[].nom
|
|
echo -e "${NC}"
|
|
read -p " ==> Entrée pour continuer <=="
|
|
;;
|
|
A | a )
|
|
searchEmail alias
|
|
echo "------------------------------------------------"
|
|
echo " Alias : ${CHOIX_MAIL} "
|
|
echo ""
|
|
for INFOALIAS in $(ldapsearch -H ldap://${LDAP_IP} -x -D "cn=${ldap_LDAP_ADMIN_USERNAME},${ldap_root}" \
|
|
-w "${ldap_LDAP_ADMIN_PASSWORD}" -b "${ldap_root}" "(&(objectclass=PostfixBookMailForward)(cn=*${CHOIX_MAIL}*))" mail \
|
|
| grep ^mail: | sed -e 's/^mail://')
|
|
do
|
|
echo -ne "=====> ${GREEN} "
|
|
echo "${INFOALIAS}" | tr -d [:space:]
|
|
echo "${NC}"
|
|
done
|
|
echo ""
|
|
read -p "==> Entrée pour continuer <=="
|
|
;;
|
|
r | R )
|
|
Main
|
|
;;
|
|
* )
|
|
echo ""
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
searchDestroy() {
|
|
|
|
ACTION_EN_COURS="Suppression d'un compte"
|
|
clear
|
|
#TODO pourquoi REP_SEARCH_DESTROY=$(searchEmail) ne marche pas et fait déconner la fonction search_mail, j' en suis la à m' esbaudir
|
|
searchEmail
|
|
REP_SEARCH_DESTROY=$CHOIX_MAIL
|
|
echo "CHOIX=$REP_SEARCH_DESTROY"
|
|
echo "--------------------------------- SUPPRESION ----------------------------------------"
|
|
while :
|
|
do
|
|
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
|
|
if [ "$SEARCH_DESTROY_INPUT" = "o" ] || [ "$SEARCH_DESTROY_INPUT" = "O" ]
|
|
then
|
|
REP_SEARCH=$(searchMattermost $REP_SEARCH_DESTROY)
|
|
printKazMsg "réponse de mattermost : ${REP_SEARCH_DESTROY}"
|
|
if [ ! -z ${REP_SEARCH} ]
|
|
then
|
|
echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} dans mattermost ${NC}"
|
|
docker exec -ti ${mattermostServName} bin/mmctl user delete ${REP_SEARCH_DESTROY} --confirm >/dev/null 2>&1
|
|
if [ "$?" -eq "0" ]
|
|
then
|
|
printKazMsg "Suppresion ok"
|
|
else
|
|
printKazError -e "Erreur de suppression"
|
|
fi
|
|
echo " ----------------- "
|
|
else
|
|
echo "Rien a supprimer dans mattermost"
|
|
fi
|
|
echo -e "${NC}"
|
|
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_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} ]
|
|
then
|
|
printKazMsg "le user trouvé est : ${USER_NEXTCLOUD_SUPPR}"
|
|
echo -e "${RED} Suppresion de ${USER_NEXTCLOUD_SUPPR}"
|
|
curl -H 'OCS-APIREQUEST: true' -X DELETE $httpProto://admin:$nextcloud_NEXTCLOUD_ADMIN_PASSWORD@$URL_NC/ocs/v1.php/cloud/users/${USER_NEXTCLOUD_SUPPR} >/dev/null 2>&1
|
|
if [ "$?" -eq "0" ]
|
|
then
|
|
printKazMsg "Suppresion ok"
|
|
else
|
|
printKazError "Erreur de suppression"
|
|
fi
|
|
else:w
|
|
|
|
printKazMsg "Rien à supprimer dans Nextcloud"
|
|
fi
|
|
echo -e "${NC}"
|
|
echo ""
|
|
echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} dans la liste info de sympa"
|
|
echo -e "${NC}"
|
|
echo ""
|
|
docker exec -ti sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${sympa_SOAP_USER} --trusted_application_password=${sympa_SOAP_PASSWORD} --proxy_vars=USER_EMAIL=${LISTMASTER} --service=del --service_parameters="${NL_LIST},${REP_SEARCH_DESTROY}"
|
|
echo -e "${NC}"
|
|
echo ""
|
|
echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} dans le serveur de mail"
|
|
echo -e "${NC}"
|
|
echo ""
|
|
${SETUP_MAIL} email del -y ${REP_SEARCH_DESTROY} >/dev/null 2>&1
|
|
echo -e "${NC}"
|
|
echo ""
|
|
echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} dans le ldap"
|
|
echo -e "${NC}"
|
|
echo ""
|
|
ldapdelete -H ldap://${LDAP_IP} -D "cn=${ldap_LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${ldap_LDAP_ADMIN_PASSWORD}" "cn=${REP_SEARCH_DESTROY},ou=users,${ldap_root}"
|
|
if [ "$?" -eq "0" ]
|
|
then
|
|
printKazMsg "Suppresion ok"
|
|
else
|
|
printKazError "Erreur de suppression"
|
|
fi
|
|
printKazMsg "Envoi d'un message dans mattermost pour la suppression du compte"
|
|
docker exec -ti mattermostServ bin/mmctl post create kaz:Creation-Comptes --message "Le compte ${REP_SEARCH_DESTROY} est supprimé" >/dev/null 2>&1
|
|
MAIL_SUPPR="Suppression du compte ${REP_SEARCH_DESTROY}"
|
|
docker exec -i mailServ mailx -a 'Content-Type: text/plain; charset="UTF-8"' -r contact@${domain} -s "Suppression de mail" contact@${domain} << EOF
|
|
${MAIL_SUPPR}
|
|
EOF
|
|
echo -e "${NC}"
|
|
read -p " ---------------------- Appuyer sur une touche pour continuer -------------------------"
|
|
searchDestroy
|
|
fi
|
|
done
|
|
}
|
|
|
|
gestPassword() {
|
|
ACTION_EN_COURS="Gestion du mot de passe d' un compte"
|
|
searchEmail
|
|
#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
|
|
# FICMAILSECOURS=$(mktemp /tmp/FICMAILSECOURSXXXXX.json)
|
|
# curl -s ${URL_PAHEKO}/api/sql -d "SELECT email_secours FROM users where email='${COMPTE_A_MODIFIER}' LIMIT 1 ;" >$FICMAILSECOURS
|
|
# MAIL_SECOURS=$(jq .results[].email_secours $FICMAILSECOURS | sed -e 's/\"//g')
|
|
|
|
MAIL_SECOURS=$(ldapsearch -H ldap://${LDAP_IP} \
|
|
-x -D "cn=${ldap_LDAP_ADMIN_USERNAME},${ldap_root}" \
|
|
-w "${ldap_LDAP_ADMIN_PASSWORD}" \
|
|
-b "${ldap_root}" "(&(objectclass=inetOrgPerson)(cn=*${CHOIX_MAIL}*))" | grep ^mailDeSecours | sed -e 's/^mailDeSecours: //')
|
|
if [ "$MAIL_SECOURS" = "" ]
|
|
then
|
|
ADRESSE_SEC="NON"
|
|
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 ]
|
|
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
|
|
if [ "$SEARCH_RESET_INPUT" = "o" ] || [ "$SEARCH_RESET_INPUT" = "O" ]
|
|
then
|
|
USER_NEXTCLOUD_MODIF=$(curl -s -X GET -H 'OCS-APIRequest:true' $httpProto://admin:$nextcloud_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}"
|
|
docker exec -ti mattermostServ bin/mmctl user change-password $(searchMattermost $COMPTE_A_MODIFIER) -p $PASSWORD >/dev/null 2>&1
|
|
curl -H 'OCS-APIREQUEST: true' -X PUT $httpProto://admin:$nextcloud_NEXTCLOUD_ADMIN_PASSWORD@$URL_NC/ocs/v1.php/cloud/users/${USER_NEXTCLOUD_MODIF} -d key=password -d value=${PASSWORD} >/dev/null 2>&1
|
|
${SETUP_MAIL} email update ${COMPTE_A_MODIFIER} ${PASSWORD}
|
|
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_LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${ldap_LDAP_ADMIN_PASSWORD}"
|
|
echo -e "Envoi d'un message dans mattermost pour la modification du mot de passe"
|
|
docker exec -ti mattermostServ bin/mmctl post create kaz:Creation-Comptes --message "Le mot de passe du compte ${COMPTE_A_MODIFIER} a été modifié" >/dev/null 2>&1
|
|
if [ $ADRESSE_SEC == "OUI" ]
|
|
then
|
|
echo -e "Envoi d'un message à l' adresse de secours : $GREEN${MAIL_SECOURS}${NC}"
|
|
MAIL_CHANG="
|
|
Hello,
|
|
|
|
le nouveau mot de passe de ${COMPTE_A_MODIFIER} est : ${PASSWORD}
|
|
|
|
le webmail est disponible à https://webmail.kaz.bzh
|
|
Le site d' aide pour la configuration des services : https://wiki.kaz.bzh
|
|
Le site Web de Kaz : https://kaz.bzh
|
|
Le mail de la collégiale : contact@kaz.bzh
|
|
|
|
A bientôt"
|
|
docker exec -i mailServ mailx -a 'Content-Type: text/plain; charset="UTF-8"' -r admin@${domain} -s "Modification du compte" $MAIL_SECOURS << EOF
|
|
${MAIL_CHANG}
|
|
EOF
|
|
fi
|
|
if [ $ADRESSE_SEC == "NON" ]
|
|
then
|
|
echo -e "${RED} Pas d adresse de secours ${NC}"
|
|
fi
|
|
fi
|
|
|
|
}
|
|
|
|
createMail() {
|
|
ACTION_EN_COURS="Création d' une adresse de messagerie"
|
|
QUOTA=1
|
|
TRUE_KAZ=TRUE
|
|
fait=0
|
|
# On demande le mail souhaite on regarde si c' est valide et si ça existe déjà
|
|
while [ $fait -eq 0 ]
|
|
do
|
|
clear
|
|
echo "----------------------------------------------------------------------"
|
|
printKazMsg "${ACTION_EN_COURS}"
|
|
echo "----------------------------------------------------------------------"
|
|
read -p "Mail souhaité (r ou R pour quitter ) : " EMAIL_SOUHAITE
|
|
[[ ${EMAIL_SOUHAITE} =~ ^[rRqQ]$ ]] && Main
|
|
if [[ ${EMAIL_SOUHAITE} =~ ${regexMail} ]]
|
|
then
|
|
ldapsearch -H ldap://${LDAP_IP} \
|
|
-x -D "cn=${ldap_LDAP_ADMIN_USERNAME},${ldap_root}" \
|
|
-w "${ldap_LDAP_ADMIN_PASSWORD}" \
|
|
-b "${ldap_root}" "(&(objectclass=inetOrgPerson)(cn=${EMAIL_SOUHAITE}))" cn | grep ^cn | sed -e 's/^cn: //' >$TFILE_EMAILS
|
|
if grep -q "^${EMAIL_SOUHAITE}$" "${TFILE_EMAILS}"
|
|
then
|
|
printKazError " - Le mail ${EMAIL_SOUHAITE} existe déjà"
|
|
fait=0
|
|
elif ! grep $(echo ${EMAIL_SOUHAITE} | sed -e 's/^.*@//') ${KAZ_CONF_DIR}/autorized-domains.txt >/dev/null
|
|
then
|
|
printKazMsg "Le domaine n' est pas dans la liste autorisée"
|
|
sleep 2
|
|
fait=0
|
|
else
|
|
fait=1
|
|
fi
|
|
else
|
|
printKazError " - Mail invalide !"
|
|
sleep 2
|
|
fait=0
|
|
fi
|
|
done
|
|
# on renseigne le domaine en cours pour de futures manips
|
|
# ----------------------------------------------------------------------
|
|
DOMAINE_EN_COURS=$(echo ${EMAIL_SOUHAITE} | sed -e 's/^.*@//')
|
|
echo " ---- Domaine: " ${DOMAINE_EN_COURS} ----
|
|
# ----------------------------------------------------------------------
|
|
|
|
# On demande le mail de secours et on teste si c' est un mail valide
|
|
fait=0
|
|
while [ $fait -eq 0 ]
|
|
do
|
|
read -p "Mail de secours : " EMAIL_SECOURS
|
|
if [[ ${EMAIL_SECOURS} =~ ${regexMail} ]]
|
|
then
|
|
fait=1
|
|
else
|
|
printKazError "Mail invalide"
|
|
fait=0
|
|
fi
|
|
if [ ${EMAIL_SECOURS} = ${EMAIL_SOUHAITE} ]
|
|
then
|
|
echo -e "${RED}Le mail de secours ne peut pas etre le meme que le mail demande${NC}"
|
|
fait=0
|
|
fi
|
|
|
|
done
|
|
# On demande le prenom
|
|
read -p "Prénom : " PRENOM
|
|
# On demande le nom
|
|
read -p "Nom : " NOM
|
|
# On constitue l' ident kaz pour le ldap
|
|
IDENT_KAZ=$(unaccent utf8 "${PRENOM,,}.${NOM,,}")
|
|
# on créé le mot de passe
|
|
PASSWORD=_`apg -n 1 -m 10 -M NCL -d`_
|
|
# on constitue le user,domain et pass crypté pour le ldap
|
|
LDAPUSER=$(echo ${EMAIL_SOUHAITE} | awk -F '@' '{print $1}')
|
|
LDAPDOMAIN=$(echo ${EMAIL_SOUHAITE} | awk -F '@' '{print $2}')
|
|
LDAPPASS=$(mkpasswd -m sha512crypt ${PASSWORD})
|
|
[ "$(echo ${EMAIL_SOUHAITE} | sed -e 's/^.*@//')" != "${domain}" ] && TRUE_KAZ=FALSE
|
|
echo "${GREEN}Mail souhaité : ${NC}${EMAIL_SOUHAITE}"
|
|
echo "${GREEN}Mail secours : ${NC}${EMAIL_SECOURS}"
|
|
echo "${GREEN}Prénom : ${NC}${PRENOM}"
|
|
echo "${GREEN}Nom : ${NC}${NOM}"
|
|
echo "${GREEN}Mot de passe : ${NC}${PASSWORD}"
|
|
RCREATION=""
|
|
repRegEx='^[oOnN]$'
|
|
while ! [[ ${RCREATION} =~ ${repRegEx} ]]
|
|
do
|
|
read -p "Création ? o/n : " RCREATION
|
|
done
|
|
if [ ${RCREATION} = "n" ] || [ ${RCREATION} = "N" ]
|
|
then
|
|
Main
|
|
fi
|
|
# on créé le mail et on met les quotas avec le setup du docker mail pour que
|
|
# le contenu des fichiers à plat soient idem que l' annuaire ldap
|
|
${SETUP_MAIL} email add ${EMAIL_SOUHAITE} ${PASSWORD}
|
|
${SETUP_MAIL} quota set ${EMAIL_SOUHAITE} ${QUOTA}G
|
|
echo "echo -e '\n\ndn: cn=${EMAIL_SOUHAITE},ou=users,${ldap_root}\n\
|
|
changeType: add\n\
|
|
objectclass: inetOrgPerson\n\
|
|
objectClass: PostfixBookMailAccount\n\
|
|
objectClass: nextcloudAccount\n\
|
|
objectClass: kaznaute\n\
|
|
sn: ${PRENOM} ${NOM}\n\
|
|
mail: ${EMAIL_SOUHAITE}\n\
|
|
mailEnabled: TRUE\n\
|
|
mailGidNumber: 5000\n\
|
|
mailHomeDirectory: /var/mail/${LDAPDOMAIN}/${LDAPUSER}/\n\
|
|
mailQuota: ${QUOTA}G\n\
|
|
mailStorageDirectory: maildir:/var/mail/${LDAPDOMAIN}/${LDAPUSER}/\n\
|
|
mailUidNumber: 5000\n\
|
|
mailDeSecours: ${EMAIL_SECOURS}\n\
|
|
identifiantKaz: ${IDENT_KAZ}\n\
|
|
quota: ${QUOTA}\n\
|
|
nextcloudEnabled: ${TRUE_KAZ}\n\
|
|
nextcloudQuota: ${QUOTA} GB\n\
|
|
mobilizonEnabled: ${TRUE_KAZ}\n\
|
|
agoraEnabled: ${TRUE_KAZ}\n\
|
|
userPassword: {CRYPT}${LDAPPASS}\n\n' | ldapmodify -c -H ldap://${LDAP_IP} -D \"cn=${ldap_LDAP_ADMIN_USERNAME},${ldap_root}\" -x -w ${ldap_LDAP_ADMIN_PASSWORD}" >${TFILE_CREATE_MAIL}
|
|
# on execute le fichier avec les données ldap pour créer l' entrée dans l' annuaire
|
|
bash ${TFILE_CREATE_MAIL} >/dev/null
|
|
# on colle le compte et le mot de passe dans le fichier
|
|
echo "Création de : ${EMAIL_SOUHAITE} avec le mot de passe : ${PASSWORD}" >>${TFILE_CREATE_MAIL}
|
|
OLDIFS=${IFS}
|
|
IFS=''
|
|
MSG_CREATION_MAIL="Bonjour
|
|
|
|
Le compte de messagerie ${EMAIL_SOUHAITE} a été créé avec le mot de passe ${PASSWORD}
|
|
|
|
Le mot de passe peut être changé à l' adresse https://mdp.${domain}
|
|
|
|
$(cat ${KAZ_CONF_DIR}/domains/${DOMAINE_EN_COURS})
|
|
|
|
Bonne journée"
|
|
ExpMail ${EMAIL_SECOURS} "Creation de ${EMAIL_SOUHAITE}" ${MSG_CREATION_MAIL}
|
|
docker exec -ti mattermostServ bin/mmctl post create kaz:Creation-Comptes --message "création du compte ${EMAIL_SOUHAITE} avec l' adresse de secours ${EMAIL_SECOURS}" >/dev/null 2>&1
|
|
IFS=${OLDIFS}
|
|
echo " --------------------------------------------------------------------"
|
|
echo "! INFO : !"
|
|
echo "! Le Mot de passe !"
|
|
echo "! Est dans le fichier !"
|
|
echo "! ${TFILE_CREATE_MAIL} !"
|
|
echo " --------------------------------------------------------------------"
|
|
echo
|
|
read -p " - ENTREE pour continuer - "
|
|
# Retour au menu principal
|
|
Main
|
|
}
|
|
|
|
createAlias() {
|
|
ACTION_EN_COURS="création d' un alias de messagerie"
|
|
fait=0
|
|
# On demande alias souhaite on regarde si c' est valide et si ça existe déjà
|
|
while [ $fait -eq 0 ]
|
|
do
|
|
clear
|
|
echo "-------------------------------------------------"
|
|
printKazMsg "${ACTION_EN_COURS}"
|
|
echo "-------------------------------------------------"
|
|
read -p "Alias souhaité (r ou q pour quitter ) : " AMAIL
|
|
[[ ${AMAIL} =~ ^[rRqQ]$ ]] && Main
|
|
if [[ ${AMAIL} =~ ${regexMail} ]]
|
|
then
|
|
RESU_ALIAS=$(ldapsearch -H ldap://${LDAP_IP} \
|
|
-x -D "cn=${ldap_LDAP_ADMIN_USERNAME},${ldap_root}" \
|
|
-w "${ldap_LDAP_ADMIN_PASSWORD}" \
|
|
-b "${ldap_root}" "(&(objectclass=PostfixBookMailForward)(cn=*${AMAIL}*))" | grep ^cn | sed -e 's/^cn: //')
|
|
RESU_ALIAS_IS_MAIL=$(ldapsearch -H ldap://${LDAP_IP} \
|
|
-x -D "cn=${ldap_LDAP_ADMIN_USERNAME},${ldap_root}" \
|
|
-w "${ldap_LDAP_ADMIN_PASSWORD}" \
|
|
-b "${ldap_root}" "(&(objectclass=inetOrgPerson)(cn=*${AMAIL}*))" cn | grep ^cn | sed -e 's/^cn: //')
|
|
|
|
if echo ${RESU_ALIAS} | grep -q "^${AMAIL}$" || echo ${RESU_ALIAS_IS_MAIL} | grep -q "^${AMAIL}$"
|
|
then
|
|
echo "${GREEN} - alias ou mail ${AMAIL} déjà dans présent l' annuaire${NC}"
|
|
sleep 2
|
|
fait=0
|
|
elif ! grep $(echo ${AMAIL} | sed -e 's/^.*@//') ${KAZ_CONF_DIR}/autorized-domains.txt >/dev/null
|
|
then
|
|
echo -e "${GREEN}Le domaine n' est pas dans la liste autorisée${NC}"
|
|
sleep 2
|
|
fait=0
|
|
else
|
|
fait=1
|
|
fi
|
|
else
|
|
echo -e "${GREEN} - Mail invalide !${NC}"
|
|
sleep 2
|
|
fait=0
|
|
fi
|
|
done
|
|
echo "Alias : ${AMAIL} peut être créé"
|
|
declare -a TABAMAIL
|
|
fait=0
|
|
while [ $fait -eq 0 ]
|
|
do
|
|
clear
|
|
echo "-----------------------------------------------------------------"
|
|
echo "Ajout de mail pour cet alias"
|
|
echo "-----------------------------------------------------------------"
|
|
[ "${TABAMAIL[*]}" == "" ] || echo -e "Liste des mails dans cet alias: [ ${GREEN}${TABAMAIL[*]}${NC} ]"
|
|
read -p "ENTREE ou F ( pour fin :-) pour une liste vide ou saisir une adresse et enfin saisir F pour arrêter : " RALIAS
|
|
if [[ ${RALIAS} =~ ^[Ff]$ ]] || [ "${RALIAS}" == "" ]
|
|
then
|
|
fait=1
|
|
else
|
|
if echo ${TABAMAIL[*]} | grep -i ${RALIAS} >/dev/null 2>&1
|
|
then
|
|
echo -e "${GREEN}l' alias est déjà dans la liste ${NC}"
|
|
sleep 2
|
|
else
|
|
if [[ ${RALIAS} =~ ${regexMail} ]]
|
|
then
|
|
TABAMAIL+=(${RALIAS})
|
|
else
|
|
echo -e "${GREEN} - Mail invalide !${NC}"
|
|
sleep 2
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
fait=0
|
|
while [ "$fait" = 0 ]
|
|
do
|
|
clear
|
|
echo "--------------------------------------------------"
|
|
echo -e "${GREEN}résumé de la situation${NC}"
|
|
echo "--------------------------------------------------"
|
|
echo -e "création d' un alias : ${GREEN}${AMAIL}${NC}"
|
|
echo -e "avec le(s) Mail suivant : ${GREEN}${TABAMAIL[*]}${NC}"
|
|
echo "--------------------------------------------------"
|
|
RCREATONALIAS=""
|
|
read -p "OK pour la création ?(o/n) : " RCREATIONALIAS
|
|
case "$RCREATIONALIAS" in
|
|
o | O )
|
|
for ALIASMAIL in ${TABAMAIL[*]}
|
|
do
|
|
LDAPALAISMAIL="${LDAPALAISMAIL}$(echo mail :${ALIASMAIL})\n"
|
|
done
|
|
echo -e "\n\ndn: cn=${AMAIL},ou=mailForwardings,${ldap_root}\n\
|
|
changeType: add\n\
|
|
objectClass: organizationalRole\n\
|
|
objectClass: PostfixBookMailForward\n\
|
|
mailAlias: ${AMAIL}\n\
|
|
${LDAPALAISMAIL}\n\n" | ldapmodify -c -H ldap://${LDAP_IP} -D "cn=${ldap_LDAP_ADMIN_USERNAME},${ldap_root}" -x -w ${ldap_LDAP_ADMIN_PASSWORD}
|
|
fait=1
|
|
printKazMsg "Création de ${AMAIL}"
|
|
sleep 3
|
|
createAlias
|
|
;;
|
|
n | N )
|
|
printKazMsg "abandon de création"
|
|
sleep 2
|
|
createAlias
|
|
;;
|
|
* )
|
|
fait=0
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
delAlias() {
|
|
ACTION_EN_COURS="Suppresion d' un alias de messagerie"
|
|
fait=0
|
|
while [ $fait -eq 0 ]
|
|
do
|
|
RALIAS=""
|
|
CHOIX_MAIL=""
|
|
RESU_ALIAS=""
|
|
searchEmail alias
|
|
RALIAS=${CHOIX_MAIL}
|
|
[[ ${RALIAS} =~ ^[rRqQ]$ ]] && Main
|
|
if [[ ${RALIAS} =~ ${regexMail} ]]
|
|
then
|
|
RESU_ALIAS=$(ldapsearch -H ldap://${LDAP_IP} \
|
|
-x -D "cn=${ldap_LDAP_ADMIN_USERNAME},${ldap_root}" \
|
|
-w "${ldap_LDAP_ADMIN_PASSWORD}" \
|
|
-b "${ldap_root}" "(&(objectclass=PostfixBookMailForward)(cn=${RALIAS}))" cn | grep ^cn | sed -e 's/^cn: //')
|
|
if [ ! -z ${RESU_ALIAS} ]
|
|
then
|
|
faitdel=0
|
|
while [ ${faitdel} = 0 ]
|
|
do
|
|
read -p "suppression de ${RESU_ALIAS} ? (o/n): " REPDELALIAS
|
|
case "${REPDELALIAS}" in
|
|
o | O )
|
|
ldapdelete -H ldap://${LDAP_IP} -D "cn=${ldap_LDAP_ADMIN_USERNAME},${ldap_root}" -x -w "${ldap_LDAP_ADMIN_PASSWORD}" "cn=${RESU_ALIAS},ou=mailForwardings,${ldap_root}"
|
|
printKazMsg "suppression ${RESU_ALIAS} effectuée"
|
|
sleep 2
|
|
faitdel=1
|
|
;;
|
|
n | N )
|
|
faitdel=1
|
|
;;
|
|
"" | * )
|
|
faitdel=0
|
|
;;
|
|
|
|
esac
|
|
done
|
|
else
|
|
fait=0
|
|
fi
|
|
|
|
else
|
|
printKazError " - format alias invalide !"
|
|
sleep 2
|
|
fait=0
|
|
fi
|
|
done
|
|
delAlias
|
|
}
|
|
|
|
modifyAlias()
|
|
{
|
|
ACTION_EN_COURS="Modfication d' un alias de messagerie"
|
|
MRESU_ALIAS=""
|
|
LISTE_MAIL_ALIAS=""
|
|
NEW_LISTE_MAIL_ALIAS=""
|
|
ACHANGE=0
|
|
searchEmail alias
|
|
LISTE_MAIL_ALIAS=$(ldapsearch -H ldap://${LDAP_IP} \
|
|
-x -D "cn=${ldap_LDAP_ADMIN_USERNAME},${ldap_root}" \
|
|
-w "${ldap_LDAP_ADMIN_PASSWORD}" \
|
|
-b "${ldap_root}" "(&(objectclass=PostfixBookMailForward)(cn=*${CHOIX_MAIL}*))" \
|
|
| grep -i ^mail: | sed -e 's/^mail: /_/' | tr -d [:space:] | sed -s 's/_/ /g')
|
|
echo "-------------------------------------------------------------------"
|
|
echo "-------------------------------------------------------------------"
|
|
echo -e "${GREEN} [ ${LISTE_MAIL_ALIAS} ] ${NC} "
|
|
echo "-------------------------------------------------------------------"
|
|
BOUCLE_M_MAIL=0
|
|
NEW_LISTE_MAIL_ALIAS=""
|
|
for M_MAIL in ${LISTE_MAIL_ALIAS}
|
|
do
|
|
read -p " - On garde l' alias ${M_MAIL} (o/n) ? [o] : " READM_MAIL
|
|
case ${READM_MAIL} in
|
|
"" | o | O )
|
|
NEW_LISTE_MAIL_ALIAS="${NEW_LISTE_MAIL_ALIAS} ${M_MAIL}"
|
|
;;
|
|
n | N )
|
|
ACHANGE=$(expr ${ACHANGE} + 1)
|
|
NEW_LISTE_MAIL_ALIAS=${NEW_LISTE_MAIL_ALIAS}
|
|
;;
|
|
* )
|
|
NEW_LISTE_MAIL_ALIAS="${NEW_LISTE_MAIL_ALIAS} ${M_MAIL}"
|
|
;;
|
|
esac
|
|
done
|
|
TALIAS_SUPP=""
|
|
BOUCLE_ADD_MAIL=0
|
|
BOUCLE_ALIAS=0
|
|
read -p "Ajouter un alias ? (o/n) [n] :" RALIAS_SUPP
|
|
while [ $BOUCLE_ADD_MAIL = 0 ]
|
|
do
|
|
case ${RALIAS_SUPP} in
|
|
o | O )
|
|
while [ ${BOUCLE_ADD_MAIL} = 0 ]
|
|
do
|
|
read -p " - Nouvel Alias: ( F pour finir ) : " ALIAS_SUPP
|
|
if [[ ${ALIAS_SUPP} =~ ${regexMail} ]]
|
|
then
|
|
if echo ${NEW_LISTE_MAIL_ALIAS} | grep -w ${ALIAS_SUPP} >/dev/null
|
|
then
|
|
printKazMsg "Alias déjà existant"
|
|
BOUCLE_ADD_MAIL=0
|
|
else
|
|
NEW_LISTE_MAIL_ALIAS="${NEW_LISTE_MAIL_ALIAS} ${ALIAS_SUPP}"
|
|
ACHANGE=$(expr ${ACHANGE} + 1)
|
|
fi
|
|
elif [[ ${ALIAS_SUPP} =~ ^[[fF]+$ ]]
|
|
then
|
|
BOUCLE_ADD_MAIL=1
|
|
else
|
|
printKazMsg "erreur de mail"
|
|
fi
|
|
done
|
|
;;
|
|
"" | n | N )
|
|
BOUCLE_ADD_MAIL=1
|
|
;;
|
|
* )
|
|
BOUCLE_ADD_MAIL=1
|
|
;;
|
|
esac
|
|
done
|
|
if [ "${ACHANGE}" -gt "0" ]
|
|
then
|
|
printKazMsg "Changement à effectuer : ${NEW_LISTE_MAIL_ALIAS}"
|
|
sleep 3
|
|
FIC_MODIF_LDIF=$(mktemp /tmp/$RACINE.XXXXXXXXX.TFIC_MODIF_LDIF.ldif)
|
|
echo "dn: cn=${CHOIX_MAIL},ou=mailForwardings,${ldap_root}" >${FIC_MODIF_LDIF}
|
|
echo "changeType: modify" >>${FIC_MODIF_LDIF}
|
|
echo "replace: mail" >>${FIC_MODIF_LDIF}
|
|
for key in ${NEW_LISTE_MAIL_ALIAS}
|
|
do
|
|
echo "mail: ${key}" >>${FIC_MODIF_LDIF}
|
|
done
|
|
echo "-" >>${FIC_MODIF_LDIF}
|
|
ldapmodify -c -H ldap://${LDAP_IP} -D "cn=${ldap_LDAP_ADMIN_USERNAME},${ldap_root}" \
|
|
-x -w ${ldap_LDAP_ADMIN_PASSWORD} \
|
|
-f ${FIC_MODIF_LDIF} >/dev/null
|
|
else
|
|
printKazMsg "Pas de changement"
|
|
sleep 3
|
|
fi
|
|
}
|
|
|
|
updateUser() {
|
|
rm -rf /tmp/*attributs.txt
|
|
ACTION_EN_COURS="Modification d'un compte"
|
|
ATTRIB_MAILS="mailDeSecours mailAlias"
|
|
ATTRIB_QUOTA="mailQuota nextcloudQuota"
|
|
rm -rf /tmp/*fic_attributs.txt
|
|
while :
|
|
do
|
|
FIC_ATTRIBUTS=$(mktemp /tmp/XXXXfic_attributs.txt)
|
|
CHOIX_MAIL=""
|
|
declare -a ATTRIB
|
|
searchEmail
|
|
MAILDESECOURSACTUEL=""
|
|
MAILDESECOURS=""
|
|
Ucompteur=1
|
|
for attribut in mailDeSecours mailAlias mailQuota nextcloudQuota
|
|
do
|
|
ATTRIB+=([${attribut}]=$(ldapsearch -H ldap://${LDAP_IP} \
|
|
-x -D "cn=${ldap_LDAP_ADMIN_USERNAME},${ldap_root}" \
|
|
-w "${ldap_LDAP_ADMIN_PASSWORD}" \
|
|
-b "${ldap_root}" "(&(objectclass=inetOrgPerson)(cn=*${CHOIX_MAIL}*))" \
|
|
| grep ^"${attribut}": | sed -e 's/^'${attribut}': //' | tr -s '[:space:]' ' ' ))
|
|
# si l' attribut est mailDesecours on l' attrape et on on le stocke pour pouvoir l' enlever de sympa
|
|
[ ${attribut} = mailDeSecours ] && MAILDESECOURSACTUEL=${ATTRIB[${attribut}]}
|
|
echo -e "${Ucompteur} - ${attribut} = ${ATTRIB[${attribut}]}" >>${FIC_ATTRIBUTS}
|
|
Ucompteur=$(expr ${Ucompteur} + 1)
|
|
done
|
|
faitAttrib=0
|
|
declare -A CHANGED
|
|
while [ ${faitAttrib} = 0 ]
|
|
do
|
|
clear
|
|
echo "---------------------------------------------------"
|
|
printKazMsg "${ACTION_EN_COURS} ${CHOIX_MAIL}"
|
|
echo "---------------------------------------------------"
|
|
[ "${#CHANGED[@]}" -gt "0" ] && echo "------ Les Modification en cours -------------"
|
|
for key in "${!CHANGED[@]}"
|
|
do
|
|
echo "${GREEN}${key}${NC}: ${CHANGED[$key]}"
|
|
done
|
|
[ "${#CHANGED[@]}" -gt "0" ] && echo "---------------------------------------------------"
|
|
cat ${FIC_ATTRIBUTS}
|
|
read -p "Quel attribut est à changer ? (R ou r pour retour F pour Finir ): " REP_ATTRIBUT
|
|
case "${REP_ATTRIBUT}" in
|
|
r | R )
|
|
if [ "${#CHANGED[@]}" -gt "0" ]
|
|
then
|
|
echo "------------------------------------------------------------------------"
|
|
read -p "=====> ATTENTION : il y a des modifs en cours abandonner ?(o ou n) ? <===== : " RABANDON
|
|
case "${RABANDON}" in
|
|
o | O )
|
|
faitAttrib=1
|
|
;;
|
|
n | N )
|
|
faitAttrib=0
|
|
;;
|
|
* )
|
|
echo ""
|
|
;;
|
|
esac
|
|
else
|
|
faitAttrib=1
|
|
fi
|
|
;;
|
|
[0-9] )
|
|
if [ "${REP_ATTRIBUT}" -gt "$(expr ${Ucompteur} - 1 )" ]
|
|
then
|
|
printKazMsg "Chiffre invalide"
|
|
sleep 3
|
|
else
|
|
# pour être sur de virer tous les espaces et les tab etc on utilise [:space:]
|
|
# on affiche tout les arguments ( les $1 $2 $2 avec la boucle for)
|
|
# on ajoute de ___ pour pouvoir le remplace par un espace entre chaque variable
|
|
# afin d' afficher un beau contenu1 contenu2 contenu 3
|
|
|
|
ATTRIBUT_EN_COURS=$(cat ${FIC_ATTRIBUTS} | grep "^${REP_ATTRIBUT}\b" | awk '{print $3}')
|
|
CONTENU_ATTRIBUT=$(cat ${FIC_ATTRIBUTS} | grep "^${REP_ATTRIBUT}\b" \
|
|
| awk '{for (i=5; i<=NF; i++) print $i"___"}'\
|
|
| tr -d [:space:] | sed -e 's/___/ /g')
|
|
|
|
case ${ATTRIBUT_EN_COURS} in
|
|
mailQuota | nextcloudQuota )
|
|
echo "------------------------------------------------"
|
|
read -p " - Nouveau ${ATTRIBUT_EN_COURS} (R ou r pour retour) : " RCHANGE
|
|
if [[ ${RCHANGE} =~ ^[0-9]+$ ]]
|
|
then
|
|
[ "${ATTRIBUT_EN_COURS}" = "mailQuota" ] && CHANGED+=([mailQuota]="${RCHANGE}G")
|
|
[ "${ATTRIBUT_EN_COURS}" = "nextcloudQuota" ] && CHANGED+=([nextcloudQuota]="${RCHANGE} GB")
|
|
else
|
|
printKazError "Valeur incorecte"
|
|
sleep 3
|
|
fi
|
|
faitAttrib=0
|
|
;;
|
|
mailDeSecours )
|
|
echo "------------------------------------------------"
|
|
read -p " - Nouveau Mail de Secours : " RCHANGE
|
|
if [[ ${RCHANGE} =~ ${regexMail} ]]
|
|
then
|
|
CHANGED+=([mailDeSecours]=${RCHANGE})
|
|
else
|
|
printKazMsg "Mail invalide"
|
|
sleep 3
|
|
fi
|
|
faitAttrib=0
|
|
;;
|
|
mailAlias )
|
|
NEW_CONTENU_ATTRIBUT=""
|
|
READVALMAIL=""
|
|
ALIAS_SUPP=""
|
|
RALIAS_SUPP=""
|
|
TALIAS_SUPP=""
|
|
BOUCLE_ADD_MAIL=0
|
|
MAILALIAS_CHANGE=0
|
|
for VALMAIL in ${CONTENU_ATTRIBUT}
|
|
do
|
|
read -p " - On garde ${VALMAIL} (o/n) ? [o] : " READVALMAIL
|
|
case ${READVALMAIL} in
|
|
* | "" | o | O )
|
|
NEW_CONTENU_ATTRIBUT="${NEW_CONTENU_ATTRIBUT} ${VALMAIL}"
|
|
;;
|
|
n | N )
|
|
NEW_CONTENU_ATTRIBUT="${NEW_CONTENU_ATTRIBUT}"
|
|
MAILALIAS_CHANGE=$(expr ${MAILALIAS_INCHANGE} + 1)
|
|
;;
|
|
* )
|
|
printKazError "Erreur"
|
|
sleep 2
|
|
esac
|
|
done
|
|
read -p "Ajouter un alias ? (o/n) [n] :" RALIAS_SUPP
|
|
case ${RALIAS_SUPP} in
|
|
o | O )
|
|
while [ ${BOUCLE_ADD_MAIL} = 0 ]
|
|
do
|
|
read -p " - ${GREEN}Nouvel Alias: ( F pour finir ) :${NC} " ALIAS_SUPP
|
|
BOUCLE_ADD_MAIL=0
|
|
if [[ ${ALIAS_SUPP} =~ ${regexMail} ]]
|
|
then
|
|
if echo "${CONTENU_ATTRIBUT}" | grep "^${ALIAS_SUPP}$"
|
|
then
|
|
printKazMsg "Alias déjà existant"
|
|
sleep 3
|
|
else
|
|
TALIAS_SUPP="${TALIAS_SUPP} ${ALIAS_SUPP}"
|
|
MAILALIAS_CHANGE=$(expr ${MAILALIAS_INCHANGE} + 1)
|
|
fi
|
|
fi
|
|
if [[ ${ALIAS_SUPP} =~ ^[[fF]+$ ]]
|
|
then
|
|
BOUCLE_ADD_MAIL=1
|
|
fi
|
|
done
|
|
;;
|
|
"" | n | N )
|
|
#CHANGED+=([mailAlias]="${NEW_CONTENU_ATTRIBUT}")
|
|
;;
|
|
* )
|
|
printKazMsg "Erreur"
|
|
sleep 2
|
|
;;
|
|
esac
|
|
[ "${MAILALIAS_CHANGE}" -gt "0" ] && CHANGED+=([mailAlias]="${NEW_CONTENU_ATTRIBUT} ${TALIAS_SUPP}")
|
|
faitattrib=0
|
|
;;
|
|
esac
|
|
fi
|
|
;;
|
|
f | F )
|
|
if [ "${#CHANGED[@]}" -eq "0" ]
|
|
then
|
|
printKazMsg "Il n'y a pas eu de modif"
|
|
sleep 3
|
|
updateUser
|
|
else
|
|
echo "Départ des modifs"
|
|
LISTE_MODIF_USER=""
|
|
FIC_MODIF_LDIF=$(mktemp /tmp/$RACINE.XXXXXXXXX.TFIC_MODIF_LDIF.ldif)
|
|
echo "dn: cn=${CHOIX_MAIL},ou=users,${ldap_root}" >${FIC_MODIF_LDIF}
|
|
echo "changeType: modify" >>${FIC_MODIF_LDIF}
|
|
for key in "${!CHANGED[@]}"
|
|
do
|
|
if [ ${key} = "mailDeSecours" ]
|
|
then
|
|
MAILDESECOURS=${CHANGED[mailDeSecours]}
|
|
fi
|
|
if [ ${key} = "mailAlias" ]
|
|
then
|
|
echo "replace: ${key}" >>${FIC_MODIF_LDIF}
|
|
for KEY_MAILALIAS in ${CHANGED[$key]}
|
|
do
|
|
echo "${key}: ${KEY_MAILALIAS}" >>${FIC_MODIF_LDIF}
|
|
done
|
|
echo "-" >>${FIC_MODIF_LDIF}
|
|
else
|
|
echo "replace: ${key}" >>${FIC_MODIF_LDIF}
|
|
echo "${key}: ${CHANGED[$key]}" >>${FIC_MODIF_LDIF}
|
|
echo "-" >>${FIC_MODIF_LDIF}
|
|
fi
|
|
done
|
|
cat ${FIC_MODIF_LDIF}
|
|
sleep 3
|
|
ldapmodify -c -H ldap://${LDAP_IP} -D "cn=${ldap_LDAP_ADMIN_USERNAME},${ldap_root}" \
|
|
-x -w ${ldap_LDAP_ADMIN_PASSWORD} \
|
|
-f ${FIC_MODIF_LDIF}
|
|
if [ ! -z ${MAILDESECOURS} ]
|
|
then
|
|
# suppression du mail de secours de la liste infos
|
|
docker exec -ti sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${sympa_SOAP_USER} --trusted_application_password=${sympa_SOAP_PASSWORD} --proxy_vars=USER_EMAIL=${LISTMASTER} --service=del --service_parameters="${NL_LIST},${MAILDESECOURSACTUEL}"
|
|
# ajout de l' adresse de la nouvelle adresse de secours
|
|
docker exec -ti sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${sympa_SOAP_USER} --trusted_application_password=${sympa_SOAP_PASSWORD} --proxy_vars=USER_EMAIL=${LISTMASTER} --service=add --service_parameters="${NL_LIST},${MAILDESECOURS}"
|
|
fi
|
|
updateUser
|
|
fi
|
|
;;
|
|
"" | * )
|
|
faitAttrib=0
|
|
;;
|
|
esac
|
|
done
|
|
done
|
|
|
|
}
|
|
##############################################################################################################
|
|
##############################################################################################################
|
|
usage () {
|
|
printKazMsg "$PRG [-h] [-v]"
|
|
printKazMsg "script de gestion des kaznautes"
|
|
printKazMsg " -h aide sur ce script"
|
|
printKazMsg " -v version du script."
|
|
}
|
|
##############################################################################################################
|
|
# test des dépendances
|
|
type -P jq | grep -i jq >/dev/null || { echo "erreur jq n' est pas installé ( apt install jq ? ) " ; exit;}
|
|
################ Main loop ############################################
|
|
Main() {
|
|
|
|
echo -e "${NC}"
|
|
while true
|
|
do
|
|
clear
|
|
echo "-------------------------------------------------"
|
|
echo "$PRG, version : $VERSION ($KAZ_ROOT)"
|
|
echo "-------------------------------------------------"
|
|
echo -e "${BOLD}COMPTES : "
|
|
echo -e "${NC}*********"
|
|
echo -e "${NC}"
|
|
echo -e " ${NC}1 - Information sur un compte (alias ou Mail )"
|
|
echo -e " ${YELLOW}2 - Modification d' un compte"
|
|
echo -e " ${NC}3 - Changement de mot de passe d' un compte"
|
|
echo -e " ${GREEN}4 - Suppression d' un compte "
|
|
echo -e " ${NC}5 - Création d' une adresse de messagerie"
|
|
echo -e "${NC}"
|
|
echo -e "${BOLD}ALIAS : "
|
|
echo -e "${NC}*******"
|
|
echo -e "${NC}"
|
|
echo -e " ${NC}6 - Création d' un alias Général pour mails Externes"
|
|
echo -e " ${YELLOW}7 - Modification d' un alias Général pour mails Externes"
|
|
echo -e " ${GREEN}8 - Suppression d' un alias Général pour mails Externes"
|
|
echo -e "${NC}"
|
|
echo "-------------------------------------------------"
|
|
echo -e "${NC}"
|
|
read -p "Choix ? (Q pour quitter) ==> : " CHOICE
|
|
case "$CHOICE" in
|
|
'1' )
|
|
infoEmail
|
|
;;
|
|
'2' )
|
|
updateUser
|
|
;;
|
|
'3' )
|
|
gestPassword
|
|
;;
|
|
'4' )
|
|
searchDestroy
|
|
;;
|
|
'5' )
|
|
createMail
|
|
;;
|
|
'6' )
|
|
createAlias
|
|
;;
|
|
'7' )
|
|
modifyAlias
|
|
;;
|
|
'8' )
|
|
delAlias
|
|
;;
|
|
'h'| "H" )
|
|
clear
|
|
echo "--------------------------------------------"
|
|
usage
|
|
echo "--------------------------------------------"
|
|
;;
|
|
'q'| "Q" )
|
|
exit
|
|
;;
|
|
""|'*' )
|
|
clear
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
|
|
##################################################################################################################################
|
|
|
|
# Lancement de la boucle principale
|
|
#traitement des options ( usage )
|
|
|
|
case "$1" in
|
|
'-h' )
|
|
usage
|
|
exit
|
|
;;
|
|
'-v' )
|
|
printKazMsg "$PRG version $VERSION"
|
|
exit
|
|
;;
|
|
esac
|
|
|
|
# on teste la présence du domaine du site dans le fichier autorized-domains.txt
|
|
[ ! -e ${KAZ_CONF_DIR}/autorized-domains.txt ] && { echo "création de ${KAZ_CONF_DIR}/autorized-domains.txt" ; touch ${KAZ_CONF_DIR}/autorized-domains.txt;}
|
|
! grep $domain ${KAZ_CONF_DIR}/autorized-domains.txt && echo $domain >> ${KAZ_CONF_DIR}/autorized-domains.txt
|
|
Main
|
|
|