from email_validator import validate_email, EmailNotValidError from glob import glob import tempfile import re from .paheko import Paheko from .ldap import Ldap from .utils import generate_password DEFAULT_FILE = "/kaz/tmp/createUser.txt" #class Kaz_user: # def __init__(self): # self.paheko = Paheko() # self.ldap = Ldap() # global sympa_liste_info # # self.paheko_users_action_resource = Paheko_users_action() # self.paheko_user_resource=Paheko_user() # self.ldap_user_resource = Ldap_user() # self.password_create_resource = Password_create() # self.mattermost_message_resource=Mattermost_message() # self.mattermost_user_resource=Mattermost_user() # self.mattermost_user_team_resource=Mattermost_user_team() # self.mattermost_user_channel_resource=Mattermost_user_channel() # self.mattermost_team_resource=Mattermost_team() # self.sympa_user_resource=Sympa_user() def create_user(email, email_secours, admin_orga, nom_orga, quota_disque, nom, prenom, nc_orga, garradin_orga, wp_orga, agora_orga, wiki_orga, nc_base, groupe_nc_base, equipe_agora, password=None): with Ldap() as ldap: email = email.lower() # est-il déjà dans le ldap ? (mail ou alias) if ldap.get_email(email): print(f"ERREUR 1: {email} déjà existant dans ldap. on arrête tout") return None #test nom orga if admin_orga == 1: if nom_orga is None: print(f"ERREUR 0 sur paheko: {email} : nom_orga vide, on arrête tout") return if not bool(re.match(r'^[a-z0-9-]+$', nom_orga)): print(f"ERREUR 0 sur paheko: {email} : nom_orga ({tab['nom_orga']}) incohérent (minuscule/chiffre/-), on arrête tout") return #test email_secours email_secours = email_secours.lower() if not validate_email(email_secours): print("Mauvais email de secours") return #test quota quota = quota_disque if not quota.isdigit(): print(f"ERREUR 2: quota non numérique : {quota}, on arrête tout") return #on génère un password password = password or generate_password() #on créé dans le ldap #à quoi servent prenom/nom dans le ldap ? data = { "prenom": prenom, "nom": nom, "password": password, "email_secours": email_secours, "quota": quota } if not ldap.create_user(email, **data): print("Erreur LDAP") return # #on créé dans MM # user = email.split('@')[0] # res, status_code = self.mattermost_user_resource.post(user,email,password) # if status_code != 200: raise ValueError(f"ERREUR 4 sur MM: {email} : {res}, on arrête tout ") # # # et on affecte à l'équipe kaz # res, status_code = self.mattermost_user_team_resource.post(email,"kaz") # if status_code != 200: raise ValueError(f"ERREUR 5 sur MM: {email} : {res}, on arrête tout ") # # #et aux 2 canaux de base # res, status_code = self.mattermost_user_channel_resource.post(email,"kaz","une-question--un-soucis") # if status_code != 200: raise ValueError(f"ERREUR 6 sur MM: {email} : {res}, on arrête tout ") # res, status_code = self.mattermost_user_channel_resource.post(email,"kaz","cafe-du-commerce--ouvert-2424h") # if status_code != 200: raise ValueError(f"ERREUR 7 sur MM: {email} : {res}, on arrête tout ") # # #on créé une nouvelle équipe ds MM si besoin # if tab['admin_orga'] == 1: # res, status_code = self.mattermost_team_resource.post(tab['nom_orga'],email) # if status_code != 200: raise ValueError(f"ERREUR 8 sur MM: {email} : {res}, on arrête tout ") # #BUG: créer la nouvelle équipe n'a pas rendu l'email admin, on le rajoute comme membre simple # res, status_code = self.mattermost_user_team_resource.post(email,tab['nom_orga']) # if status_code != 200: raise ValueError(f"ERREUR 8.1 sur MM: {email} : {res}, on arrête tout ") # # #on créé dans le cloud genéral # #inutile car tous les user du ldap sont user du cloud général. # # #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 met le flag paheko action à Aucune # res, status_code = self.paheko_user_resource.put(email,"action_auto","Aucune") # if status_code != 200: raise ValueError(f"ERREUR 12 sur paheko: {email} : {res}, on arrête tout ") # # #on post sur MM pour dire ok # msg=f"**POST AUTO** Inscription réussie pour {email} avec le secours {email_secours} Bisou!" # self.mattermost_message_resource.post(message=msg) def create_waiting_users(): """ Créé les kaznautes en attente: inscription sur MM / Cloud / email + msg sur MM + email à partir de action="a créer" sur paheko """ #verrou pour empêcher de lancer en même temps la même api prefixe="create_user_lock_" if glob(f"{tempfile.gettempdir()}/{prefixe}*"): print("Lock présent") return None lock_file = tempfile.NamedTemporaryFile(prefix=prefixe,delete=True) #qui sont les kaznautes à créer ? paheko = Paheko() liste_kaznautes = paheko.get_users_with_action("A créer") if liste_kaznautes: count=liste_kaznautes['count'] if count==0: print("aucun nouveau kaznaute à créer") return #au moins un kaznaute à créer for tab in liste_kaznautes['results']: create_user(**tab) print("fin des inscriptions") def create_users_from_file(file=DEFAULT_FILE): """ Créé les kaznautes en attente: inscription sur MM / Cloud / email + msg sur MM + email à partir du ficher """ #verrou pour empêcher de lancer en même temps la même api prefixe="create_user_lock_" if glob(f"{tempfile.gettempdir()}/{prefixe}*"): print("Lock présent") return None lock_file = tempfile.NamedTemporaryFile(prefix=prefixe,delete=True) #qui sont les kaznautes à créer ? liste_kaznautes = [] with open(file) as lines: for line in lines: line = line.strip() if not line.startswith("#") and line != "": user_data = line.split(';') user_dict = { "nom": user_data[0], "prenom": user_data[1], "email": user_data[2], "email_secours": user_data[3], "nom_orga": user_data[4], "admin_orga": user_data[5], "nc_orga": user_data[6], "garradin_orga": user_data[7], "wp_orga": user_data[8], "agora_orga": user_data[9], "wiki_orga": user_data[10], "nc_base": user_data[11], "groupe_nc_base": user_data[12], "equipe_agora": user_data[13], "quota_disque": user_data[14], "password": user_data[15], } liste_kaznautes.append(user_dict) if liste_kaznautes: for tab in liste_kaznautes: create_user(**tab) print("fin des inscriptions")