From 6c9ecda59933dfa3541762902a5d0dbe39602142 Mon Sep 17 00:00:00 2001 From: Guillaume Lung Tung Date: Sat, 10 Dec 2022 16:02:20 +0400 Subject: [PATCH] script python pour ajouter un membre par API --- scripts/add-member.py | 100 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 scripts/add-member.py diff --git a/scripts/add-member.py b/scripts/add-member.py new file mode 100644 index 0000000..b0cdd89 --- /dev/null +++ b/scripts/add-member.py @@ -0,0 +1,100 @@ +# -*-coding:Latin-1 -* +# + +import argparse +import requests +import jwt # pip install pyjwt +from datetime import datetime as date +import os +from dotenv import load_dotenv + +load_dotenv() + +# Définir l'URL de l'API Ghost +GHOST_API_URL = os.getenv('GHOST_API_URL') + +# Admin API key goes here +GHOST_ADMIN_KEY = os.getenv('GHOST_ADMIN_KEY') + +################################### +## Génération du token JWT +################################### + +# Split the key into ID and SECRET +id, secret = GHOST_ADMIN_KEY.split(':') + +# Prepare header and payload +iat = int(date.now().timestamp()) + +header = {'alg': 'HS256', 'typ': 'JWT', 'kid': id} +payload = { + 'iat': iat, + 'exp': iat + 5 * 60, + 'aud': '/admin/' +} + +# Create the token (including decoding secret) +token = jwt.encode(payload, bytes.fromhex(secret), algorithm='HS256', headers=header) + +print('JWT token: ' + token) + +################################### +## arguments python +################################### + +# Définir et parser les arguments de ligne de commande +parser = argparse.ArgumentParser() +parser.add_argument("--email", required=True) +parser.add_argument("--name", required=True) +args = parser.parse_args() + +################################### +## Appels de l'API Ghost +################################### + +# Définir les critères de filtrage +filter = { + "filter": "email:"+args.email +} +headers = {'Authorization': 'Ghost {}'.format(token)} + +# Récupérer la liste des membres de l'instance Ghost +response = requests.get(GHOST_API_URL + "/ghost/api/admin/members/", params=filter, headers=headers) + +# Vérifier que la réponse de l'API est valide +if response.status_code == 200: + # Décoder la réponse JSON + j = response.json() + members = j['members'] + + # Si aucun membre n'a été trouvé avec l'adresse e-mail spécifiée + if len(members) == 0: + # Définir les informations du nouveau membre + member_data = { + "members": [ + { + "email": args.email, + "name": args.name, + "labels": ["TiBillet", "import " + date.today().strftime("%d/%m/%Y")] + } + ] + } + + # Ajouter le nouveau membre à l'instance Ghost + response = requests.post(GHOST_API_URL + "/ghost/api/admin/members/", json=member_data, headers=headers) + + # Vérifier que la réponse de l'API est valide + if response.status_code == 201: + # Décoder la réponse JSON + j = response.json() + members = j['members'] + member = members[0] + print("Le nouveau membre a été créé avec succès :", member["email"]) + else: + print("Erreur lors de la création du nouveau membre :", response.text) + else: + # Afficher la liste des membres + for member in members: + print(member['email']) +else: + print("Erreur lors de la récupération des membres :", response.text) \ No newline at end of file