SecuPress

SecuPress v2.6.1 et cie

Blog SecuPress SecuPress v2.6.1 et cie
0 commentaire

Les versions mineures ne méritent habituellement pas un article, celle-ci non plus, mais le moment est bien choisi pour en parler tout de même. Retour sur 2025, le début d’année 2026 à propos du site secupress.me et les déboires que le site a subit. Nous sommes fin mars 2026, tout va déjà mieux, j’ai patché un max de choses, je m’assure que le produit fonctionne bien. Et enfin de très bonnes nouvelles pour le dernier trimestre et 2027.

edit ps : Si vous avez le bug en pro de la mise à jour qui est demandée en boucle, faites le 1 dernière fois, c’est réglé.

Changelog rapide de la v2.6.1

2 améliorations, quelques correctifs dont 2 importants.

1er important, celui de corriger l’erreur fatale is_processing() sur la page du scanner de malwares que SecuPress affiche même s’il n’en est pas la cause principale. Pourquoi ? Et pourquoi je n’ai pas corrigé avant ? Déjà, je n’ai pas de bug en soit, installez SecuPress Pro sur une installation propre, activez, visitez le scanner de malwares : tout–va–bien. L’erreur provient en réalité d’autres plugins (coucou WooCommerce principalement) qui incluent la même librairie que moi (celle du async background), mais avec une version obsolète. Mon plugin l’ayant à jour, je fais appel à une méthode qui n’existe pas dans leur fichier. Eux ont fait le choix d’inclure leur fichier obsolète non-stop partout tout le temps. Ce qui fait que quand je fais l’appel à la méthode, ce n’est pas le bon fichier qui est inclus en amont. C’est donc bien de leur faute. J’ai fini par devoir patcher pour à la fois avoir la lib à jour ET faire appel à l’ancienne méthode dépréciée…

Second correctif important est l’arrêt de l’usage de la commande host $IP, qui sur certains serveurs consomme trop de ressources à la longue, les process n’étant jamais terminés, ce qui fait tomber le site chez l’hébergeur. J’en reparle un peu après.

Concernant les améliorations, il s’agit de l’amélioration des performances du scanner de malware en ce qui concerne la base de données. Ce sera plus rapide en consommant moins de ressources. Les requêtes SQL ont été découpées en plusieurs petites plutôt qu’une grosse avec des jointures.

L’autre amélioration est l’arrêt du ping sur google.com (non-EU) remplacé par un ping sur secupress.me (EU) afin de coller encore mieux à la RGPD. Rien de bien sensible n’était transmis, si ce n’est votre nom de domaine, le fait que vous utilisiez WordPress et la version de ce WordPress (comme tout appel distant avec l’API HTTP de WordPress en fait, c’est natif).

Ça, c’est du bon positif !

café

Prenons un café…

Le changelog est déjà terminé, mais l’article continue, j’ai besoin de vous faire une sorte de compte-rendu ce qui s’est passé, se passer et va se passer. TL;DR : Le passé est passé, le présent est plaisant et le futur fait bonne figure.

Compte rendu de la v2.3

Revenons rapidement sur ce point, il y a un lien vous verrez. L’extension SecuPress en version 2.3 a été commencé en avril 2023 et lancée en free en mars 2025 et pro juillet 2025. Et cela a été une catastrophe, car, qui fait environ 2 ans de dev pour une version pour avoir un changelog long comme le bras ? Personne, car il ne faut pas faire ça. Malgré les mois de debug, de beta free, d’aides, de redebug, de retours et de patchs, il a fallu 21 versions différentes pour arriver à faire du stable. L’enfer. Du négatif.

Heureusement la fin d’année a été bien plus propre et calme avec 3 versions 2.4, 2.5 et 2.6 de septembre à janvier 2026, confirmant sa stabilité méritée. Le changement qui nous intéresse ici est la nouvelle route API concernant les clés de licence. Nous y reviendrons.

Avant la 2.3 avec EDD

Allez, rapidement aussi, rappelons que EDD (Easy Digital Downloads) est le système de e-commerce utilisé par SecuPress depuis toujours (2016), et qu’il y a toujours eu ce problème récurrent :

1/ Désynchronisation entre EDD et Stripe/Paypal dans les 2 sens, ce qui résulte d’avoir des abonnements payés par les clients mais qui restent pourtant avec un status « expired ». L’inverse existe autant, des paiements échoués qui laissent les abos actifs, mais à l’avantage client, je ne m’en plains alors pas.

Depuis EDD 3.0

Septembre 2023, EDD passe en 3.0, les ennuis commencent. Pourquoi ? Car c’est seulement si on utilise uniquement EDD et ses extensions (Recurring Payment, Software Licensing, etc) et rien d’autres qui n’est pas officiel, qu’on utilise pas leur hooks, qu’on étends pas nous même les fonctionnalités que tout va bien.

Mais un site comme SecuPress nécessite des modifications de leur coeur, et depuis 2016 on touche à tout ça, on est des devs, on sait toucher, on a adapté à nos besoins. Le système de data distantes est maison, on a nos propres fonctions et requêtes qui touchent à EDD etc.

Mais quand EDD passe de « c’est un CPT avec des meta » et donc usage natif des fonctions de WP à « alors non en fait on a notre propre dev, propres tables, propres getter/setter » alors ça devient de suite plus compliqué, la dette technique fait un bon.

Vous me direz « mais non car il y a de la retro compat », oui, si on a pas de dev maison, pas de sql maison, mais on a.

2/ Des hooks qui ont été dépréciés, mais rien dans le changelog, d’autres sont renommés, idem. Petit à petit on découvre des choses qui ne fonctionnent plus, qu’il faut débugger et redévelopper.

Puis on découvre que les clés de licences expirent alors que l’abonnement n’expire pas, pourquoi ? Une clé n’a pas d’expiration, c’est l’abonnement qui en a une non ? Non. Les 2 sont dissociées maintenant, donc je dois vite trouver le moyen de retourner le même status d’abonnement lors de la lecture du status de la clé. EDD n’a pas de hook à cet endroit, c’est une var dans un objet, c’est calculé, point. Débrouille toi avec ça.

3/ Clés de licences qui peuvent avoir une expiration différente de l’abonnement lié.

angry man 1

Rageant non ?

Compte rendu de 2025

Dans le même temps de release de la 2.3 début 2025, les mails ont cessé de fonctionner, ou plutôt d’être transférés dans Helpscout notre système de ticket de support. Au debut je voyais juste moins de support, jusqu’à comprendre que « pas de support » était trop étonnant pour être normal. Après des allers/retours avec le super support o2switch, le problème a été magiquement réglé (oui, je n’y connais rien en serveur mail, je ne saurais pour dire !).

Une fois les mails « reconnectés », il a fallu se débrouiller pour aller dans Horde pour lire les mails et non Helpscout, un enfer.

S’en est suivi juillet/aout où j’ai été peu présent, mais la 2.3 étant stable, c’était rassurant. « Et là c’est le drame » 3000 spams reçus en peu de temps sur les 2 boites. Pas 2759, mais bien 3000, 1500 par boite, sans être piratés, ça ressemble beaucoup trop à un ciblage en règle…

Quasi rien ne va dans les spams, ce n’est pas de la pub pour une pilule bleue ou des sacs Vouis Luiton, non, des fausses demandes de partenariats, des fausses demandes de factures, des fausses demandes de support, mais aucun mail ni nom ne correspond, personne ne donne de détail suffisant, c’est vague, c’est du spam.

Il faut savoir que la masse de support de SecuPress est relativement faible, 2h par jour sont suffisantes, parfois trop, et la majorité des tickets sont « où est ma facture ? » ou « j’ai payé mais c’est expiré », ce n’est que rarement le produit en lui même, il va très bien.

Trier ces 3000 mails m’a pris un temps de fou car en même temps je dev, je réponds, je trie. J’ai tenté de me faire aider au support en recrutant, mais la rémunération demandée de 1200€ pour 2h de travail par jour, 5 jours par semaine, c’est trop élevé, cela équivaut à 4200 (brut) pour 7h de travail par jour, au support, qui a le luxe de pouvoir rémunérer à ce tarif ?! Je fais donc seul, mais j’aimerai que ça rechange ça aussi, il faut que je vois comment faire et avec qui.

dollar

Money money money, must be funny…

Compte rendu de Janvier Février Mars 2026

Durant ce premier trimestre, j’ai encore du retard de support de la fin d’année, je me fais des vagues pour répondre un maximum, en fermer un maximum, ça tient bon, le dev 2.7 est en cours, personne ne l’attends de toutes façons, tout va bien à ce niveau. Une version beta arrivera et si ça peut sortir pour septembre c’est très bien.

demo http log

demo http log

C’est là que j’ai (encore) mis à jour EDD, car oui c’est important de se tenir à jour, mais avec EDD c’est toujours un risque… « Et là c’est le drame« , on a eu des sites en doublons dans les licences, des sites sans « www » qui ont vu leur « www » s’ajouter, remplissant alors leur licence pour rien à 50%.

4/ Des sites www qui sont revenus en doublon dans les licences.

Les clients peuvent supprimer un site depuis leur interface client, normalement, à moins que EDD ne procède à un changement de comportement front/back sur le lien de suppression d’un site qui provoque une erreur fatale à cause d’un dev maison ?! Oui, EDD l’a fait…

Et même après fix de la fatale les sites ne se suppriment plus car les droits ont changés, il faut trouver le bon hook pour passer avant, dupliquer SON code et ajouter des droits aux clients de supprimer leur propre site… La fatigue.

5/ Impossibilité de supprimer un site dans son compte sur sa licence.

Une fois réglé de nouveau, autre soucis et comme toujours rien dans leur changelog, on s’en aperçoit au fur à mesure ou par hasard ou si ça gêne les clients :

6/ Supprimer un site ne le supprime plus de la BDD, ça le passe en activated=0 puis ils filtrent sur =1 pour récupérer la vraie liste, partout, tout le temps.

Mais mes devs maison ne filtrent pas ce status inutile, si ce n’est pas présent c’est non, là c’était « oui » donc du « déjà existant » était retourné puisque si je vérifie que « 21douze.fr » est dans la liste ? « bah oui » forcément, mais il peut être désactivé, je vais quand même dire OK, il faut repasser sur les fichiers du thèmes, mu-plugins, plugins, dev maison partout pour chercher où on récupère un site via son URL et ajouter ce filtre.

Mais cela a amené d’autres soucis dans des apps maison, le mieux a finalement été de hooker pour ajouter la suppression en base de données, comme avant.

7/ Valider une licence n’ajoute plus automatiquement le site, il faut le faire en plus après.

Alors que la logique voudrait qu’un site qui installe une version de SecuPress pro se voit être ajouté à la clé de licence, non, ça valide simplement le fait que la licence est valide, le site ne s’ajoute pas en base. Mais le site est bien validé côté client, qui n’aura pas le décompte dans sa clé. Soit il ne fait pas attention et il en valide 10 sur une clé de 5 possible, soit il veut le supprimer mais il n’est pas ajouté.

De nouveau on découvre ça petit à petit, il faut alors comprendre le pourquoi, où ça se fait, hooker, ajouter le site manuellement en base alors que depuis 10 ans c’est comme ça… $dette_technique++;

Allez, j’ai encore des erreurs de licences, des pros qui ne veulent plus se réactiver après une suppression volontaire de la clé, ou des sites qui ne valident plus la pro. « Et là c’est le dr… » oui bon ok. En base EDD a toujours ajouté une « / » finale quand il enregistre un site en base, puis il ajoute cette « / » lors de ses recherches etc, et hop magie :

8/ EDD n’ajoute plus une « / » finale lors de la sauvegarde des URLs en base alors qu’il l’a toujours fait depuis plus de 10 ans chez nous.

Hors dans mes hooks/scripts/sql je force une « / » finale, donc je ne trouve plus ce que je cherche, je retourne alors « false » pour rien. Il faut repasser sur les fichiers du thèmes, mu-plugins, plugins, dev maison partout pour chercher où on ajoute une « / » (cherchez « / » dans vos devs pour voir…).

angry man 2

RAGEANT NON ??

Et quand c’est pas EDD ?!

Gros drame et c’est même pas EDD: Le site secupress.me tombe. Les mails, le FTP et la BDD restent accessibles, pas de logs PHP en erreurs, pas de fatale, pas d’erreur 500, juste inaccessible. Donc pas de nouveaux achats possibles, les licences ne peuvent être validés, les sites ne peuvent être supprimés, pas de page support ou contact. les renouvellements se font mais pas la synchronisation va encore bugger…

Après plusieurs allers/retours avec le re-super support o2switch on a du mal à comprendre pourquoi j’ai un excès de process en cours. Si c’était le PHP j’aurais un log, mais là rien. Il reste 2 pistes après plusieurs jours de tests de debug.

a/ D’un côté l’ancienne URL de l’api de SecuPress 1.0 à 2.2 qui est tapée trop souvent (twice a day / par site), chargeant à chaque fois un WP pour rien, remplissant les process (coucou host). Les sites encore sous 2.2 et tous les sites qui utilisent une version pirate modifiée pour fonctionner sans licence (connu sous le nom de « nulled« ) tapent dedans, le pire étant les nulled car c’est non stop en boucle pour eux, jamais ils ne sont validés, donc ça retente en boucle en boucle en bou… Il faut la couper, ça fait 1 an que la 2.3 est sortie en free, je coupe l’url https://secupress.me/key-api/1.0/ (410 Gone maintenant). Ouf !

b/ De l’autre des commandes « host $IP » (voilàààà) provenant de SecuPress qui ne se terminent pas, remplissant aussi les process. C’est le plugin qui lance ces commandes, cela n’avait jamais posé soucis, ça en devient un. J’ai modifié le code dans cette 2.6.1 pour éviter son usage, ça va mieux…

Mieux ? Bougez pas. Les sites pro des clients voient leur clé de licence être déconnectées plusieurs fois par jour, la version pro se comporte alors comme une version free, la 2FA est désactivée. Une fois la clé revalidée, il faut aussi revalider le lien dans mail de la 2FA. Bon, quand on a 1 site c’est pas super marrant déjà, mais les agences qui sont clientes avec plus de 50, 100, 200 sites, là c’est plus que pénible, combien de temps pour repasser sur autant de sites ? Plusieurs fois par jour ? En gérant les clients qui se plaignent que la 2FA est HS ? Halalala mais quel énorme enfer, c’est ma hantise, de faire que mon produit qui est là pour sécuriser, donc empêcher que le site soit inaccessible, se retrouve être celui qui rend ce site inaccessible d’une certaine façon. Mais au fait, pourquoi ??

9/ Réponse JSON différente de la part de EDD

Je n’ai plus le détail, mais en gros dans le plugin je fais un ! empty() qui était non vide avant, et qui désormais renvoie « false », hors « false » est vide… on ne passe plus dans la condition habituelle, le code continue et fini par renvoyer un code erreur site_is_pro=0, laissant penser au plugin que le site n’est pas valide en tant que site pro. Hop la clé est déconnecté, cela est posé dans un cron qui fera la manip en boucle tant que je ne change pas la réponse depuis le site distant.

Willy Bahuaud  de chez Wabeo est venu me faire ce report aussi sur Slack et est resté avec moi pour debugger en live l’API jusqu’à ce qu’on comprenne à quel endroit pile entre EDD, le plugin, mes devs, à qui était de corriger (je ne compte pas sur EDD pour le moindre fix, eux c’est bien géré !) et où. Il a trouvé avant moi, on a fix, tout est revenu dans l’ordre. Merci mon ami Willy.

Au passage, j’ai modifié dans cette 2.6.1 le comportement de la validation du module de 2FA pour ne pas qu’il remail à chaque fois qu’il se fait déconnecter par la clé/licence, mais seulement manuellement.

angry man 3

JPP

Compte rendu de Avril à Septembre 2026

Je parle ici au futur car nous sommes fin mars 2026 quand je rédige cet article. C’est décidé, je quitte EDD au plus vite, ce ne sera pas simple, mais je ne peux et je ne veux plus subir tout ça. Le CA est tombé de 10% sur le premier trimestre à cause de l’image du produit, du temps que les gens ont perdu à cause des erreurs, le site down sans achat et mon manque de communication n’a pas aidé, la prio étant de corriger tout ça et non de passer mon temps à dire « je vais corriger, on va trouver, merci de patienter » en boucle. Pour toutes celles et ceux qui ont subit des désagréments, je vous présente mes excuses.

Le but étant de ne plus avoir de soucis de licence, de facturation, de pouvoir offrir une meilleure expérience aux clients, réduire le support et donc la frustration. Cette réflexion me pousse à valider ce que j’ai aussi déjà commencé l’an dernier : refaire le site front en v2, il date de 2016, alors il sera redesigné par Dareth N., le moodboard sera validé en avril pour être dev pour septembre en recette et fin d’année en prod.

Le back-office devra aussi être revu, sans EDD, et là une magie s’opère où Loïc Blascos a justement réalisé un plugin maison qu’il utilise pour son nouveau produit Unblock (et aussi celui de Maxime BJ avec Modern Fields) qui remplace EDD et permet aussi une migration ! SecuPress.me va aussi utiliser ça ! Tout se passe chez Stripe (même si c’est Paypal !), fini les soucis de synchro, de clé déco, de factures… le rêve en fait.

Mais il me faut aussi un dashboard unique, je l’ai promis depuis plusieurs années, comme un WP Umbrella mais orienté uniquement SecuPress (pas de backups, mise à jour etc) et là on a de nouveau Willy qui a fait ce dev pour lui et il veut bien l’adapter pour SecuPress, le top. On pourra alors interagir depuis une interface unique sur tous les sites de notre parc, scanner, (dés)activer des features, corriger, etc tout ça sur secupress.me à distance.

Nous sommes fin mars 2026, tout va déjà mieux, j’ai patché un max de choses, je m’assure que les licences ne coupent pas pour rien, j’ai mis en place une synchro live avec stripe afin de récupérer le véritable status des licences, puis ça synchronise les factures de renouvellement oubliés. Ça aide !

happy man 1

Allez on souffle.

WordCamp Rennes 2026

https://bretagne.wordcamp.org/2026/ C’est par ici que ça se passe. Puisque ce camp arrive le 18/09, je me suis dit que ça serait bien qu’avec les amis Loïc, Dareth, Willy on se fasse une session de travail en live avant la journée de contribution. Et comme à tous les WordCamps je prends un grand BNB où j’invite du mode, c’était tout vu, on va faire ça : dans les jours qui précèdent le camp, on se mets en mode rush et on fait en sorte d’avoir un site secupress v2 en test avec tout ce qu’on a dit auparavant. Tout le monde est OK, c’est vraiment un alignement d’étoiles, j’adore, ça remonte le moral.

D’ailleurs, il reste des places dans ce BNB, venez sur twitter en DM ou Slack WPFR en DM pour y venir 😉

Compte rendu de Octobre à Décembre 2026

(Mode vision dans le futur) Le WordCamp Rennes est passé, le site v2 est en recette, il sort pour Noël et fêter les 10 ans du plugin qui passe en 3.0 dans le même temps.

Il serait pas mal de voir avec quelqu’un qui connait les communautés WP augtant en France qu’au delà des océans pour mieux marketer le produit, s’intégrer aux produits des amis, et que je les intègre, etc, j’ai mon idée, on verra. Idem pour le support, comment réussir à ne pas être seul sans me faire dépouiller.

Compte rendu futuriste de 2027

Tout est rentré dans l’ordre, le site va bien, le plugin va bien, le CA va bien, le support va mieux.

Merci de m’avoir lu, merci à toutes celles et ceux qui m’ont soutenu durant ces périodes difficiles, il y en aura d’autres, c’est la vie, on s’en sort toujours, ce n’est jamais une fatalité, mais du soutien c’est important. Bien entendu je comprends les départs et les colères, cela reste moins constructif mais tout le monde ne fonctionne pas comme ça !

happy man

0 commentaire