API Filtrar usuários por e-mails, incluindo e-mails secundários

Olá,

Gostaria de corresponder usuários de uma lista de endereços de e-mail vindos de outro aplicativo, para adicionar todos os usuários a um grupo e remover membros que não estão na lista. Tenho um script que faz isso a partir da API.

A parte de remoção é fácil. Para cada membro, extraio todos os seus e-mails com:
get(/u/{username}/emails.json)
e tento corresponder cada um deles à lista. Se não houver nenhum, o membro é excluído.

A inclusão é mais complicada. Para cada endereço de e-mail, quero ver se há um usuário com esse endereço. Se houver, eu o adiciono ao grupo. Se não houver, não quero enviar um convite. Eu uso o comando:
get(/admin/users/list/all.json?email={email})
mas este comando retorna uma lista de usuários com esse endereço como primário, e não os que têm esse endereço como secundário, nem unconfirmed_emails, nem associated_accounts. Existe alguma maneira de filtrar por todos os possíveis endereços de e-mail, ou devo exportar a lista de todos os usuários e fazer isso manualmente externamente? Eu preferiria fazer isso internamente para que houvesse menos riscos de vazamento de dados.

Obrigado!

Olá, seja bem-vindo de volta! :wave:

O plugin Data Explorer pode ser adequado para o seu caso de uso.

Você pode usá-lo como uma API e criar sua consulta com base nas entradas iniciais.

2 curtidas

Obrigado.
Consegui fazer isso com este plugin, usando esta consulta:

--[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

E chamando-o com o 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})  # Sim, existem 3 params, cada um representando algo diferente. Boa prática de hacking!
username=response["rows"]
1 curtida

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