Supongo que la respuesta es “bombardear la API con miles de solicitudes”, pero esperaba que hubiera algo más inteligente.
Escenario: construimos un sitio comunitario para una gran cooperativa. Hay más de 15.000 miembros, probablemente el 95% de ellos nunca abrirán una cuenta y un 4% más crearán una cuenta pero nunca la usarán. Crear un solo enlace para 15.000 invitaciones abre el sitio al abuso, así que lo que quiero hacer es crear unos 16.000 enlaces de invitación, cada uno con solo una invitación, y la herramienta de plantillas de correo se encargará de unirlos. La única pega es la creación del enlace de invitación. Quiero separar los sistemas por privacidad, por lo que no alimentaré las más de 15.000 direcciones a Discourse, así que el servidor de Discourse no llevará la lista completa de correos electrónicos, solo la lista de enlaces de invitación anónimos.
Si considera que almacenar direcciones en Discourse es más peligroso que en cualquier otro lugar donde las almacene, es una preocupación de privacidad, tendrá que crearlas. Si no le gusta la API, podría hacerlo desde Rails:
Esa habría sido mi opción, naturalmente, solo que no tengo la lista de correos electrónicos de antemano. Este es un sitio para una cooperativa de crédito, por lo que la gerencia no puede simplemente entregarme una lista de 15.500 correos electrónicos y arriesgarse a un desastre de privacidad (y yo no quiero asumir el riesgo). así que tengo que crear 16.000 enlaces con una sola redención en cada uno, y ellos lo insertarán en su cañón de correo electrónico. Espero que mejore más adelante.
También supongo que no hay autenticación SSO que se pueda usar.
En ese caso, lo que sugirió @pfaffman es el camino a seguir.
Algo como
user = User.find_by(username: 'system')
16000.times do
i = Invite.generate(user, skip_email: true, max_redemptions_allowed: 1)
puts "/invites/#{i.invite_key}"
# escribe "/invites/#{i.invite_key}" en un archivo
end
serviría. Empieza con bucles de 1 o 2 hasta que funcione como esperas.
Una forma perezosa pero aceptable de hacerlo sería simplemente imprimirlos todos (puts) y registrar tu sesión de terminal
Sabes qué, no quiero empezar a molestar a nadie para que me enseñe RoR en un foro. Veo que al añadir un retraso de 1 segundo entre las llamadas a la API no me multan por velocidad, así que esta primera ejecución será lenta.
La clave de la API se creó para el usuario “system”, por lo que todas las invitaciones no aparecen en mis pantallas de gestión de usuarios. Ahora me embarcaré en una misión para ver el estado de las invitaciones totales en el servidor sin tener que iniciar sesión como “system”, si es que eso es posible.
Gracias por ahora, espero tener preguntas más inteligentes y astutas la próxima vez
Es bastante fácil iniciar sesión como system, si está marcado como “developer” (correos electrónicos proporcionados al crear el foro como administradores predeterminados) del foro. Simplemente puede abrir la página de usuario de @system, seleccionar Admin, desplazarse hasta el final y hacer clic en Impersonate.
oh, claro… Simplemente nunca me desplacé tan abajo muy bueno. He usado Discourse como usuario en diferentes sitios durante años, solo me perdí algunos matices básicos como administrador de uno…