modifié : ../app.py nouveau fichier : cloud.py nouveau fichier : common_imports.py nouveau fichier : config.py nouveau fichier : dns.py nouveau fichier : kaz_user.py nouveau fichier : ldap.py nouveau fichier : mattermost.py nouveau fichier : paheko.py nouveau fichier : password.py nouveau fichier : quota.py nouveau fichier : sympa.py nouveau fichier : test.py
		
			
				
	
	
		
			395 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			395 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from resources.common_imports import *
 | |
| 
 | |
| #les variables globales minimum
 | |
| from resources.config import mattermost_user, mattermost_pass, mattermost_url
 | |
| 
 | |
| # on utilise mmctl et pas l'apiv4 de MM
 | |
| # pourquoi ? passe que mmctl déjà utilisé dans les scripts kaz. 
 | |
| 
 | |
| #*************************************************
 | |
| 
 | |
| def Mattermost_authenticate():
 | |
|      # Authentification sur MM
 | |
|      global mattermost_url, mattermost_user, mattermost_pass
 | |
|      cmd = f"/mm/mmctl auth login {mattermost_url} --name local-server --username {mattermost_user} --password {mattermost_pass}"
 | |
|      subprocess.run(cmd, shell=True, stderr=subprocess.STDOUT, check=True)
 | |
| 
 | |
| #*************************************************
 | |
| 
 | |
| class Mattermost_message(Resource):
 | |
| 
 | |
|     @jwt_required()
 | |
|     def post(self,message,equipe="kaz",canal="creation-comptes"):
 | |
|         """
 | |
|         Envoyer un message dans une Equipe/Canal de MM
 | |
|         ---
 | |
|         tags:
 | |
|           - Mattermost        
 | |
|         security:
 | |
|           - Bearer: []                
 | |
|         parameters:
 | |
|           - in: path
 | |
|             name: equipe
 | |
|             type: string
 | |
|             required: true
 | |
|           - in: path
 | |
|             name: canal
 | |
|             type: string
 | |
|             required: true
 | |
|           - in: path
 | |
|             name: message
 | |
|             type: string
 | |
|             required: true
 | |
|         
 | |
|         responses:
 | |
|             200:
 | |
|                 description: Affiche un message dans un canal d'une équipe
 | |
|             500:
 | |
|                 description: oops
 | |
|         """    
 | |
|         Mattermost_authenticate()
 | |
|     
 | |
|         try:
 | |
|             cmd="/mm/mmctl post create "+equipe+":"+canal+" --message "+ "\"" + message + "\""
 | |
|             output = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
 | |
|             return "Message envoyé", 200
 | |
|         except subprocess.CalledProcessError:
 | |
|             return "Message non envoyé", 500
 | |
| 
 | |
| 
 | |
| #*************************************************
 | |
| 
 | |
| class Mattermost_user(Resource):
 | |
|   
 | |
|     def __init__(self):
 | |
|       Mattermost_authenticate()
 | |
|   
 | |
| #*************************************************  
 | |
|     @jwt_required()
 | |
|     def get(self,user):
 | |
|         """
 | |
|         Le user existe t-il sur MM ? 
 | |
|         ---
 | |
|         tags:
 | |
|           - Mattermost User
 | |
|         security:
 | |
|           - Bearer: []                
 | |
|         parameters: 
 | |
|           - in: path
 | |
|             name: user
 | |
|             type: string
 | |
|             required: true        
 | |
|             description: possible d'entrer un username, un email
 | |
|         responses:
 | |
|             200:
 | |
|                 description: Existe
 | |
|             404:
 | |
|                 description: N'existe pas
 | |
|         """    
 | |
|             
 | |
|         try:
 | |
|             cmd = f"/mm/mmctl user search {user} --json"
 | |
|             user_list_output = subprocess.check_output(cmd, shell=True)
 | |
|             return 200  # Le nom d'utilisateur existe
 | |
|         except subprocess.CalledProcessError:
 | |
|             return 404  # Le nom d'utilisateur n'existe pas
 | |
| 
 | |
| #*************************************************
 | |
|     @jwt_required()
 | |
|     def post(self,user,email,password):
 | |
|         """
 | |
|         Créer un utilisateur sur MM
 | |
|         ---
 | |
|         tags:
 | |
|           - Mattermost User
 | |
|         security:
 | |
|           - Bearer: []                
 | |
|         parameters: 
 | |
|           - in: path
 | |
|             name: user
 | |
|             type: string
 | |
|             required: true        
 | |
|           - in: path
 | |
|             name: email
 | |
|             type: string
 | |
|             required: true        
 | |
|           - in: path
 | |
|             name: password
 | |
|             type: string
 | |
|             required: true        
 | |
|         responses:
 | |
|             200:
 | |
|                 description: Utilisateur créé
 | |
|             400:
 | |
|                 description: oops, Utilisateur non créé
 | |
|         """        
 | |
|         
 | |
|        # Création de l'utilisateur
 | |
|         try:
 | |
|             cmd = f"/mm/mmctl user create --email {email} --username {user} --password {password}"
 | |
|             output = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
 | |
|             return output.decode("utf-8"), 200
 | |
| 
 | |
|         except subprocess.CalledProcessError as e:
 | |
|             return e.output.decode("utf-8"), 400
 | |
| 
 | |
| #*************************************************
 | |
| 
 | |
|     @jwt_required()
 | |
|     def delete(self,email):
 | |
|         """
 | |
|         Supprimer un utilisateur sur MM
 | |
|         ---
 | |
|         tags:
 | |
|           - Mattermost User
 | |
|         security:
 | |
|           - Bearer: []                
 | |
|         parameters: 
 | |
|           - in: path
 | |
|             name: email
 | |
|             type: string
 | |
|             required: true        
 | |
|         responses:
 | |
|             200:
 | |
|                 description: Utilisateur supprimé
 | |
|             400:
 | |
|                 description: oops, Utilisateur non supprimé
 | |
|         """        
 | |
|         
 | |
|         try:
 | |
|             cmd = f"/mm/mmctl user delete {email} --confirm"
 | |
|             output = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
 | |
|             return output.decode("utf-8"), 200
 | |
| 
 | |
|         except subprocess.CalledProcessError as e:
 | |
|             return e.output.decode("utf-8"), 400
 | |
| 
 | |
| #*************************************************
 | |
| 
 | |
|     @jwt_required()
 | |
|     def put(self,email,new_password):
 | |
|         """
 | |
|         Changer un password pour un utilisateur de MM
 | |
|         ---
 | |
|         tags:
 | |
|           - Mattermost User
 | |
|         security:
 | |
|           - Bearer: []                
 | |
|         parameters: 
 | |
|           - in: path
 | |
|             name: email
 | |
|             type: string
 | |
|             required: true        
 | |
|           - in: path
 | |
|             name: new_password
 | |
|             type: string
 | |
|             required: true        
 | |
|         responses:
 | |
|             200:
 | |
|                 description: Mot de passe de l'Utilisateur changé
 | |
|             400:
 | |
|                 description: oops, Mot de passe de l'Utilisateur inchangé
 | |
|         """        
 | |
|         try:
 | |
|             cmd = f"/mm/mmctl user change-password {email} --password {new_password}"
 | |
|             output = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
 | |
|             return output.decode("utf-8"), 200 
 | |
| 
 | |
|         except subprocess.CalledProcessError as e:
 | |
|             return e.output.decode("utf-8"), 400
 | |
| 
 | |
| #*************************************************
 | |
|         
 | |
| 
 | |
| #*************************************************
 | |
| 
 | |
| class Mattermost_user_team(Resource):
 | |
|   
 | |
|     @jwt_required()
 | |
|     def post(self,email,equipe):
 | |
|         """
 | |
|         Affecte un utilisateur à une équipe MM
 | |
|         ---
 | |
|         tags:
 | |
|           - Mattermost Team       
 | |
|         security:
 | |
|           - Bearer: []        
 | |
|         parameters: 
 | |
|           - in: path
 | |
|             name: email
 | |
|             type: string
 | |
|             required: true        
 | |
|           - in: path
 | |
|             name: equipe
 | |
|             type: string
 | |
|             required: true        
 | |
|         responses:
 | |
|             200:
 | |
|                 description: l'utilisateur a bien été affecté à l'équipe
 | |
|             400:
 | |
|                 description: oops, Utilisateur non affecté
 | |
|         """
 | |
|         Mattermost_authenticate()
 | |
|         
 | |
|         try:
 | |
|             cmd = f"/mm/mmctl team users add {equipe} {email}"
 | |
|             output = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
 | |
|             return output.decode("utf-8"), 200 
 | |
| 
 | |
|         except subprocess.CalledProcessError as e:
 | |
|             return e.output.decode("utf-8"), 400 
 | |
| 
 | |
| 
 | |
| #*************************************************
 | |
| 
 | |
| class Mattermost_user_channel(Resource):
 | |
|     @jwt_required()
 | |
|     def post(self,email,equipe,canal):
 | |
|         """
 | |
|         Affecte un utilisateur à un canal MM
 | |
|         ---
 | |
|         tags:
 | |
|           - Mattermost        
 | |
|         security:
 | |
|           - Bearer: []                
 | |
|         parameters: 
 | |
|           - in: path
 | |
|             name: email
 | |
|             type: string
 | |
|             required: true        
 | |
|           - in: path
 | |
|             name: equipe
 | |
|             type: string
 | |
|             required: true                
 | |
|           - in: path
 | |
|             name: canal
 | |
|             type: string
 | |
|             required: true        
 | |
|         responses:
 | |
|             200:
 | |
|                 description: l'utilisateur a bien été affecté au canal
 | |
|             400:
 | |
|                 description: oops, Utilisateur non affecté
 | |
|         """
 | |
|         Mattermost_authenticate()
 | |
|         
 | |
|         try:
 | |
|             cmd = f'/mm/mmctl channel users add {equipe}:{canal} {email}'
 | |
|             output = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
 | |
|             return output.decode("utf-8"), 200
 | |
| 
 | |
|         except subprocess.CalledProcessError as e:
 | |
|             return e.output.decode("utf-8"), 400
 | |
| 
 | |
| 
 | |
| #*************************************************
 | |
| 
 | |
| class Mattermost_team(Resource):
 | |
|   
 | |
|     def __init__(self):
 | |
|       Mattermost_authenticate()
 | |
|       
 | |
| #*************************************************  
 | |
| 
 | |
|     @jwt_required()
 | |
|     def get(self):
 | |
|         """
 | |
|         Lister les équipes sur MM 
 | |
|         ---
 | |
|         tags:
 | |
|           - Mattermost Team   
 | |
|         security:
 | |
|           - Bearer: []                
 | |
|         parameters: []
 | |
|         responses:
 | |
|             200:
 | |
|                 description: liste des équipes
 | |
|             400:
 | |
|                 description: oops, Equipe non supprimée
 | |
|         """        
 | |
|         Mattermost_authenticate()
 | |
|         
 | |
|         try:
 | |
|             cmd = f"/mm/mmctl team list --disable-pager"
 | |
|             output = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)                                    
 | |
|             data_list = output.decode("utf-8").strip().split('\n')            
 | |
|             data_list.pop()
 | |
|             return data_list, 200
 | |
|             #return jsonify(data_list),200
 | |
| 
 | |
|         except subprocess.CalledProcessError as e:
 | |
|             return e.output.decode("utf-8"), 400
 | |
| 
 | |
| #*************************************************  
 | |
|     @jwt_required()
 | |
|     def post(self,equipe,email):
 | |
|         """
 | |
|         Créer une équipe sur MM et affecter un admin si email est renseigné (set admin marche pô)
 | |
|         ---
 | |
|         tags:
 | |
|           - Mattermost Team        
 | |
|         security:
 | |
|           - Bearer: []                
 | |
|         parameters: 
 | |
|           - in: path
 | |
|             name: equipe
 | |
|             type: string
 | |
|             required: true        
 | |
|           - in: path
 | |
|             name: email
 | |
|             type: string
 | |
|             required: true
 | |
|             description: admin de l'équipe
 | |
|         responses:
 | |
|             200:
 | |
|                 description: Equipe créée
 | |
|             400:
 | |
|                 description: oops, Equipe non créée
 | |
|         """                
 | |
|         
 | |
|         try:
 | |
|             #DANGER: l'option --email ne rend pas le user admin de l'équipe comme c'est indiqué dans la doc :(
 | |
|             cmd = f"/mm/mmctl team create --name {equipe} --display-name {equipe} --private --email {email}"
 | |
|             output = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)
 | |
|             
 | |
|             #Workaround: on récup l'id du user et de l'équipe pour affecter le rôle "scheme_admin": true, "scheme_user": true avec l'api MM classique.
 | |
|             #TODO:
 | |
|             
 | |
|             return output.decode("utf-8"), 200
 | |
| 
 | |
|         except subprocess.CalledProcessError as e:
 | |
|             return e.output.decode("utf-8"), 400
 | |
|           
 | |
| #*************************************************
 | |
|     @jwt_required()
 | |
|     def delete(self,equipe):
 | |
|         """
 | |
|         Supprimer une équipe sur MM 
 | |
|         ---
 | |
|         tags:
 | |
|           - Mattermost Team        
 | |
|         security:
 | |
|           - Bearer: []        
 | |
|         parameters: 
 | |
|           - in: path
 | |
|             name: equipe
 | |
|             type: string
 | |
|             required: true        
 | |
|         responses:
 | |
|             200:
 | |
|                 description: Equipe supprimée
 | |
|             400:
 | |
|                 description: oops, Equipe non supprimée
 | |
|         """        
 | |
|         Mattermost_authenticate()
 | |
|         
 | |
|         try:
 | |
|             cmd = f"/mm/mmctl team delete {equipe} --confirm"
 | |
|             output = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT)                        
 | |
|             return output.decode("utf-8"), 200
 | |
| 
 | |
|         except subprocess.CalledProcessError as e:
 | |
|             return e.output.decode("utf-8"), 400
 | |
|           
 | |
| #*************************************************
 |