Nuestro querido plugin para importar y exportar usuarios y clientes, que antes se llamaba «Import Users From CSV With Meta» y ahora se llama «Import and Export Users and Customers»; sigue recibiendo mejoras, unas más pequeñas, otras más grandes; de forma paulatina y sin hacer mucho ruido pero que cada día lo hacen más completo. Tanto es así que ha superado ya las 1.300.000 descargas y va a llegar en breve a las más de 50.000 instalaciones activas (que se dice pronto). Muchas de las mejoras que se añaden surgen a raíz de peticiones concretas del foro de soporte. Así que os cuento esta nueva mejora de dónde viene.
Llamar al plugin de forma remota para que ejecute una importación
El plugin entre otras cosas, tiene una tarea cron, que permite ejecutar una importación de forma automática cada cierto tiempo. Esto es muy útil para sincronizar usuarios entre tu sitio y otro sistema del tipo que sea, por ejemplo. Esa tarea se ejecuta con el cron de WordPress y bueno, con las limitaciones propias del cron de WordPress tenemos constancia de que resuelve mucho la vida a muchos usuarios sincronizando usuarios y datos entre diferentes sistemas de forma automática.
Sin embargo, en este hilo del foro, el usuario le daba una vuelta más al asunto y pedía llamar a esta tarea desde fuera. Con «desde fuera» me refiero con poderlo llamar desde otro sistema pero no de forma síncrona, bajo una ejecución de cron, sino con una llamada HTTP directa.
La tarea no es compleja, sin embargo se añadían varias incertidumbres:
- ¿Creamos un endpoint propio usando un GET personalizado? ¿Usamos mejor la REST API?
- ¿Cómo nos aseguramos de que quien ejecute la tarea puede ejecutarla? ¿Le metemos un token? ¿Un nonce? ¿Y si el nonce cambia? ¿Y si alguien «lo coge» y lo usa sin permiso?
La primera pregunta tiene fácil solución, usar la REST-API. ¿Por qué? Porque para eso está. La REST-API es una forma de llamar a WordPress externamente, de forma segura y estandarizada. Así que nada, creamos un endpoint nuevo basado en un GET de este tipo: /wp-json/import-users-from-csv-with-meta/v1/execute-cron/.
La segunda usando la REST-API tenía fácil solución también: usar la autenticación propia de WordPress. Esto tenía un problema y es que complica algo su uso, pero tiene la enorme ventaja de que solo podrán usar esa funcionalidad alguien con permiso para hacerlo. Imaginad el caos que puede ser que alguien llame todo el rato a tu sitio para importar usuarios de forma descontrolada:
- puedes desde tener un problema de seguridad porque importen usuarios que no quieres (bastante grave)
- hasta tener un problema de carga en el servidor porque el proceso es bastante pesado
Así que nada, dejando la autenticación a la REST-API, nos aseguramos de que solo se pueda usar con el debido permiso de un usuario con capacidad de usar esta herramienta. Concretamente la capacidad: «create_users».
Cómo usarlo
En la pestaña «Cron» tenéis detalles, antes del log de cuál es vuestro endpoint para vuestro sitio, recordad que es una llamada GET.
Otra pequeña mejora más que lanzamos un sábado de agosto de madrugada para hacer un poco más grande este plugin que si nada lo para, seguirá creciendo de nuestra mano hasta hacerse muy mayor.