Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4e63dfbf4d | ||
|
|
4ea4ba9739 | ||
|
|
bbeb59a127 | ||
|
|
099301f1e5 | ||
|
|
6ce5117150 | ||
|
|
b1ad728a8b | ||
|
|
d42420dfc2 | ||
|
|
f9e52a63fa | ||
|
|
9a06d5bc5c | ||
|
|
7534384473 | ||
|
|
2890e7ae09 |
@@ -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,15 +4,12 @@
|
|||||||
#Kan: 2021
|
#Kan: 2021
|
||||||
#Koi: gestion dockers
|
#Koi: gestion dockers
|
||||||
|
|
||||||
#29/09/2026: fab: supprime lien avec proxy-gen.sh
|
|
||||||
#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 :
|
||||||
@@ -29,7 +26,6 @@ setKazVars
|
|||||||
cd "${KAZ_BIN_DIR}"
|
cd "${KAZ_BIN_DIR}"
|
||||||
PATH_SAUVE="/home/sauve/"
|
PATH_SAUVE="/home/sauve/"
|
||||||
export SIMU=""
|
export SIMU=""
|
||||||
export STRICT=""
|
|
||||||
|
|
||||||
declare -a availableComposesNoNeedMail availableMailComposes availableComposesNeedMail availableProxyComposes availableOrga
|
declare -a availableComposesNoNeedMail availableMailComposes availableComposesNeedMail availableProxyComposes availableOrga
|
||||||
availableComposesNoNeedMail=($(getList "${KAZ_CONF_DIR}/container-withoutMail.list"))
|
availableComposesNoNeedMail=($(getList "${KAZ_CONF_DIR}/container-withoutMail.list"))
|
||||||
@@ -100,10 +96,9 @@ updateProxy () {
|
|||||||
"${DOCKERS_ENV}"
|
"${DOCKERS_ENV}"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
for item in "${availableProxyComposes[@]}"; do
|
||||||
# for item in "${availableProxyComposes[@]}"; do
|
${SIMU} ${KAZ_COMP_DIR}/${item}/proxy-gen.sh
|
||||||
# ${SIMU} ${KAZ_COMP_DIR}/${item}/proxy-gen.sh
|
done
|
||||||
# done
|
|
||||||
}
|
}
|
||||||
|
|
||||||
saveDB () {
|
saveDB () {
|
||||||
@@ -234,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
|
||||||
@@ -284,28 +274,15 @@ if [ "$#" -eq 0 ] ; then
|
|||||||
usage
|
usage
|
||||||
fi
|
fi
|
||||||
|
|
||||||
while [[ "$1" == -* ]] ;do
|
if [ "$1" == "-h" ] ; then
|
||||||
case "$1" in
|
usage
|
||||||
"-h" )
|
shift
|
||||||
usage
|
fi
|
||||||
shift
|
|
||||||
;;
|
if [ "$1" == "-n" ] ; then
|
||||||
"-n" )
|
export SIMU=echo
|
||||||
export SIMU=echo
|
shift
|
||||||
shift
|
fi
|
||||||
;;
|
|
||||||
"-strict" )
|
|
||||||
export STRICT="_X_Y"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
"--" )
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
* )
|
|
||||||
break
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
DCK_CMD=""
|
DCK_CMD=""
|
||||||
SAVE_CMD=""
|
SAVE_CMD=""
|
||||||
@@ -345,53 +322,38 @@ else
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
argExist=""
|
|
||||||
|
|
||||||
for compose in $*
|
for compose in $*
|
||||||
do
|
do
|
||||||
argExist=true
|
|
||||||
compose=${compose%/}
|
compose=${compose%/}
|
||||||
if [[ -z "${STRICT}" ]] ;then
|
if [[ ! " ${knownedComposes[@]} " =~ " ${compose} " ]]; then
|
||||||
if [[ ! " ${knownedComposes[@]} " =~ " ${compose} " ]]; then
|
declare -a subst
|
||||||
declare -a subst
|
subst=()
|
||||||
subst=()
|
for item in "${knownedComposes[@]}"; do
|
||||||
for item in "${knownedComposes[@]}"; do
|
[[ "${item}" =~ "${compose}" ]] && subst+=(${item})
|
||||||
[[ "${item}" =~ "${compose}" ]] && subst+=(${item})
|
done
|
||||||
done
|
if [ "${subst}" = "" ] ; then
|
||||||
if [ "${subst}" = "" ] ; then
|
echo
|
||||||
echo
|
echo "Unknown compose: ${RED}${BOLD}${compose}${NC} not in ${YELLOW}${BOLD}${knownedComposes[*]}${NC}"
|
||||||
echo "Unknown compose: ${RED}${BOLD}${compose}${NC} not in ${YELLOW}${BOLD}${knownedComposes[*]}${NC}"
|
echo
|
||||||
echo
|
exit 1
|
||||||
exit 1
|
else
|
||||||
else
|
echo "substitute compose: ${YELLOW}${BOLD}${compose} => ${subst[@]}${NC}"
|
||||||
echo "substitute compose: ${YELLOW}${BOLD}${compose} => ${subst[@]}${NC}"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for item in "${availableMailComposes[@]}"; do
|
for item in "${availableMailComposes[@]}"; do
|
||||||
[[ "${STRICT}${item}${STRICT}" =~ "${STRICT}${compose}${STRICT}" ]] && enableMailComposes+=("${item}")
|
[[ "${item}" =~ "${compose}" ]] && enableMailComposes+=("${item}")
|
||||||
done
|
done
|
||||||
for item in "${availableProxyComposes[@]}"; do
|
for item in "${availableProxyComposes[@]}"; do
|
||||||
[[ "${STRICT}${item}${STRICT}" =~ "${STRICT}${compose}${STRICT}" ]] && enableProxyComposes=("${item}")
|
[[ "${item}" =~ "${compose}" ]] && enableProxyComposes=("${item}")
|
||||||
done
|
done
|
||||||
for item in "${availableComposesNoNeedMail[@]}"; do
|
for item in "${availableComposesNoNeedMail[@]}"; do
|
||||||
[[ "${STRICT}${item}${STRICT}" =~ "${STRICT}${compose}${STRICT}" ]] && enableComposesNoNeedMail+=("${item}")
|
[[ "${item}" =~ "${compose}" ]] && enableComposesNoNeedMail+=("${item}")
|
||||||
done
|
done
|
||||||
for item in "${availableComposesNeedMail[@]}"; do
|
for item in "${availableComposesNeedMail[@]}"; do
|
||||||
[[ "${STRICT}${item}${STRICT}" =~ "${STRICT}${compose}${STRICT}" ]] && enableComposesNeedMail+=("${item}")
|
[[ "${item}" =~ "${compose}" ]] && enableComposesNeedMail+=("${item}")
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
|
||||||
if [[ ! -z "${argExist}" ]] ;then
|
|
||||||
if [[ -z "${enableMailComposes[@]}${enableProxyComposes[@]}${enableComposesNoNeedMail[@]}${enableComposesNeedMail[@]}" ]] ;then
|
|
||||||
echo
|
|
||||||
echo "Unknown arg: ${RED}${BOLD}" $* "${NC} not in ${YELLOW}${BOLD}${knownedComposes[*]}${NC}"
|
|
||||||
echo
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
[[ ! -z "${DCK_CMD}" ]] && "${DCK_CMD}" && exit 0
|
[[ ! -z "${DCK_CMD}" ]] && "${DCK_CMD}" && exit 0
|
||||||
|
|
||||||
[[ ! -z "${SAVE_CMD}" ]] && "${SAVE_CMD}" && exit 0
|
[[ ! -z "${SAVE_CMD}" ]] && "${SAVE_CMD}" && exit 0
|
||||||
|
|||||||
@@ -5,9 +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 29/09/2026: supprime le lien à proxy-gen.sh
|
|
||||||
#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
|
||||||
|
|
||||||
@@ -45,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}" # ???
|
||||||
|
|
||||||
@@ -222,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,})+$"
|
||||||
@@ -616,90 +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à ?
|
||||||
|
nb=$(docker exec mattermostServ bin/mmctl team list | grep -w "${EQUIPE_AGORA}" | wc -l)
|
||||||
#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
|
||||||
http_code=$(curl -s -o /dev/null -w "%{http_code}" -H "Authorization: Bearer ${mattermost_token}" "https://${URL_AGORA}/api/v4/teams/name/${EQUIPE_AGORA}")
|
echo "docker exec -i mattermostServ bin/mmctl team create --name ${EQUIPE_AGORA} --display-name ${EQUIPE_AGORA} --email ${EMAIL_SOUHAITE}" --private | tee -a "${CMD_INIT}"
|
||||||
[ "$http_code" -eq 200 ] && nb=1 || nb=0
|
fi
|
||||||
|
# puis ajouter le user à l'équipe
|
||||||
if [ "${nb}" == "0" ];then # non, on la créé en mettant le user en admin de l'équipe
|
echo "docker exec -i mattermostServ bin/mmctl team users add ${EQUIPE_AGORA} ${EMAIL_SOUHAITE}" | tee -a "${CMD_INIT}"
|
||||||
|
|
||||||
#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
|
|
||||||
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
|
||||||
@@ -720,25 +630,12 @@ EOF
|
|||||||
if [[ "${mode}" = "dev" ]]; then
|
if [[ "${mode}" = "dev" ]]; then
|
||||||
echo "# DEV, on teste l'inscription à sympa"| tee -a "${CMD_SYMPA}"
|
echo "# DEV, on teste l'inscription à sympa"| tee -a "${CMD_SYMPA}"
|
||||||
LISTMASTER=$(echo ${LISTMASTERS} | cut -d',' -f1)
|
LISTMASTER=$(echo ${LISTMASTERS} | cut -d',' -f1)
|
||||||
|
echo "docker exec -i sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=\"USER_EMAIL=${LISTMASTER}\" --service=add --service_parameters=\"${NL_LIST},${EMAIL_SOUHAITE}\"" | tee -a "${CMD_SYMPA}"
|
||||||
#avec le vieux client soap
|
|
||||||
#echo "docker exec -i sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=\"USER_EMAIL=${LISTMASTER}\" --service=add --service_parameters=\"${NL_LIST},${EMAIL_SOUHAITE}\"" | tee -a "${CMD_SYMPA}"
|
|
||||||
|
|
||||||
#avec le nouveau clt soap
|
|
||||||
echo "docker exec -i sympaServ sympa test soap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=\"USER_EMAIL=${LISTMASTER}\" --service=add --service_parameters=\"${NL_LIST},${EMAIL_SOUHAITE}\" ${httpProto}://${URL_LISTE}/sympasoap" | tee -a "${CMD_SYMPA}"
|
|
||||||
|
|
||||||
else
|
else
|
||||||
echo "# PROD, on inscrit à sympa"| tee -a "${CMD_SYMPA}"
|
echo "# PROD, on inscrit à sympa"| tee -a "${CMD_SYMPA}"
|
||||||
LISTMASTER=$(echo ${LISTMASTERS} | cut -d',' -f1)
|
LISTMASTER=$(echo ${LISTMASTERS} | cut -d',' -f1)
|
||||||
|
echo "docker exec -i sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=\"USER_EMAIL=${LISTMASTER}\" --service=add --service_parameters=\"${NL_LIST},${EMAIL_SOUHAITE}\"" | tee -a "${CMD_SYMPA}"
|
||||||
#avec le vieux client soap
|
echo "docker exec -i sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=\"USER_EMAIL=${LISTMASTER}\" --service=add --service_parameters=\"${NL_LIST},${EMAIL_SECOURS}\"" | tee -a "${CMD_SYMPA}"
|
||||||
#echo "docker exec -i sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=\"USER_EMAIL=${LISTMASTER}\" --service=add --service_parameters=\"${NL_LIST},${EMAIL_SOUHAITE}\"" | tee -a "${CMD_SYMPA}"
|
|
||||||
#echo "docker exec -i sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=\"USER_EMAIL=${LISTMASTER}\" --service=add --service_parameters=\"${NL_LIST},${EMAIL_SECOURS}\"" | tee -a "${CMD_SYMPA}"
|
|
||||||
|
|
||||||
#avec le nouveau clt soap
|
|
||||||
echo "docker exec -i sympaServ sympa test soap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=\"USER_EMAIL=${LISTMASTER}\" --service=add --service_parameters=\"${NL_LIST},${EMAIL_SOUHAITE}\" ${httpProto}://${URL_LISTE}/sympasoap" | tee -a "${CMD_SYMPA}"
|
|
||||||
echo "docker exec -i sympaServ sympa test soap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=\"USER_EMAIL=${LISTMASTER}\" --service=add --service_parameters=\"${NL_LIST},${EMAIL_SECOURS}\" ${httpProto}://${URL_LISTE}/sympasoap" | tee -a "${CMD_SYMPA}"
|
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${service[ADMIN_ORGA]}" == "O" ]; then
|
if [ "${service[ADMIN_ORGA]}" == "O" ]; then
|
||||||
@@ -778,9 +675,6 @@ Par retour de mail, dites-nous de quoi vous avez besoin tout de suite entre:
|
|||||||
* un cloud : bureau virtuel pour stocker des fichiers/calendriers/contacts et partager avec vos connaissances
|
* un cloud : bureau virtuel pour stocker des fichiers/calendriers/contacts et partager avec vos connaissances
|
||||||
|
|
||||||
Une fois que vous aurez répondu à ce mail, votre demande sera traitée manuellement.
|
Une fois que vous aurez répondu à ce mail, votre demande sera traitée manuellement.
|
||||||
|
|
||||||
Pour rappel, le cloud général https://cloud.kaz.bzh est dédié aux particuliers. Pour les orgas, il est préférable de créer des clouds dédiés où vous serez administrateur.
|
|
||||||
|
|
||||||
"
|
"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -828,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 ;)
|
||||||
|
|
||||||
@@ -863,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}"
|
||||||
@@ -883,8 +766,7 @@ if [[ -n "${ALL_ORGA}" ]]; then
|
|||||||
echo "sleep 2" | tee -a "${CMD_PROXY}"
|
echo "sleep 2" | tee -a "${CMD_PROXY}"
|
||||||
echo "${KAZ_BIN_DIR}/container.sh start ${ALL_ORGA}" | tee -a "${CMD_PROXY}"
|
echo "${KAZ_BIN_DIR}/container.sh start ${ALL_ORGA}" | tee -a "${CMD_PROXY}"
|
||||||
for item in "${availableProxyComposes[@]}"; do
|
for item in "${availableProxyComposes[@]}"; do
|
||||||
#echo "cd \"${KAZ_COMP_DIR}/${item}/\"; ./proxy-gen.sh; docker-compose up -d; ./reload.sh " | tee -a "${CMD_PROXY}"
|
echo "cd \"${KAZ_COMP_DIR}/${item}/\"; ./proxy-gen.sh; docker-compose up -d; ./reload.sh " | tee -a "${CMD_PROXY}"
|
||||||
echo "cd \"${KAZ_COMP_DIR}/${item}/\"; docker-compose up -d; ./reload.sh " | tee -a "${CMD_PROXY}"
|
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
for cloud in $(docker ps --format "{{json .Names}}" | grep nextcloud | jq -r .)
|
for cloud in $(docker ps | grep -i nextcloudServ |awk '{print $12}')
|
||||||
do
|
do
|
||||||
docker exec -u www-data $cloud php cron.php
|
docker exec -u www-data $cloud php cron.php
|
||||||
|
|
||||||
|
|||||||
@@ -3,8 +3,7 @@
|
|||||||
# 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/bin/.commonFunctions.sh
|
. $KAZ_ROOT/bin/.commonFunctions.sh
|
||||||
setKazVars
|
setKazVars
|
||||||
|
|
||||||
@@ -14,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="04-10-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=' '
|
||||||
@@ -26,19 +25,19 @@ 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)
|
||||||
|
|
||||||
|
|
||||||
#### Test du serveur sur lequel s' execute le script ####
|
#### Test du serveur sur lequel s' execute le script ####
|
||||||
echo ${site} | grep -E 'prod1|dev' >/dev/null 2>&1 || { echo "Le script ne fonctionne que sur Prod1 et Dev ";exit;}
|
echo ${site} | grep -E 'prod1|dev' || { echo "Le script ne fonctionne que sur Prod1 et Dev ";exit;}
|
||||||
##############################
|
##############################
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
@@ -60,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
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -189,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}"
|
||||||
@@ -215,17 +219,12 @@ 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
|
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}"
|
||||||
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 maildeSecours | sed -e 's/mailDeSecours://'
|
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 maildeSecours | sed -e 's/mailDeSecours://'
|
||||||
echo -ne "${NC}"
|
echo -ne "${NC}"
|
||||||
echo -ne " - Tel Mobile : "
|
|
||||||
echo -ne "${GREEN}"
|
|
||||||
REPMOBILE=$(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 mobile | sed -e 's/mobile://')
|
|
||||||
[ -z ${REPMOBILE} ] && echo "NC" || echo ${REPMOBILE}
|
|
||||||
echo -ne "${NC}"
|
|
||||||
echo -n " - Alias (Ldap) : "
|
echo -n " - Alias (Ldap) : "
|
||||||
echo -ne "${GREEN}"
|
echo -ne "${GREEN}"
|
||||||
LDAP_ALIAS=$(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 alias | cut -c 11-60)
|
LDAP_ALIAS=$(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 alias | cut -c 11-60)
|
||||||
@@ -239,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 <=="
|
||||||
;;
|
;;
|
||||||
@@ -303,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
|
||||||
@@ -343,13 +340,8 @@ searchDestroy() {
|
|||||||
echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} et ${MAIL_SECOURS} dans la liste info de sympa"
|
echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} et ${MAIL_SECOURS} dans la liste info de sympa"
|
||||||
echo -e "${NC}"
|
echo -e "${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
#avec ancien client soap
|
docker exec -ti sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=USER_EMAIL=${LISTMASTER} --service=del --service_parameters="${NL_LIST},${REP_SEARCH_DESTROY}"
|
||||||
#docker exec -ti sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=USER_EMAIL=${LISTMASTER} --service=del --service_parameters="${NL_LIST},${REP_SEARCH_DESTROY}"
|
docker exec -ti sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=USER_EMAIL=${LISTMASTER} --service=del --service_parameters="${NL_LIST},${MAIL_SECOURS}"
|
||||||
#docker exec -ti sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=USER_EMAIL=${LISTMASTER} --service=del --service_parameters="${NL_LIST},${MAIL_SECOURS}"
|
|
||||||
#avec nouveau client soap
|
|
||||||
docker exec -i sympaServ sympa test soap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=\"USER_EMAIL=${LISTMASTER}\" --service=del --service_parameters=\"${NL_LIST},${REP_SEARCH_DESTROY}\" ${httpProto}://${URL_LISTE}/sympasoap
|
|
||||||
docker exec -i sympaServ sympa test soap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=\"USER_EMAIL=${LISTMASTER}\" --service=del --service_parameters=\"${NL_LIST},${MAIL_SECOURS}\" ${httpProto}://${URL_LISTE}/sympasoap
|
|
||||||
|
|
||||||
echo -e "${NC}"
|
echo -e "${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} dans le serveur de mail"
|
echo -e "${RED} suppression de ${REP_SEARCH_DESTROY} dans le serveur de mail"
|
||||||
@@ -380,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=''
|
||||||
@@ -394,12 +386,17 @@ 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
|
searchEmail
|
||||||
#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}" \
|
||||||
@@ -418,7 +415,7 @@ gestPassword() {
|
|||||||
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)
|
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 ]
|
if [ $EMAIL_ORGA_TROUVE -ge 1 ]
|
||||||
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
|
||||||
##########################################################################
|
##########################################################################
|
||||||
read -p "ON CONTINUE ? [ o / n ]: " SEARCH_RESET_INPUT
|
read -p "ON CONTINUE ? [ o / n ]: " SEARCH_RESET_INPUT
|
||||||
@@ -435,40 +432,7 @@ gestPassword() {
|
|||||||
echo -e "$GREEN Compte $RED $(searchMattermost $COMPTE_A_MODIFIER) ${NC}"
|
echo -e "$GREEN Compte $RED $(searchMattermost $COMPTE_A_MODIFIER) ${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}"
|
||||||
|
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 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
|
|
||||||
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
|
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
|
||||||
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\
|
||||||
@@ -476,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}"
|
||||||
@@ -490,17 +454,8 @@ Le site d' aide pour la configuration des services : https://wiki.kaz.bzh
|
|||||||
Le site Web de Kaz : https://kaz.bzh
|
Le site Web de Kaz : https://kaz.bzh
|
||||||
Le mail de la collégiale : contact@kaz.bzh
|
Le mail de la collégiale : contact@kaz.bzh
|
||||||
|
|
||||||
Pour tes prochaines questions, je t'invite à les (re)poser sur notre agora, dans le canal \"Un soucis, une question\" sur
|
A bientôt"
|
||||||
https://agora.kaz.bzh/kaz/channels/une-question--un-soucis
|
ExpMail ${MAIL_SECOURS} "Modification du compte" ${MAIL_CHANG}
|
||||||
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 😉
|
|
||||||
"
|
|
||||||
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
|
||||||
@@ -517,31 +472,22 @@ createMail() {
|
|||||||
QUOTA=1
|
QUOTA=1
|
||||||
TRUE_KAZ=TRUE
|
TRUE_KAZ=TRUE
|
||||||
fait=0
|
fait=0
|
||||||
# si c'est une demande de création non interactive
|
# On demande le mail souhaite on regarde si c' est valide et si ça existe déjà
|
||||||
# la valeur de CREATE_AUTO doit être à TRUE
|
while [ $fait -eq 0 ]
|
||||||
CREATE_AUTO=${1}
|
do
|
||||||
EMAIL_SOUHAITE=${2}
|
clear
|
||||||
EMAIL_SECOURS=${3}
|
echo "----------------------------------------------------------------------"
|
||||||
# Si on est en interactif, On demande le mail souhaite le mail secours et on demande le nom et prenom
|
printKazMsg "${ACTION_EN_COURS}"
|
||||||
# et on regarde si c' est valide et si ça existe déjà
|
echo "----------------------------------------------------------------------"
|
||||||
if [ "${CREATE_AUTO}" != "TRUE" ]
|
read -p "Mail souhaité (r ou R pour quitter ) : " EMAIL_SOUHAITE
|
||||||
then
|
[[ ${EMAIL_SOUHAITE} =~ ^[rRqQ]$ ]] && Main
|
||||||
while [ $fait -eq 0 ]
|
if [[ ${EMAIL_SOUHAITE} =~ ${regexMail} ]]
|
||||||
do
|
then
|
||||||
clear
|
|
||||||
echo "----------------------------------------------------------------------"
|
|
||||||
printKazMsg "${ACTION_EN_COURS}"
|
|
||||||
echo "----------------------------------------------------------------------"
|
|
||||||
read -p "Mail souhaité (r ou R pour quitter ) : " EMAIL_SOUHAITE
|
|
||||||
[[ ${EMAIL_SOUHAITE} =~ ^[rRqQ]$ ]] && Main
|
|
||||||
EMAIL_SOUHAITE=$(unaccent utf8 ${EMAIL_SOUHAITE})
|
|
||||||
if [[ ${EMAIL_SOUHAITE} =~ ${regexMail} ]]
|
|
||||||
then
|
|
||||||
ldapsearch -H ldap://${LDAP_IP} \
|
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}" \
|
||||||
-b "${ldap_root}" "(&(objectclass=inetOrgPerson)(cn=${EMAIL_SOUHAITE}))" cn | grep ^cn | sed -e 's/^cn: //' >$TFILE_EMAILS
|
-b "${ldap_root}" "(&(objectclass=inetOrgPerson)(cn=${EMAIL_SOUHAITE}))" cn | grep ^cn | sed -e 's/^cn: //' >$TFILE_EMAILS
|
||||||
if grep -q "^${EMAIL_SOUHAITE}$" "${TFILE_EMAILS}"
|
if grep -q "^${EMAIL_SOUHAITE}$" "${TFILE_EMAILS}"
|
||||||
then
|
then
|
||||||
printKazError " - Le mail ${EMAIL_SOUHAITE} existe déjà"
|
printKazError " - Le mail ${EMAIL_SOUHAITE} existe déjà"
|
||||||
fait=0
|
fait=0
|
||||||
@@ -553,71 +499,45 @@ createMail() {
|
|||||||
else
|
else
|
||||||
fait=1
|
fait=1
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
printKazError " - Mail invalide !"
|
printKazError " - Mail invalide !"
|
||||||
sleep 2
|
sleep 2
|
||||||
fait=0
|
fait=0
|
||||||
fi
|
|
||||||
done
|
|
||||||
# on renseigne le domaine en cours pour les options qui concernent pas le domaine kaz.bzh
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
DOMAINE_EN_COURS=$(echo ${EMAIL_SOUHAITE} | sed -e 's/^.*@//')
|
|
||||||
echo " ---- Domaine: " ${DOMAINE_EN_COURS} ----
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
fait=0
|
|
||||||
while [ $fait -eq 0 ]
|
|
||||||
do
|
|
||||||
read -p "Mail de secours : " EMAIL_SECOURS
|
|
||||||
if [[ ${EMAIL_SECOURS} =~ ${regexMail} ]] && [ "${EMAIL_SECOURS}" != "" ]
|
|
||||||
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
|
|
||||||
while [ "${PRENOM}" = "" ]
|
|
||||||
do
|
|
||||||
read -p "Prenom : " PRENOM
|
|
||||||
done
|
|
||||||
# On demande le nom
|
|
||||||
while [ "${NOM}" = "" ]
|
|
||||||
do
|
|
||||||
read -p "Nom : " NOM
|
|
||||||
done
|
|
||||||
else
|
|
||||||
ERRMAILAUTO=""
|
|
||||||
# on renseigne DOMAINE EN COURS pour cette partie de script ( puisque l'autre déclaration se fait dasn la boucle interactive
|
|
||||||
DOMAINE_EN_COURS=$(echo ${EMAIL_SOUHAITE} | sed -e 's/^.*@//')
|
|
||||||
NOM=kaz
|
|
||||||
PRENOM=$(apg -m 8 -x 5 -n 1)
|
|
||||||
# on cherche le mail dans l'annuaire
|
|
||||||
ldapsearch -H ldap://${LDAP_IP} \
|
|
||||||
-x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \
|
|
||||||
-w "${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
|
|
||||||
ERRMAILAUTO="${ERRMAILAUTO} Le mail ${EMAIL_SOUHAITE} existe déjà"
|
|
||||||
fi
|
fi
|
||||||
if ! grep $(echo ${EMAIL_SOUHAITE} | sed -e 's/^.*@//') ${KAZ_CONF_DIR}/autorized-domains.txt >/dev/null
|
done
|
||||||
|
# on renseigne le domaine en cours pour les options qui concernent pas le domaine kaz.bzh
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
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} ]] && [ "${EMAIL_SECOURS}" != "" ]
|
||||||
then
|
then
|
||||||
ERRMAILAUTO="${ERRMAILAUTO} Le domaine ${DOMAINE_EN_COURS} n' est pas dans la liste autorisée"
|
fait=1
|
||||||
|
else
|
||||||
|
printKazError "Mail invalide"
|
||||||
|
fait=0
|
||||||
fi
|
fi
|
||||||
if [ ! -z "${ERRMAILAUTO}" ]
|
if [ "${EMAIL_SECOURS}" = "${EMAIL_SOUHAITE}" ]
|
||||||
then
|
then
|
||||||
PostMattermost "Erreur de script auto : ${ERRMAILAUTO}" "Creation-Comptes"
|
echo -e "${RED}Le mail de secours ne peut pas etre le meme que le mail demande${NC}"
|
||||||
echo "Erreur de script auto : ${ERRMAILAUTO}"
|
fait=0
|
||||||
exit
|
fi
|
||||||
fi
|
done
|
||||||
|
# On demande le prenom
|
||||||
fi
|
while [ "${PRENOM}" = "" ]
|
||||||
|
do
|
||||||
|
read -p "Prenom : " PRENOM
|
||||||
|
done
|
||||||
|
# On demande le nom
|
||||||
|
while [ "${NOM}" = "" ]
|
||||||
|
do
|
||||||
|
read -p "Nom : " NOM
|
||||||
|
done
|
||||||
# On constitue l' ident kaz pour le ldap
|
# On constitue l' ident kaz pour le ldap
|
||||||
IDENT_KAZ=$(unaccent utf8 "${PRENOM,,}.${NOM,,}")
|
IDENT_KAZ=$(unaccent utf8 "${PRENOM,,}.${NOM,,}")
|
||||||
# on créé le mot de passe
|
# on créé le mot de passe
|
||||||
@@ -626,24 +546,21 @@ createMail() {
|
|||||||
LDAPUSER=$(echo ${EMAIL_SOUHAITE} | awk -F '@' '{print $1}')
|
LDAPUSER=$(echo ${EMAIL_SOUHAITE} | awk -F '@' '{print $1}')
|
||||||
LDAPDOMAIN=$(echo ${EMAIL_SOUHAITE} | awk -F '@' '{print $2}')
|
LDAPDOMAIN=$(echo ${EMAIL_SOUHAITE} | awk -F '@' '{print $2}')
|
||||||
LDAPPASS=$(mkpasswd -m sha512crypt ${PASSWORD})
|
LDAPPASS=$(mkpasswd -m sha512crypt ${PASSWORD})
|
||||||
if [ "${CREATE_AUTO}" != "TRUE" ]
|
[ "${DOMAINE_EN_COURS}" != "${domain}" ] && TRUE_KAZ=FALSE
|
||||||
then
|
echo "${GREEN}Mail souhaité : ${NC}${EMAIL_SOUHAITE}"
|
||||||
[ "${DOMAINE_EN_COURS}" != "${domain}" ] && TRUE_KAZ=FALSE
|
echo "${GREEN}Mail secours : ${NC}${EMAIL_SECOURS}"
|
||||||
echo "${GREEN}Mail souhaité : ${NC}${EMAIL_SOUHAITE}"
|
echo "${GREEN}Prénom : ${NC}${PRENOM}"
|
||||||
echo "${GREEN}Mail secours : ${NC}${EMAIL_SECOURS}"
|
echo "${GREEN}Nom : ${NC}${NOM}"
|
||||||
echo "${GREEN}Prénom : ${NC}${PRENOM}"
|
echo "${GREEN}Mot de passe : ${NC}${PASSWORD}"
|
||||||
echo "${GREEN}Nom : ${NC}${NOM}"
|
RCREATION=""
|
||||||
echo "${GREEN}Mot de passe : ${NC}${PASSWORD}"
|
repRegEx='^[oOnN]$'
|
||||||
RCREATION=""
|
while ! [[ ${RCREATION} =~ ${repRegEx} ]]
|
||||||
repRegEx='^[oOnN]$'
|
do
|
||||||
while ! [[ ${RCREATION} =~ ${repRegEx} ]]
|
read -p "Création ? o/n : " RCREATION
|
||||||
do
|
done
|
||||||
read -p "Création ? o/n : " RCREATION
|
if [ ${RCREATION} = "n" ] || [ ${RCREATION} = "N" ]
|
||||||
done
|
then
|
||||||
if [ ${RCREATION} = "n" ] || [ ${RCREATION} = "N" ]
|
Main
|
||||||
then
|
|
||||||
Main
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
echo "echo -e '\n\ndn: cn=${EMAIL_SOUHAITE},ou=users,${ldap_root}\n\
|
echo "echo -e '\n\ndn: cn=${EMAIL_SOUHAITE},ou=users,${ldap_root}\n\
|
||||||
changeType: add\n\
|
changeType: add\n\
|
||||||
@@ -669,7 +586,6 @@ agoraEnabled: ${TRUE_KAZ}\n\
|
|||||||
userPassword: {CRYPT}${LDAPPASS}\n\n' | ldapmodify -c -H ldap://${LDAP_IP} -D \"cn=${LDAP_ADMIN_USERNAME},${ldap_root}\" -x -w ${LDAP_ADMIN_PASSWORD}" >${TFILE_CREATE_MAIL}
|
userPassword: {CRYPT}${LDAPPASS}\n\n' | ldapmodify -c -H ldap://${LDAP_IP} -D \"cn=${LDAP_ADMIN_USERNAME},${ldap_root}\" -x -w ${LDAP_ADMIN_PASSWORD}" >${TFILE_CREATE_MAIL}
|
||||||
# on execute le fichier avec les données ldap pour créer l' entrée dans l' annuaire
|
# on execute le fichier avec les données ldap pour créer l' entrée dans l' annuaire
|
||||||
bash ${TFILE_CREATE_MAIL} >/dev/null
|
bash ${TFILE_CREATE_MAIL} >/dev/null
|
||||||
#DID
|
|
||||||
# on colle le compte et le mot de passe dans le fichier
|
# 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}
|
echo "Création de : ${EMAIL_SOUHAITE} avec le mot de passe : ${PASSWORD}" >>${TFILE_CREATE_MAIL}
|
||||||
OLDIFS=${IFS}
|
OLDIFS=${IFS}
|
||||||
@@ -684,31 +600,18 @@ $(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}
|
||||||
# si non interactif on fait une pause pour afficher une eventuelle erreur
|
echo " --------------------------------------------------------------------"
|
||||||
if [ "${CREATE_AUTO}" != "TRUE" ]
|
echo "! INFO : !"
|
||||||
then
|
echo "! Le Mot de passe !"
|
||||||
read -p " - ENTREE pour continuer - "
|
echo "! Est dans le fichier !"
|
||||||
createMail
|
echo "! ${TFILE_CREATE_MAIL} !"
|
||||||
fi
|
echo " --------------------------------------------------------------------"
|
||||||
}
|
echo
|
||||||
|
read -p " - ENTREE pour continuer - "
|
||||||
createMailAuto()
|
# Retour au menu principal
|
||||||
{
|
Main
|
||||||
if [ "$#" -ne "3" ]
|
|
||||||
then
|
|
||||||
echo "$0 pas assez d'arguments"
|
|
||||||
PostMattermost "Erreur de script $0 ,constacter les sysadmins " "Creation-Comptes"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
if [[ ${2} =~ ${regexMail} ]] && [[ ${3} =~ ${regexMail} ]]
|
|
||||||
then
|
|
||||||
createMail TRUE ${2} ${3}
|
|
||||||
else
|
|
||||||
echo "Les mails sont invalides"
|
|
||||||
PostMattermost "Erreur de script $0 ,les mails demandés sont malformés" "Creation-Comptes"
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
createAlias() {
|
createAlias() {
|
||||||
@@ -985,7 +888,7 @@ updateUser() {
|
|||||||
MAILDESECOURSACTUEL=""
|
MAILDESECOURSACTUEL=""
|
||||||
MAILDESECOURS=""
|
MAILDESECOURS=""
|
||||||
Ucompteur=1
|
Ucompteur=1
|
||||||
for attribut in mailDeSecours mailAlias mailQuota nextcloudQuota mobile
|
for attribut in mailDeSecours mailAlias mailQuota nextcloudQuota
|
||||||
do
|
do
|
||||||
ATTRIB+=([${attribut}]=$(ldapsearch -H ldap://${LDAP_IP} \
|
ATTRIB+=([${attribut}]=$(ldapsearch -H ldap://${LDAP_IP} \
|
||||||
-x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \
|
-x -D "cn=${LDAP_ADMIN_USERNAME},${ldap_root}" \
|
||||||
@@ -1064,18 +967,6 @@ updateUser() {
|
|||||||
fi
|
fi
|
||||||
faitAttrib=0
|
faitAttrib=0
|
||||||
;;
|
;;
|
||||||
mobile )
|
|
||||||
read -p "Quel est le numéo du mobile au format 0XXXXXXXXXXX : " RCHANGE
|
|
||||||
if [[ ${RCHANGE} =~ ^[0-9]+$ ]] && [ "$(echo ${RCHANGE} | wc -L)" -eq "10" ]
|
|
||||||
then
|
|
||||||
# prévoir un passage en +33XXXXXXXXXX ?
|
|
||||||
CHANGED+=([mobile]="${RCHANGE}")
|
|
||||||
else
|
|
||||||
echo "Valeur incorecte"
|
|
||||||
sleep 3
|
|
||||||
fi
|
|
||||||
faitAttrib=0
|
|
||||||
;;
|
|
||||||
mailDeSecours )
|
mailDeSecours )
|
||||||
echo "------------------------------------------------"
|
echo "------------------------------------------------"
|
||||||
read -p " - Nouveau Mail de Secours : " RCHANGE
|
read -p " - Nouveau Mail de Secours : " RCHANGE
|
||||||
@@ -1190,13 +1081,9 @@ updateUser() {
|
|||||||
if [ ! -z ${MAILDESECOURS} ]
|
if [ ! -z ${MAILDESECOURS} ]
|
||||||
then
|
then
|
||||||
# suppression du mail de secours de la liste infos
|
# 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=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=USER_EMAIL=${LISTMASTER} --service=del --service_parameters="${NL_LIST},${MAILDESECOURSACTUEL}"
|
docker exec -ti sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=USER_EMAIL=${LISTMASTER} --service=del --service_parameters="${NL_LIST},${MAILDESECOURSACTUEL}"
|
||||||
docker exec -i sympaServ sympa test soap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars="USER_EMAIL=${LISTMASTER}" --service=del --service_parameters="${NL_LIST},${MAIL_SECOURS}" ${httpProto}://${URL_LISTE}/sympasoap
|
|
||||||
|
|
||||||
# ajout de l' adresse de la nouvelle adresse de secours
|
# 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=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=USER_EMAIL=${LISTMASTER} --service=add --service_parameters="${NL_LIST},${MAILDESECOURS}"
|
docker exec -ti sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars=USER_EMAIL=${LISTMASTER} --service=add --service_parameters="${NL_LIST},${MAILDESECOURS}"
|
||||||
docker exec -i sympaServ sympa test soap --trusted_application=${SOAP_USER} --trusted_application_password=${SOAP_PASSWORD} --proxy_vars="USER_EMAIL=${LISTMASTER}" --service=add --service_parameters="${NL_LIST},${MAIL_SECOURS}" ${httpProto}://${URL_LISTE}/sympasoap
|
|
||||||
|
|
||||||
fi
|
fi
|
||||||
updateUser
|
updateUser
|
||||||
fi
|
fi
|
||||||
@@ -1214,9 +1101,6 @@ updateUser() {
|
|||||||
usage () {
|
usage () {
|
||||||
printKazMsg "$PRG [-h] [-v]"
|
printKazMsg "$PRG [-h] [-v]"
|
||||||
printKazMsg "script de gestion des kaznautes"
|
printKazMsg "script de gestion des kaznautes"
|
||||||
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 " -h aide sur ce script"
|
printKazMsg " -h aide sur ce script"
|
||||||
printKazMsg " -v version du script."
|
printKazMsg " -v version du script."
|
||||||
}
|
}
|
||||||
@@ -1236,18 +1120,18 @@ echo "-------------------------------------------------"
|
|||||||
echo -e "${BOLD}COMPTES : "
|
echo -e "${BOLD}COMPTES : "
|
||||||
echo -e "${NC}*********"
|
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"
|
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}"
|
||||||
echo -e "${BOLD}ALIAS : "
|
echo -e "${BOLD}ALIAS : "
|
||||||
echo -e "${NC}*******"
|
echo -e "${NC}*******"
|
||||||
echo -e "${NC}"
|
echo -e "${NC}"
|
||||||
echo -e " ${NC}6 - Création d'un alias Général pour mails Externes"
|
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 " ${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 " ${GREEN}8 - Suppression d' un alias Général pour mails Externes"
|
||||||
echo -e "${NC}"
|
echo -e "${NC}"
|
||||||
echo "-------------------------------------------------"
|
echo "-------------------------------------------------"
|
||||||
echo -e "${NC}"
|
echo -e "${NC}"
|
||||||
@@ -1259,7 +1143,7 @@ case "$CHOICE" in
|
|||||||
'2' )
|
'2' )
|
||||||
updateUser
|
updateUser
|
||||||
;;
|
;;
|
||||||
'3' )
|
'3' )
|
||||||
gestPassword
|
gestPassword
|
||||||
;;
|
;;
|
||||||
'4' )
|
'4' )
|
||||||
@@ -1308,10 +1192,6 @@ case "$1" in
|
|||||||
printKazMsg "$PRG version $VERSION"
|
printKazMsg "$PRG version $VERSION"
|
||||||
exit
|
exit
|
||||||
;;
|
;;
|
||||||
'-c' )
|
|
||||||
createMailAuto $@
|
|
||||||
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
|
||||||
|
|||||||
@@ -1,323 +0,0 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
|
|
||||||
#KAN: 29/09/2026
|
|
||||||
#KOI: permettre de lancer des actions pour les orga depuis paheko
|
|
||||||
#KI: fab
|
|
||||||
|
|
||||||
#structure:
|
|
||||||
#
|
|
||||||
#/kaz/
|
|
||||||
#├── docker/paheko/config/
|
|
||||||
#| └── kaz_detect_changes.php
|
|
||||||
#├── bin/
|
|
||||||
#| ├── worker_transfert.sh
|
|
||||||
#│ ├── worker.py
|
|
||||||
#│ └── worker_actions
|
|
||||||
#│ ├── modifier_services.py
|
|
||||||
#│ ├── definir_quota.py
|
|
||||||
#│ └── etc...
|
|
||||||
#├── log/
|
|
||||||
#│ └── worker.log
|
|
||||||
#├── tmp/
|
|
||||||
#│ └── jobs/
|
|
||||||
#│ └── job-6abcbb939dc43.json.transfere
|
|
||||||
#└── jobs/
|
|
||||||
# ├── job-6abcd79243e75.json.mail
|
|
||||||
# ├── job-6abcd79243e75.json.OK
|
|
||||||
# ├── job-3efab81234521.json.KO
|
|
||||||
# └── ...
|
|
||||||
|
|
||||||
import glob
|
|
||||||
import importlib
|
|
||||||
import json
|
|
||||||
import logging
|
|
||||||
import os
|
|
||||||
import subprocess
|
|
||||||
import sys
|
|
||||||
import urllib.request
|
|
||||||
|
|
||||||
|
|
||||||
BASE_DIR = "/kaz/bin"
|
|
||||||
JOBS_DIR = "/kaz/jobs"
|
|
||||||
|
|
||||||
if BASE_DIR not in sys.path:
|
|
||||||
sys.path.insert(0, BASE_DIR)
|
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# LOG
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
LOG_DIR = "/kaz/log"
|
|
||||||
LOG_FILE = os.path.join(LOG_DIR, "worker.log")
|
|
||||||
|
|
||||||
os.makedirs(LOG_DIR, exist_ok=True)
|
|
||||||
|
|
||||||
logging.basicConfig(
|
|
||||||
level=logging.INFO,
|
|
||||||
format="%(asctime)s %(levelname)s %(message)s",
|
|
||||||
datefmt="%Y-%m-%d %H:%M:%S",
|
|
||||||
handlers=[
|
|
||||||
logging.FileHandler(LOG_FILE, encoding="utf-8"),
|
|
||||||
logging.StreamHandler(sys.stdout),
|
|
||||||
],
|
|
||||||
)
|
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# ENVOI D'UN MESSAGE MATTERMOST
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
def send_mattermost(message):
|
|
||||||
|
|
||||||
url_agora = "agora.kaz.bzh"
|
|
||||||
|
|
||||||
result = subprocess.run(
|
|
||||||
[
|
|
||||||
"bash",
|
|
||||||
"-c",
|
|
||||||
". /kaz/secret/env-mattermostAdmin && "
|
|
||||||
"printf '%s' \"$token_webhook\""
|
|
||||||
],
|
|
||||||
capture_output=True,
|
|
||||||
text=True,
|
|
||||||
check=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
token_webhook = result.stdout
|
|
||||||
|
|
||||||
url = f"https://{url_agora}/hooks/{token_webhook}"
|
|
||||||
|
|
||||||
payload = json.dumps({
|
|
||||||
"channel": "creation-comptes",
|
|
||||||
"text": message,
|
|
||||||
}).encode("utf-8")
|
|
||||||
|
|
||||||
request = urllib.request.Request(
|
|
||||||
url,
|
|
||||||
data=payload,
|
|
||||||
headers={
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
},
|
|
||||||
method="POST",
|
|
||||||
)
|
|
||||||
|
|
||||||
with urllib.request.urlopen(request) as response:
|
|
||||||
|
|
||||||
if response.status < 200 or response.status >= 300:
|
|
||||||
raise RuntimeError(
|
|
||||||
f"Erreur Mattermost : HTTP {response.status}"
|
|
||||||
)
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# ENVOI DU MAIL
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
def send_mail(mail_file, emails):
|
|
||||||
|
|
||||||
if not emails:
|
|
||||||
log.info("Aucun destinataire de mail.")
|
|
||||||
return
|
|
||||||
|
|
||||||
if not os.path.isfile(mail_file):
|
|
||||||
log.info(f"Aucun mail à envoyer : {mail_file}")
|
|
||||||
return
|
|
||||||
|
|
||||||
with open(mail_file, "r", encoding="utf-8") as f:
|
|
||||||
mail = f.read()
|
|
||||||
|
|
||||||
if not mail.strip():
|
|
||||||
log.info(f"Le fichier mail est vide : {mail_file}")
|
|
||||||
return
|
|
||||||
|
|
||||||
#PROD
|
|
||||||
recipients = [email.strip() for email in emails if email.strip()]
|
|
||||||
#TEST
|
|
||||||
# recipients = ["contact@kaz.bzh"]
|
|
||||||
|
|
||||||
if not recipients:
|
|
||||||
log.info("Aucun destinataire de mail valide.")
|
|
||||||
return
|
|
||||||
|
|
||||||
#TEST
|
|
||||||
# annonce = (
|
|
||||||
# "#################################################\n"
|
|
||||||
# "Pendant quelques temps, contact@kaz.bzh va recevoir les mails de modification des services.\n"
|
|
||||||
# "Vérifier le contenu du mail et si OK, le transférer à :\n"
|
|
||||||
# + "\n".join(emails)
|
|
||||||
# + "\n"
|
|
||||||
# "En supprimant bien sûr cette annonce.\n"
|
|
||||||
# "Plus tard, le mail partira directement, aussi, il faut bien le valider.\n"
|
|
||||||
# "#################################################\n"
|
|
||||||
# "\n"
|
|
||||||
# )
|
|
||||||
# mail = annonce + mail
|
|
||||||
#FIN TEST
|
|
||||||
|
|
||||||
message = (
|
|
||||||
"From: contact@kaz.bzh\n"
|
|
||||||
f"To: {', '.join(recipients)}\n"
|
|
||||||
"Subject: KAZ - informations\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"\n"
|
|
||||||
+ mail
|
|
||||||
)
|
|
||||||
|
|
||||||
log.info(f"Envoi du mail à : {', '.join(recipients)}")
|
|
||||||
|
|
||||||
result = subprocess.run(
|
|
||||||
["/usr/sbin/sendmail", "-t", "-i"],
|
|
||||||
input=message,
|
|
||||||
text=True,
|
|
||||||
capture_output=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
if result.returncode != 0:
|
|
||||||
raise RuntimeError(
|
|
||||||
f"sendmail a échoué avec le code {result.returncode}: "
|
|
||||||
f"{result.stderr}"
|
|
||||||
)
|
|
||||||
|
|
||||||
log.info("Mail envoyé avec succès.")
|
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# RECHERCHE D'UN JOB
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
jobs = sorted(
|
|
||||||
glob.glob(os.path.join(JOBS_DIR, "job-*.json")),
|
|
||||||
#on trie par date de fichier
|
|
||||||
key=os.path.getmtime
|
|
||||||
)
|
|
||||||
|
|
||||||
if not jobs:
|
|
||||||
log.info("Aucun job à traiter.")
|
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# UN SEUL JOB
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
job = jobs[0]
|
|
||||||
|
|
||||||
encours = job + ".encours"
|
|
||||||
ok = job + ".OK"
|
|
||||||
ko = job + ".KO"
|
|
||||||
mail_file = job + ".mail"
|
|
||||||
|
|
||||||
log.info(f"Job trouvé : {job}")
|
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# PRISE EN CHARGE DU JOB
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
try:
|
|
||||||
os.rename(job, encours)
|
|
||||||
|
|
||||||
except FileNotFoundError:
|
|
||||||
# Le fichier a disparu entre le glob() et le rename().
|
|
||||||
log.info(f"Job disparu entre temps : {job}")
|
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
except OSError as e:
|
|
||||||
log.error(f"Impossible de prendre le job en charge : {e}")
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
|
|
||||||
log.info(f"Job en cours : {encours}")
|
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# LECTURE DU JSON
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
try:
|
|
||||||
|
|
||||||
with open(encours, "r", encoding="utf-8") as f:
|
|
||||||
message = json.load(f)
|
|
||||||
|
|
||||||
log.info(f"Message : {message}")
|
|
||||||
|
|
||||||
action = message.get("action")
|
|
||||||
|
|
||||||
if not action:
|
|
||||||
raise ValueError("Le champ 'action' est absent du JSON")
|
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------
|
|
||||||
# CHARGEMENT ET EXECUTION DE L'ACTION
|
|
||||||
# ------------------------------------------------------------------
|
|
||||||
|
|
||||||
log.info(f"Action demandée : {action}")
|
|
||||||
|
|
||||||
module = importlib.import_module(
|
|
||||||
f"worker_actions.{action}"
|
|
||||||
)
|
|
||||||
|
|
||||||
module.run(message, encours)
|
|
||||||
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------
|
|
||||||
# ENVOI DU MAIL
|
|
||||||
# ------------------------------------------------------------------
|
|
||||||
|
|
||||||
send_mail(
|
|
||||||
mail_file,
|
|
||||||
message.get("emails", [])
|
|
||||||
)
|
|
||||||
|
|
||||||
# if os.path.isfile(mail_file):
|
|
||||||
# os.remove(mail_file)
|
|
||||||
# log.info(f"Fichier mail supprimé : {mail_file}")
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------
|
|
||||||
# ENVOI DU MSG MM
|
|
||||||
# ------------------------------------------------------------------
|
|
||||||
|
|
||||||
message_mattermost = json.dumps(
|
|
||||||
message,
|
|
||||||
indent=2,
|
|
||||||
ensure_ascii=False
|
|
||||||
)
|
|
||||||
send_mattermost(message_mattermost)
|
|
||||||
|
|
||||||
# ------------------------------------------------------------------
|
|
||||||
# SUCCES
|
|
||||||
# ------------------------------------------------------------------
|
|
||||||
|
|
||||||
os.rename(encours, ok)
|
|
||||||
|
|
||||||
log.info(f"Job terminé avec succès : {ok}")
|
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
# ERREUR
|
|
||||||
# ----------------------------------------------------------------------
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
|
|
||||||
log.exception(
|
|
||||||
f"Erreur lors du traitement du job : {e}"
|
|
||||||
)
|
|
||||||
|
|
||||||
message_mattermost = (
|
|
||||||
"**Erreur lors du traitement d'un job KAZ**\n\n"
|
|
||||||
f"Job : `{job}`\n"
|
|
||||||
f"Erreur : `{e}`\n"
|
|
||||||
)
|
|
||||||
send_mattermost(message_mattermost)
|
|
||||||
|
|
||||||
try:
|
|
||||||
os.rename(encours, ko)
|
|
||||||
log.info(f"Job marqué KO : {ko}")
|
|
||||||
|
|
||||||
except OSError as rename_error:
|
|
||||||
log.error(
|
|
||||||
f"Impossible de renommer le job en .KO : {rename_error}"
|
|
||||||
)
|
|
||||||
|
|
||||||
sys.exit(1)
|
|
||||||
@@ -1,77 +0,0 @@
|
|||||||
import logging
|
|
||||||
import os
|
|
||||||
import subprocess
|
|
||||||
|
|
||||||
#ex de json accepté:
|
|
||||||
#{
|
|
||||||
# "action": "modifier_services",
|
|
||||||
# "creer": [
|
|
||||||
# "cloud"
|
|
||||||
# ],
|
|
||||||
# "enlever": [
|
|
||||||
# "paheko",
|
|
||||||
# "wp"
|
|
||||||
# ],
|
|
||||||
# "nom_court_orga": "monorga11",
|
|
||||||
# "emails": [
|
|
||||||
# "admin@kaz.bzh",
|
|
||||||
# "contact@kaz.bzh"
|
|
||||||
# ]
|
|
||||||
# }
|
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
|
||||||
|
|
||||||
|
|
||||||
def run(message, encours):
|
|
||||||
|
|
||||||
nom_court_orga = message["nom_court_orga"]
|
|
||||||
|
|
||||||
services_creer = message.get("creer", [])
|
|
||||||
services_enlever = message.get("enlever", [])
|
|
||||||
|
|
||||||
script = "/kaz/config/orgaTmpl/orga-gen.sh"
|
|
||||||
|
|
||||||
mail_file = encours.removesuffix(".encours") + ".mail"
|
|
||||||
|
|
||||||
command = [script]
|
|
||||||
|
|
||||||
command.extend(
|
|
||||||
f"+{service}"
|
|
||||||
for service in services_creer
|
|
||||||
)
|
|
||||||
|
|
||||||
command.extend(
|
|
||||||
f"-{service}"
|
|
||||||
for service in services_enlever
|
|
||||||
)
|
|
||||||
|
|
||||||
command.append(nom_court_orga)
|
|
||||||
|
|
||||||
log.info(
|
|
||||||
f"Exécution : {' '.join(command)}"
|
|
||||||
)
|
|
||||||
|
|
||||||
env = os.environ.copy()
|
|
||||||
env["ORGA_GEN_MAIL_FILE"] = mail_file
|
|
||||||
|
|
||||||
result = subprocess.run(
|
|
||||||
command,
|
|
||||||
capture_output=True,
|
|
||||||
text=True,
|
|
||||||
env=env,
|
|
||||||
)
|
|
||||||
|
|
||||||
log.info(
|
|
||||||
f"Résultat du script :\n{result.stdout}"
|
|
||||||
)
|
|
||||||
|
|
||||||
if result.stderr:
|
|
||||||
log.warning(
|
|
||||||
f"Sortie stderr du script :\n{result.stderr}"
|
|
||||||
)
|
|
||||||
|
|
||||||
if result.returncode != 0:
|
|
||||||
raise RuntimeError(
|
|
||||||
f"Le script a échoué avec le code "
|
|
||||||
f"{result.returncode}"
|
|
||||||
)
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
#KAN: 30/09/2026
|
|
||||||
#KOI: transférer les jobs vers les serveurs secondaires
|
|
||||||
#KI: fab
|
|
||||||
|
|
||||||
JOBS_DIR="/kaz/tmp/jobs"
|
|
||||||
|
|
||||||
for job in "$JOBS_DIR"/*.json; do
|
|
||||||
|
|
||||||
[ -e "$job" ] || continue
|
|
||||||
|
|
||||||
destination=$(jq -r '.destination // empty' "$job")
|
|
||||||
|
|
||||||
if [ -z "$destination" ]; then
|
|
||||||
echo "Destination absente dans $job"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
destination="${destination}.kaz.bzh"
|
|
||||||
|
|
||||||
echo "Transfert de $job vers $destination:/kaz/jobs/"
|
|
||||||
|
|
||||||
if rsync -a -e 'ssh -p 2201' "$job" "$destination:/kaz/jobs/"; then
|
|
||||||
echo "Transfert OK : $job"
|
|
||||||
mv "$job" "$job.transfere"
|
|
||||||
else
|
|
||||||
echo "Échec du transfert : $job"
|
|
||||||
fi
|
|
||||||
|
|
||||||
done
|
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 73 KiB After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 9.7 KiB |
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
|
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 8.2 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 43 KiB |
|
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 83 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 116 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 9.6 KiB After Width: | Height: | Size: 9.6 KiB |
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.7 KiB |