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
This commit is contained in:
394
dockers/apikaz/source/resources/mattermost.py
Normal file
394
dockers/apikaz/source/resources/mattermost.py
Normal file
@ -0,0 +1,394 @@
|
||||
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
|
||||
|
||||
#*************************************************
|
Reference in New Issue
Block a user