Skip to content

Stormeo Connector for PrestaShop

Plugin officiel pour connecter une boutique PrestaShop à StormeoOS. Distribution :

  • ZIP : https://beta.stormeo.io/plugins/prestashop/stormeoconnector.zip
  • Version courante : 2.6.0
  • Seuil HMAC obligatoire : >= 2.6.0

Pré-requis

  • PrestaShop 1.7.7+ (testé jusqu'à 8.1)
  • PHP 7.4+ (recommandé 8.1+)
  • HTTPS obligatoire
  • cron PS configuré (ou cron système)

Installation

  1. Télécharger le ZIP via l'UI agence (SitePilot → Mon site → Installer le connector)
  2. Uploader via Modules → Catalogue de modules → Installer un module dans le BO PS
  3. Configurer dans Modules installés → Stormeo Connector → Configurer
  4. Coller le token de pairing (60s TTL)
  5. Vérifier le statut "Connecté"

Endpoints consommés (vers StormeoOS)

Heartbeat

  • POST /v1/ping — toutes les 5 min (cron PS)

Sync events

Hook PSEndpointPayload
actionObjectProductAddAfter/api/plugin/sync-content{ type: 'product', id, ref, price, stock }
actionObjectProductUpdateAfter/api/plugin/sync-contentidem
actionValidateOrder/api/plugin/sync-content{ type: 'order', id_order, total, customer_email_hash }
actionAdminLoginControllerLoginBefore/api/plugin/v2/security-event{ type: 'login_attempt', email_hash, ip }
actionCustomerAccountAdd/api/plugin/sync-content{ type: 'customer_signup', id, email_hash }

Les emails clients sont hashés SHA-256 avant transmission (RGPD).

Métriques

  • POST /api/plugin/v2/disk-usage — usage /img, /upload, /download, dump DB
  • POST /api/plugin/v2/file-integrity — hash des fichiers core PS
  • POST /api/plugin/v2/site-info — version PS, version PHP, modules installés

Inventaire modules

  • POST /v1/cms-extensions — liste modules installés + versions → StormeoOS retourne alertes outdated

Sandbox FS stricte (v2.5+)

Pour les commandes qui touchent le filesystem (run_db_dump, read_log, etc.), le plugin applique une sandbox stricte :

Allowlist (chemins autorisés) :

  • /upload/ — uploads PS
  • /img/ — images produits
  • /themes/<active>/ — thème actif (lecture seule)
  • /var/logs/ — logs PS

Blacklist (chemins refusés même si inclus dans allowlist) :

  • Tout fichier avec extension .php, .phtml, .phar, .htaccess
  • Tout fichier dans /config/
  • Tout fichier nommé *secret*, *credentials*, *.cnf, *.env

→ Toute commande qui tente de lire/écrire hors sandbox est rejetée par le plugin (logged côté StormeoOS).

DB dump chiffré (v2.5+)

La commande ps.run_db_dump produit un dump :

  1. Pas de fichier ~/.my.cnf (ni équivalent) — credentials passées par stdin à mysqldump
  2. Output streamé à un OpenSSL aes-256-gcm avec une clé dérivée du apiSecret
  3. Cleanup auto des dumps locaux > 7 jours
  4. Upload chiffré vers le storage StormeoOS

Le dump n'est jamais lisible en clair sur le serveur PS.

RGPD (v2.6+)

Endpoint POST /v1/gdpr/delete traité par le plugin :

  1. Anonymisation customer : firstname/lastname → "Anonymous", email → hash, birthday → null
  2. Anonymisation address : noms, adresse, téléphone → null
  3. Conservation des orders (légal) mais avec FK customer anonymisée
  4. Audit log JSONL : <adminDir>/stormeo-gdpr-audit.log avec { timestamp, customerId, emailHash, deletedFields }

Sécurité spécifique au plugin PS

  • Secrets chiffrés : STORMEO_API_SECRET et STORMEO_CLIENT_SECRET stockés en enc:salt:iv:tag:cipher (AES-256-GCM, dérivation depuis _COOKIE_KEY_ PS)
  • HMAC sortant : tous les calls vers StormeoOS depuis v2.6+ signent avec HMAC-SHA256
  • Auth ping/status : par défaut anonymous (pas de leak d'info), bascule en authentifié si configuré
  • Timing-safe API key : Tools::strcmp remplacé par hash_equals (PHP 5.6+ timing-safe)
  • Pas de RCE : v2.5 a fermé tous les eval() / assert() / create_function / filesystem.write non sandboxés (audit OWASP, voir mémoire session_2026-04-26_stormeo-connector-pr-b-prestashop.md)

Désinstallation

Hook uninstall() du module PS :

  • Supprime les rows ps_configuration (STORMEO_*)
  • Conserve les logs RGPD historiques
  • Notifie StormeoOS

Logs

<adminDir>/stormeo-logs/ :

  • connector.log
  • hmac-failed.log
  • gdpr-audit.log (JSONL, ne pas supprimer)

Limitations connues

  • Multi-shop PS : v2.6 ne gère qu'un shop par instance plugin. Pour multi-shop, installer le plugin séparément par shop. Sera corrigé en v2.7.
  • Webhooks PS natifs non utilisés (PrestaShop n'a pas de webhook outbound stable < 8.0).
  • CRON externe recommandé : le cron PS interne dépend du trafic visiteurs. Pour fiabilité, configurer un cron système qui appelle index.php?fc=module&module=stormeoconnector&controller=cron.

StormeoOS API