Code Monkey home page Code Monkey logo

mon-service-securise's Introduction

MonServiceSécurisé

MonServiceSécurisé est un service numérique développé par le laboratoire d'innovation de l'ANSSI, en lien avec l'incubateur BetaGouv de la direction interministérielle du numérique. Il vise à aider les collectivités territoriales et les autres entités publiques à sécuriser et à homologuer leurs services publics numériques (sites web, applications mobiles, API).

Configuration de l'environnement de développement

Il est nécessaire en prérequis d'avoir installé Git, Docker et Node.js v16.

Commencer par récupérer les sources du projet et aller dans le répertoire créé.

$ git clone https://github.com/betagouv/mon-service-securise.git && cd mon-service-securise

Créer un network Docker pour accueillir MonServiceSécurisé en local.

$ docker network create mss-network

Créer un fichier .env à partir du fichier .env.template et renseigner les diverses variables d'environnement.

Lancer le script scripts/start.sh

Se connecter au conteneur de la base de données et créer une nouvelle base mss pour un utilisateur postgres.

$ docker compose exec mss-db createdb -U postgres mss

Exécuter les migrations depuis le conteneur du serveur web.

$ docker compose exec web npx knex migrate:latest

Le serveur est configuré et prêt à être redémarré.

Lancement du serveur

$ docker-compose restart web

(Ou arret et ré-exécution de ./script/start.sh)

Le serveur devrait être accessible depuis un navigateur à l'URL http://localhost:[PORT_MSS] (avec comme valeur pour PORT_MSS celle indiquée dans le fichier .env).

Il est alors possible de créer un compte utilisateur à l'url http://localhost:[PORT_MSS]/inscription.

Outils en local

  • Il est possible d'attacher un debugger nodejs car MSS est démarré avec --inspect=0.0.0.0.
  • Postgres est relayé sur le port 5432 de l'hôte. Donc le requêtage via un outil graphique est possible.

Exécution de la suite de tests automatisés

Les tests peuvent être lancés depuis un conteneur Docker en exécutant le script scripts/tests.sh. Les tests sont alors rejoués à chaque modification de fichier du projet sur la machine hôte.

Conception

Composants Svelte

Certaines parties du frontend sont suffisament compliquées pour ne pas être codées en jQuery. Pour celles-ci, on utilise Svelte. Le code est rangé dans /svelte.

En local, les composants sont build à la volée grâce à l'option vite build --watch.

En production, ils sont build via le build du package.json.

Dans les deux cas, le code généré se retrouve dans /public/composants-svelte pour être référencé depuis les .pug.

mon-service-securise's People

Contributors

cadichris avatar colingarrigasalaun avatar dependabot[bot] avatar egaillot avatar guillemettej avatar henricasa avatar jacquesrogueone avatar jbdemaison avatar jdauphant avatar lauramondoloni31 avatar marids avatar thibaudmzn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

mon-service-securise's Issues

Gérer correctement les données facultatives dans `InformationsHomologation`

À l'heure actuelle, on déclare la saisie d'une donnée comme facultative en surchargeant proprieteSaisie dans la classe métier. Cela entraîne une anomalie toutefois, en ce sens que le statut de saisie ne peut plus être dans l'état « à saisir » – vu qu'un des attributs est considéré comme rempli.

Il convient de corriger cette anomalie en se dotant d'une déclaration plus propre des données facultatives, et en les gérant correctement dans le calcul de statutSaisie.

Supprimer duplications dans déclaration des règles de personnalisation

Suite à PR #253

La règle « si application mobile sélectionnée, alors ajouter mesure de téléchargements officiels » se retrouve spécifiée à deux endroits. Il serait bien de supprimer cette duplication.

Plusieurs pistes de réflexion :

  • cumuler les profils (et donc de chaîner les concat•filter) ?
  • composer les profils (et donc pouvoir ajouter dans les critères d'application d'un profil une règle de type profil: "autreProfil"?

Duplication intempestive du dossier entre sa création et la saisie des mesures de sécurisation

Mon premier dossier a été aussitôt dupliqué : après avoir suivi le parcours création avec description du service puis saisie de l'état des mesures de sécurisation, j'ai obtenu deux dossiers avec le même nom de service, l'un avec la page "sécuriser" telle que je l'ai renseignée, l'autre sans (uniquement initiation du dossier avec sa description).

Ensuite, dans la page "décrire" de chaque dossier, la requête PUT du bouton "enregistrer" déclenchait une erreur 422 Unprocessable entity. dont la pile incluait un message "Le nom du service ... existe déjà pour une autre homologation".

Une fois modifié le nom d'un des dossiers, la page "décrire" se comporte de nouveau normalement.

Suggestions :

  • comprendre pourquoi le dossier a été dupliqué lors des premières étapes de sa création
  • permettre la suppression d'un dossier.

Mettre à jour la page « À propos »

La page « À propos » indique que la solution est construite par /ut7. Depuis l'attribution du nouveau marché, il serait intéressant de mentionner également Omnicité.

Supprimer duplications dans la page « Questions Fréquentes »

Les questions sont répétées, les styles sont répétés, les ancres sont répétées… Peut-être qu'on pourrait plus simplement décrire les questions fréquentes dans les données du référentiel. Reste à voir comment faire pour intégrer proprement des balises HTML dans ces données.

Le référentiel doit cloner les objets qu'il émet

Aujourd'hui la plupart des objets émis par le référentiel sont des adresses d'un même objet en mémoire. Si jamais ces objets sont modifiés, toutes les classes accédant à ces objets récupèrent des objets modifiés. Le référentiel doit rester un singleton, mais doit devenir immutable.

NB : quelque chose a déjà été fait concernant les mesures récupérées depuis le référentiel (cf PR #436). Il faudrait étendre ce mécanisme aux autres objets du référentiel.

Redistribuer ailleurs le code de `public/modules/soumetsHomologation.js`

Ce code se trouve couplé à public/homologation/formulaireInformationsGenerales.js (on doit notamment bouger le code si dans ce deuxième module on ajoute un bloc ElementsAjoutables). Par ailleurs, dans ce code a plusieurs responsabilités, à la fois de gérer le comportement de la pop-up modale d'alerte sur la criticité et la mise en forme des paramètres à transmettre au serveur lors du POST ou du PUT.

On doit pouvoir faire mieux 🙂 Peut-être en déplaçant une partie de ce code vers public/homologation/formulaireInformationsGenerales.js, une autre partie vers un nouveau module public/modules/modaleInformationsGenerales.js qui serait appelé depuis src/vues/fragments/modaleInformationsGenerales.pug ?

Éviter le recours à la description des données dans un JSON depuis les vues PUG

La généralisation des script(id = '…', type = 'application/json') !{JSON.stringify(homologation.XXX.YYY.toJSON()) }devient de plus en plus problématique. D'une part, la duplication n'est pas heureuse, d'autre part on génére de plus en plus de comportements liés à des variables globales.

À la place, on souhaite ne plus avoir besoin de transmettre ainsi les données du PUG vers le module JavaScript correspondant :

  • en passant plutôt par des data attributes
  • en gérant les index qui serviront d'identifiants depuis le PUG, ou depuis jQuery
  • etc.

Gérer les listes d'items à partir de l'index `0`

Actuellement, les pages client qui font intervenir la création / suppression d'items dans une liste (ex. points accès, entités externes, mesures spécifiques, etc.) transmettent un tableau dont le premier élément est null. Cela est dû au fait que la première zone de saisie créée quand on clique sur « ajouter un nouvel item » se base sur un index qui vaut 1 – alors qu'il devrait valoir 0.

Bien sûr, on pourrait décréter que la valeur initiale de l'index, avant première création (et donc avant première incrémentation) vaudrait -1 – mais le fait qu'il faille changer ce changement à plusieurs endroits suggère peut-être une duplication, et l'idée que la gestion de cet index et son incrément devrait avoir lieu à un même endroit, de manière encapsulée.

Généraliser description des propriétés atomiques dans une méthode de classe de `InformationsHomologation`

Actuellement, dans la classe métier PointAcces, on a une méthode statique qui décrit les propriétés atomiques liées à cette classe. Il serait bien de…

  • appeler cette méthode statique pour instancier l'objet
  • généraliser ce principe aux autres classes filles de InformationsHomologation
  • en profiter pour peut-être revoir le filtrage des données de listes dans le routeur mss.js (ex., entitesExternes, etc.)
  • en profiter pour supprimer la duplication avec middleware.aseptise('liste.*.propriete')

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.