Gestion des teamleaders

Ce tutoriel montre comment modifier la liste des teamleaders via les API.

/api/v2/teamleader est obsolète

Les apis utilisant /api/v2/teamleader sont obsolètes et ne permettent plus de modifier directement la liste des teamleaders. Cette API ne doit plus être utilisé.

Pour information les scripts suivants utilisent l’API obsolète :

Comment sont définis les Teamleaders ?

La liste des Teamleaders est composée par la liste des comptes utilisateurs ayant le droit Responsable d'applications.

Le code du droit Responsable d'applications est manager.

La liste des droits est définit par l’API /api/v2/allow.

Récupérer la liste des teamleaders

Le script list_teamleaders.py affiche la liste des teamleaders.

La première chose que le script réalise est de préparer le header Authorization avec le token de connexion.

# configuration du script
TOKEN="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0ZW5hbnRJZCI6ImRlZmF1bHQiLCJpc3MiOiJhdXRoMCIsImV4cCI6MzMyMDk3MDQ3MjAsImxvZ2luIjoiYXBpIn0.A-QDT74j6Cnt0g_ohVngZN2T-8kWnq4-0v5YESOK4BM"
TENANT="default"
HOST="http://localhost:9327"

#############################################################################
import requests
import sys

headers = {
    "Authorization": 'Bearer {"token":"%s","myTenant":{"id":"%s"}}' % (TOKEN, TENANT)
}

Ensuite, il fait un GET sur http://localhost:9327/api/v2/allow pour récupérer la liste des droits qu’il enregistre dans la variable allows

print("Récupération de la liste des droits")

URL_ALLOW=HOST+"/api/v2/allow"

rep = requests.get(URL_ALLOW+"/_all", headers=headers)
if rep.status_code != 200:
    print("Erreur %d : %s"%(rep.status_code, rep.text))
    sys.exit(1)
allows = rep.json()

Pour chaque élément de allows, le script garde uniquement le login de ceux qui ont teamLeader à True.

print("Filtrage des teamleaders")
teamleaders = []
for allow in allows:
    if allow["teamLeader"]:
        teamleaders.append(allow["login"])

Pour finir, il affiche la liste des logins.

print("Il y a %d teamleader(s)"%len(teamleaders))

for leader in teamleaders:
    print("- %s"%leader)

Ajouter des teamleaders

Le script invite_teamleaders.py ajoute les teamleaders qui ne sont pas encore enregistrés.

Au début, le script définit la liste des teamleaders à rajouter.

emails = [
    "luke.skywalker@rebels.org",
    "leia.organa@rebels.org"
]

Puis il définit le header Authorization.

TOKEN="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0ZW5hbnRJZCI6ImRlZmF1bHQiLCJpc3MiOiJhdXRoMCIsImV4cCI6MzMyMDk3MDQ3MjAsImxvZ2luIjoiYXBpIn0.A-QDT74j6Cnt0g_ohVngZN2T-8kWnq4-0v5YESOK4BM"
TENANT="default"
HOST="http://localhost:9327"

#############################################################################
import requests
import sys

headers = {
    "Authorization": 'Bearer {"token":"%s","myTenant":{"id":"%s"}}' % (TOKEN, TENANT)
}

L’appel à /api/v2/user avec le verbe POST permet d’enregistrer de nouveaux comptes et d’envoyer un mail d’invitation aux utilisateurs non enregistrés. Si l’appel demande l’enregistrement d’un compte déjà été enregistré, alors Carto-SI ne fera rien pour ce compte.

print("Invitation des teamleaders")

URL_USER=HOST+"/api/v2/user"

# L'API enverra un mail d'invitation pour tous les emails qui n'ont pas encore de compte
rep = requests.post(URL_USER, json=emails, headers=headers)
if rep.status_code != 200:
    print("Erreur %d : %s"%(rep.status_code, rep.text))

Pour chaque teamleader, le script récupère la liste de ses droit avec un appel à /api/v2/allow/{email}. Chaque utilisateur enregistré a obligatoirement une entrée dans cette API.

Puis, le script vérifie que l’utilisateur n’a pas le droit manager. si tel est le cas, le droit manager est rajouté et la nouvelle liste des droits est enregistré dans /api/v2/allow/{email}.

print("Les teamleaders doivent avoir le droit teamleader")

URL_ALLOW=HOST+"/api/v2/allow"

for email in emails:
    # récupère la liste des droits du user
    rep = requests.get(URL_ALLOW+"/"+email, headers=headers)
    if rep.status_code == 200:
        allow = rep.json()
    else:
        print("Erreur pour %s - %d : %s"%(email, rep.status_code, rep.text))
        continue

    if not "manager" in allow["allows"]:
        print(" - on donne les droits de teamleader à %s"%email)
        allow["allows"].append("manager")
        rep = requests.put(URL_ALLOW+"/"+email, json=allow, headers=headers)
        if rep.status_code != 200:
            print("Erreur %d : %s"%(rep.status_code, rep.text))
    else:
        print(" - %s a déjà les droits de teamleader"%email)