Sommaire 1.Track Business - Alexane Trubert
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
Prise de notes collaboratives DrupalCamp Paris 2019 Sommaire 1.Track Business..................................................................................................................................2 1.1.Migration de Drupal 7 à Drupal 8 (France TV)........................................................................2 1.2.Refonte en Drupal 8 de plus de 80 sites (Campus France).......................................................3 1.3.Écosystème internet/intranet complet en Drupal 8...................................................................3 1.4.Problématiques de cohérence graphique sur une architecture multi-sites et multilingue.........4 1.5.Implémentation d'une plateforme Drupal 8 multi-sites – multi-marques.................................4 1.6.Forge logicielle Drupal 8.......................................................................................................... 5 1.7.Une architecture découplée, un Drupal 8 en back-end et l'intégration avec l'ensemble des outils du SI d'une chaîne hôtelière : PMS, CRS, CRM................................................................... 5 2.Track Expertise.................................................................................................................................7 2.1.Drupal un CMS pas comme les autres .....................................................................................7 2.2.Activer le cycle vertueux de Drupal et contribuer au CORE................................................... 8 2.3.Maîtriser la POO & les Design Patterns................................................................................... 8 2.4.L'Expérience Développeur dans Drupal 8 : Améliorez-la !......................................................9 2.5.Économiser du temps d'intégration dans vos projets Drupal .................................................11 2.6.État de l'art du RGPD sur Drupal 8........................................................................................ 14 2.7.Container d'injection de dépendances aux petits oignons.......................................................15 2.8.Comment mettre à jour les modèles de données en Drupal 8 ................................................16 2.9.Réalité Virtuelle......................................................................................................................18 2.10.Audit de sécurité d'un site Drupal.........................................................................................19 2.11.Drupal 8 - Best practices.......................................................................................................22 2.12.Micro Site ............................................................................................................................ 25 3.Track Découverte........................................................................................................................... 27 3.1.Drupal 8 : présentation, utilisation et installation de Drupal et de modules...........................27 3.2.Drupal 8, as-tu du Coeur ? (Drupal et les modules du coeur)................................................ 27 3.3.30 modules en X secondes (D8)............................................................................................. 28 3.4.Theming.................................................................................................................................. 30 3.5.Développement de modules sous Drupal 8.............................................................................33 DrupalCamp Paris 2019 1/33
1. TRACK BUSINESS 1.1. Migration de Drupal 7 à Drupal 8 (France TV) Une des préoccupations sur le site est le temps réel (chose assez rare avec Drupal). ➔ Enjeux de la migration : ➔ Répondre au fort tra fic ➔ Usage orienté mobilej ➔ Eviter les erreurs liées à D7 Lancement du projet en novembre 2016 pour une fin de migration en octobre 2017. MEP obligatoire en mai, impossible de changer cette date car Roland Garros ne pouvait pas être sur l'ancienne infrastructure. (Livraison 2 jours avant le début de Roland Garros). Livraison par thématique, migration par pattern d'URL. Lors de la MEP, seulement la partie "Roland Garros" était sur cette nouvelle plateforme. Architecture simple, mutualiser les technologies, résilience, scalable Bnj rabittMQ à la place de beanstalk (améliore la performance du BO) Résilience, pas qu'une protection en largeur (2 varnishs, 2 load balancers etc...) mais aussi en profondeur. Le but de la refonte a été principalement le Mobile First Présence de Kilian Mbappe (
Questions : Pourquoi utiliser SF en front ? ➢ Découpler un maximum le front. Mutualisation des technologies (il y a plus de SF à France TV aujourd'hui). Meilleure perf/scalabilité Pourquoi pas d'utilisation JSON:API ? ➢ En alpha à l'époque du démarrage du projet. Besoin d'avoir des éléments calculés et non stockés. (JSON:API ne sert que des éléments stockés) 1.2. Refonte en Drupal 8 de plus de 80 sites (Campus France) Axess OWS : depuis 2001, +220 projets, expertise Drupal 18M de visites en 2017 > +20M en 2018 Ici aussi, les visites sur mobile dépassent celles du desktop Utilisation de CMI + con fig filter/ con fig salit pour gérer le multi site (https://www.drupal.org/docs/8/modules/con figuration-split) 1.3. Écosystème internet/intranet complet en Drupal 8 Par ??? de Synergie SE Pourquoi Drupal ? CMS populaire sur le marché / Module communauté : porté par la communauté. Rassurant. Drupal 7 ou 8 ? Sortie de D8 en 2015, quelle sont les risques ? • absence de portage de module • version béta Refonte Digital Tout l'écosysteme de synergie est passé sous Drupal. Couplé avec un CRM via une API Refonte from scratch de synergie.com Portage vers D8 Aile-medical.fr et synergie.aero : • Migration de contenu • Moteur de recherche Béné fice du projet • CMS : un contenu renouvelé • Gain en référencement • Tra fic doublé en 1an Drupal est-il le CMS idéal ? Oui : • Pour les contributeurs, rendre la main au métier • Les fonctionnalités sont pérenne, car module contrib DrupalCamp Paris 2019 3/33
Non : • Complexité de Drupal dans un env applicatif : pour un même besoin il y a plusieurs façon de faire • Maitrise de Drupal pour répondre au mieux les futures besoins Pas mal de multi-site Drupal 1.4. Problématiques de cohérence graphique sur une architecture multi-sites et multilingue Par Denis Pitzalis de l'UNESCO Par Julien D. Happyculture +3M de visiteurs sur le site. Peu de moyens sont engagés pour la présence sur le web. Le site a un financement de 5K € par an pour la maintenance. Site multi-site : Présence dans de nombreux pays, avec 6 langues principales + la langue des pays où un siège est présent. Avant Drupal : HTML from scratch (Année 90), Simplify (2002), typo3 (2008)=>permet de gérer les 6 langues. 2012 ! Drupal 7 ! Etat des lieux : 3M de pages, un vrai bazar d'interconnexion entre les pages Infrastructures physique gigantesques. Manque d’homogénéité entre les pages Typo3. Pourquoi Drupal ? • Connexion avec AD • HTTPS pour communication interne et externe • gestion des modules avec composer • Themes sur bootstrap ; responsive etc • Faire une séparation distincte entre applicatif et communication Problématique : gérer autant de site, de data, avec un budget très restreint (environ 5000 euros par an) Tu perds du temps à déployer à la main, ou a faire des choses manuelles. Avec Drupal solution possible. Faire des scripts pour automatiser : shell, gitlab-CI, composer, ANSIBLE Comment faire pour convaincre les métiers Guidelines très prévis Formations 1.5. Implémentation d'une plateforme Drupal 8 multi-sites – multi-marques Multi Sites pk? ➢ mutualisation infrastructure ➢ structure de ressource ➢ dé finition d'éléments communs DrupalCamp Paris 2019 4/33
➢ évolution Problèmes ➢ Gouvernance ➢ Technique ➢ version core ➢ media contrib vers media core ➢ abandon de features pour l'approche pure CMI Domain access 1.6. Forge logicielle Drupal 8 Drupal Factory Réussir agra = groupe d'information professionnel pour les agriculteurs Options à disposition : repeindre le framework maison existant / umbrage cms C# / Drupal 7 mois en 2016 pour faire monter l'équipe en compétence et la connaissance fonctionnelle tout en livrant des sites 13 mois en 2017 pour mettre en place du sso et une ferme à site avec domain access (aie!) 2 mois décembre 2017 à janvier 2018 / changement de dsi / domains ou pas? Sortir de Drupal ? Assembler une forge devops / standard fonctionnel / con figuration de blocs / personalisation de thème par site. Depuis janvier : audit / analyse et architecture des besoins pour ensuite lancer la forge. Optimisation de l'infra, création d'une distribution, utilisation de Jenkins et d'environnements dev recette prod Utiliser un thème du marché, valider le poc avec 2 sites et apprendre à partir de là. Identi fication des besoins communs aux sites Demain : optimiser le partage de contenu, uniformiser le Web marketing, mettre en place des tests automatisés (behat / phpunit) Migrer les sites actuels Ajouter des nouveaux services En résumé passage d'une merde 1jour à 20 min 1 site = 3 semaines de dev / webmaster contre 8 à10 semaines avant On va plus vite que le métier 6 mois de temps d'investissement Coût similaire à la version de domains ➢ Distribution sous ligthning 1.7. Une architecture découplée, un Drupal 8 en back-end et l'intégration avec l'ensemble des outils du SI d'une chaîne hôtelière : PMS, CRS, CRM. Par ??? de B&B Hotel Objectif : • Un site unique, une charte cohérente avec la marque, multilingue et la possibilité de continuer de faire des réservation DrupalCamp Paris 2019 5/33
• Être et rester une marque Innovante • Préserver un Business model (coût de distribution faible) Présent dans 12 pays. Environ 1 hotel s'ouvre par semaine. Pourquoi Drupal ? • Communanuté dynamique • Robustesse technique de D8 • Open Source Accompagnement en conception jusqu'à la mise en prod, par un acteur reconnu (Adyax) : c'est rassurant Stratégie 3 mois de discovery : • Cadrage fonctionnel • Cadrage Technique • UX & UI Développement en mode agile (Au forfait) La version espagnole pour les "cobayes" : ils ont était choisi pour des raisons pratique ESB : https://www.softwareag.com/resources/Enterprise-service-bus Objectif : centraliser la communication entre le site web, l'application mobile, le CRM (Salesforce), le CRS (Central Réservation System) et le PMS (Property Management System) MVP ➢ setup de Drupal pour gestion contenu et navigation globale ➢ création du moteur de recherche dans Drupal ➢ tunnel de réservation en React.js ➢ espace client pour gérer les réservations ➢ exposition des contenus et du search via API aux autres applications : application mobile, emails, outils des conseillers du call center et des hôteliers Point fort D8 ➢ BO user friendly par rapport aux outils actuels ➢ Gestion des rôles & permissions ➢ Fonctionnalités natives/communautaires flexibles (plani fication de contenu, ajout de nouveaux pays/langues/devises) ➢ Capacité à créer/ajouter des modules complémentaires riches Petite découverte bien heureuse : https://www.drupal.org/project/tmgmt Translation Management tool Axe d'amélioration proposé : rendre plus intuitive et user friendly l'interface de gestions des traductions (User interface translation). On parle bien ici de l'interface, pas des traductions des con figurations. Axe future : Reste 8 pays DrupalCamp Paris 2019 6/33
A/B Testing 2. TRACK EXPERTISE 2.1. Drupal un CMS pas comme les autres par Simon Georges / La page sur DrupalCamp / La présentation / L'article Simon est un president magni fique (avec son petit épi
2.2. Activer le cycle vertueux de Drupal et contribuer au CORE Par David Suissa : username drupal.org Dydave / La page sur DrupalCamp / Constat : Où en sommes nous ? Un grand gap entre le nombre de contributeur et le nombre d'utilisateur Idée reçu : la contribution s'est orientée DEV Quelles types de contribution ? • Poster des issues (Non technique) • Test et commentaires sur les issues (Non technique) • Faire des patchs (Technique) • Faire de la doc (Non technique) • Traductions (Non technique) • Organisation d'event de meetup de codesprint, etc (Non technique) • Création design et ergo (Non technique) • Mentorat (Coaching, partage expérience) (Non technique) • Rédaction Blog/tuto (+- Technique) Qui peut contribuer ? Idée reçu : mon niveau technique est trop bas pour aider C'est faux, toute retour d'expérience est bienvenu : • Avoir le point de vue d'un junior peut mettre en avant des dif ficultés de documentation, d'implémentation • Avoir des retours utilisateur final, pour des retour UX • etc Pourquoi ? Tester ça coûte cher en interne : se répartir la tâche avec une grande communauté, tu postes ton patch et tu laisses les gens tester et te faire tes retours Maintenir une doc en interne ça coute cher, c'est chiant pour certain, moins pour d'autre : utiliser les forces et faiblesses de chacun Le code est en perpétuel mouvement : En contribuant, tu gardes une vision globale sur le produit, sur les patch technique, tu montes très vite en compétences Recrutement et visibilité : Donne une légitimité sur le marché et auprès des clients. On discute et confronte nos idées : tire vers le haut Activer le cercle vertueux Ne pas contribuer : on passe à côté des valeurs open sources Contribuer donne toujours un Retour sur investissement C'est jamais parfait et c'est pas grave 2.3. Maîtriser la POO & les Design Patterns @woprrr / La page sur DrupalCamp / La présentation / L'article DrupalCamp Paris 2019 8/33
Qui dit design pattern, dit UML. Rappel sur l'UML qui est le bon moyen de représenter les objets/class. Concept de base Les pilliers OOP Notions de lien cause/effet --> abstraction/encapsulation/héritage/polymorphisme, notion de base de l' UML Explication de l'encapsulation avec l'exemple d'un moteur voiture ainsi qu'avec un aéroport et des moyens de transport volants Classe abstraite Polymorphisme Design Patterns : qu'est ce que c'est ? Classi fication : ➢ Creationals : mécanique de création d'objet, exemple : Absctract Factory ➢ Structurals : « ef ficacité et souplesse » ➢ Behaviorals : ex Mediator : event dispatcher Design Patterns : pourquoi les apprendre ? ➢ Pour mieux comprendre son environnement de de dev et mieux interagir avec (exemple les plugin de D8, etc.) ➢ Boite à outils (éprouvés) pour résoudre des problématiques communes. Abstract factory 2.4. L'Expérience Développeur dans Drupal 8 : Améliorez-la ! Présentation par Thomas Calvet / La page sur DrupalCamp Dé finition de la DX : C'est un peu comme l'UX mais on parle ici de l'expérience de développement. C'est un sujet vaste car beaucoup de types de développeurs Concrètement, par exemple : • fournir des classes abstraites • fournir des traits • PHP doc à jour • Throw exceptions (be defensive) Pourquoi ?? • Réduire la frustration • travailler plus vite • réputation du framework/cms (et donc + de dev, etc.) Même concept appliqué au dev : le dev est client de l'outil. DrupalCamp Paris 2019 9/33
• Support de site • Maintenabilité du code Pluralité des pro fils dev Site builder theme builder module maker Améliorer le développement au quotidien et éviter les tâches répétitives dans les devs de modules custom. Expérience dev niveau site builder (custom code) Abstraire ses implémentations ! Utilisation des traits. (Drupal reste du PhP utiliser la puissance du langage au service du Framwork) Penser à faire de la Doc Code (Doc block, doc PHP .....,) Les classes de test, doivent rester des classes de test : donc ne pas se nommer comme les fonctionnelles. Pas de gestion de "modes" (dev, qualif....) =! Symfony (introduits par des modules contrib : Con fig Split, Con fig Ignore, Con fig Filter... qui ne sont pas directement ont dans le core) niveau 1 de la pyramide des besoins du dev ! Af fichage des exceptions et debugging Principal dif ficulté du nouveau dev Drupal : Clean the cache ! WHICH OOOOOONE ? https://www.drupal.org/community-initiatives/drupal-core/d8dx Drupal debug --> gihub --> composer ➢ https://packagist.org/packages/ekino/drupal-debug Drupal development conf La librairie bloque les confs dans le settings.php notamment les agrégas de fichiers CSS et/ou JS Désactiver les caches • cache bins render ➢ oage ➢ dynamic_page • Settings class singleton Drupal debug passe après $settins Enable Twig debug : Voir AdminToolbar avec devel sinon notamment pour twig??? (cf Romain Jarraud notamment) Proposer le mode debug de Symfony pour Drupal :D ExceptionListener/ExceptionHandler Analyse de code notamment les Deprecated > log Analyse du code pour cibler les dump dans tous les fichiers et permet de les cibler Imposer les bonnes pratiques ! Throw error, error is an exception ! DrupalCamp Paris 2019 10/33
L'envdev est là pour planter, mieux vaut lui que la prod. ➢ pas encore actif de base Système de "watcher" qui permet d'invalider les caches (par exemple : lorsque des fichiers *.module, *.routing.yml, *.services.yml sont modi fiés/ajoutés/supprimés) Invalidate all Cache Pour utiliser la librairie, il faut utiliser un autre Kernel -----> Debug Kernel extends Drupal Kernel (meilleur Run level qu'un module) extends et s'y substitue par le biais d'un class alias. à désactiver pour les tests. Con figurations possibles via YAML (pas tous encore) ➢ marche de base va valeurs pas défauts 2.5. Économiser du temps d'intégration dans vos projets Drupal Floris Moriceau @FlorisMoriceau / La page sur DrupalCamp Développeur FE (HTML/CSS/UI/UX/A11Y), secrétaire de l'asso Drupal France, lead dev front end de drupal.fr Sommaire : • Avertissements • Le projet X • Les maquettes • L'intégration • Le thème • Responsive Design • A11Y / I18N / SEO • Performance • TMA • Conclusion a) Avertissements Projet caricatural pour l'exemple mais inspiré de faits réels. b) Le projet X Le lot UX/UI a été attribué à une agence de communication, vous avez gagné la prod, la TMA reste à gagner. Le périmètre fonctionnel ne rentre pas dans le budget, il va falloir retirer des fonctionnalités. Drupal a été choisi, délais assez courts DrupalCamp Paris 2019 11/33
c) Les maquettes Trop beau ! Validé par le client ! Youpi ! Sauf que... • on veut deux headers différents : un sur la home et l'autre sur toutes les autres pages • colonage hasardeux • le lorem ipsum ne dépasse jamais... • une maquette PSD ne donne pas la cinétique (pas d'animation) • le client ne fournira jamais des photos de la qualité de la maquette • les polices n'existent pas forcément en webfont, ou sont très chères. La font avec 6 déclinaisons (demi-bold etc) : trop lourd ! • themeforest : IT'S A TRAP ! Le client a validé des maquettes avec du périmètre fonctionnel qui ne va pas être intégré : qu'est-ce qu'on en fait ? À qui on parle ? d) L'intégration statique Intégrer les maquettes en HTML / CSS : temps d'intégration x 1,5 au moins Les contraintes liées à Drupal ne sont souvent pas connues par l'intégrateur À ce stade, souvent pas de maquettes tablette / mobile (true story) e) Le thème Choix du thème de base : nécessite ré flexion Le thème Bootstrap basé sur la V3, impose un choix de container (intégration X 8 !), dif ficile à surcharger... Bref NOPE Laissez les devs fronts faire du front ! f) Responsive design Ça y est, les maquettes mobile sont arrivées (on a déjà commencé à être intégrées...) Et SURPRISE ! • Les blocs ne contiennent pas les mêmes infos, ne se loadent pas dans le même sens, voir ne s'af fichent pas dans la même région • La navigation est différente • Le schéma de couleur n'est pas le même • Mélange des deux versions en version paysage seulement pour la version tablette... g) A11Y / I18N / SEO "AU FAIT, le site doit être RGAAA" (ben tiens) Pour être RGAA compliant il faut notamment : • que toute l'information soit accessible sur tous type de device même sans JS • proposer une version en contraste inversé • proposer un ajustement de la taille de texte (il est où le bouton dans la maquette ?) DrupalCamp Paris 2019 12/33
• navigation clavier ! • hiérarchiser les informations correctement • etc "Les trads, ça prend combien de temps à intégrer ?" • Certaines polices n'embarquent pas les caractères spéciaux d'une langue • Certaines langues sont plus verbeuses • Des alphabets ou idéogrammes impliquent des ajustements pour être lisibles • Langues qui se lisent de droite à gauche... "On vient de recevoir l'audit du presta pour la SEO, y'a quelques petites modifs, essentiellement des h1 à changer..." Oui mais non, la hiérarchie des titrages est conditionnelle suivant les pages les MIME / metatags : ça aurait pu être fait lors de l'intégration des contenus, ou besoin de token custom donc dev back h) Performance "C'est lent Drupal !" Temps d'exécution = f(exceptions) Drupal 8 = générateur de cache L'enjeu c'est de savoir quand l'invalider : • plus c'est générique, plus c'est rapide • plus c'est simple, plus c'est rapide • plus c'est léger, plus c'est rapide i) TMA TMA = dette technique On livre un truc qui fonctionne (à grand coup de patchs, de modules contrib, de preprocess...) j) Conclusion On fait communiquer lors de la création des maquettes le designer et le themer Drupal : si c'est vu avant, on peut dire stop ! On se pose les bonnes questions trop tard, en dernier. On véri fie bien que les maquettes soient cohérentes avec le cahier des charges ("il sert à quoi ce bouton qui implique du fonctionnel absent du cahier des charges ?") On laisse le theming au themers : donnez-leurs seulement des render arrays, ils adorent ça ! On essaie d'être le plus générique, le plus simple, le plus pertinent dans la création UX/UI (simple ne veut pas dire chiant !) Une maquette themeforest, c'est un pichet : on peut avoir du pertinent la piquette ou un grand cru dedans On ré fléchit dès le début du projet au responsive, à l'a11y, à l'i18n, au SEO... DrupalCamp Paris 2019 13/33
2.6. État de l'art du RGPD sur Drupal 8 Guillaume Bec / La page sur DrupalCamp / La présentation Le RGPD, ce n'est pas que le bandeau cookies ! Adopté en 2016, entrée en vigueur en 2018 La CNIL sert d'autorité d’administration pour véri fier l'application du RGPD Elle recommande 4 étapes : ➢ constituer un registre du traitement des données. Dans Drupal : identi fier les champs, déterminer qui y a accès ➢ faire le tri dans ces données : réduire, on ne doit récolter que les données nécessaires et pertinentes; mettre en place un contrôle des accès; supprimer ou archiver automatiquement les données ➢ respectez les droits des personnes : informer et expliquer la collecte; demander préalablement le consentement explicite; permettre l'opposition, l'accès, la suppression des données ➢ sécuriser les données. Côté Drupal : mettre à jour; segmenter les rôles et les droits associés; anonymiser ou chiffrer les données quand on récupère la base de prod; informer en cas de fuite Données personnelles dites "sensibles" (préférences sexuelles, religion etc) : elles doivent être particulièrement sécurisées Le Drupal core est RGPD ready en quelque sorte : un utilisateur peut voir ses données via son compte et il peut même être autorisé à supprimer son compte et les contenus associés. Drupal GDPR Compliance team : coordonne les efforts pour que Drupal soit conforme. Issues : on part du texte de loi et on ré fléchit à comment ça peut se traduire dans Drupal Il y a actuellement 22 modules mais c'est encore WIP Module GDPR Seul, fourni une check-list de sensibilisation. Fourni aussi des sous-modules : • GDPR consent : ajoute un entité et un type de champ pour l'opt in (entity : assessment). Très brut, pas out of the box. Attention, module D7 avec le même nom, on parle bien ici du sous- module D8 • GDPR fields : permet de dé finir quels champs contiennent des données personnelles et si on peut les supprimer par exemples • GDPR tasks : demande de télécharger des données, demande de suppression des données, mais on peut rajouter nos propres tâches. Fonctionne avec un CRON. • GDPR Obfuscated SQL Dump (gdpr_dump) : commande drush d'export de la BDD avec protection des champs personnels (obfuscation par type de champ). Copie dans une table temporaire, fait les modi fications, puis récupère les données de cette table-là : pas d'accès direct aux données réelles des utilisateurs. On ne récupère jamais la base réelle, mieux qu'un drush sql sanitize où il faut télécharger la base pour pouvoir traiter les données et les partager ensuite. Module gdpr_compliance Pas recommandé, un seul maintainer. Marche un peu out of the box mais ne propose pas tous les hooks nécessaires pour étendre. D'autres modules proposent mieux (pas exemple une fois le consentement donné on ne peut plus le retirer) Module ip_anon DrupalCamp Paris 2019 14/33
Remplace les ips des visiteurs par une version hashée. Son défaut : passe par la tâche CRON donc pendant un certain temps on a les vraies IP en base. Cryptolog fait ça mieux. EU Cookie Compliance Un des modules les plus utilisés depuis 2012. Permet la mise en place d'une bannière pour exprimer le consentement. Permet de désactiver certains fichiers JS de tracking par exemple. Il manque la possibilité de choisir par catégories (pub, nécessaires etc) mais issue en cours sur le sujet. Cookiebot Intègre des services tiers. Cookie consent, cookie_gdpr, etc... Tarte au citron (français, recommandé par la CNIL) Module dégueulasse, utilise la version payante : utilisez la lib en direct ! Autres modules qui implémentent des fonctionnalités RGPD • GDPR google tag manager • Voting API (utilisé par FiveStars par exemple) • Smart ip • Simplenews • Advertising entity Autres sujets • Matomo (remplace Google Analytics) : USE IT ! • Mailchimp : ne gère pas encore le RGPD • Mask User Data : dé finit des champs du compte utilisateur et génère des fausses données en local (pas RGPD compliant, on est obligé de récupérer les données d'abord) • Quantcast : pas d'intégration Drupal mais pas nécessaire, ils fournissent du JS à intégrer dans le site si c'est ce qu'on veut utiliser GDPR + EU cookie compliance + cryptolog c'est déjà une bonne base mais il y aura quand même du boulot à faire Il faut séparer les comptes ! On doit savoir qui est intervenu sur quoi : compte personnel avec des droits cohérents Question : Comment on gère les fichiers type un CV en PDF ? Réponse : on peut marquer le champ comme contenant des données sensibles et ce sera obfusqué a priori 2.7. Container d'injection de dépendances aux petits oignons Présentation par Nicolas Perussel / La page sur DrupalCamp / La vidéo Youtube 522 services disponibles sur une installation fraîche Drupal : tout doit être disponible au run time Solution : créer un dumper (stocké en BDD) => PHPArrayContainer Composant Symfony dans vendor mais un peu trop statique => composant Drupal dans component (DependencyInjection) Dé finitions DrupalCamp Paris 2019 15/33
• DIC : Dependency Injection Container est un objet qui comprend comment instancier et comment con figurer les objets. Il connaît les arguments du constructeur. Il utilise les dé finitions (objet spécial dans Sf) • Services synthétiques • Container and container builder • Compiler passes, service tags • Compiler • Dumper Comment ça marche dans D8 • Container, implémente la ContainerInterface de Symfony • ContainerBuilder, extends SymfonyContainerBuilder (surcharge pour les spéci ficités de Drupal comme le strtolower sur les service IDs) • PhpArrayDumper et OptimizedPhpArrayDumper • Plusieurs dumpers à dispo : PhpDumper, XmlDumper, YamlDumper, GraphvizDumper (mais trop violent pour du Drupal...) Séquences • boot() appelé depuis DrupalKernel() • initialisation du Container avec initializeContainer() • s'il n'y a d'udate de module ou de changement dans le container, on le récupère depuis le cache avec getCachedContainerDe finition() • si le Container n'est pas disponible ni de version en cache : compileContainer() • On récupère les service providers (hardcodés), les namespaces sont enregistrés, class_loader, kernel, services_containers, puis les yaml sont loadés (il manque 3 étapes et la fin de la conférence) 2.8. Comment mettre à jour les modèles de données en Drupal 8 Nasser TIJANI @Nnassertijani / La page sur DrupalCamp Lien de l'article dont est issue cette présentation : https://capgemini.github.io/drupal/How-to- update-data-model-on-drupal-8/ Il ne suf fit pas de faire un drush updb... Sommaire : • Flashback • Comment écrire un màj du modèle de données • Les différents types de màj • Créer des contenus par défaut • Mettre à jour les contenus après un export de conf • Work flow ef ficace et atomique pour CI/CD DrupalCamp Paris 2019 16/33
a) Flashback Modèle de données relationnel = une collection de relations. Entités basées sur le réel Modèle de format décrit la structure des données. Con figurations en fichiers yaml b) Écrire une màj Un module Drupal peut fournir son propre modèle de données hook_update_N() Exemple avec 8001 : 8 = version du core, 0 version du module, les deux derniers chiffres = version de la màj Le problème : Drupal continue de tourner même avec une DB n'est pas à jour hook_schema() Dé finit la table d'origine. On est à la version 8000. Si on a besoin de le modi fier par la suite, deux étapes : • mettre à jour dans le hook_schema pour les prochaines installations • utiliser hook_update_N pour ceux qui ont déjà le module installé. La première màj sera 8001. Utiliser du code bas niveau dans ce hook car Drupal n'est pas entièrement chargé à ce stade d'exécution. c) Types de màj • pré fixer la table, changer la taille d'un champ, ajouter la possibilité d'avoir des valeurs nulles... : mettre à jour le hook_schema + hook_update_N • ajouter un fichier de con figuration à un module qui n'en avait pas initialement : mettre à jour les fichiers yml + hook_update_N (service con fig installer pour repérer les nouveaux fichiers) • ajouter un libellé pour le message de bienvenue : hook_update_N avec con fig_factory • nouvelle entité de con figuration • nouvelle entité de contenu : EntityDe finitionUpdateManagerInterface pour mettre à jour la dé finition d'une entité ou la dé finition d'un de ses composants • hook_post_update_Name() : modi fier des contenus ou des entités qui existent déjà d) Créer des contenus par défaut Dé finir des dépendances de modules dans le .info.yml du module hook_update_dependencies() : pour dé finir qu'on installe une version d'update après un certain update d'une dépendance (par exemple, 8001 doit être appliqué après le 8003 du module X que j'ai en dépendance) Ne jamais créer des contenus dans un hook_update_N, hook_post_update_name, hook_install Peut être une commande drush custom, un script avec drush php script, un dump 0 de la bdd e) Mettre à jour les contenus après un export de con figuration Pas de hook_update_N ou hook_post_update_Name : s'exécutent avant de con fig-import Pas une commande drush custom ou script avec drush php-script DrupalCamp Paris 2019 17/33
La réponse => hook_post_con fig_NAME() (pas encore dans le core !) f) Work flow CI/CD En attendant une deploy API dans le core ! • drush updb (qui lance hook_update_N() et hook_post_update_NAME()) • hook_pre_con fig_import_NAME() • drush con fig-import • hook_post_con fig_import_NAME() a partir de la 8.7 https://www.drupal.org/project/drupal/issues/2901418 2.9. Réalité Virtuelle Présentation par Christophe Villeneuve / La page DrupalCamp / La vidéo Youtube Manipulation de la couche API UX, interface utilisateur WebAr/WebVR/WebXR Apporter la VR performante dans le web ouvert Ne se limite pas au jeu La VR : Immersion dans la scène 3D Une vieille idée L'AR : Augmenter la réalité par des informations ajoutées via device Le futur GMaps sera en AR (source : frenchweb) Par Drupal : • Modules ReactVR/ a frame / VR • Webservices • Back / Front (à privilégier) Aujourd'hui, les modules Drupal ne sont globalement pas stables. Une pléthores de devices et la liste s'allonge. Le principe de la AR se base sur la stéréoscopie, permet la perception du relief La compatibilité des navigateurs pose problème. Chrome desktop compatible avec sa propre API WebVR Les compatibilités matériels ne sont pas standardisées (https://webvr.rocks/) Jquery React redux vue.js ... DOM A-Frame => Aframe Component Entity-component WebGL => WebVR DrupalCamp Paris 2019 18/33
Browser Drupal En pratique (librairie https://aframe.io/blog/arjs/) : • Déclarition de la libraire dans une page HTML clasique • Utlisation de la caméra et déclaration d'une scène • preset='hiro' marqueur d'appel de la caméra 2.10. Audit de sécurité d'un site Drupal Par Mickaël Deffontaine (Imgospirit) @laborouge / La page sur DrupalCamp / La présentation / La vidéo Youtube Développeur pro fil "full stack" : theming, back of fice, gestion projet, maintenance serveur Agence numérique et pas digitale (trolololo) : on met le doigt sur quelque chose ? Retour d'expérience anonyme : un développeur qu'on appellera Mickaël, un client Top Discount, une entreprise Top Sécurité. Développement d'un site de e-commerce. Il était convenu de faire un audit de sécurité en amont. Choix techniques : • Drupal (7, mais le retour peut s'appliquer à D8) • Pas de drupal commerce • Utilisation de la form API • Implantation manuelle du paiement en ligne ? Késako ? Pas de module dédié au paiement Classement : • failles mineures • failles importantes • failles majeures Ils ont mis l'accent sur ce qu'ils ont trouvé (par exemple, pas de remarques positives comme "Drupal est à jour") a) XSS Stored : exécution de JS Utilisation de la form API : hook_form_validate() et hook_form_submit() (création de node avec les soumissions du formulaire) XSS persistante : l'attaque la plus dangereuse. Injection de code dans le serveur du site vulnérable et infecte toutes les personnes visitant cette page. Le cas ici. XSS non persitante : le script est dans la requête La form API Drupal ne sanitize pas défaut. Solution: filter_xss(), check_markup() Retour d'XP : Deux lignes de code à implanter mais rien n'est acquis (des tests !) DrupalCamp Paris 2019 19/33
b) Énumération des paiements Informations sensibles dans la page de con firmation : email de l'utilisateur et n° de commande (hook_menu de la forme /paiements/666) Commande possible sans compte client (dans la demande client) => faille trouvée puisque le numéro s'incrémente. L'accès à ces infos augmente les risques de phishing Solution • limiter l'accès à ces pages et générer des identi fiants imprévisibles. • drupal_random_key() • Ajout d'un argument "id" dont la valeur est stockée dans le node. Si on essaie d'accéder à paiements/666 avec le mauvaise param, l'accès est refusé. Retour d'XP : le client a pris conscience du risque puisque l'audit a con firmé la préconisation de développement (= pratique dangeureuse). Facile à corriger. c) Connaissance des noms de compte users/top-admin => compt existant, on a une 403 users/plop => n'existe pas, 404 Donc on peut savoir si le compte existe et lancer des attaques force brute pour tenter d'y accéder. Solution : • Pour les utilisateurs, ne pas utiliser pathauto : pas d'alias d'URL sur les users • Module "Rename Admin Paths" : évite de déduire les URL sensibles pour ceux qui connaissent Drupal •Username Enumeration prevention : https://www.drupal.org/project/username_enumeration_prevention Retour d'XP : peu de travail, module existants d) Fichiers inutiles au fonctionnement de la production Accès aux fichiers txt, en étant anonyme. exemple : changelog.txt Solution : • suppression des fichiers ? Non, car il s'agit de readme : on devra les re-supprimer à chaque mise à jour; dette technique • limitation d'accès ? Demande à la communauté : solution d'un .htaccess où tous les fichiers en README.txt ou .md ou .markdown renvoient vers une 403. Implanté directement dans les paramètres de l'hébergement pour ce site Drupal paranoia : https://github.com/drupal-composer/drupal-paranoia Plugin composer qui va retirer les fichiers non asset : a utiliser lors d'un script de déploiment par exemple Retour d'XP : • un vrai choix technique (limiter l'accès à des fichiers sensibles) • peu onéreux en temps DrupalCamp Paris 2019 20/33
e) Fuite d'information fichier de template Oubli : désactiver le theme_debug pour la mise en prod (oops I did it again) Solution : une checklist pour la mise en prod ? Faire de l'intégration continu et Ansible (script de déploiement) f) CSRF : déconnexion utilisateur Via l'url /user/logout et un script : déconnecte l'utilisateur Préconisation : requête HTTP en POST, token CSRF Discutable : faille pas si majeure, recherche de solution technique mais... il faudrait réécrire le CMS Probablement assez secure (il faudrait déjà avoir accès au backof fice) et la conséquence n'est pas très grave (on est juste déconnecté) g) Entêtes HTTP : Strict-Transport-Security h) Entêtes HTTP : Content-Security-Policy Possibilité d'appeler un script externe, de récupérer un cookie de session utilisateur Nicolas Hoffman : articles sur CSP Solution • Implantation du module Security Kit • Implantation du code directement Retour d'XP • une prise de conscience sur cette bonne pratique • beaucoup de test (pas évident au début comme tout est fermé, exemple de CKEditor qui n'était plus appelé) • Onéreux en temps la 1ere fois i) Entêtes HTTP : fuite d'information sur le serveur Il suf fit de consulter les entêtes HTTP pour avoir des informations sur le serveur Exemple : • Version nginx • Version Drupal • Version php Solution • implantation directement sur l'hébergement Retour d'XP • recherche de documentation • contrôler son hébergement • onéreux en temps DrupalCamp Paris 2019 21/33
j) Multiples vulnérabilités : CKEditor Faille mineure. Af fichage de la version de CKEditor en connecté. alert(CKEDITOR.version); dans la console. Impossible à exploiter sans être logué. Solution • mettre à jour ! • outils d'alertes pour les màj de sécurité Retour d'XP • peu onéreux en temps • mise en place d'outils de veille (limiter la dette technique) k) Multiples vulnérabilités : PHPMailer On peut obtenir la version de PHPMailer. Faille Majeure même si non exploitable au moment de l'audit. SMTP sur Drupal 7 : version de PHPMailer de ce module n'est pas à jour, contient des failles. Solution • réécrire le module pour mettre à jour la version de PHPMailer Retour d'XP • adaptation du module : onéreux en temps •on s'enferme dans les modules sans faire attention à ce genre de détail. Problème de la maintenance des libraries Conclusion • très formateur • des acquis qui ne l'étaient pas • hausse de compétence • hausse de vigilance • implantation de base sur les projets suivants Quelqu'un parle de Drupal Paranoïa sur D8 : https://www.drupal.org/project/paranoia 2.11. Drupal 8 - Best practices Par Fabien Clément (L'Équipe.tech, @GoZOo) / La page DrupalCamp / La présentation / La vidéo Youtube Rule 1 : don't hack! - Core ou Contrib : on ne modi fie par les fichiers; Module Hacked : permet de savoir si un module a été patché quand on arrive sur un projet existant Rule 2 : Arborescence Respecter l'architecture Drupal : DrupalCamp Paris 2019 22/33
/modules/contrib /modules/custom /themes/custom etc Et PSR4 Rule 3 : Suivre les bonnes pratiques Symfony bonnes pratiques PSR injection de dépendances étendre plutôt que surcharger Rule 3-bis : injection de dépendance Utiliser l'injection de dépendance plutôt que les version statiques. Rule 4 : Ne plus utiliser le .module Seulement pour les hooks indispensables. Rule 5 : automatisation Faire des scripts ! Utiliser Git Utiliser settings.local.php Utiliser des variables d'environnement Rule 6 : Multilingue Inclus dans le core D8. Rajout personnel : METTEZ DES CONTEXTES DANS VOS T() BORDEL (bisous) Rule 7 : Gestion des droits Créer ses propres droits/permissions Permissions aussi sur les route Possibilité d'avoir dans le controller des accès plus compliqués : checkAccess Rule 8 : Routing Utiliser des chemins avec des paramètres plutôt que des arguments (/plop/1 plutôt que /plop? node=1) En bonus, l'entité sera chargée directement Rule 9 : Lien de menu d'administration Faire des route pour les form admin custom Rule 10 : ENTITY !!!!! Utiliser les entités... hook_entity_info_alter pour les entités existantes (oups pour la règle 4) entités = CRUD, mieux que tables custom Rule 11 : Les requêtes Outils pour générer les requêtes en s'affranchissant de la base de données. Éviter les requêtes en dur. Utiliser les méthodes de stockage des entités plutôt que les requêtes DrupalCamp Paris 2019 23/33
Ne sélectionner que l'id puis charger ensuite avec un loadMutliple (plus performant) Utiliser les caches correctement (long story) Utiliser first() plutôt que get(0) +1 Rule 12 : Templates Respecter un modèle MVC Pas de markup dans les classes ! Créer des templates et utiliser Twig. Ne pas faire de métier dans les templates : ce n'est que de l'af fichage. Passer uniquement la donnée au template. Pas de requêtes dans template ou dans le preprocess Un preprocess doit surtout filtrer/ordonner Rule 13 : Charger un asset Dé finir les assets dans le fichier monmodule.libraries.yml Attacher cet asset au tableau de rendu à l'endroit où on en a besoin (adieu drupal_add_js et drupal_add_css!) Rule 14 : Gestion des caches Ne jamais désactiver les caches ! (sauf en dev en local) Caches activés par défaut sur D8 Utiliser les caches tags pour gérer l'invalidation des caches Créer ses propres tags et exécuter leur invalidation si besoin (ajout personnel : module handy cache https://www.drupal.org/project/handy_cache_tags) Rule 15 : Utilisateur de test Tester en anonyme, avec les différents rôles Rappel : le superadmin ne passe même pas dans les règles de gestion de droit, on bypass tout en user 1 Outil sur Firefox pour conteneuriser par onglet : on peut tester un utilisateur par onglet, super pratique pour tester (https://addons.mozilla.org/fr/ firefox/addon/multi-account-containers/ ?) Rule 16 : Nommage des champs Inutile de pré fixer les champs Rule 16 bis : nommage des champs Rule 17 : Composer Si tu n'as pas composer, ça veut dire que c'est toi qui fait la gestion des paquets... Qui peut faire con fiance à un humain ? Composer --> versionning Composer install VS composer update Rule 18 : Contrib VS custom Véri fier toujours qu'un module contrib existe avant de se lancer (souvent plus complet, gestion de plus de cas) S'il existe : véri fier le nombre d'utilisation véri fier s'il est maintenu la qualité du code DrupalCamp Paris 2019 24/33
vaut-il vraiment la peine au regard du nombre de fonctionnalités qu'il propose pour votre besoin (usine à gaz ?) --> Contribuer au projet peut aussi être une solution. Plus vous avez de module, plus vous alourdissez votre site. Rule 19 : Validation des données Penser à valider côté serveur. Utiliser Form API. Fonctionnalité Ajax de Drupal Méthode de nettoyage (https://api.drupal.org/api/drupal/core%21includes %21common.inc/group/sanitization/8.6.x) - Html::escape - Xss:: filter - Xss:: filterAdmin Rule preque 20 : Performances Externaliser ce qui peut être externalisé Varnish memcache/Redis CDN OpCode Solr/Elastic Search Rule 20 : Clear cache ! Obviously. Conclusion Gibbs-Slap : si tu ne fais pas pour toi, rappelle-toi qu'il y a toujours un Gibbs derrière toi pour t'en coller une ! --> Permet durant les tester de faire en sorte que 1 onglet firefox = 1 firefox https://addons.mozilla.org/fr/ firefox/addon/multi-account-containers/?src=search 2.12. Micro Site Fabrice Scoyer aka Flocon de Toile @ flocondetoile / La page sur DrupalCamp / La présentation / La vidéo Youtube Micro site, module contrib Alternative au solutions excistante pour l'usine site Solution existante • Multisite du CORE • Domain access Micro Site : Pourquoi, comment, pour qui ? Lien du module : https://www.drupal.org/project/micro_site Inspiré de la gestion du multi site avec Typo3 DrupalCamp Paris 2019 25/33
Domain Access : limité sur le nombre de site, gestion des sites laborieuses Multi-site natif : long a à mettre en place, parfois trop gros (une instance Drupal pour générer une one page) Micro site : • Pour qui ? • Avant bien cibler le besoin ➢ Complexité des sites cibles ➢ Partage de contenu / utilisateurs ➢ Pro fil des (futur) gestionnaire des sites ➢ Nombre de sites potentiels ➢ Maintenance & ressources ➢ Contexte et organisation Cibles du micro site : universités, entreprise, fédérations, associations nationales... Concept fondamentaux de Micro Site Créer un site depuis une instance D8, comme si on créer un billet de blog : simpli fier la création de micro-site Micro site veut : ➢ permettre de propulser et gérer des centaines de site au sein d'une même instance D8 ➢ donner un espace d'admin dédié et simpli fié pour chaque site ➢ permettre le partage de contenu Architecture de MS ➢ basé sur une entité de contenu (site) ➢ Page d'accueil est l'entité Site elle même ➢ Archi assez proche de Domain Access mais la différence est est son approche par un type de contenu ➢ règle du 80/20 : 80% des besoins sont couverts par 20% des efforts (les besoins restants seront couverts par une implémentation personnalisée) ➢ gestion des droits : aucune info portée par entité User, tout sur entité Site Ecosystème de MS Fait pour créer des sites OnePage Extensions : • Micro Menu • Micro Node • Micro User • Micro SSO • Micro Taxonomy • Micro Path : alias unique par micro site DrupalCamp Paris 2019 26/33
• Micro Theme : un theme différent par micro site • Micro Contact • Micro Sitemap • Micro Simple Sitemap • Micro Bibcite Interagir avec MS Utilisable avec tout les modules contrib D8 Possibilité de faire des surcharges dynamiques sur des con figurations (ex : formulaires de con figuration des modules Matomo/Piwik, Sitemap...) Possibilité de faire des surcharges sur les droits d'accès Contribuer à MS • Tests (cas d'auges / automatisés) • Rapports de bug (issue queue) • Documentation • Vos propres modules micro_XXX 3. TRACK DÉCOUVERTE 3.1. Drupal 8 : présentation, utilisation et installation de Drupal et de modules. Choisir son module : • Qui le maintient ? Quel est le niveau du lead dev ? • Les bugs reports • L'activité des issues, des devs • Version de module • Dernière version dev simplytest.me : site de deploiement et de test de module. 3.2. Drupal 8, as-tu du Coeur ? (Drupal et les modules du coeur) Présentation de Léon Cros @chipway / La présentation Formation Drupal 8/7, Audit et conseil accompagnement et Dev. Module Drupal = type d'extension => fonctionnalité / traitement Force : polyvalence Une fonctionnalité donne un module Explorer le coeur avant d'installer la centaine de modules qui ne font que customiser le Core ➢ 78 modules dans le Core Modules qui rendent D8 immédiatement utilisable • ckEditor DrupalCamp Paris 2019 27/33
• contextual • editor • Filter • Quick Edit • Toolbar ckeditor natif avec intégration HTML en différent mode (Basic, restricted, Full) Possibilité de customiser l'éditeur lui même pour ajouter des fonctionnalités. Gestion de droits d'édition en fonction des pro fils. Drupal8 => données structurées mais aussi structures de contenus. Possibilités de créer des pages web et des webservices avec le même work flow Structuration des données : • ... • book • forum Structuration /type de champs • Comment • Datetime (range) • entity_reference • field field UI • file • image • link • media, • libray(experimental) • options • telephone • text Passer par des types de champs sous Drupal, facilite la vie. Il n'est pas conseillé de tout mettre en type texte. Cela permet aussi une validation automatique de format. Les types d'entités sont extensibles Ajout de champ possible Views est un outil de requetage sur les entités. Il permet de filtrer, trier, contextualisé et af fiche les résultats par type. DrupalCamp Paris 2019 28/33
Vous pouvez aussi lire