API de Gestión Remota
Endpoints de la API REST para gestión remota de sitios: actualizaciones masivas y acciones individuales de plugins.
Descripción general
La API de Gestión Remota permite que el panel de RakuWP realice acciones en los sitios WordPress conectados. Estos endpoints están registrados en el sitio WordPress por el plugin RakuWP y son llamados por el panel, no directamente por el usuario.
Autenticación
Todos los endpoints remotos usan la clave de licencia para autenticación mediante la cabecera HTTP X-RakuWP-Key. El panel busca la clave de licencia en la tabla license_activations y la envía con cada solicitud. El plugin la verifica contra la opción rakuwp_license_key almacenada usando hash_equals().
Además, el servicio Remote debe estar habilitado en el sitio (rakuwp_enabled_services debe incluir el servicio Remote). Las solicitudes a sitios sin el servicio Remote habilitado serán rechazadas.
Endpoints
Actualización masiva
POST /wp-json/rakuwp/v1/remote/update
Ejecuta todas las actualizaciones pendientes de plugins, temas y núcleo de WordPress en el sitio.
Proceso
- Carga las clases del sistema de actualización de WordPress
- Recorre el transiente
update_pluginsy actualiza cada plugin - Recorre el transiente
update_themesy actualiza cada tema - Comprueba el transiente
update_corey actualiza el núcleo si hay versión disponible - Limpia todos los transientes de actualización y refresca las comprobaciones
- Re-sincroniza los datos del sitio con el panel vía
verify_site()
Respuesta
{
"success": true,
"results": {
"plugins": [
{ "slug": "akismet/akismet.php", "new_version": "5.3", "success": true }
],
"themes": [
{ "slug": "flavor", "new_version": "2.1", "success": true }
],
"core": { "new_version": "6.5", "success": true }
},
"errors": []
}
Cada elemento en plugins y themes incluye un booleano success y opcionalmente un string error. El campo core es null cuando WordPress ya está actualizado.
Acción de plugin
POST /wp-json/rakuwp/v1/remote/plugin-action
Realiza una acción individual sobre un plugin específico.
Cuerpo de la solicitud
{
"action": "update",
"plugin": "akismet/akismet.php"
}
Acciones disponibles
| Acción | Descripción |
|---|---|
update | Actualizar el plugin a la última versión |
activate | Activar el plugin |
deactivate | Desactivar el plugin |
delete | Desactivar (si está activo) y eliminar los archivos del plugin |
Seguridad
Las acciones sobre el propio plugin RakuWP están bloqueadas y devolverán un error HTTP 403. Esto evita desactivar o eliminar accidentalmente el plugin de gestión.
Respuesta
{
"success": true,
"action": "update",
"plugin": "akismet/akismet.php"
}
Endpoints del panel
El panel expone sus propios endpoints que el frontend llama vía AJAX. Requieren autenticación de sesión y validación del token CSRF mediante la cabecera X-CSRF-TOKEN.
Actualización masiva (Panel)
POST /remote/update
Cuerpo de la solicitud
{
"site_ids": [1, 2, 3]
}
Ejecuta actualizaciones masivas en los sitios seleccionados. Para cada sitio, el panel busca la clave de licencia y envía una solicitud al endpoint /wp-json/rakuwp/v1/remote/update del sitio.
Acción de plugin (Panel)
POST /remote/plugin-action
Cuerpo de la solicitud
{
"site_id": 1,
"action": "update",
"plugin": "akismet/akismet.php"
}
Realiza una acción individual de plugin en el sitio especificado. El panel verifica el acceso del usuario, busca la clave de licencia y reenvía la solicitud al sitio.
Manejo de errores
| Código | Causa |
|---|---|
| 401 | Cabecera X-RakuWP-Key ausente o inválida |
| 403 | Servicio Remote no habilitado, o acción sobre el plugin RakuWP bloqueada |
| 400 | Parámetros requeridos ausentes (action, plugin) |
| 404 | Plugin no encontrado en el sitio |
Registro de auditoría
Todas las acciones remotas se registran en el log de auditoría:
| Acción | Tipo de entidad | Contexto |
|---|---|---|
update | remote_update | Actualización masiva por sitio con conteos de plugins/temas/núcleo |
update | remote_plugin | Actualización individual de plugin |
activate | remote_plugin | Activación de plugin |
deactivate | remote_plugin | Desactivación de plugin |
delete | remote_plugin | Eliminación de plugin |