Skip to content

Stormeo Connector for WordPress ​

Plugin officiel pour connecter un site WordPress à StormeoOS. Distribution :

  • ZIP : https://beta.stormeo.io/plugins/wordpress/stormeo-connector.zip
  • Version courante : 3.13.4
  • Seuil HMAC obligatoire : >= 3.1.0

Pré-requis ​

  • WordPress 6.0+ (testé jusqu'à 6.4)
  • PHP 7.4+ (recommandé 8.1+)
  • HTTPS obligatoire (le site doit être joignable en HTTPS depuis StormeoOS)
  • Cron WP fonctionnel (ou cron système)

Installation ​

  1. Télécharger le ZIP depuis l'UI agence (SitePilot → Mon site → Installer le connector)
  2. Uploader via Extensions → Ajouter → Téléverser dans wp-admin
  3. Activer
  4. Coller le token de pairing (60s TTL) dans Réglages → Stormeo Connector
  5. Vérifier le statut "Connecté" (heartbeat reçu sous 60s)

Endpoints consommés (vers StormeoOS) ​

Heartbeat ​

  • POST /v1/ping — toutes les 5 min via wp_schedule_event

Sync de contenu (event-driven) ​

Hook WPEndpoint StormeoOSUsage
save_post (post, page)/api/plugin/v2/sync-content-extendedUpsert du contenu (table dédiée)
transition_post_status, wp_trash_post, untrash_post/api/plugin/v2/activityJournal d'activité (post.published, post.trashed…)
wp_insert_comment, transition_comment_status/api/plugin/v2/activityJournal d'activité (comment.*)
wp_login, wp_login_failed, user_register/api/plugin/v2/activity (+ /api/plugin/v2/security-event côté monitoring)Journal + événements sécurité
activated_plugin, switch_theme, upgrader_process_complete…/api/plugin/v2/activityJournal d'activité (plugin.*, theme.*)

Catalogue complet des types et enveloppe : events.md.

WooCommerce (si actif) ​

HookEndpointPayload
woocommerce_new_order/api/plugin/sync-content{ type: 'wc_order', order_id, total, status }
woocommerce_order_status_changed/api/plugin/sync-content{ type: 'wc_order_status', from, to }
woocommerce_product_set_stock/api/plugin/sync-content{ type: 'wc_stock', product_id, qty }

Métriques (cron daily) ​

  • POST /api/plugin/v2/disk-usage — usage disque (uploads, db dump size, total)
  • POST /api/plugin/v2/file-integrity — hash des fichiers core WP (détection altération)
  • POST /api/plugin/v2/site-info — métadonnées (PHP version, WP version, plugins/themes installés)

Inventaire ​

  • POST /v1/site-contents — résumé du contenu (counts par type) — sync hebdo
  • POST /v1/cms-extensions — liste plugins+themes installés + versions disponibles → StormeoOS calcule les securityAlerts (outdated plugins) et les renvoie en réponse

Endpoints exposés (REST WordPress, namespace stormeo/v1) ​

Le plugin expose des routes sous /wp-json/stormeo/v1/ :

RouteAuthDescription
/pingpubliqueSonde de joignabilité (payload minimal, sans données)
/statuspubliqueStatut de connexion (payload minimal)
/ssopubliquePoint d'entrée SSO wp-admin (jeton à usage unique)
/data-requestBearer secretRequêtes de données à la demande
/mcp-executeBearer secretExécution d'une commande approuvée (RPC chiffré, voir MCP)
/mcp-previewBearer secretPrévisualisation d'une commande avant approbation
/mcp-rollbackBearer secretRetour arrière via snapshot
/mcpauth REST WPServeur MCP natif (MCP Adapter + Abilities API, si présents — voir MCP)

Les routes authentifiées vérifient le secret d'appairage en comparaison timing-safe ; les payloads mcp-* sont chiffrés AES-256-GCM et signés HMAC (voir ../mcp/hitl-workflow.md).

En complément, StormeoOS pilote le plugin via :

  1. La queue /api/plugin/commands (poll par le plugin)
  2. Les webhooks /v1/webhooks émis par StormeoOS vers une targetUrl définie côté serveur (rare)

Commandes supportées ​

Reçues via GET /api/plugin/commands, exécutées côté plugin, résultat retourné via POST /api/plugin/command-result.

TypePayloadAction
wp.update_plugin{ plugin: "akismet", version: "5.3" }Met à jour un plugin
wp.update_theme{ theme: "twentytwenty" }Met à jour un thème
wp.update_core{ version: "6.4.2" }Met à jour WordPress core
wp.flush_cache{}Flush page cache (plugin si présent)
wp.flush_object_cache{}Flush object cache (Redis/Memcached)
wp.run_db_optimize{}OPTIMIZE TABLE sur toutes les tables wp_*
wp.toggle_maintenance{ enabled: true }Bascule mode maintenance
wp.run_db_dump{ tables: ['wp_posts', '...'] }Dump DB chiffré (post v3.3+)

v3.3+ : la commande run_db_dump produit un dump AES-256-GCM at-rest, uploadé chiffré vers s3://stormeo-backups/<agencyId>/<siteId>/. Auto-delete après 7 jours.

Abilities & serveur MCP natif (v3.13+) ​

Depuis la v3.13, le plugin enregistre ses opérations comme abilities (Abilities API WordPress) et, si le MCP Adapter est présent sur le site, publie un serveur MCP natif sur /wp-json/stormeo/v1/mcp exposant une liste explicite d'abilities en lecture seule (10 exposées, mutations et opérations retenues).

L'état est remonté à StormeoOS dans le heartbeat (payload.abilities) et détermine la maturité du connecteur : legacy-only → abilities-ready → mcp-ready.

Détails : MCP & Abilities.

Sécurité spécifique au plugin WP ​

  • wp_options chiffrés : apiKey, apiSecret, pairingNonce stockés en AES-256-GCM at-rest (clé dérivée de AUTH_KEY + sel par site)
  • CSP : le panel admin du plugin n'utilise pas d'inline scripts (script-src 'self' strict)
  • Capability check : tous les endpoints d'admin demandent manage_options (admin uniquement)
  • Nonces : tous les actions admin protégées par wp_create_nonce + check_admin_referer
  • HTTPS only : refus de pairing si is_ssl() === false

RGPD ​

Hook wp_privacy_personal_data_eraser enregistré : sur demande de suppression d'un utilisateur, le plugin :

  1. Anonymise les commentaires (auteur → "Anonyme", email → hash)
  2. Notifie StormeoOS via POST /v1/gdpr/delete
  3. Renvoie le rapport au mécanisme RGPD natif WP

Désinstallation ​

uninstall.php du plugin :

  • Supprime toutes les options wp_options créées (stormeo_*)
  • Ne supprime pas les events RGPD historiques (rétention légale)

Il n'y a pas d'endpoint de déconnexion côté StormeoOS : le connecteur passe en état « injoignable » quand le heartbeat cesse. La suppression du connecteur se fait depuis l'UI StormeoOS.

Logs ​

Le plugin écrit dans wp-content/uploads/stormeo-logs/ :

  • connector.log — événements généraux (rotation 7 jours)
  • hmac-failed.log — signatures rejetées (debugging clock skew)
  • command-results.log — résultats des commandes exécutées

Niveau de log configurable via Réglages → Stormeo Connector → Avancé → Verbosité.

StormeoOS API