3 Commits
Author SHA1 Message Date
fab fd1e6ff8a3 upgrade traefik en 3.7.5 2026-06-20 07:29:35 +02:00
fab 93e97024ac bug sur double volume: 2026-06-20 07:29:35 +02:00
fab 98b3893db3 pouvoir créer le service webdav (sur un volume wp) 2026-06-20 07:29:30 +02:00
9 changed files with 88 additions and 271 deletions
+1 -2
View File
@@ -1,7 +1,6 @@
# kaz # kaz
[Kaz](https://kaz.bzh/) est un CHATONS du Morbihan. Nous proposons ici un moyen de le répliquer dans d'autres lieux. Il y a des éléments de configuration à définir avant d'initialiser ce [Kaz](https://kaz.bzh/) est un CHATONS du Morbihan. Nous proposons ici un moyen de le répliquer dans d'autres lieux. Il y a des éléments de configuration à définir avant d'initialiser ce simulateur.
simulateur..
Il est possible de simuler notre CHATONS dans une VirtualBox pour mettre au point nos différents services (voir [kaz-vagrant](https://git.kaz.bzh/KAZ/kaz-vagrant)). Il est possible de simuler notre CHATONS dans une VirtualBox pour mettre au point nos différents services (voir [kaz-vagrant](https://git.kaz.bzh/KAZ/kaz-vagrant)).
+4 -9
View File
@@ -4,14 +4,14 @@
#Kan: 2021 #Kan: 2021
#Koi: gestion dockers #Koi: gestion dockers
#02/07/2026: fab: ajout de la sauvegarde pour pollaris
# 20/04/2025: Did : Ajout des sauvegardes de peertube dans les services generaux
# 15/01/2025: Dernière modif by fab: ne pas redémarrer Traefik en cas de créaio d'orga # 15/01/2025: Dernière modif by fab: ne pas redémarrer Traefik en cas de créaio d'orga
# Did : 13 fevrier 2025 modif des save en postgres et mysql # Did : 13 fevrier 2025 modif des save en postgres et mysql
# Did : ajout des sauvegardes de mobilizon et mattermost en postgres # Did : ajout des sauvegardes de mobilizon et mattermost en postgres
# 20/04/2025
# Did : Ajout des sauvegardes de peertube dans les services generaux
# En cas d'absence de postfix, il faut lancer : # En cas d'absence de postfix, il faut lancer :
# docker network create postfix_mailNet # docker network create postfix_mailNet
@@ -229,11 +229,6 @@ saveComposes () {
. $KAZ_KEY_DIR/env-mastodonDB . $KAZ_KEY_DIR/env-mastodonDB
saveDB ${mastodonDBName} "${POSTGRES_USER}" "${POSTGRES_PASSWORD}" "${POSTGRES_DB}" mastodon postgres saveDB ${mastodonDBName} "${POSTGRES_USER}" "${POSTGRES_PASSWORD}" "${POSTGRES_DB}" mastodon postgres
;; ;;
pollaris)
echo "save pollaris (new kazdate)"
. $KAZ_KEY_DIR/env-pollarisDB
saveDB ${pollarisDBName} "${POSTGRES_USER}" "${POSTGRES_PASSWORD}" "${POSTGRES_DB}" pollaris postgres
;;
roundcube) roundcube)
echo "save roundcube" echo "save roundcube"
. $KAZ_KEY_DIR/env-roundcubeDB . $KAZ_KEY_DIR/env-roundcubeDB
+21 -119
View File
@@ -5,8 +5,6 @@
# ki : fab # ki : fab
# test git du 02/10/2023 depuis snster # test git du 02/10/2023 depuis snster
#maj by fab du 05/07/2026: remplacer les appels mmctl soit par l'api REST soit par un webhook entrant
# !!! need by htpasswd # !!! need by htpasswd
# apt-get install apache2-utils dos2unix # apt-get install apache2-utils dos2unix
@@ -44,7 +42,6 @@ cd "${KAZ_ROOT}"
. $KAZ_KEY_DIR/env-ldapServ . $KAZ_KEY_DIR/env-ldapServ
. $KAZ_KEY_DIR/env-sympaServ . $KAZ_KEY_DIR/env-sympaServ
. $KAZ_KEY_DIR/env-paheko . $KAZ_KEY_DIR/env-paheko
. $KAZ_KEY_DIR/env-mattermostAdmin
# DOCK_DIR="${KAZ_COMP_DIR}" # ??? # DOCK_DIR="${KAZ_COMP_DIR}" # ???
@@ -221,36 +218,15 @@ FILE_LDIF=/home/sauve/ldap.ldif
gunzip ${FILE_LDIF}.gz -f gunzip ${FILE_LDIF}.gz -f
grep -aEiorh '([[:alnum:]]+([._-][[:alnum:]]+)*@[[:alnum:]]+([._-][[:alnum:]]+)*\.[[:alpha:]]{2,6})' ${FILE_LDIF} | sort -u > ${TFILE_EMAIL} grep -aEiorh '([[:alnum:]]+([._-][[:alnum:]]+)*@[[:alnum:]]+([._-][[:alnum:]]+)*\.[[:alpha:]]{2,6})' ${FILE_LDIF} | sort -u > ${TFILE_EMAIL}
# remplacé par la l'API REST echo "récupération des login mattermost... "
# echo "récupération des login mattermost... " docker exec -i mattermostServ bin/mmctl user list --all | grep ":.*(" | cut -d ':' -f 2 | cut -d ' ' -f 2 | sort > "${TFILE_MM}"
# docker exec -i mattermostServ bin/mmctl user list --all | grep ":.*(" | cut -d ':' -f 2 | cut -d ' ' -f 2 | sort > "${TFILE_MM}"
> "${TFILE_MM}"
page=0
while true; do
json=$(curl -s \
-H "Authorization: Bearer ${mattermost_token}" \
"https://${URL_AGORA}/api/v4/users?page=${page}&per_page=200")
nb=$(echo "${json}" | jq 'length')
if [ "${nb}" -eq 0 ]; then
break
fi
echo "${json}" | jq -r '.[].username' >> "${TFILE_MM}"
page=$((page + 1))
done
sort -o "${TFILE_MM}" "${TFILE_MM}"
dos2unix "${TFILE_MM}" dos2unix "${TFILE_MM}"
echo "done"
# remplacé par la l'API REST
# se connecter à l'agora pour ensuite pouvoir passer toutes les commandes mmctl # se connecter à l'agora pour ensuite pouvoir passer toutes les commandes mmctl
# . $KAZ_KEY_DIR/env-mattermostAdmin . $KAZ_KEY_DIR/env-mattermostAdmin
# echo "docker exec -i mattermostServ bin/mmctl auth login ${httpProto}://${URL_AGORA} --name local-server --username ${mattermost_user} --password ${mattermost_pass}" | tee -a "${CMD_INIT}" echo "docker exec -i mattermostServ bin/mmctl auth login ${httpProto}://${URL_AGORA} --name local-server --username ${mattermost_user} --password ${mattermost_pass}" | tee -a "${CMD_INIT}"
# vérif des emails # vérif des emails
regex="^(([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,})+$" regex="^(([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,})+$"
@@ -615,88 +591,25 @@ userPassword: {CRYPT}${pass}\n\n' | ldapmodify -c -H ldap://${LDAP_IP} -D \"cn=$
fi fi
if grep -q "^${IDENT_KAZ}$" "${TFILE_MM}" 2>/dev/null; then if grep -q "^${IDENT_KAZ}$" "${TFILE_MM}" 2>/dev/null; then
echo "${IDENT_KAZ} existe déjà sur mattermost" | tee -a "${LOG}" echo "${IDENT_KAZ} existe déjà sur mattermost" | tee -a "${LOG}"
else else
# on créé le compte mattermost
# on créé le compte mattermost echo "docker exec -i mattermostServ bin/mmctl user create --email ${EMAIL_SOUHAITE} --username ${IDENT_KAZ} --password ${PASSWORD}" | tee -a "${CMD_LOGIN}"
#echo "docker exec -i mattermostServ bin/mmctl user create --email ${EMAIL_SOUHAITE} --username ${IDENT_KAZ} --password ${PASSWORD}" | tee -a "${CMD_LOGIN}" # et enfin on ajoute toujours le user à l'équipe KAZ et aux 2 channels publiques
#on remplace par l'api rest echo "docker exec -i mattermostServ bin/mmctl team users add kaz ${EMAIL_SOUHAITE}" | tee -a "${CMD_LOGIN}"
echo "docker exec -i mattermostServ bin/mmctl channel users add kaz:une-question--un-soucis ${EMAIL_SOUHAITE}" | tee -a "${CMD_LOGIN}"
#KAZ a quelle team id ? echo "docker exec -i mattermostServ bin/mmctl channel users add kaz:cafe-du-commerce--ouvert-2424h ${EMAIL_SOUHAITE}" | tee -a "${CMD_LOGIN}"
KAZ_ID=$(curl -s -H "Authorization: Bearer ${mattermost_token}" "https://${URL_AGORA}/api/v4/teams/name/kaz" | jq -r '.id')
CHAN1_ID=$(curl -s -H "Authorization: Bearer ${mattermost_token}" "https://${URL_AGORA}/api/v4/teams/name/kaz/channels/name/une-question--un-soucis" | jq -r '.id')
CHAN2_ID=$(curl -s -H "Authorization: Bearer ${mattermost_token}" "https://${URL_AGORA}/api/v4/teams/name/kaz/channels/name/cafe-du-commerce--ouvert-2424h" | jq -r '.id')
cat >> "${CMD_LOGIN}" <<EOF
resp=\$(curl -s -X POST "https://${URL_AGORA}/api/v4/users" \
-H "Authorization: Bearer ${mattermost_token}" \
-H "Content-Type: application/json" \
-d '{"email":"${EMAIL_SOUHAITE}","username":"${IDENT_KAZ}","password":"${PASSWORD}"}')
USER_ID=\$(echo "\$resp" | jq -r '.id')
# et enfin on ajoute toujours le user à l'équipe KAZ et aux 2 channels publiques
curl -s -X POST "https://${URL_AGORA}/api/v4/teams/${KAZ_ID}/members" \
-H "Authorization: Bearer ${mattermost_token}" \
-H "Content-Type: application/json" \
-d '{ "team_id": "${KAZ_ID}", "user_id": "'"\${USER_ID}"'"}'
curl -s -X POST "https://${URL_AGORA}/api/v4/channels/${CHAN1_ID}/members" \
-H "Authorization: Bearer ${mattermost_token}" \
-H "Content-Type: application/json" \
-d '{ "user_id": "'"\${USER_ID}"'"}'
curl -s -X POST "https://${URL_AGORA}/api/v4/channels/${CHAN2_ID}/members" \
-H "Authorization: Bearer ${mattermost_token}" \
-H "Content-Type: application/json" \
-d '{ "user_id": "'"\${USER_ID}"'"}'
EOF
# echo "docker exec -i mattermostServ bin/mmctl channel users add kaz:une-question--un-soucis ${EMAIL_SOUHAITE}" | tee -a "${CMD_LOGIN}"
# echo "docker exec -i mattermostServ bin/mmctl channel users add kaz:cafe-du-commerce--ouvert-2424h ${EMAIL_SOUHAITE}" | tee -a "${CMD_LOGIN}"
NB_SERVICES_BASE=$((NB_SERVICES_BASE+1)) NB_SERVICES_BASE=$((NB_SERVICES_BASE+1))
fi fi
if [ "${EQUIPE_AGORA}" != "" -a "${EQUIPE_AGORA}" != "kaz" ]; then if [ "${EQUIPE_AGORA}" != "" -a "${EQUIPE_AGORA}" != "kaz" ]; then
# l'équipe existe t-elle déjà ? # l'équipe existe t-elle déjà ?
http_code=$(curl -s -o /dev/null -w "%{http_code}" -H "Authorization: Bearer ${mattermost_token}" "https://${URL_AGORA}/api/v4/teams/name/${EQUIPE_AGORA}") nb=$(docker exec mattermostServ bin/mmctl team list | grep -w "${EQUIPE_AGORA}" | wc -l)
if [ "${nb}" == "0" ];then # non, on la créé en mettant le user en admin de l'équipe
if [ "$http_code" -eq 200 ]; then echo "docker exec -i mattermostServ bin/mmctl team create --name ${EQUIPE_AGORA} --display-name ${EQUIPE_AGORA} --email ${EMAIL_SOUHAITE}" --private | tee -a "${CMD_INIT}"
cat >> "${CMD_LOGIN}" <<EOF fi
#équipe trouvée # puis ajouter le user à l'équipe
EOF echo "docker exec -i mattermostServ bin/mmctl team users add ${EQUIPE_AGORA} ${EMAIL_SOUHAITE}" | tee -a "${CMD_INIT}"
else
# non, on la créé en mettant le user en admin de l'équipe
cat >> "${CMD_LOGIN}" <<EOF
resp=\$(curl -s -X POST "https://${URL_AGORA}/api/v4/teams" \
-H "Authorization: Bearer ${mattermost_token}" \
-H "Content-Type: application/json" \
-d '{ "name":"${EQUIPE_AGORA}", "display_name":"${EQUIPE_AGORA}", "type":"O"}')
TEAM_ID=\$(echo "\$resp" | jq -r '.id')
#puis ajouter le user à l'équipe
#echo "docker exec -i mattermostServ bin/mmctl team users add ${EQUIPE_AGORA} ${EMAIL_SOUHAITE}" | tee -a "${CMD_INIT}"
curl -s -X POST "https://${URL_AGORA}/api/v4/teams/\${TEAM_ID}/members" \
-H "Authorization: Bearer ${mattermost_token}" \
-H "Content-Type: application/json" \
-d '{ "team_id": "'"\${TEAM_ID}"'", "user_id": "'"\${USER_ID}"'" }'
#et on le rend admin de son équipe
curl -s -X PUT "https://${URL_AGORA}/api/v4/teams/\${TEAM_ID}/members/\${USER_ID}/roles" \
-H "Authorization: Bearer ${mattermost_token}" \
-H "Content-Type: application/json" \
-d '{"roles":"team_user team_admin"}'
EOF
fi
fi fi
if [ -n "${CREATE_ORGA_SERVICES}" ]; then if [ -n "${CREATE_ORGA_SERVICES}" ]; then
@@ -809,7 +722,7 @@ Enfin, vous disposez de tous les autres services KAZ où l'authentification n'es
En cas de soucis, n'hésitez pas à poser vos questions sur le canal 'Une question ? un soucis' de l'agora dispo ici : ${httpProto}://${URL_AGORA} En cas de soucis, n'hésitez pas à poser vos questions sur le canal 'Une question ? un soucis' de l'agora dispo ici : ${httpProto}://${URL_AGORA}
Si vous avez besoin d'accompagnement pour votre site, votre cloud, votre compta, votre migration de messagerie,... nous proposons des formations mensuelles gratuites. Si vous souhaitez être accompagné par un professionnel, voici une liste de pros, référencés par KAZ: https://kaz.bzh/nos-partenaires/ Si vous avez besoin d'accompagnement pour votre site, votre cloud, votre compta, votre migration de messagerie,... nous proposons des formations mensuelles gratuites. Si vous souhaitez être accompagné par un professionnel, nous pouvons vous donner une liste de pros, référencés par KAZ.
À bientôt ;) À bientôt ;)
@@ -844,18 +757,7 @@ bisou!"
EOF" | tee -a "${CMD_MSG}" EOF" | tee -a "${CMD_MSG}"
echo " # on envoie la confirmation d'inscription sur l'agora " | tee -a "${CMD_MSG}" echo " # on envoie la confirmation d'inscription sur l'agora " | tee -a "${CMD_MSG}"
#echo "docker exec -i mattermostServ bin/mmctl post create kaz:Creation-Comptes --message \"${MAIL_KAZ}\"" | tee -a "${CMD_MSG}" echo "docker exec -i mattermostServ bin/mmctl post create kaz:Creation-Comptes --message \"${MAIL_KAZ}\"" | tee -a "${CMD_MSG}"
#pas réussi à le mettre dans CMD_MSG :(, je balance direct)
payload=$(jq -n \
--arg channel "creation-comptes" \
--arg text "$MAIL_KAZ" \
'{channel: $channel, text: $text}')
curl -i -X POST \
-H "Content-Type: application/json" \
-d "$payload" \
"https://${URL_AGORA}/hooks/${token_webhook}"
# fin des inscriptions # fin des inscriptions
done <<< "${ALL_LINES}" done <<< "${ALL_LINES}"
+55 -48
View File
@@ -13,7 +13,7 @@ setKazVars
. $KAZ_KEY_DIR/env-sympaServ . $KAZ_KEY_DIR/env-sympaServ
. $KAZ_KEY_DIR/env-paheko . $KAZ_KEY_DIR/env-paheko
VERSION="09-08-2026" VERSION="16-11-2025"
PRG=$(basename $0) PRG=$(basename $0)
RACINE=$(echo $PRG | awk '{print $1}') RACINE=$(echo $PRG | awk '{print $1}')
IFS=' ' IFS=' '
@@ -25,7 +25,7 @@ URL_AGORA=$(echo $matterHost).$(echo $domain)
URL_LISTE=$(echo $sympaHost).$(echo $domain) URL_LISTE=$(echo $sympaHost).$(echo $domain)
URL_PAHEKO="$httpProto://${API_USER}:${API_PASSWORD}@kaz-paheko.$(echo $domain)" URL_PAHEKO="$httpProto://${API_USER}:${API_PASSWORD}@kaz-paheko.$(echo $domain)"
NL_LIST=infos@listes.kaz.bzh NL_LIST=infos@listes.kaz.bzh
URL_AGORA_API=${httpProto}://${URL_AGORA}/api/v4 URL_AGORA_API=${URL_AGORA}/api/v4
EQUIPE=kaz EQUIPE=kaz
LISTMASTER=$(echo ${LISTMASTERS} | cut -d',' -f1) LISTMASTER=$(echo ${LISTMASTERS} | cut -d',' -f1)
@@ -37,7 +37,7 @@ echo ${site} | grep -E 'prod1|dev' || { echo "Le script ne fonctionne que sur Pr
TFILE_EMAILS=$(mktemp /tmp/$RACINE.XXXXXXXXX.TFILE_EMAILS) TFILE_EMAILS=$(mktemp /tmp/$RACINE.XXXXXXXXX.TFILE_EMAILS)
TFILE_EMAILS_LIST=$(mktemp /tmp/$RACINE.XXXXXXXXX.TFILE_EMAILS_LIST) TFILE_EMAILS_LIST=$(mktemp /tmp/$RACINE.XXXXXXXXX.TFILE_EMAILS_LIST)
TFILE_MAILS_TROUVE=$(mktemp /tmp/$RACINE.XXXXXXXXX.TFILE_MAILS_TROUVE) TFILE_MAILS_TROUVE=$(mktemp /tmp/$RACINE.XXXXXXXXX.TFILE_MAILS_TROUVE)
TFILE_CPT_MATTERMOST=$(mktemp /tmp/$RACINE.XXXXXXXXTFILE_CPT_MATTERMOST) TFILE_MAILS_MATTERMOST=$(mktemp /tmp/$RACINE.XXXXXXXXTFILE_MAILS_MATTERMOST)
TFILE_CREATE_MAIL=$(mktemp /tmp/$RACINE.XXXXXXXXTFILE_CREATE_MAIL.sh) TFILE_CREATE_MAIL=$(mktemp /tmp/$RACINE.XXXXXXXXTFILE_CREATE_MAIL.sh)
LDAP_IP=$(docker inspect -f '{{.NetworkSettings.Networks.ldapNet.IPAddress}}' ldapServ) LDAP_IP=$(docker inspect -f '{{.NetworkSettings.Networks.ldapNet.IPAddress}}' ldapServ)
@@ -59,11 +59,11 @@ ExpMail() {
} }
PostMattermost() { PostMattermost() {
. $KAZ_KEY_DIR/env-mattermostAdmin . $KAZ_KEY_DIR/env-mattermostAdmin
PostM=$1 PostM=$1
CHANNEL=$2 CHANNEL=$2
TEAMID=$(curl -s -H "Authorization: Bearer ${mattermost_token}" "${URL_AGORA_API}/teams/name/${EQUIPE}" | jq -r .id ) 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 -r .id ) 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 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
} }
@@ -139,21 +139,26 @@ searchEmail() {
searchMattermost() { searchMattermost() {
#Ici $1 est une adresse email #Ici $1 est une adresse email
. $KAZ_KEY_DIR/env-mattermostAdmin . $KAZ_KEY_DIR/env-mattermostAdmin
curl -s -H "Authorization: Bearer ${mattermost_token}" "${URL_AGORA_API}/users/email/${1}" >${TFILE_CPT_MATTERMOST} 2>/dev/null 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
REP_SEARCH_MATTERMOST=$(jq -r .id ${TFILE_CPT_MATTERMOST}) docker exec -ti ${mattermostServName} bin/mmctl --suppress-warnings config set ServiceSettings.EnableAPIUserDeletion "true" >/dev/null 2>&1
if [ ! -z ${REP_SEARCH_MATTERMOST} ] #on créé la list des mails dans mattermost
then 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" ] if [ "$2" = "DETAILS" ]
then then
echo -e -n "${RED} Compte : ${GREEN} " ; jq -r .username ${TFILE_CPT_MATTERMOST} touch /tmp/$1-mattermost.json
echo -e -n "${RED} Mail : ${GREEN} " ; jq -r .email ${TFILE_CPT_MATTERMOST} docker exec -ti ${mattermostServName} bin/mmctl --suppress-warnings --format json user search $1 >/tmp/$1-mattermost.json 2>/dev/null
echo -e -n "${RED} Role : ${GREEN} " ; jq -r .roles ${TFILE_CPT_MATTERMOST} 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 else
echo "${REP_SEARCH_MATTERMOST}" echo "${REP_SEARCH_MATTERMOST}"
fi fi
else else
echo "" echo ""
fi fi
} }
@@ -188,16 +193,16 @@ infoEmail() {
printKazMsg " DETAILS DU COMPTE DANS LDAP ET PAHEKO" printKazMsg " DETAILS DU COMPTE DANS LDAP ET PAHEKO"
echo "" echo ""
curl -s ${URL_PAHEKO}/api/sql -d "SELECT nom,adresse,code_postal,ville,email,email_secours,admin_orga,nom_orga,quota_disque,serveur_prod FROM users where email='${CHOIX_MAIL}' LIMIT 1;" >/tmp/$CHOIX_MAIL-paheko.json curl -s ${URL_PAHEKO}/api/sql -d "SELECT nom,adresse,code_postal,ville,email,email_secours,admin_orga,nom_orga,quota_disque,serveur_prod FROM users where email='${CHOIX_MAIL}' LIMIT 1;" >/tmp/$CHOIX_MAIL-paheko.json
jq -r .results[].nom /tmp/$CHOIX_MAIL-paheko.json jq .results[].nom /tmp/$CHOIX_MAIL-paheko.json
jq -r .results[].adresse /tmp/$CHOIX_MAIL-paheko.json jq .results[].adresse /tmp/$CHOIX_MAIL-paheko.json
jq -r .results[].code_postal /tmp/$CHOIX_MAIL-paheko.json jq .results[].code_postal /tmp/$CHOIX_MAIL-paheko.json
jq -r .results[].ville /tmp/$CHOIX_MAIL-paheko.json jq .results[].ville /tmp/$CHOIX_MAIL-paheko.json
SERVEUR_PROD=$(jq -r .results[].serveur_prod /tmp/$CHOIX_MAIL-paheko.json) SERVEUR_PROD=$(jq .results[].serveur_prod /tmp/$CHOIX_MAIL-paheko.json)
NOM_ORGA=$(jq -r .results[].nom_orga /tmp/$CHOIX_MAIL-paheko.json) NOM_ORGA=$(jq .results[].nom_orga /tmp/$CHOIX_MAIL-paheko.json)
[ "${NOM_ORGA}" = "null" ] || echo -e " - ORGA : ${GREEN}${NOM_ORGA}${NC} sur serveur ${GREEN}${SERVEUR_PROD}${NC} " [ "${NOM_ORGA}" = "null" ] || echo -e " - ORGA : ${GREEN}${NOM_ORGA}${NC} sur serveur ${GREEN}${SERVEUR_PROD}${NC} "
echo -n " - Quota (Paheko) : " echo -n " - Quota (Paheko) : "
echo -ne "${GREEN}" echo -ne "${GREEN}"
jq -r .results[].quota_disque /tmp/$CHOIX_MAIL-paheko.json jq .results[].quota_disque /tmp/$CHOIX_MAIL-paheko.json
echo -ne "${NC}" echo -ne "${NC}"
echo -n " - Quota Mail (Ldap) : " echo -n " - Quota Mail (Ldap) : "
echo -ne "${GREEN}" echo -ne "${GREEN}"
@@ -214,7 +219,7 @@ infoEmail() {
echo -ne "${NC}" echo -ne "${NC}"
echo -n " - Mail de secours (Paheko ): " echo -n " - Mail de secours (Paheko ): "
echo -ne "${GREEN}" echo -ne "${GREEN}"
jq -r .results[].email_secours /tmp/$CHOIX_MAIL-paheko.json | sed -e 's/"//g' jq .results[].email_secours /tmp/$CHOIX_MAIL-paheko.json | sed -e 's/"//g'
echo -ne "${NC}" echo -ne "${NC}"
echo -n " - Mail de secours (Ldap): " echo -n " - Mail de secours (Ldap): "
echo -ne "${GREEN}" echo -ne "${GREEN}"
@@ -233,7 +238,7 @@ infoEmail() {
echo -e "${NC}" echo -e "${NC}"
echo " - L' adresse apparait dans :" echo " - L' adresse apparait dans :"
echo -n -e "${GREEN}" echo -n -e "${GREEN}"
curl -s ${URL_PAHEKO}/api/sql -d "SELECT * FROM users where emails_Rattaches like '%$CHOIX_MAIL%' ;" | jq -r .results[].nom curl -s ${URL_PAHEKO}/api/sql -d "SELECT * FROM users where emails_Rattaches like '%$CHOIX_MAIL%' ;" | jq .results[].nom
echo -e "${NC}" echo -e "${NC}"
read -p " ==> Entrée pour continuer <==" read -p " ==> Entrée pour continuer <=="
;; ;;
@@ -297,21 +302,19 @@ searchDestroy() {
#################################################################################################################### ####################################################################################################################
if [ "${DOMAINE_EN_COURS}" = "${domain}" ] if [ "${DOMAINE_EN_COURS}" = "${domain}" ]
then then
MM_USER_ID=$(searchMattermost $REP_SEARCH_DESTROY) REP_SEARCH=$(searchMattermost $REP_SEARCH_DESTROY)
if [ ! -z ${MM_USER_ID} ] printKazMsg "réponse de mattermost : ${REP_SEARCH_DESTROY}"
if [ ! -z ${REP_SEARCH} ]
then then
echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} trouvé dans mattermost ${NC}" echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} dans mattermost ${NC}"
status_del=$(curl -s --request DELETE \ docker exec -ti ${mattermostServName} bin/mmctl user delete ${REP_SEARCH_DESTROY} --confirm >/dev/null 2>&1
--header 'Accept: application/json' \ if [ "$?" -eq "0" ]
-H "Authorization: Bearer ${mattermost_token}" \ then
"${URL_AGORA_API}/api/v4/users/${MM_USER_ID}") printKazMsg "Suppresion ok"
if [ "$(echo ${status_del} | jq -r .status)" -eq "200" ] else
then printKazError -e "Erreur de suppression"
printKazMsg "Suppresion ok" fi
else echo " ----------------- "
printKazError -e "Erreur de suppression"
fi
echo " ----------------- "
else else
echo "Rien a supprimer dans mattermost" echo "Rien a supprimer dans mattermost"
fi fi
@@ -369,7 +372,7 @@ searchDestroy() {
printKazError "Erreur de suppression" printKazError "Erreur de suppression"
fi fi
printKazMsg "Envoi d'un message dans mattermost pour la suppression du compte" printKazMsg "Envoi d'un message dans mattermost pour la suppression du compte"
PostMattermost "Le compte ${REP_SEARCH_DESTROY} est supprimé , mail envoyé à ${MAIL_SECOURS}" "Creation-Comptes" docker exec -ti mattermostServ bin/mmctl post create kaz:Creation-Comptes --message "Le compte ${REP_SEARCH_DESTROY} est supprimé , mail envoyé à ${MAIL_SECOURS}" >/dev/null 2>&1
MAIL_SUPPR="Le compte ${REP_SEARCH_DESTROY} est supprimé" MAIL_SUPPR="Le compte ${REP_SEARCH_DESTROY} est supprimé"
OLDIFS=${IFS} OLDIFS=${IFS}
IFS='' IFS=''
@@ -388,7 +391,12 @@ gestPassword() {
#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
# 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} \ 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}" \
@@ -432,7 +440,7 @@ 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}"
echo -e "Envoi d'un message dans mattermost pour la modification du mot de passe" 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" 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" ] if [ ${ADRESSE_SEC} == "OUI" ]
then then
echo -e "Envoi d'un message à l' adresse de secours : $GREEN${MAIL_SECOURS}${NC}" echo -e "Envoi d'un message à l' adresse de secours : $GREEN${MAIL_SECOURS}${NC}"
@@ -592,7 +600,7 @@ $(cat ${KAZ_CONF_DIR}/domains/${DOMAINE_EN_COURS})
Bonne journée" Bonne journée"
ExpMail ${EMAIL_SECOURS} "Creation de ${EMAIL_SOUHAITE}" ${MSG_CREATION_MAIL} ExpMail ${EMAIL_SECOURS} "Creation de ${EMAIL_SOUHAITE}" ${MSG_CREATION_MAIL}
PostMattermost "création du compte ${EMAIL_SOUHAITE} avec l' adresse de secours ${EMAIL_SECOURS}" "Creation-Comptes" 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} IFS=${OLDIFS}
echo " --------------------------------------------------------------------" echo " --------------------------------------------------------------------"
echo "! INFO : !" echo "! INFO : !"
@@ -1114,7 +1122,7 @@ echo -e "${NC}*********"
echo -e "${NC}" echo -e "${NC}"
echo -e " ${NC}1 - Information sur un compte (alias ou Mail )" echo -e " ${NC}1 - Information sur un compte (alias ou Mail )"
echo -e " ${YELLOW}2 - Modification d' un compte" echo -e " ${YELLOW}2 - Modification d' un compte"
echo -e " ${NC}3 - Changement de mot de passe d' un compte (HS)" echo -e " ${NC}3 - Changement de mot de passe d' un compte"
echo -e " ${GREEN}4 - Suppression 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}5 - Création d' une adresse de messagerie"
echo -e "${NC}" echo -e "${NC}"
@@ -1135,9 +1143,8 @@ case "$CHOICE" in
'2' ) '2' )
updateUser updateUser
;; ;;
'3' ) '3' )
echo "La fonction est supprimée" gestPassword
read -p "==> Entrée pour continuer <=="
;; ;;
'4' ) '4' )
searchDestroy searchDestroy
+1 -88
View File
@@ -6,7 +6,7 @@
#MAJ le 04/06/2026 by fab: créer une entrée orga dans le dns pour simplifier les url (avec utilisation de compose-override.yml) #MAJ le 04/06/2026 by fab: créer une entrée orga dans le dns pour simplifier les url (avec utilisation de compose-override.yml)
#MAJ le 16/06/2026 by fab: ajouter le menu +/-webdav #MAJ le 16/06/2026 by fab: ajouter le menu +/-webdav
#MAJ le 20/06/2026 by fab: générer le contenu du mail qui est à envoyer à l'orga après une création de service
# XXX pb arret des services retiré # XXX pb arret des services retiré
@@ -544,90 +544,3 @@ if [[ -n "${STAGE_DEFAULT}" ]]; then
# ########## update status web page # ########## update status web page
${KAZ_COMP_DIR}/web/web-gen.sh ${KAZ_COMP_DIR}/web/web-gen.sh
fi fi
##### DEBUT MAIL
#construction du mail qui peut être envoyé à l'orga en cas de création de services
if [[ -n "${STAGE_DEFAULT}${STAGE_CREATE}" ]]; then
GREEN='\e[32m'
RESET='\e[0m'
MAIL="Bonjour,
et hop ! voici les accès au(x) service(s) demandé(s):
"
if [[ "${wp}" = "on" ]]; then
MAIL_ADMIN=`grep WORDPRESS_ADMIN_USER /kaz/secret/orgas/${ORGA}/env-wpServ | cut -f2 -d=`
MAIL_ADMIN_PASS=`grep WORDPRESS_ADMIN_PASSWORD /kaz/secret/orgas/${ORGA}/env-wpServ | cut -f2 -d=`
MAIL="$MAIL
Site Web:
adresse: https://${ORGA}-wp.kaz.bzh/wp-admin
identifiant: ${MAIL_ADMIN}
mot de passe: ${MAIL_ADMIN_PASS}
doc: https://wiki.kaz.bzh/wordpress/start
La première chose à faire est de paramétrer ton site pour qu'il puisse envoyer des mails: https://wiki.kaz.bzh/wordpress/premiere_connexion
Si tu as envie d'avoir comme adresse de site , https://${ORGA}.kaz.bzh au lieu de https://${ORGA}-wp.kaz.bzh, fais nous signe !
"
fi
if [[ "${cloud}" = "on" ]]; then
MAIL_ADMIN=`grep NEXTCLOUD_ADMIN_USER /kaz/secret/orgas/${ORGA}/env-nextcloudServ | cut -f2 -d=`
MAIL_ADMIN_PASS=`grep NEXTCLOUD_ADMIN_PASSWORD /kaz/secret/orgas/${ORGA}/env-nextcloudServ | cut -f2 -d=`
MAIL="$MAIL
Cloud:
adresse: https://${ORGA}-cloud.kaz.bzh
identifiant: ${MAIL_ADMIN}
mot de passe: ${MAIL_ADMIN_PASS}
doc: https://wiki.kaz.bzh/nextcloud/start
La première chose à faire est de paramétrer ton cloud pour qu'il puisse envoyer des mails: https://wiki.kaz.bzh/nextcloud/administration/start#pour_parametrer_l_envoi_des_mails_de_notification_depuis_votre_cloud
"
fi
if [[ "${paheko}" = "on" ]]; then
MAIL_ADMIN_PASS=$(apg -n 1 -m 16 -M NCL)
MAIL="$MAIL
Paheko:
adresse: https://${ORGA}-paheko.kaz.bzh/admin/
identifiant: ${GREEN}--mettre ici le mail de l'orga--${RESET}
mot de passe: ${MAIL_ADMIN_PASS}
doc: https://wiki.kaz.bzh/paheko/start
"
fi
MAIL="$MAIL
Pour tes prochaines questions, nous t'invitons à les poser sur notre agora, dans le canal \"Un soucis, une question\" sur
https://agora.kaz.bzh/kaz/channels/une-question--un-soucis
Il faut te connecter avec ton compte kaz.
Ainsi, tout le monde pourra répondre mais aussi bénéficier des réponses apportées. On la joue collectif.
Bonne journée 😉
L'équipe Sysadmin, pour la collégiale de Kaz."
fi
echo -e "${GREEN}"
echo "*****************************************************"
echo "Voici le mail à copier/coller et à envoyer à l'orga :"
echo "*****************************************************"
echo -e "${RESET}"
echo -e "$MAIL"
echo -e "${GREEN}"
echo "MAIS AVANT D'ENVOYER CE MAIL, IL FAUT :
* completer la fiche paheko de l'orga en cochant les services crees"
if [[ "${paheko}" = "on" ]]; then
echo " * lancer /kaz/dockers/paheko/docker-compose-gen.sh, restart le docker puis finir d'installer paheko en allant sur https://${ORGA}-paheko.kaz.bzh/admin/"
fi
echo -e ${RESET}
##### FIN MAIL
-1
View File
@@ -54,7 +54,6 @@ OVERRIDE_FILE="compose.override.yml"
# sauvegarde si le fichier existe déjà # sauvegarde si le fichier existe déjà
if [ -f "$OVERRIDE_FILE" ]; then if [ -f "$OVERRIDE_FILE" ]; then
cp "$OVERRIDE_FILE" "${OVERRIDE_FILE}.$(date +%Y%m%d-%H%M%S).bak" cp "$OVERRIDE_FILE" "${OVERRIDE_FILE}.$(date +%Y%m%d-%H%M%S).bak"
echo "'tention, un $OVERRIDE_FILE existe déjà, il vient d'être sauvegardé !"
fi fi
#on récupère toutes les variables utiles #on récupère toutes les variables utiles
+2 -2
View File
@@ -3,7 +3,7 @@
services: services:
app: app:
image: mattermost/mattermost-team-edition:11.9.0 image: mattermost/mattermost-team-edition:11.6.1
container_name: ${mattermostServName} container_name: ${mattermostServName}
restart: ${restartPolicy} restart: ${restartPolicy}
volumes: volumes:
@@ -16,7 +16,7 @@ services:
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro - /etc/timezone:/etc/timezone:ro
- /etc/environment:/etc/environment:ro - /etc/environment:/etc/environment:ro
- ./mostlymatter-amd64-v11.9.0:/mattermost/bin/mattermost - ./mostlymatter-amd64-v11.6.1:/mattermost/bin/mattermost
env_file: env_file:
- ../../secret/env-${mattermostServName} - ../../secret/env-${mattermostServName}
environment: environment:
+4 -1
View File
@@ -1,4 +1,7 @@
FROM paheko/paheko:1.3.22 #FROM paheko/paheko:1.3.18-php8.4
#FROM paheko/paheko:1.3.19
#FROM paheko/paheko:1.3.19.1
FROM paheko/paheko:1.3.20
ENV PAHEKO_DIR /var/www/paheko ENV PAHEKO_DIR /var/www/paheko
-1
View File
@@ -193,7 +193,6 @@ POSTFIX_INET_PROTOCOLS=all
# ----------------------------------------------------------------------------------------------------------------------------- # -----------------------------------------------------------------------------------------------------------------------------
ENABLE_SPAMASSASSIN=1 ENABLE_SPAMASSASSIN=1
ENABLE_AMAVIS = 1
# deliver spam messages in the inbox (eventually tagged using SA_SPAM_SUBJECT) # deliver spam messages in the inbox (eventually tagged using SA_SPAM_SUBJECT)
SPAMASSASSIN_SPAM_TO_INBOX=1 SPAMASSASSIN_SPAM_TO_INBOX=1