KazV2/dockers/apikaz/source/resources/mattermost.py
hpl f796f01d40 Modifications qui seront validées :
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
2024-08-20 01:53:17 +02:00

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
#*************************************************