Hero

Outline Wiki y Google SSO

Febrero 23, 2022

ibonelli
Outline
Wiki
Google
SSO

El proposito de esta entrada es ayudar a resolver el problema de un usuario que intenta ingresar. Si se recibe un mensaje poco claro y el log de Outline tampoco ayuda, existe la posibilidad de que tenga el mismo mail pero su hash haya cambiado.

Outline Wiki

Lo empezamos a usar wiki de outline hace un par de años. Nos gusta debido a la buena integración que tienen con los servicios de Google (SSO y Drive). Además es muy sencillo y lo tenemos corriendo en una instancia de Heroku nuestra. Es una aplicación nodeJS (7usd p/m), una base de datos Postgres y un nodo de cache Redis (sin costo adicional). Hasta ahora las actualizaciones se pudieron actualizar sin contratiempos y es sencillo hacer backups con el CLI de Heroku. Lo mejor es que una vez que creamos el usuario de Google ya tiene acceso a nuestro Wiki.

¿Pero que pasa cuando el usuario que creamos en Google deja la compañia? En Outline podemos suspender la cuenta, pero no podemos borrarla. Si esta misma persona retorna a nuestra empresa, tendrá el mismo mail. Pero esto nos va a crear un problema, por qué Outline lo ve como el mismo usuario pero no del todo. O sea, el email es el mismo, pero el hash de Google no lo es. Si desde Outline hoy pudieramos borrar el usuario, todo se resolvería fácil. Pero no podemos y hablandolo con el equipo ellos no ven esto como un bug sino una mejora. Así que decidimos escribir este blogpost para evitarles nuestro penar a nuevas víctimas.

Inicialmente parecía que tenía 2 opciones para solucionar esto:

  1. Usar la API de outline para borrar un usuario.

  2. Acceder a la base de datos y borrar el usuario “a mano”.

En ambos casos la siguiente vez que se conecte el usuario, se recrea su registro y evitamos el problema. Pero bueno, con mis conocimientos de Outline no pude darle al token privilegios de administrador y decidí usar la segunda opción.

Pasos para poder borrar el usuario y evitar este problema

Primero debemos acceder al CLI de Postgres. En mi case lo hice usando el CLI de Heroku: heroku pg:psql --app=<your-app-ID>

Luego necesitamos conseguir el userID. Hay nuevamente dos opciones para esto, pero una es API y ya estamos con la base de datos. ASí que simplemente correremos una query: SELECT id FROM users WHERE email='<email-del-usuario-con-problemas>';

Y finalmente debemos correr algunas queries usando el userID que conseguimos en el paso anterior:

DELETE FROM group_users WHERE "userId"='<userID>';
DELETE FROM events WHERE "userId"='<userID>';
DELETE FROM events WHERE "actorId"='<userID>';
DELETE FROM users WHERE id='<userID>';

Es importante correrlas en el orden que vemos, la base de datos tiene relaciones que previenen borrarlas de otra manera. Solo por dar un ejemplo de como se ve un userID: e69dd388-be62-4ad8-8cd1-fbe9a3c481fa.

Una vez que corrimos estas queries el usuario ya no existe. Así que podemos pedirle que se logueé y podrá entrar sin problemas.

Espero que esto les sirva y ahorre tiempo. Saludos!

Recibe consejos y oportunidades de trabajo 100% remotas y en dólares de weKnow Inc.