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

  1. Carga las clases del sistema de actualización de WordPress
  2. Recorre el transiente update_plugins y actualiza cada plugin
  3. Recorre el transiente update_themes y actualiza cada tema
  4. Comprueba el transiente update_core y actualiza el núcleo si hay versión disponible
  5. Limpia todos los transientes de actualización y refresca las comprobaciones
  6. 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ónDescripción
updateActualizar el plugin a la última versión
activateActivar el plugin
deactivateDesactivar el plugin
deleteDesactivar (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ódigoCausa
401Cabecera X-RakuWP-Key ausente o inválida
403Servicio Remote no habilitado, o acción sobre el plugin RakuWP bloqueada
400Parámetros requeridos ausentes (action, plugin)
404Plugin no encontrado en el sitio

Registro de auditoría

Todas las acciones remotas se registran en el log de auditoría:

AcciónTipo de entidadContexto
updateremote_updateActualización masiva por sitio con conteos de plugins/temas/núcleo
updateremote_pluginActualización individual de plugin
activateremote_pluginActivación de plugin
deactivateremote_pluginDesactivación de plugin
deleteremote_pluginEliminación de plugin