inscription utilisateur complète
This commit is contained in:
@@ -10,7 +10,14 @@ mmctl = "docker exec -i mattermostServ bin/mmctl"
|
||||
class Mattermost:
|
||||
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def __enter__(self):
|
||||
self.authenticate()
|
||||
return self
|
||||
|
||||
def __exit__(self, tp, e, traceback):
|
||||
self.logout()
|
||||
|
||||
|
||||
def authenticate(self):
|
||||
@@ -19,6 +26,11 @@ class Mattermost:
|
||||
subprocess.run(cmd, shell=True, stderr=subprocess.STDOUT, check=True)
|
||||
|
||||
|
||||
def logout(self):
|
||||
# Authentification sur MM
|
||||
cmd = f"{mmctl} auth clean"
|
||||
subprocess.run(cmd, shell=True, stderr=subprocess.STDOUT, check=True)
|
||||
|
||||
def post_message(self, message, equipe="kaz", canal="creation-comptes"):
|
||||
"""
|
||||
Envoyer un message dans une Equipe/Canal de MM
|
||||
|
@@ -1,4 +1,5 @@
|
||||
import subprocess
|
||||
from email_validator import validate_email, EmailNotValidError
|
||||
|
||||
from .config import getDockersConfig, getSecretConfig
|
||||
|
||||
@@ -7,7 +8,9 @@ sympa_pass = getSecretConfig("sympaServ", "SOAP_PASSWORD")
|
||||
sympa_listmaster = getSecretConfig("sympaServ", "ADMINEMAIL")
|
||||
sympa_url = f"https://{getDockersConfig('sympaHost')}.{getDockersConfig('domain')}"
|
||||
sympa_soap = "docker exec -i sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl"
|
||||
sympa_liste_info = f"info@{getDockersConfig('domain_sympa')}"
|
||||
sympa_domain = getDockersConfig('domain_sympa')
|
||||
sympa_liste_info = "infos"
|
||||
|
||||
|
||||
# docker exec -i sympaServ /usr/lib/sympa/bin/sympa_soap_client.pl --soap_url=${httpProto}://${URL_LISTE}/sympasoap --trusted_application=${sympa_SOAP_USER} --trusted_application_password=${sympa_SOAP_PASSWORD} --proxy_vars=\"USER_EMAIL=${LISTMASTER}\" --service=add --service_parameters=\"${NL_LIST},${EMAIL_SOUHAITE}\"" | tee -a "${CMD_SYMPA}"
|
||||
|
||||
@@ -23,14 +26,14 @@ class Sympa:
|
||||
"""
|
||||
Ajouter un email dans une liste sympa
|
||||
"""
|
||||
output = self._execute_sympa_command(email, liste, 'add')
|
||||
output = self._execute_sympa_command(email, f"{liste}@{sympa_domain}", 'add')
|
||||
return output
|
||||
|
||||
def delete_email_from_list(self, email, liste=sympa_liste_info):
|
||||
"""
|
||||
Supprimer un email dans une liste sympa
|
||||
"""
|
||||
output = self._execute_sympa_command(email, liste, 'del')
|
||||
output = self._execute_sympa_command(email, f"{liste}@{sympa_domain}", 'del')
|
||||
return output
|
||||
|
||||
|
||||
|
8
bin/lib/template.py
Normal file
8
bin/lib/template.py
Normal file
@@ -0,0 +1,8 @@
|
||||
import jinja2
|
||||
|
||||
templateLoader = jinja2.FileSystemLoader(searchpath="../templates")
|
||||
templateEnv = jinja2.Environment(loader=templateLoader)
|
||||
|
||||
def render_template(filename, args):
|
||||
template = templateEnv.get_template(filename)
|
||||
return template.render(args)
|
@@ -3,14 +3,27 @@ from glob import glob
|
||||
import tempfile
|
||||
import subprocess
|
||||
import re
|
||||
|
||||
from email.mime.text import MIMEText
|
||||
from email.mime.multipart import MIMEMultipart
|
||||
import smtplib
|
||||
|
||||
from .paheko import Paheko
|
||||
from .ldap import Ldap
|
||||
from .mattermost import Mattermost
|
||||
from .sympa import Sympa
|
||||
from .template import render_template
|
||||
from .config import getDockersConfig, getSecretConfig
|
||||
|
||||
DEFAULT_FILE = "/kaz/tmp/createUser.txt"
|
||||
|
||||
webmail_url = f"https://webmail.{getDockersConfig('domain')}"
|
||||
mattermost_url = f"https://agora.{getDockersConfig('domain')}"
|
||||
mdp_url = f"https://mdp.{getDockersConfig('domain')}"
|
||||
sympa_url = f"https://listes.{getDockersConfig('domain')}"
|
||||
site_url = f"https://{getDockersConfig('domain')}"
|
||||
cloud_url = f"https://cloud.{getDockersConfig('domain')}"
|
||||
|
||||
|
||||
def _generate_password(self):
|
||||
cmd="apg -n 1 -m 10 -M NCL -d"
|
||||
output = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
|
||||
@@ -81,36 +94,45 @@ def create_user(email, email_secours, admin_orga, nom_orga, quota_disque, nom, p
|
||||
mm.add_user_to_team(email, nom_orga)
|
||||
|
||||
|
||||
# #on inscrit email et email_secours à la nl sympa_liste_info
|
||||
# res, status_code = self.sympa_user_resource.post(email,sympa_liste_info)
|
||||
# if status_code != 200: raise ValueError(f"ERREUR 9 sur Sympa: {email} : {res}, on arrête tout ")
|
||||
# res, status_code = self.sympa_user_resource.post(email_secours,sympa_liste_info)
|
||||
# if status_code != 200: raise ValueError(f"ERREUR 10 sur Sympa: {email_secours} : {res}, on arrête tout ")
|
||||
#
|
||||
# #on construit/envoie le mail
|
||||
# context = {
|
||||
# 'ADMIN_ORGA': tab['admin_orga'],
|
||||
# 'NOM': tab['nom'],
|
||||
# 'EMAIL_SOUHAITE': email,
|
||||
# 'PASSWORD': password,
|
||||
# 'QUOTA': tab['quota_disque'],
|
||||
# 'URL_WEBMAIL': webmail_url,
|
||||
# 'URL_AGORA': mattermost_url,
|
||||
# 'URL_MDP': mdp_url,
|
||||
# 'URL_LISTE': sympa_url,
|
||||
# 'URL_SITE': site_url,
|
||||
# 'URL_CLOUD': cloud_url
|
||||
# }
|
||||
# subject="KAZ: confirmation d'inscription !"
|
||||
# sender=app.config['MAIL_USERNAME']
|
||||
# reply_to = app.config['MAIL_REPLY_TO']
|
||||
# msg = Message(subject=subject, sender=sender, reply_to=reply_to, recipients=[email,email_secours])
|
||||
# msg.html = render_template('email_inscription.html', **context)
|
||||
# mail.send(msg)
|
||||
#on inscrit email et email_secours à la nl sympa_liste_info
|
||||
sympa = Sympa()
|
||||
sympa.add_email_to_list(email)
|
||||
sympa.add_email_to_list(email_secours)
|
||||
|
||||
#on construit/envoie le mail
|
||||
context = {
|
||||
'ADMIN_ORGA': admin_orga,
|
||||
'NOM': f"{prenom} {nom}",
|
||||
'EMAIL_SOUHAITE': email,
|
||||
'PASSWORD': password,
|
||||
'QUOTA': quota_disque,
|
||||
'URL_WEBMAIL': webmail_url,
|
||||
'URL_AGORA': mattermost_url,
|
||||
'URL_MDP': mdp_url,
|
||||
'URL_LISTE': sympa_url,
|
||||
'URL_SITE': site_url,
|
||||
'URL_CLOUD': cloud_url,
|
||||
}
|
||||
|
||||
html = render_template("email_inscription.html", context)
|
||||
raw = render_template("email_inscription.txt", context)
|
||||
|
||||
message = MIMEMultipart()
|
||||
message["Subject"] = "KAZ: confirmation d'inscription !"
|
||||
message["From"] = f"contact@{getDockersConfig('domain')}"
|
||||
message["To"] = f"{email}, {email_secours}"
|
||||
message.attach(MIMEText(raw, "plain"))
|
||||
message.attach(MIMEText(html, "html"))
|
||||
|
||||
with smtplib.SMTP(f"mail.{getDockersConfig('domain')}", 25) as server:
|
||||
server.sendmail(f"contact@{getDockersConfig('domain')}", [email,email_secours], message.as_string())
|
||||
|
||||
#on met le flag paheko action à Aucune
|
||||
# paheko = Paheko()
|
||||
# paheko.set_user(email, "action_auto", "Aucune")
|
||||
paheko = Paheko()
|
||||
try:
|
||||
paheko.set_user(email, "action_auto", "Aucune")
|
||||
except:
|
||||
print(f"Erreur paheko pour remettre action_auto = Aucune pour {email}")
|
||||
|
||||
#on post sur MM pour dire ok
|
||||
with Mattermost() as mm:
|
||||
|
82
bin/templates/email.css
Normal file
82
bin/templates/email.css
Normal file
@@ -0,0 +1,82 @@
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
background-color: #f4f4f4;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.email-content {
|
||||
background-color: #f0f0f0; /* Light gray background */
|
||||
margin: 20px auto;
|
||||
padding: 20px;
|
||||
border: 1px solid #dddddd;
|
||||
max-width: 600px;
|
||||
width: 90%; /* This makes the content take 90% width of its container */
|
||||
text-align: left; /* Remove text justification */
|
||||
}
|
||||
|
||||
header {
|
||||
background-color: #E16969;
|
||||
color: white;
|
||||
text-align: center;
|
||||
height: 50px; /* Fixed height for header */
|
||||
line-height: 50px; /* Vertically center the text */
|
||||
width: 100%; /* Make header full width */
|
||||
}
|
||||
|
||||
footer {
|
||||
background-color: #E16969;
|
||||
color: white;
|
||||
text-align: center;
|
||||
height: 50px; /* Fixed height for footer */
|
||||
line-height: 50px; /* Vertically center the text */
|
||||
width: 100%; /* Make footer full width */
|
||||
}
|
||||
|
||||
.header-container {
|
||||
position: relative; /* Pour positionner le logo et le texte dans le header */
|
||||
height: 50px; /* Hauteur maximale du header */
|
||||
}
|
||||
|
||||
.logo {
|
||||
position: absolute; /* Pour positionner le logo */
|
||||
max-height: 100%; /* Taille maximale du logo égale à la hauteur du header */
|
||||
top: 0; /* Aligner le logo en haut */
|
||||
left: 0; /* Aligner le logo à gauche */
|
||||
margin-right: 10px; /* Marge à droite du logo */
|
||||
}
|
||||
|
||||
.header-container h1, .footer-container p {
|
||||
margin: 0;
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.footer-container p {
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.footer-container a {
|
||||
color: #FFFFFF; /* White color for links in footer */
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.footer-container a:hover {
|
||||
text-decoration: underline; /* Optional: add underline on hover */
|
||||
}
|
||||
|
||||
a {
|
||||
color: #E16969; /* Same color as header/footer background for all other links */
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline; /* Optional: add underline on hover */
|
||||
}
|
||||
|
||||
h2 {
|
||||
color: #E16969;
|
||||
}
|
||||
|
||||
p {
|
||||
line-height: 1.6;
|
||||
}
|
9
bin/templates/email_footer.html
Normal file
9
bin/templates/email_footer.html
Normal file
@@ -0,0 +1,9 @@
|
||||
<footer>
|
||||
<div class="footer-container">
|
||||
<p>
|
||||
Ici, on prend soin de vos données et on ne les vend pas !
|
||||
<br>
|
||||
<a href="https://kaz.bzh">https://kaz.bzh</a>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
6
bin/templates/email_header.html
Normal file
6
bin/templates/email_header.html
Normal file
@@ -0,0 +1,6 @@
|
||||
<header>
|
||||
<div class="header-container">
|
||||
<img class="logo" src="https://kaz-cloud.kaz.bzh/apps/theming/image/logo?v=33" alt="KAZ Logo">
|
||||
<h1>Kaz : Le numérique sobre, libre, éthique et local</h1>
|
||||
</div>
|
||||
</header>
|
94
bin/templates/email_inscription.html
Normal file
94
bin/templates/email_inscription.html
Normal file
@@ -0,0 +1,94 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Email d'inscription'</title>
|
||||
<style>
|
||||
{% include 'email.css' %}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
{% include 'email_header.html' %}
|
||||
|
||||
<div class="email-content">
|
||||
|
||||
<p>
|
||||
Bonjour {{NOM}}!<br><br>
|
||||
|
||||
Bienvenue chez KAZ!<br><br>
|
||||
|
||||
Vous disposez de :
|
||||
<ul>
|
||||
<li>une messagerie classique : <a href={{URL_WEBMAIL}}>{{URL_WEBMAIL}}</a></li>
|
||||
<li>une messagerie instantanée pour discuter au sein d'équipes : <a href={{URL_AGORA}}>{{URL_AGORA}}</a></li>
|
||||
</ul>
|
||||
Votre email et identifiant pour ces services : {{EMAIL_SOUHAITE}}<br>
|
||||
Le mot de passe : <b>{{PASSWORD}}</b><br><br>
|
||||
|
||||
Pour changer votre mot de passe de messagerie, c'est ici: <a href={{URL_MDP}}>{{URL_MDP}}</a><br>
|
||||
Si vous avez perdu votre mot de passe, c'est ici: <a href={{URL_MDP}}/?action=sendtoken>{{URL_MDP}}/?action=sendtoken</a><br><br>
|
||||
|
||||
Vous pouvez accéder à votre messagerie classique:
|
||||
<ul>
|
||||
<li>soit depuis votre webmail : <a href={{URL_WEBMAIL}}>{{URL_WEBMAIL}}</a></li>
|
||||
<li>soit depuis votre bureau virtuel : <a href={{URL_CLOUD}}>{{URL_CLOUD}}</a></li>
|
||||
<li>soit depuis un client de messagerie comme thunderbird<br>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
{% if ADMIN_ORGA == '1' %}
|
||||
<p>
|
||||
En tant qu'association/famille/société. Vous avez la possibilité d'ouvrir, quand vous le voulez, des services kaz, il vous suffit de nous le demander.<br><br>
|
||||
|
||||
Pourquoi n'ouvrons-nous pas tous les services tout de suite ? parce que nous aimons la sobriété et que nous préservons notre espace disque ;)<br>
|
||||
A quoi sert d'avoir un site web si on ne l'utilise pas, n'est-ce pas ?<br><br>
|
||||
|
||||
Par retour de mail, dites-nous de quoi vous avez besoin tout de suite entre:
|
||||
<ul>
|
||||
<li>une comptabilité : un service de gestion adhérents/clients</li>
|
||||
<li>un site web de type WordPress</li>
|
||||
<li>un cloud : bureau virtuel pour stocker des fichiers/calendriers/contacts et partager avec vos connaissances</li>
|
||||
</ul>
|
||||
Une fois que vous aurez répondu à ce mail, votre demande sera traitée manuellement.
|
||||
</p>
|
||||
{% endif %}
|
||||
|
||||
<p>
|
||||
Vous avez quelques docs intéressantes sur le wiki de kaz:
|
||||
<ul>
|
||||
<li>Migrer son site internet wordpress vers kaz : <a href="https://wiki.kaz.bzh/wordpress/start#migrer_son_site_wordpress_vers_kaz">https://wiki.kaz.bzh/wordpress/start#migrer_son_site_wordpress_vers_kaz</a></li>
|
||||
<li>Migrer sa messagerie vers kaz : <a href="https://wiki.kaz.bzh/messagerie/gmail/start">https://wiki.kaz.bzh/messagerie/gmail/start</a></li>
|
||||
<li>Démarrer simplement avec son cloud : <a href="https://wiki.kaz.bzh/nextcloud/start">https://wiki.kaz.bzh/messagerie/gmail/start</a></li>
|
||||
</ul>
|
||||
|
||||
Votre quota est de {{QUOTA}}GB. Si vous souhaitez plus de place pour vos fichiers ou la messagerie, faites-nous signe !<br><br>
|
||||
|
||||
Pour accéder à la messagerie instantanée et communiquer avec les membres de votre équipe ou ceux de kaz : <a href={{URL_AGORA}}/login>{{URL_AGORA}}/login</a><br>
|
||||
</p>
|
||||
|
||||
{% if ADMIN_ORGA == '1' %}
|
||||
<p>
|
||||
Comme administrateur de votre organisation, vous pouvez créer des listes de diffusion en vous rendant sur <a href={{URL_LISTE}}>{{URL_LISTE}}</a><br>
|
||||
</p>
|
||||
{% endif %}
|
||||
|
||||
<p>
|
||||
Enfin, vous disposez de tous les autres services KAZ où l'authentification n'est pas nécessaire : <a href={{URL_SITE}}>{{URL_SITE}}</a><br><br>
|
||||
|
||||
En cas de soucis, n'hésitez pas à poser vos questions sur le canal 'Une question ? un soucis' de l'agora dispo ici : <a href={{URL_AGORA}}>{{URL_AGORA}}</a><br><br>
|
||||
|
||||
Si vous avez besoin d'accompagnement pour votre site, votre cloud, votre compta, votre migration de messagerie,...<br>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.<br><br>
|
||||
|
||||
À bientôt 😉<br><br>
|
||||
|
||||
La collégiale de KAZ.<br>
|
||||
|
||||
</p>
|
||||
|
||||
</div> <!-- <div class="email-content"> -->
|
||||
|
||||
{% include 'email_footer.html' %}
|
||||
</body>
|
||||
</html>
|
70
bin/templates/email_inscription.txt
Normal file
70
bin/templates/email_inscription.txt
Normal file
@@ -0,0 +1,70 @@
|
||||
Bonjour {{NOM}}!
|
||||
|
||||
Bienvenue chez KAZ!<br><br>
|
||||
|
||||
Vous disposez de :
|
||||
<ul>
|
||||
<li>une messagerie classique : <a href={{URL_WEBMAIL}}>{{URL_WEBMAIL}}</a></li>
|
||||
<li>une messagerie instantanée pour discuter au sein d'équipes : <a href={{URL_AGORA}}>{{URL_AGORA}}</a></li>
|
||||
</ul>
|
||||
Votre email et identifiant pour ces services : {{EMAIL_SOUHAITE}}<br>
|
||||
Le mot de passe : <b>{{PASSWORD}}</b><br><br>
|
||||
|
||||
Pour changer votre mot de passe de messagerie, c'est ici: <a href={{URL_MDP}}>{{URL_MDP}}</a><br>
|
||||
Si vous avez perdu votre mot de passe, c'est ici: <a href={{URL_MDP}}/?action=sendtoken>{{URL_MDP}}/?action=sendtoken</a><br><br>
|
||||
|
||||
Vous pouvez accéder à votre messagerie classique:
|
||||
<ul>
|
||||
<li>soit depuis votre webmail : <a href={{URL_WEBMAIL}}>{{URL_WEBMAIL}}</a></li>
|
||||
<li>soit depuis votre bureau virtuel : <a href={{URL_CLOUD}}>{{URL_CLOUD}}</a></li>
|
||||
<li>soit depuis un client de messagerie comme thunderbird<br>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
{% if ADMIN_ORGA == '1' %}
|
||||
<p>
|
||||
En tant qu'association/famille/société. Vous avez la possibilité d'ouvrir, quand vous le voulez, des services kaz, il vous suffit de nous le demander.<br><br>
|
||||
|
||||
Pourquoi n'ouvrons-nous pas tous les services tout de suite ? parce que nous aimons la sobriété et que nous préservons notre espace disque ;)<br>
|
||||
A quoi sert d'avoir un site web si on ne l'utilise pas, n'est-ce pas ?<br><br>
|
||||
|
||||
Par retour de mail, dites-nous de quoi vous avez besoin tout de suite entre:
|
||||
<ul>
|
||||
<li>une comptabilité : un service de gestion adhérents/clients</li>
|
||||
<li>un site web de type WordPress</li>
|
||||
<li>un cloud : bureau virtuel pour stocker des fichiers/calendriers/contacts et partager avec vos connaissances</li>
|
||||
</ul>
|
||||
Une fois que vous aurez répondu à ce mail, votre demande sera traitée manuellement.
|
||||
</p>
|
||||
{% endif %}
|
||||
|
||||
<p>
|
||||
Vous avez quelques docs intéressantes sur le wiki de kaz:
|
||||
<ul>
|
||||
<li>Migrer son site internet wordpress vers kaz : <a href="https://wiki.kaz.bzh/wordpress/start#migrer_son_site_wordpress_vers_kaz">https://wiki.kaz.bzh/wordpress/start#migrer_son_site_wordpress_vers_kaz</a></li>
|
||||
<li>Migrer sa messagerie vers kaz : <a href="https://wiki.kaz.bzh/messagerie/gmail/start">https://wiki.kaz.bzh/messagerie/gmail/start</a></li>
|
||||
<li>Démarrer simplement avec son cloud : <a href="https://wiki.kaz.bzh/nextcloud/start">https://wiki.kaz.bzh/messagerie/gmail/start</a></li>
|
||||
</ul>
|
||||
|
||||
Votre quota est de {{QUOTA}}GB. Si vous souhaitez plus de place pour vos fichiers ou la messagerie, faites-nous signe !<br><br>
|
||||
|
||||
Pour accéder à la messagerie instantanée et communiquer avec les membres de votre équipe ou ceux de kaz : <a href={{URL_AGORA}}/login>{{URL_AGORA}}/login</a><br>
|
||||
</p>
|
||||
|
||||
{% if ADMIN_ORGA == '1' %}
|
||||
<p>
|
||||
Comme administrateur de votre organisation, vous pouvez créer des listes de diffusion en vous rendant sur <a href={{URL_LISTE}}>{{URL_LISTE}}</a><br>
|
||||
</p>
|
||||
{% endif %}
|
||||
|
||||
<p>
|
||||
Enfin, vous disposez de tous les autres services KAZ où l'authentification n'est pas nécessaire : <a href={{URL_SITE}}>{{URL_SITE}}</a><br><br>
|
||||
|
||||
En cas de soucis, n'hésitez pas à poser vos questions sur le canal 'Une question ? un soucis' de l'agora dispo ici : <a href={{URL_AGORA}}>{{URL_AGORA}}</a><br><br>
|
||||
|
||||
Si vous avez besoin d'accompagnement pour votre site, votre cloud, votre compta, votre migration de messagerie,...<br>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.<br><br>
|
||||
|
||||
À bientôt 😉<br><br>
|
||||
|
||||
La collégiale de KAZ.<br>
|
||||
|
Reference in New Issue
Block a user