5.4.1 • Published 5 years ago

applitutoriel-js-lite v5.4.1

Weekly downloads
2
License
CECILL-2.1
Repository
github
Last release
5 years ago

applitutoriel-js-lite

L'application TUTORIEL a pour objectif de présenter une application basée sur le framework Hornet en version lite.

A noter :

  • Hornet facilite la mise en oeuvre du RGAA V3 dans une application.
  • Mais l'utilisation de Hornet ne garantit pas qu'une application soit valide RGAA.

Cas fonctionnels

Les cas fonctionnels présentés dans l'application sont :

  • Formulaire de recherche
  • Présentation du résultat sous forme de tableau éditable
  • Formulaire étendu
  • Tableau d'ajout/suppression/modification d'items
  • Affichage de graphique

RGAA V3

L'applitutoriel est une mise en pratique du RGAA V3 au travers du framework Hornet.

Prérequis

  • NodeJS 10.X
  • hornet-js-builder 2.X.X installé en global:
npm install -g hornet-js-builder
  • checkout du projet applitutoriel-js

Initialisation

Se positionner dans le répertoire du projet applitutoriel-js et lancer la commande:

hb install

Démarrage de l'application en mode développement

Commande par défaut

la commande à exécuter en mode développement est la suivante:

hb w

Elle permet de lancer l'application en mode watcher afin que les modifications soient prises en compte (ce qui entrainera un redémarrage du serveur node dans le cas d'une détection de modification).

Options

Il est également possible d'ajouter à cette commande l'option:

hb w -i

Cette commande indique au builder de ne pas transpiler les fichiers typescript en javascript. Elle est à utiliser dans le cas où l'IDE a été configuré de telle sorte que la transpilation ts->js se fasse via ce dernier.

Vérification

L'application est accessible depuis un navigateur à l'addresse : http://localhost:8888/applitutorieljslite/.

Mode Mock

Il est possible d'utiliser l'applitutoriel sans déployer la partie service. Pour cela, activer le mode mock dans le config/default.json.

  "mock": {
    "enabled": true,
    "host": "127.0.0.1", //default localhost
    "routes": "/mock/routes"
  }

Packaging de l'application

hb package

Les livrables sont à récupérer dans le répertoire : target

  • applitutoriel-5.X.X-static.zip
  • applitutoriel-5.X.X-dynamic.zip

Fichier de configuration de l'application : default.json

L'ensemble de la configuration applicative du serveur NodeJS se situe dans le fichier default.json contenu dans les sources de l'application

Ce fichier ne doit pas être modifié, excepté pour le log console. Les modifications sont à apporter dans les fichiers d'infrastructure.

Configuration applicative

ParamètreDescriptionValeur
contextPathContext de l'applicatin déployéPar défaut vide
welcomePagePage de démarrage de l'applicationPassé en paramètre du ServerConfiguration
{
  "contextPath": "applitutoriel",
  "welcomePage": "/accueil",
  ...
}

Configuration serveur

ParamètreDescriptionValeur
routeRoute identifié pour l'affinité de session nodejsjs1
portPort de démarrage du serveur8888
keepAliveActivation du mode HTTP KeepAlivetrue
maxConnectionsNombre maximal de connexion à l'instance nodejs100
timeoutTimeout des réponses HTTP300000
uploadFileSizeTaille maximal d'upload de fichier1000000
sessionTimeoutTimeout des sessions utilisateur1800000
  "server": {
    "route": "js1",
    "port": 8888,
    "keepAlive": true,
    "maxConnections": 100,
    "timeout": 300000,
    "uploadFileSize": 1000000,
    "sessionTimeout": 1800000
  }

Configuration Cookie

Cette partie contient l'ensemble du paramétrage spécifique aux exécutions réalisées coté serveur, ainsi que ses spécificités de démarrage.

ParamètreDescriptionValeur
domainDomain du cookienull
pathPath du cookienull
httpOnlyActivation du mode HTTP KeepAlivetrue
securesecurisation du cookietrue
alwaysSetCookieAjout du cookie dans le Headerfalse
  "cookie": {
    //"domain": null,
    //"path": null,
    "httpOnly": true,
    "secure": false
    //"alwaysSetCookie": false
  }

Configuration de la sécurité

Ce bloc contient l'ensemble des paramètres destinés à la configuration de helmet.

ParamètreDescriptionValeur
enabledActivation de la sécuritétrue
hppHTTP Parameter Pollution attackstrue
ienoopenMiddleware for IE security. Set X-Download-Options to noopentrue
noSniffkeep clients from sniffing the MIME typetrue
csp.enabledActivation de CSP (Content Security Policy)true
csp.defaultSrcnoms de domaine par défaut des différentes ressources du site"'self'", {hostname}
csp.scriptSrcnoms de domaine des différentes ressources de scripts du site"'self'", "'unsafe-inline'", "'unsafe-eval'"
csp.styleSrcnoms de domaine des différentes ressources de css du site"'self'", {hostname}
csp.fontSrcnoms de domaine des différentes ressources de fonts du site"'self'", {hostname}
csp.imgSrcnoms de domaine des différentes ressources d'images scripts du site"'self'", {hostname}
csp.reportOnlysi valorisé à true, génération d'un rapport d'erreur uniquementfalse
csp.setAllHeadersvalorisé à true si tous les headers doivent être settésfalse
csp.disableAndroidpermet de désactiver la navigation via Androidfalse
csp.safari5permet de désactiver la navigation via safari5false
xss.enabledActivation de la protection contre les failles XSStrue
xss.setOnOldIEForce le header X-XSS-Protection sur les anciens IEtrue
hpkp.enabledActivation du Public Key Pinning: HPKP, HTTPS certificates can be forged, allowing man-in-the middle attackstrue
hpkp.maxAgeDurée de validation7776000000
hpkp.sha256sListe des sha au format 256"AbCdEf123=","ZyXwVu456="
hpkp.includeSubdomainsInclusion des sous domainestrue
hpkp.reportUriurl de rapportvide
hsts.enabledActivation du HTTP Strict Transport Security: hstsfalse
hsts.maxAgeDurée de validation7776000000
hsts.includeSubdomainsInclusion des sous domainestrue
hsts.preloadActivation du preload dans le header HSTSfalse
csrf.enabledActivation du mode CSRF : Cross-Site Request Forgerytrue
csrf.maxTokensPerSessionNombre de token par session10
"security": {
    "enabled": true,
    "hpp": true,
    "ienoopen": true,
    "noSniff": true,
    "csp": {
      "enabled": true,
      "defaultSrc": [
        "'self'",
        "'unsafe-inline'",
        "'unsafe-eval'",
        "[Protocol]://[host]:[port]"
      ],
      "scriptSrc": [
        "'self'",
        "'unsafe-inline'",
        "'unsafe-eval'"
      ],
      "styleSrc":[
        "'self'",
        "[Protocol]://[host]:[port]",
        "'unsafe-inline'"
      ],
      "fontSrc":[
        "'self'",
        "[Protocol]://[host]:[port]"
      ],
      "imgSrc":[
        "'self'",
        "[Protocol]://[host]:[port]"
      ],
      "reportOnly": false,
      "setAllHeaders": false,
      "disableAndroid": false,
      "safari5": false
    },
    "frameguard": {
      "enabled": true,
      "mode": "deny",
      "allowFromPattern": ""
    },
    "xss": {
      "enabled": true,
      "setOnOldIE": true
    },
    "hpkp": {
      "enabled": true,
      "maxAge": 7776000000,
      "sha256s": [
        "AbCdEf123=",
        "ZyXwVu456="
      ],
      "includeSubdomains": true,
      "reportUri": null
    },
    "hsts": {
      "enabled": false,
      "maxAge": 10886400000,
      "includeSubdomains": true,
      "preload": false
    },
    "csrf": {
      "enabled": true,
      "maxTokensPerSession": 10
    }
  }

Configuration des logs serveurs

Niveau de log :

ParamètreDescriptionValeur
level.allniveau de log pour toute l'applicationINFO
level.monappli.viewniveau de log spécifique pour une partie de l'applicationoptionnel
 "log": {
    "levels": {
      "[all]": "DEBUG",
      "hornet-js-components.table": "TRACE"
    }
    ...

Déclaration des appenders :

ParamètreDescriptionValeur
typeType d'appenderfile pour un fichier simpledateFile pour un fichier contenant la dateconsole ...
filenameChemin absolu ou relatif au lancement du fichier de log/var/log/nodejs/applitutoriel/applitutoriel-1.log
patternPrésent pour les types dateFile Permet de donner un pattern de date qui sera ajouté au nom du fichier.-yyyy-MM-dd
layout.typeType d'affichage des messagespattern
layout.patternSchéma d'affichage des messages"%[%d{ISO8601}%x{tid}%x{user}%p%c%x{fn}%m%]"

Ex: type console

"appenders": [
	{
	    "type": "console",
	    "layout": {
	      "type": "pattern",
	      "pattern": "%[%d{ISO8601}|%x{tid}|%x{user}|%p|%c|%x{fn}|%m%]"
	    }
	}
]

ex : type fichier

"appenders": [
	{
	    "type": "dateFile",
	    "filename": "log/app.log",
	    "layout": {
	      "type": "pattern",
	      "pattern": "%d{ISO8601}|%x{tid}|%x{user}|%p|%c|%x{fn}|%m"
	    }
	}
]

Configuration des logs client

ParamètreDescriptionValeur
remoteActivatino des remotes logfalse
levelniveau de logINFO
  "logClient": {
    "remote": false,
    "level": "TRACE",
    ...

Déclaration des appenders

Type BrowserConsole :

ParamètreDescriptionValeur
typeType d'appenderBrowserConsole
layout.typeType d'affichage des messagesTHIN/BASIC/pattern/...
layout.patternSchéma d'affichage des messages"%p%c%m%"
"appenders": {
    "BrowserConsole" : {
        "type": "BrowserConsole",
        "layout": {
          "type": "THIN"
        }
    }
}

Type Ajax :

ParamètreDescriptionValeur
typeType d'appenderAjax
layout.typeType d'affichage des messagesTHIN/BASIC/pattern/...
layout.patternSchéma d'affichage des messages"%p%c%m%"
thresholdSeuil d'envoi des messages de log100
timeoutTimeout d'envoie des messages3000
urlurl d'envoie des logs/logs
"appenders": {
    "Ajax": {
        "type": "Ajax",
        "layout": {
          "type": "BASIC"
        },
        "threshold": 100,
        "timeout": 3000,
        "url": "/log"
    }
}

Configuration des services

ParamètreDescriptionValeur
services.hostURL de déploiement du module applitutoriel-serviceProtocol://host:port
services.nameNom de déploiement des servicesapplitutoriel
  "services": {
    "host": "http://localhost:8080/",
    "name": "applitutoriel-service"
  },

Configuration d'une base de données

Il est possible d'ajouter une configuration permettant de se connecter à une base de données.

Les configurations de base de données déclarés dans la configuration peuvent ensuite être utilisées dans une classe implémentant IModelDAO du projet hornet-js-database.

ParamètreDescriptionValeur
databaseObject contenant la liste des bases de données et leur configuration
configNom de la base de données avec sa configuration
uriChaine de connexion à une bdd sgbd://user@host:ports/name
optionsOptions nécessaires ou facultatives pour le sgbd
defineOption Sequelize, timestamps : activation des timestamps dans les tables BDD
loggingLevelLevel de log de sequelize
reloadIndicateur pour exécution des scripts sql à chaque démarragefalse par défaut
    "database": {
        "config": {
          "uri": "postgres://user@localhost:5432/applitutoriel",
          "options": {
            "operatorsAliases": false,
            "pool": {
              "max": 5,
              "min": 0,
              "idle": 1000
            },
            "define": {
              "timestamps": false
            },
            "loggingLevel": "INFO"
          },
          "reload": true
        }
      }

Mode mock

ParamètreDescriptionValeur
enabledActivation du mode mock de l'applicationfalse
hostHost local du mocklocalhost
routesChemin vers le fichier de routes mocké sans le /src/mock/routes
  "mock": {
    "enabled": false,
    "host": "127.0.0.1", //default localhost
    "routes": "/mock/routes"
  }

Mode fullSPA

NOTE : Le mode fullSPA n'est pas encore complètement supporté par hornet, la configuration est présente à titre d'information

ParamètreDescriptionValeur
enabledActivation du mode fullSPAfalse
hostHost du mode fullSPA""
namenom du service pour le mode fullSPA/services
"fullSpa": {
    "enabled": false,
    "host": "",
    "name": "/services"
  }

NOTE : non opérationnel

Configuration de l'authentification

Note : Il ne s'agit pas d'une configuration à proprement parlé de Hornet mais uniqument viable dans l'applitutoriel

ParamètreDescriptionValeur
loginUrlUrl de connexion à l'application/login
logoutUrlUrl de déconnexion à l'application/logout
  "authentication": {
    "loginUrl": "/login",
    "logoutUrl": "/logout"
  }

Configuration du Request

Configuration du Cache

La gestion du cache est paramétrable côté client et serveur pour les requêtes.

ParamètreDescriptionValeur
enabledActivation du cache sur les requêtes de servicestrue
timetoliveDurée de rétention du cache60
"request": {
    "cache": {
      "client": {
        "enabled": false,
        "timetolive": 60
      },
      "server": {
        "enabled": false,
        "timetolive": 120
      }
    }

Configuration du timeout

ParamètreDescriptionValeur
response  
deadline  
"request": {
    "timeout": {
      "response": 10000,
      "deadline": 60000
    }