API de Gestion à Distance

Endpoints de l'API REST pour la gestion à distance des sites : mises à jour groupées et actions individuelles sur les plugins.

Aperçu

L'API de Gestion à Distance permet au panneau RakuWP d'effectuer des actions sur les sites WordPress connectés. Ces endpoints sont enregistrés sur le site WordPress par le plugin RakuWP et sont appelés par le panneau, pas directement par l'utilisateur.

Authentification

Tous les endpoints distants utilisent la clé de licence pour l'authentification via l'en-tête HTTP X-RakuWP-Key. Le panneau recherche la clé de licence dans la table license_activations et l'envoie avec chaque requête. Le plugin la vérifie contre l'option rakuwp_license_key stockée en utilisant hash_equals().

De plus, le service Remote doit être activé sur le site (rakuwp_enabled_services doit inclure le service Remote). Les requêtes vers des sites sans le service Remote activé seront rejetées.

Endpoints

Mise à jour groupée

POST /wp-json/rakuwp/v1/remote/update

Exécute toutes les mises à jour en attente de plugins, thèmes et cœur WordPress sur le site.

Processus

  1. Charge les classes du système de mise à jour de WordPress
  2. Parcourt le transient update_plugins et met à jour chaque plugin
  3. Parcourt le transient update_themes et met à jour chaque thème
  4. Vérifie le transient update_core et met à jour le cœur si une version est disponible
  5. Nettoie tous les transients de mise à jour et rafraîchit les vérifications
  6. Re-synchronise les données du site avec le panneau via verify_site()

Réponse

{
  "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": []
}

Chaque élément dans plugins et themes inclut un booléen success et optionnellement une chaîne error. Le champ core est null quand WordPress est déjà à jour.

Action de plugin

POST /wp-json/rakuwp/v1/remote/plugin-action

Effectue une action individuelle sur un plugin spécifique.

Corps de la requête

{
  "action": "update",
  "plugin": "akismet/akismet.php"
}

Actions disponibles

ActionDescription
updateMettre à jour le plugin vers la dernière version
activateActiver le plugin
deactivateDésactiver le plugin
deleteDésactiver (si actif) et supprimer les fichiers du plugin

Sécurité

Les actions sur le plugin RakuWP lui-même sont bloquées et renverront une erreur HTTP 403. Cela empêche de désactiver ou supprimer accidentellement le plugin de gestion.

Réponse

{
  "success": true,
  "action": "update",
  "plugin": "akismet/akismet.php"
}

Endpoints du panneau

Le panneau expose ses propres endpoints que le frontend appelle via AJAX. Ils nécessitent une authentification de session et la validation du jeton CSRF via l'en-tête X-CSRF-TOKEN.

Mise à jour groupée (Panneau)

POST /remote/update

Corps de la requête

{
  "site_ids": [1, 2, 3]
}

Déclenche des mises à jour groupées sur les sites sélectionnés. Pour chaque site, le panneau recherche la clé de licence et envoie une requête à l'endpoint /wp-json/rakuwp/v1/remote/update du site.

Action de plugin (Panneau)

POST /remote/plugin-action

Corps de la requête

{
  "site_id": 1,
  "action": "update",
  "plugin": "akismet/akismet.php"
}

Effectue une action individuelle de plugin sur le site spécifié. Le panneau vérifie l'accès de l'utilisateur, recherche la clé de licence et transmet la requête au site.

Gestion des erreurs

CodeCause
401En-tête X-RakuWP-Key manquant ou invalide
403Service Remote non activé, ou action sur le plugin RakuWP bloquée
400Paramètres requis manquants (action, plugin)
404Plugin non trouvé sur le site

Journalisation d'audit

Toutes les actions distantes sont enregistrées dans le journal d'audit :

ActionType d'entitéContexte
updateremote_updateMise à jour groupée par site avec compteurs plugins/thèmes/cœur
updateremote_pluginMise à jour individuelle de plugin
activateremote_pluginActivation de plugin
deactivateremote_pluginDésactivation de plugin
deleteremote_pluginSuppression de plugin