API Filtrer les utilisateurs par e-mails, y compris les e-mails secondaires

Bonjour,

Je voudrais faire correspondre des utilisateurs à partir d’une liste d’adresses e-mail provenant d’une autre application, afin d’ajouter tous les utilisateurs à un groupe et de supprimer les membres qui ne sont pas dans le . J’ai un script qui fait cela à partir de l’API.

La partie suppression est facile. Pour chaque membre, j’extrais tous ses e-mails avec :
get(/u/{username}/emails.json)
et j’essaie de faire correspondre chacun d’eux à la liste. S’il n’y en a aucun, le membre est exclu.

La partie inclusion est plus délicate. Pour chaque adresse e-mail, je veux voir s’il existe un utilisateur avec cette adresse. S’il y en a un, je l’ajoute au groupe. S’il n’y en a pas, je ne veux pas envoyer d’invitation. J’utilise la commande :
get(/admin/users/list/all.json?email={email})
mais cette commande renvoie une liste d’utilisateurs ayant cette adresse comme adresse principale, et non ceux ayant cette adresse comme adresse secondaire, ni unconfirmed_emails, ni associated_accounts. Existe-t-il un moyen de filtrer à partir de toutes les adresses e-mail possibles, ou dois-je exporter la liste de tous les utilisateurs et le faire manuellement en externe ? Je préférerais le faire en interne afin de réduire les risques de fuites de données.

Merci !

Bonjour, bienvenue de retour ! :wave:

Le plugin Data Explorer pourrait convenir à votre cas d’utilisation.

Vous pouvez l’utiliser comme une API et créer votre requête en fonction des entrées initiales.

2 « J'aime »

Merci.
J’ai réussi à le faire avec ce plugin, en utilisant cette requête :

--[params]
-- string :q_email

SELECT u.username FROM users u JOIN user_emails e ON u.id=e.user_id WHERE e.email = :q_email

Et en l’appelant avec le script python :

import pydiscourse
client = DiscourseClient('https://forum.com', api_username='system', api_key='1234')
params = '{"q_email":"' + str(email) + '"}'
response = client._request('POST', '/admin/plugins/explorer/queries/{number}/run', params={"params":params})  # Oui, il y a 3 params, chacun représentant quelque chose de différent. Bonne pratique de hacking !
username=response["rows"]
1 « J'aime »

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.