Exécuter un script PrestaShop en ligne de commande

Le plus propre pour lancer un script prestashop en ligne de commande est de créer un controller pour ça.

Pour l’appeler voici la syntaxe :

php -f [dossier de la boutique]index.php "fc=module&module=[nom du module]&controller=[nom du controller]"

Soit dans mon cas

php -f /var/www/index.php "fc=module&module=backupdatabase&controller=cron"

Ensuite le code du controller

<?php
class BackupDatabaseCronModuleFrontController extends ModuleFrontController
{
    public function init()
    {
        $this->module->cron();
        die();
    }
}

 

Module Prestashop : notFound.org

Faites un meilleur usage de votre page 404.

Au sein de l’Union Européenne, des milliers d’enfants sont portés disparus chaque année. Ensemble, multiplions les chances de les retrouver ! Installez ce module et la photo d’un enfant disparu apparaîtra automatiquement sur chaque « page non trouvée » de votre boutique Prestashop.

Ce module gratuit peut être téléchargé depuis Prestatoolsbox.fr

Créer un accès temporaire à l’administration de Prestashop

En cas de support, il est souvent nécessaire de permettre à une personne extérieure d’accéder temporairement au panneau d’administration de Prestashop.

Création du profil employé

Pour cela il faut tout d’abord créer un profil pour ce type d’accès.

Aller dans Administration > Profils.

Le bouton “Créer” vous amène au formulaire de création de profil.

Choisissez par exemple “Support” comme nom de profil.

Définition des droits

Aller dans Administration > Permissions.

Dans la 1ère colonne choisissez le profil nouvellement créé
(Support)

et dans les autres colonnes les pages et modules auxquels il a accès.

Concernant les modules, si vous donnez l’accès à la configuration d’un ou plusieurs modules, il faut aussi donner accès à la page Modules.

Création du compte employé

Il faut aller dans Administration > Employées.

Le bouton “Créer” vous amène au formulaire de création d’employé.

Vous pouvez utiliser une adresse e-mail en example.org. ce nom de domaine est fait pour les adresses de démonstration. Par exemple [email protected].

Choisissez le profil de permission nouvellement créé.

Envoi des informations d’accès

Pour accéder au panneau d’administration la personne extérieure a besoin de :

  • L’adresse de votre panneau d’administration
  • L’adresse e-mail de connexion
  • Le mot de passe

Désactivation du compte

Il ne faut pas oublier de désactiver le compte employé après l’intervention.

Aller dans Administration > Employées et sélectionnez le compte. Passez l’état à Non et enregistrez.

Vous pourrez réactiver le compte pour un prochain usage. N’oubliez pas de changer le mot de passe.

La mauvaise foi du sécuritaire chez Prestashop

Je suis déçu par Prestashop 🙁

  • Les erreurs de jeunesse que la solution traîne comme des boulets, je comprend.
  • Les bugs (d’arrondi) gros comme le monde qui durent depuis la version 1, je tolère.
  • Les publicités de plus en plus présentes et agressives dans le panneau d’administration, je n’aime pas mais je comprend

mais là c’est moche, d’une mauvaise foi évidente et joue sur la peur de ses clients au détriment de ses (anciens ou futurs anciens) partenaires.

Note : J’aime Prestashop et Prestashop Addons c’est un beau projet, une belle plateforme que je suis depuis le début. Ils me font vivre et je leur rend pas assez. Mais il y a des comportements qui me sortent par les yeux.

Donc que ce passe-t-il ?

Depuis la version 1.6.0.9 (dernière à ce jour) si on veut installer un module non présent sur Prestashop Addons, un gros (GROS) message s’affiche avec des couleurs alarmantes, un bouton de validation rouge et un message qui fait trembler :

Le module “XXX” n’a pas pu être identifié en toute sécurité par PrestaShop.

Ceci se produit généralement lorsque le module n’est pas distribué via notre place de marché officielle PrestaShop Addons, ou quand votre serveur n’arrive pas à communiquer avec PrestaShop Addons.

Comme vous n’avez pas téléchargé le module depuis PrestaShop Addons nous ne pouvons pas certifier qu’il est conforme à nos exigences de sécurité (notamment, nous ne pouvons pas certifier qu’il n’ajoute pas de fonctionnalités cachées comme un cheval de troie, des publicités, des liens cachés, du spam, etc.). Vous l’utilisez à vos propres risques.

blablabla peur blablabla vous avez eu tord blablabla Achetez chez nous

Image prise chez webbax qui parle du même sujet : https://www.webbax.ch/2014/08/27/prestashop-alerte-module-non-verifie/

Le message est (presque) vrai, on ne peut rien en dire sauf qu’il est d’une mauvaise foi dégoulinante. Un peu comme quand vous cliquez sur un lien externe sur Facebook : “Attention, vous allez dans le côté obscur du web, là où les pédonazies mangent des chatons en fumant dans les halls de gare. Vous feriez mieux de rester chez nous.”

Pourquoi est-ce de la mauvaise foi ?

  1. Un module malveillant n’attendra pas d’être installé pour faire ses petites affaires. Si vraiment il a besoin d’être installé il peut le faire sans vous. A partir du moment ou il s’affiche dans la liste des modules c’est mort. Donc si vraiment le module est vilain ce message ne sert à rien.
  2. Contourner l’affichage de ce message est trivial. Dans pas longtemps les modules honnêtes mais non présents sur Addons le feront pour ne pas effrayer les commerçants.
  3. Le but n’est pas de protéger le commerçant (cf 1) mais de rediriger vers Addons, C’est évident, c’est moche c’est crade. On accuse le commerçant ( “Comme vous n’avez pas téléchargé” ) de mal agir et que tout sera sa faute ( “Vous l’utilisez à vos propres risques.” ) après l’avoir bardé de mots qui font peur. Ensuite plus sereinement on explique qu’un module similaire existe surement sur Addons et qu’on peut revenir à la sécurité (ouf)

Quel est le vrai but ?

  1. Vendre des modules c’est évident mais pas que.
  2. Supprimer les modules gratuits indépendants. Avez vous remarqué qu’il y a de moins en moins de modules gratuits sur Addons ? ça fait un moment qu’on ne peut plus en ajouter mais les anciens restaient. Pourtant récemment deux des miens ont été effacés car “Pas assez de ventes” (héhéhé). Donc les modules gratuits ne sont plus validés par Addons et auront tous ce message. Mais pas d’inquiétude un payant existe surement sur Addons
  3. Supprimer la concurrence et faire plaisir aux partenaires. Il y a plein de boutiques de modules indépendantes et quelques autres places de marché dédiées. Evidemment le message apparaîtra si leurs modules ne sont pas sur Addons. Mais pourquoi ? Par exemple il est impossible de déposer sur Addons un module de paiement (Crédit Agricole, LCL…) Prestashop a déjà les siens ou un module similaire à un de leurs partenaires (qui payent pour être mis en avant sur Addons). Mais des modules de paiements indépendant il y en a plein (et même des gratuits) et ça c’est pas bon pour les affaires.

Conclusion

Je comprend tout à fait la position de Prestashop et d’Addons.

Addons est ce qui rapporte des sous à Prestashop. Il faut le mettre en avant. La solution gratuite n’est (commercialement parlant) qu’un appel à l’achat sur la plateforme. Pas de problème avec ça. Tuer la concurrence, c’est du commerce. Oui oui ok. Les partenaires veulent un retour sur l’investissement, les vrais clients c’est eux. Normal.

Mais jouer sur la peur des commerçants, et en plus trop tard, quand même c’est crade. A côté de ça les pubs cachées de “Expertise Prestashop” passent pour des enfantillages.

Prestashop tu vaux mieux que ça.

P.S. un cheval de Troie (majuscule, c’est une ville) n’est pas une fonction cachée mais un camouflage, le module peut être un cheval de Troie mais pas en cacher un. Mais bon fallait placer des mots qui parlent aux gens et qui font peur. “Tremmmblez devant les liens cachés, bhooooo”

Dur de trouver un éditeur Markdown

J’ai récemment décidé d’utiliser Bitbucket pour gérer mes projets.

Je l’utilisai déjà comme dépôt Mercurial pour quelques modules Prestashop histoire d’avoir une sauvegarde (en plus) mais l’offre gratuite de Bitbucket propose aussi un wiki et un gestionnaire de bug qui sont accessibles même si le dépôt est privé.

J’ai déjà un wiki global pour la documentation de mes modules mais il est super lourd et les seuls personnes qui l’éditent sont moi et les bots de spam.
De plus les wikis de Bitbucket sont des dépôts Mercurial, donc je peux les modifier hors ligne et synchroniser quand c’est bon.

C’est là que ça bloque. J’ai passé des heures à chercher un éditeur bureau Markdown (l’un des formats supportés par le wiki) correct.

J’aurais voulu un éditeur qui :

  1. Affiche un aperçu formaté
  2. Affiche les images
  3. Permet d’ouvrir les pages liées comme sur un wiki

Pour le 3 aucun éditeurs ne le fait 🙁

J’ai essayé :

MarkdownPad

Aperçu de MarkdownPad

Les moins :

  • Ne gère pas les images locales.

MarkPad

Aperçu de MarkPad

Les moins :

  • L’éditeur et l’aperçu ne sont pas synchronisés et surtout dès qu’on fait défiler l’éditeur, l’aperçu se remet au début du document. Ingérable.

MdCharm (mort)

Les plus :

  • Gère les projets (dossiers avec plusieurs fichiers dedans)

Les moins :

  • L’affichage des images locales bug dans les projets

ReText

Les moins :

  • Installation très longue car il a fallut installer Python et toutes les dépendances.
  • Ne gère pas l’UTF-8 ?? ou je n’ai pas trouvé comment.

Haroopad

Aperçu de Haroopad

Mon préféré pour l’instant

Les plus :

  • Interface propre et bien pensée
  • Permet d’envoyer le texte par e-mail. Pratique pour Tumblr

Les moins :

  • Pas d’onglet, c’est moins facile pour s’y retrouver

Conclusion

Pour l’instant j’utilise Haroopad même s’il ne fait pas tout ce que je voulais.

Your Flat Design is Convenient for Exactly One of Us | Cooper Journal

Your Flat Design is Convenient for Exactly One of Us | Cooper Journal

I’m OK with fashion in interaction design. Honestly I am. It means that the field has grappled with and conquered most of the basics about how to survive, and now has the luxury of fretting over what scarf to wear this season. And I even think the flat design fashion of the day is kind of lovely to look at, a gorgeous thing for its designers’ portfolios.

But like corsets or foot binding, extreme fashions come at a cost that eventually loses out to practicality. Let me talk about this practicality for a moment.

In The Design of Everyday Things, Donald Norman distinguished between two ways that we know how to use a thing: information in the world, and information in your head.

Information in the world is stuff a user can look at to figure out. A map posted near the subway exit is information in the world. Reference it when you need it, ignore it when you don’t.

Information in the head is the set of declarative and procedural rules that users memorize about how to use a thing. That you need to keep your subway pass to exit out of the subway is information in your head. Woe be to the rider to throws their ticket away thinking they no longer need it.

For flat design purists, skeuomorphism is something akin to heresy, but it’s valuable because it belongs to this former category of affordance: it is information in the world. For certain, the faux-leather and brushed-aluminum interfaces that Apple had been pumping out were just taking things way too far in that direction, to a pointless mimicry of the real world. But a button that looks like a thing you can press with your finger is useful information for the user. It’s an affordance based on countless experiences of living in a world that contains physical buttons.

Pure, flat design doesn’t just get rid of dead weight. It shifts a burden. What once was information in the world, information borne by the interface, is now information in users’ heads, information borne by them. That in-head information is faster to access, but it does require that our users become responsible for learning it, remembering it, and keeping it up to date. Is the scroll direction up or down this release? Does swipe work here? Well I guess you can damned well try it and see. As an industry now draped in flat design, we’ve tidied up our workspace by cluttering our user’s brains with memorized instruction booklets for using our visually sparse, lovely designs.

So though the runways of interaction design are just gorgeous right now, I suspect there will be a user-sized sigh of relief when things begin to slip a bit back the other way (without the faux leather, Apple). Something to think about as we gear up our design thinking for the new year.

Qu’est ce que ce fichier « signature.asc » que vous m’avez envoyé ?

Depuis quelque temps, tous les e-mails que j’envoie sont accompagnés d’un fichier “signature.asc”.
Il s’agit d’un fichier qui prouve que le message que vous avez reçu est le même que celui que je vous ai envoyé.

Pourquoi faire ?

Signer un e-mail permet de le dater, de vérifier son émetteur et de s’assurer que son contenu n’a pas été modifié.

Il faut savoir que entre l’émetteur et le destinataire d’un email, celui-ci passe par plusieurs ordinateurs qui le lisent tous (pour savoir vers qui l’acheminer par exemple).
La possibilité que le message soit modifié existe, c’est déjà arrivé :

Qu’est ce que vous devez faire ?

Rien si vous vous en fichez. C’est un truc de parano.

Par contre si votre vie privée vous tient à cœur et que vous n’avez pas confiance en vos intermédiaires (cf ci-dessus) vous pouvez vérifier l’intégrité du message reçu.

Le plus simple est d’installer Enigmail sur Thunderbird ou un dérivé (perso j’utilise PostBox) ou Gpg4Win pour Outlook. Il y en a surement plein d’autre.

Sous Chrome/Firefox Mailvelope

Pour plus d’information sur la signature Gpg : www.gnupg.org

Comment ça marche ?

Lorsque le message est écrit, la signature est générée en fonction de son contenu au moyen de ma clé privée (il n’y a que moi qui peux l’utiliser).

Cette signature peut être lue seulement avec ma clé public (ci-dessous).

Donc :

  • Si le message reçu est modifié la signature n’est plus valide.
  • Si l’émetteur n’est pas moi (mais a utilisé mon adresse email) il ne peut pas le signer en mon nom. Si vous recevez un message de ma part non signé, c’est louche.

T’es parano ?

Oui vous devriez aussi.

L’étape suivante est de chiffrer le message. Dans ce cas non seulement le message ne peut être modifié mais il ne peut pas non plus être lu par quelqu’un d’autre que son destinataire. C’est en gros ce qu’on espère quand on envoi un courrier à quelqu’un.

Ce n’est pourtant pas le cas : http://www.framablog.org/index.php/post/2013/12/15/Votre-courrier-gratuit-Schnail-Mail

Cela implique que le destinataire a un moyen de déchiffrer le message. Si c’est votre cas faite le moi savoir.

Ma signature public

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: SKS 1.1.4
Comment: 

mQENBFKCy3QBCACZ8sgjRxlQuVT44eZYBhkegPg5C2nCBkIZxb976tpaiphixnjY2t7AyfUe
6PUBl72oVX/plvYYb/u2Q4k4zgtPBj0j2kU/VsPf5d+lB78tP94mJl49LSFj0RYZOrPOU/U8
dhQERHrt6pryXr8UlIu6km+Kc22k3IspzYUCBi5VpsAt6qBI4RN+LTpsjY6te3LgXaBu1Fk1
W9ueKTPD2QTveCtboY5z3mAQ4KM73DhUNrerR8EF19DKnP2Om1vLC0pmQjV+Ocdr+Jc/IoI0
UKdUBdq73ywQmcdQ3QpJoUV/0hs0Tqv989w9cgMaTxEbwNbSw2+v/kpNeRg3iAXCm/m3ABEB
AAG0Ikdlb3JnZXMgQ3ViYXMgPGNvbnRhY3RAc2FtZGhhLm5ldD6JATkEEwECACMFAlKCy3QC
Gw8HCwkIBwMCAQYVCAIJCgsEFgIDAQIeAQIXgAAKCRD0zeRuGknGWaQIB/427qn22Om+vNdu
RlG1rzmwYi67j+InoAQiNCwQvzWGZzQhTNAgRFlCWw6KU7Z8BQCar3/mxXbC3RiUiq39mpz9
pWOpOjaxEPp1ZetdQSln5KYLe0iMSTUEg7jY65GH6BpXRhufs/4oKadP01eDRY12gRj7KwkG
S8Py7q4r5KMhS8tBW24V1kLGEUTbismAoA1RXLQBrArCHxE58l6tXGjehs90dpoUWEhpj78r
EfkNN1cucPPTEkh8t8o6N7MgN/5Uomu38wSj0RamVulTYPdnkJAYJLyKXTX1CUDA8Sidgj3q
zMWdTymLKooU5ioJ7iuLOvTdXp63ZqUZWDcTNtoQ
=adHF
-----END PGP PUBLIC KEY BLOCK-----

que vous pouvez retrouvez ici : http://pgp.mit.edu/pks/lookup?op=get&search=0xF4CDE46E1A49C659

Un souhait pour Prestashop 2

Prestashop 2 est prévue pour bientôt ou pas, quoi qu’il en soit il y a un truc qu’il faudra absolument améliorer, c’est le système de messages utilisateur (erreur, confirmation, alerte).

Actuellement ça se passe ainsi :

  1. On clique sur un lien d’action. par exemple http://…?send_mail&id_client=42 pour envoyer un mail à un client
  2. on arrive sur la page qui fait l’action (page d’action)
  3. si ça marche, on est redirigé sur une page qui affiche une confirmation http://…?conf=33 conf étant l’id du message de confirmation
  4. si ça échoue, on reste sur la page et on affiche les erreurs.

La redirection est importante car si on restait sur la page d’action, il suffirait de la recharger pour exécuter de nouveau l’action ou de laisser l’onglet ouvert avant de fermer le navigateur. Pour un mail c’est pas trop grave, pour une suppression plus.

Donc tant que qu’il n’y a pas d’erreur ça marche (bin oui) mais sinon on reste sur la page d’action et c’est mal.

Vous allez dire que c’est pas grave puisque ça marche pas, il n’y a pas de risque que le mail soit envoyé si je recharge la page et si ça marche bin c’est cool c’est ce que je voulais.

Non. déjà ça peut être une erreur temporaire donc ça peut très bien fonctionner la seconde fois.

Ensuite on ne sait pas à quel moment ça a échoué. Si il fallait supprimer une commande puis envoyer un mail au client en rechargeant la page vous pouvez supprimer 3 commandes et à chaque fois ne pas réussir à envoyer les mails.

Bref le système est bancal.

En plus il est très limité :

  • Il y a un id de message de confirmation donc il y a une liste prédéfinie de message (31 dans la classe AdminControllerCore) donc si vous voulez utiliser une confirmation personnalisée ça devient compliqué.
  • Vous ne pouvez avoir qu’un seul message. Pour reprendre l’exemple on ne peut pas dire “la commande est supprimée” et “le mail est envoyé” et bien sûr on ne mixe pas (“la commande est supprimée” et “Erreur, le mail n’est pas envoyé”)
  • Si je recharge la page, j’ai de nouveau le message ce qui peut être perturbant et pas joli.

Ce qu’il faudrait c’est un vrai gestionnaire de message.

Quand quelque chose fait une action il dit “Faudra dire à untel/tout le monde/personne que j’ai fait ça” ou “Faudra dire qu’il y a cet erreur/alerte/information” comme pour un système de log (c’est la même chose en fait).

Par exemple

(bon là y a des if partout mais c’est l’idée)
et au prochain affichage d’une page on montre les messages en attente.

Ce serait utile pour les modules aussi. Le module Ebay par exemple met à jour la fiche produit sur ebay.com à chaque fois qu’on en modifie un sur Prestashop mais il peut pas le dire, l’info est perdue à la redirection. Là il pourrait mettre en attente “tel produit est à jour/désactivé/supprimé sur ebay.com” ou “impossible de contacter ebay.com”.

Donc tout ça pour dire que ce serait un truc super pratique.

Décodeur de code PHP

La semaine dernière avec Olea on est tombé sur un module Prestashop tout moche qui avait un code de ce style :

eval(gzinflate(base64_decode(strrev('AYwtRlkyv8MKXlcyNj09QdFyO30S'))));

Impossible donc de savoir son action. En enlevant le eval() pour voir le code

echo gzinflate(base64_decode(strrev('AYwtRlkyv8MKXlcyNj09QdFyO30S')));

on tombe sur

eval(base64_encode(str_rot13('DF5fgEZ135HHtrdfcv'))));

et ainsi de suite.

Cela s’appelle du code impénétrable ou de l’obfuscation. Très utilisé pour cacher un vilain code pas beau avec tracker, virus et tout ça.

Donc voici un décodeur pour ce genre de code. En gros il fait la même chose que eval() mais sans exécuter le code.

https://gist.github.com/Shagshag/5848915

Pour info le code du module en question avait 45 eval() imbriqués et rien de méchant. L’auteur ne voulait juste pas qu’on voit son code. (raté)

Xénophobie ordinaire sur un site grand public (bien orienté quand même).

J’aime pas mais pas du tout les mentalités actuelles.Ou plutôt le fait d’en être fier.