diff --git a/DRAFT_CHANGELOG.md b/DRAFT_CHANGELOG.md index 5fc822fae..4cd5ac650 100644 --- a/DRAFT_CHANGELOG.md +++ b/DRAFT_CHANGELOG.md @@ -1,6 +1,8 @@ + + # Extension Geoportail OpenLayers, version __VERSION__ **__DATE__** @@ -8,7 +10,7 @@ ## Summary -Mise à jour de l'access-lib geoportail en version 3.0.3 +Utilisation de plusieurs clefs ## Changelog @@ -16,7 +18,7 @@ Mise à jour de l'access-lib geoportail en version 3.0.3 * [Changed] - - met à jour l'access-lib en version 3.0.3 pour correction géométrie itinéraire +- possibilité d'utiliser une liste de clés dans le tag data-key : * [Deprecated] @@ -39,13 +41,15 @@ Mise à jour de l'access-lib geoportail en version 3.0.3 ## Summary +Utilisation de plusieurs clefs + ## Changelog * [Added] * [Changed] - - met à jour l'access-lib en version 3.0.2 pour correction géométrie itinéraire + - possibilité d'utiliser une liste de clés dans le tag data-key : * [Deprecated] @@ -68,13 +72,15 @@ Mise à jour de l'access-lib geoportail en version 3.0.3 ## Summary +Utilisation de plusieurs clefs + ## Changelog * [Added] * [Changed] - - met à jour l'access-lib en version 3.0.2 pour correction géométrie itinéraire + - possibilité d'utiliser une liste de clés dans le tag data-key : * [Deprecated] @@ -82,8 +88,6 @@ Mise à jour de l'access-lib geoportail en version 3.0.3 * [Fixed] - - import eventDispatcher de THREE (e57a755794957de54f2ef5c5ffdac8687dc59985) - * [Security] --- diff --git a/build/scripts/release/geoportal-extensions-itowns-2.3.3.tgz b/build/scripts/release/geoportal-extensions-itowns-2.3.3.tgz index e87b08770..67e116901 100644 Binary files a/build/scripts/release/geoportal-extensions-itowns-2.3.3.tgz and b/build/scripts/release/geoportal-extensions-itowns-2.3.3.tgz differ diff --git a/build/scripts/release/geoportal-extensions-leaflet-2.2.0.tgz b/build/scripts/release/geoportal-extensions-leaflet-2.2.0.tgz index de1fa6226..ebdebc196 100644 Binary files a/build/scripts/release/geoportal-extensions-leaflet-2.2.0.tgz and b/build/scripts/release/geoportal-extensions-leaflet-2.2.0.tgz differ diff --git a/build/scripts/release/geoportal-extensions-openlayers-3.2.3.tgz b/build/scripts/release/geoportal-extensions-openlayers-3.2.3.tgz index 497b3f483..3aa243f6d 100644 Binary files a/build/scripts/release/geoportal-extensions-openlayers-3.2.3.tgz and b/build/scripts/release/geoportal-extensions-openlayers-3.2.3.tgz differ diff --git a/build/scripts/release/package-itowns.json b/build/scripts/release/package-itowns.json index 2d5731ff5..cb13f0523 100644 --- a/build/scripts/release/package-itowns.json +++ b/build/scripts/release/package-itowns.json @@ -1,38 +1,30 @@ { + "description" : "French Geoportal Extensions for iTowns", "repository" : { "url" : "https://github.com/IGNF/geoportal-extensions.git", "type" : "git" }, - "description" : "French Geoportal Extensions for iTowns", + "bugs" : {}, + "main" : "dist/GpPluginItowns-src.js", + "devDependencies" : {}, + "scripts" : {}, + "license" : "CECILL-B", + "author" : "IGNF", + "name" : "geoportal-extensions-itowns", + "peerDependencies" : {}, "dependencies" : { - "three" : "0.127.0", + "xmldom" : "^0.1.27", + "proj4" : "2.7.0", "sortablejs" : "1.8.4", + "three" : "0.127.0", + "geoportal-access-lib" : "3.0.5", "itowns" : "2.33.0", - "geoportal-access-lib" : "3.0.1", - "proj4" : "2.7.0", - "xmldom" : "^0.1.27", "node-fetch" : "^2.6.1", "loglevel" : "1.6.6" }, - "directories" : {}, - "bugs" : {}, - "author" : "IGNF", "homepage" : "https://geoservices.ign.fr/documentation/utilisation_web/extension-itowns.html", - "scripts" : {}, + "directories" : {}, "bundleDependencies" : [], - "name" : "geoportal-extensions-itowns", - "license" : "CECILL-B", - "date" : "10/11/2021", - "devDependencies" : {}, - "version" : "2.3.3", - "main" : "dist/GpPluginItowns-src.js", - "peerDependencies" : {}, - "keywords" : [ - "geoportail", - "plugin", - "javascript", - "Itowns" - ], "files" : [ "dist/", "src/", @@ -40,5 +32,13 @@ "README.md", "package.json" ], - "module" : "src/Itowns/index.js" + "version" : "2.3.4", + "keywords" : [ + "geoportail", + "plugin", + "javascript", + "Itowns" + ], + "module" : "src/Itowns/index.js", + "date" : "10/11/2021" } diff --git a/build/scripts/release/package-leaflet.json b/build/scripts/release/package-leaflet.json index fb89d1e2a..b402c5ea5 100644 --- a/build/scripts/release/package-leaflet.json +++ b/build/scripts/release/package-leaflet.json @@ -1,27 +1,5 @@ { - "scripts" : {}, - "peerDependencies" : {}, - "devDependencies" : {}, - "repository" : { - "url" : "https://github.com/IGNF/geoportal-extensions.git", - "type" : "git" - }, - "dependencies" : { - "leaflet" : "1.7.1", - "proj4leaflet" : "1.0.2", - "xmldom" : "^0.1.27", - "loglevel" : "1.6.6", - "node-fetch" : "^2.6.1", - "proj4" : "2.7.0", - "sortablejs" : "1.8.4", - "geoportal-access-lib" : "2.1.8", - "leaflet-draw" : "1.0.4" - }, "name" : "geoportal-extensions-leaflet", - "bundleDependencies" : [], - "license" : "CECILL-B", - "date" : "10/11/2021", - "module" : "src/Leaflet/index.js", "keywords" : [ "geoportail", "plugin", @@ -29,18 +7,40 @@ "leaflet", "publish" ], - "version" : "2.2.0", + "bundleDependencies" : [], "main" : "dist/GpPluginLeaflet-src.js", - "directories" : {}, + "peerDependencies" : {}, "bugs" : {}, + "license" : "CECILL-B", + "author" : "IGNF", "description" : "French Geoportal Extension for Leaflet", + "repository" : { + "type" : "git", + "url" : "https://github.com/IGNF/geoportal-extensions.git" + }, + "scripts" : {}, + "dependencies" : { + "geoportal-access-lib" : "3.0.5", + "xmldom" : "^0.1.27", + "proj4" : "2.7.0", + "sortablejs" : "1.8.4", + "leaflet-draw" : "1.0.4", + "leaflet" : "1.7.1", + "proj4leaflet" : "1.0.2", + "node-fetch" : "^2.6.1", + "loglevel" : "1.6.6" + }, "homepage" : "https://geoservices.ign.fr/documentation/utilisation_web/extension-leaflet.html", - "author" : "IGNF", "files" : [ "dist/", "src/", "LICENCE.md", "README.md", "package.json" - ] + ], + "module" : "src/Leaflet/index.js", + "version" : "2.2.1", + "date" : "10/11/2021", + "directories" : {}, + "devDependencies" : {} } diff --git a/build/scripts/release/package-openlayers.json b/build/scripts/release/package-openlayers.json index d1f93aad4..4f5404a89 100644 --- a/build/scripts/release/package-openlayers.json +++ b/build/scripts/release/package-openlayers.json @@ -1,18 +1,5 @@ { - "date" : "10/11/2021", - "keywords" : [ - "geoportail", - "plugin", - "javascript", - "OpenLayers" - ], - "repository" : { - "url" : "https://github.com/IGNF/geoportal-extensions.git", - "type" : "git" - }, "author" : "IGNF", - "scripts" : {}, - "name" : "geoportal-extensions-openlayers", "files" : [ "dist/", "src/", @@ -20,27 +7,40 @@ "README.md", "package.json" ], - "license" : "CECILL-B", - "module" : "src/OpenLayers/index.js", - "bugs" : {}, - "bundleDependencies" : [], + "scripts" : {}, + "keywords" : [ + "geoportail", + "plugin", + "javascript", + "OpenLayers" + ], + "name" : "geoportal-extensions-openlayers", "peerDependencies" : {}, - "version" : "3.2.3", + "homepage" : "https://geoservices.ign.fr/documentation/utilisation_web/extension-openlayers.html", "description" : "French Geoportal Extensions for OpenLayers", - "main" : "dist/GpPluginOpenLayers-src.js", + "version" : "3.2.4", "dependencies" : { + "eventbusjs" : "0.2.0", "node-fetch" : "^2.6.1", - "ol" : "6.3.1", - "geoportal-access-lib" : "3.0.3", - "xmldom" : "^0.1.27", "proj4" : "2.7.0", - "eventbusjs" : "0.2.0", - "@mapbox/mapbox-gl-style-spec" : "13.14.0", "ol-mapbox-style" : "6.3.2", "loglevel" : "1.6.6", - "sortablejs" : "1.8.4" + "geoportal-access-lib" : "3.0.5", + "sortablejs" : "1.8.4", + "@mapbox/mapbox-gl-style-spec" : "13.14.0", + "xmldom" : "^0.1.27", + "ol" : "6.3.1" }, - "homepage" : "https://geoservices.ign.fr/documentation/utilisation_web/extension-openlayers.html", + "main" : "dist/GpPluginOpenLayers-src.js", + "directories" : {}, + "bundleDependencies" : [], + "module" : "src/OpenLayers/index.js", "devDependencies" : {}, - "directories" : {} + "license" : "CECILL-B", + "repository" : { + "type" : "git", + "url" : "https://github.com/IGNF/geoportal-extensions.git" + }, + "date" : "10/11/2021", + "bugs" : {} } diff --git a/doc/CHANGELOG-openlayers.md b/doc/CHANGELOG-openlayers.md index 3116c9dd7..99e7c4796 100644 --- a/doc/CHANGELOG-openlayers.md +++ b/doc/CHANGELOG-openlayers.md @@ -91,6 +91,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [Extension Geoportail OpenLayers, version 3.2.1](#extension-geoportail-openlayers-version-321) * [Summary](#summary-25) * [Changelog](#changelog-22) +- [Extension Geoportail OpenLayers, version 3.2.2](#extension-geoportail-openlayers-version-322) + * [Summary](#summary-26) + * [Changelog](#changelog-23) +- [Extension Geoportail OpenLayers, version 3.2.3](#extension-geoportail-openlayers-version-323) + * [Summary](#summary-27) + * [Changelog](#changelog-24) @@ -953,3 +959,55 @@ Mise à jour access-lib pour utilisation de l'itinéraire v2 * [Security] --- +# Extension Geoportail OpenLayers, version 3.2.2 + +**10/11/2021** +> Release Extension Geoportail openlayers + +## Summary + +Mise à jour de l'access-lib geoportail en version 3.0.2 + +## Changelog + +* [Added] + +* [Changed] + + - met à jour l'access-lib en version 3.0.2 pour correction géométrie itinéraire + +* [Deprecated] + +* [Removed] + +* [Fixed] + +* [Security] + +--- +# Extension Geoportail OpenLayers, version 3.2.3 + +**10/11/2021** +> Release Extension Geoportail openlayers + +## Summary + +Mise à jour de l'access-lib geoportail en version 3.0.3 + +## Changelog + +* [Added] + +* [Changed] + + - met à jour l'access-lib en version 3.0.3 pour correction géométrie itinéraire + +* [Deprecated] + +* [Removed] + +* [Fixed] + +* [Security] + +--- diff --git a/doc/README-openlayers.md b/doc/README-openlayers.md index 8253e047e..4565c30b8 100644 --- a/doc/README-openlayers.md +++ b/doc/README-openlayers.md @@ -202,6 +202,12 @@ Une fois la clef obtenue, vous pouvez paramétrer l'utilisation de l'extension a ``` +Clés multiples : Si vous devez utiliser plusieurs clés d'accès, il est possible de mettre une liste de clés dans l'attribut data-key : + +``` html + +``` + Votre utilisation des fonctionnalités de l'extension Géoportail sera alors simplement conditionnée par la réception de l'événement onload de la page web, comme sur l'exemple suivant : ``` html @@ -255,6 +261,9 @@ Votre utilisation des fonctionnalités de l'extension Géoportail sera alors sim Vous pouvez améliorer le temps de chargement de votre page en mettant en cache sur votre plateforme la configuration associée à votre clef d'accès. Il vous suffit pour cela de récupérer le fichier de configuration (autoconf.json) obtenu à l'aide [du formulaire de ce tutoriel](http://ignf.github.io/geoportal-access-lib/latest/jsdoc/tutorial-optimize-getconfig.html). +Si vous souhaitez une autoconfiguration locale unique avec plusieurs clés, c'est possible. Pour cela, enregistrer le contenu de la requête suivante dans un fichier autoconf.json (en remplacant key1, key2, key3... par vos clés) : +[autoconf multi-clés : https://wxs.ign.fr/key1/autoconf/?keys=key1,key2,key&output=json&callback=callback](https://wxs.ign.fr/key1/autoconf/?keys=key1,key2,key&output=json&callback=callback) + Enregistrez ce fichier sur votre plateforme et paramétrez l'extension Géoportail de la manière suivante (selon les méthodes citées précédemment) : **Méthode 1** : Utilisez l'attribut "data-url" de la balise **script** chargeant l'extension pour pointer vers votre fichier : @@ -282,7 +291,6 @@ Votre utilisation des fonctionnalités de l'extension Géoportail sera alors sim ``` - **Méthode 2** : Utilisez le paramètre *serverUrl* de la fonction Gp.Services.getConfig() pour pointer vers votre fichier, ainsi que le paramètre *callbackSuffix*, de la manière suivante : ``` html diff --git a/package.json b/package.json index 7177ddd60..2d4042bbd 100644 --- a/package.json +++ b/package.json @@ -1,14 +1,14 @@ { "name": "geoportal-extensions", "description": "French Geoportal Extensions for OpenLayers, Leaflet and iTowns libraries", - "version": "2.6.3", - "date": "10/11/2021", + "version": "2.6.4", + "date": "03/12/2021", "leafletExtName": "French Geoportal Extension for Leaflet", - "leafletExtVersion": "2.2.0", + "leafletExtVersion": "2.2.1", "olExtName": "French Geoportal Extension for OpenLayers", - "olExtVersion": "3.2.3", + "olExtVersion": "3.2.4", "itownsExtName": "French Geoportal Extension for Itowns", - "itownsExtVersion": "2.3.3", + "itownsExtVersion": "2.3.4", "main": "dist/leaflet/GpPluginLeaflet.js, dist/openlayers/GpPluginOpenLayers.js, dist/itowns/GpPluginItowns.js", "module": "src/Leaflet/index.js, src/OpenLayers/index.js, src/Itowns/index.js", "directories": {}, @@ -20,9 +20,9 @@ "test:serve": "cd test && webpack-dev-server --hot --config webpack.test.serve.js", "sample": "npm run sample:serve", "sample:serve": "npm run sample:ol:serve", - "sample:itowns:serve": "webpack-dev-server --config build/webpack/webpack.config.itowns --mode=development --https --open-page samples/index-itowns-map.html --content-base . --output-public-path '/dist/itowns/' --port 9001 --open 'google-chrome'", - "sample:leaflet:serve": "webpack-dev-server --config build/webpack/webpack.config.leaflet --mode=development --https --open-page samples/index-leaflet-map.html --content-base . --output-public-path '/dist/leaflet/' --port 9001 --open 'google-chrome'", - "sample:ol:serve": "webpack-dev-server --config build/webpack/webpack.config.openlayers --mode=development --https --open-page samples/index-openlayers-map.html --content-base . --output-public-path '/dist/openlayers/' --port 9001 --open 'google-chrome'", + "sample:itowns:serve": "webpack-dev-server --config build/webpack/webpack.config.itowns --mode=development --https --open-page samples/index-itowns-map.html --content-base . --output-public-path '/dist/itowns/' --port 9001 --open 'chromium'", + "sample:leaflet:serve": "webpack-dev-server --config build/webpack/webpack.config.leaflet --mode=development --https --open-page samples/index-leaflet-map.html --content-base . --output-public-path '/dist/leaflet/' --port 9001 --open 'chromium'", + "sample:ol:serve": "webpack-dev-server --config build/webpack/webpack.config.openlayers --mode=development --https --open-page samples/index-openlayers-map.html --content-base . --output-public-path '/dist/openlayers/' --port 9001 --open 'chromium'", "doc": "npm run doc:serve", "doc:serve": "npm run doc:ol:serve", "doc:itowns:serve": "webpack-dev-server --hot --config build/webpack/webpack.config.itowns --content-base jsdoc/itowns --port 9001 --open", @@ -66,7 +66,7 @@ "dependencies": { "@mapbox/mapbox-gl-style-spec": "13.14.0", "eventbusjs": "0.2.0", - "geoportal-access-lib": "3.0.3", + "geoportal-access-lib": "3.0.5", "itowns": "2.33.0", "leaflet": "1.7.1", "leaflet-draw": "1.0.4", @@ -74,7 +74,7 @@ "markdown-toc": "^1.2.0", "ol": "6.3.1", "ol-mapbox-style": "6.3.2", - "proj4": "2.7.0", + "proj4": "2.7.2", "proj4leaflet": "1.0.2", "sortablejs": "1.8.4", "three": "0.127.0", diff --git a/samples-src/pages/leaflet/Default/pages-leaflet-bundle-multikeys.html b/samples-src/pages/leaflet/Default/pages-leaflet-bundle-multikeys.html new file mode 100644 index 000000000..fc64c1062 --- /dev/null +++ b/samples-src/pages/leaflet/Default/pages-leaflet-bundle-multikeys.html @@ -0,0 +1,69 @@ +{{#extend "layout-leaflet-sample-bundle-multikeys"}} + +{{#content "head"}} + Sample Leaflet +{{/content}} + +{{#content "style"}} + +{{/content}} + +{{#content "body"}} +

Ajout de tous les widgets

+ +
+{{/content}} + +{{#content "js"}} + +{{/content}} +{{/extend}} diff --git a/samples-src/pages/openlayers/Default/pages-ol-bundle-multikeys.html b/samples-src/pages/openlayers/Default/pages-ol-bundle-multikeys.html new file mode 100644 index 000000000..0dcc0d2f9 --- /dev/null +++ b/samples-src/pages/openlayers/Default/pages-ol-bundle-multikeys.html @@ -0,0 +1,84 @@ +{{#extend "ol-sample-bundle-multikeys-layout"}} + +{{#content "head"}} + Sample openlayers - multikeys +{{/content}} + +{{#content "style"}} + +{{/content}} + +{{#content "body"}} +

Ajout de tous les widgets

+ +
+
+{{/content}} + +{{#content "js"}} + +{{/content}} +{{/extend}} diff --git a/samples-src/templates/leaflet/layout-leaflet-sample-bundle-multikeys.hbs b/samples-src/templates/leaflet/layout-leaflet-sample-bundle-multikeys.hbs new file mode 100644 index 000000000..d75bf0af7 --- /dev/null +++ b/samples-src/templates/leaflet/layout-leaflet-sample-bundle-multikeys.hbs @@ -0,0 +1,29 @@ + + + + {{#extend "partials-common-head"}} + {{/extend}} + {{#extend "partials-leaflet-common-head"}} + {{/extend}} + {{#block "vendor"}} + {{/block}} + + {{#extend "partials-leaflet-bundle-multikeys-head"}} + {{/extend}} + + {{#block "head"}} + {{/block}} + {{#block "style"}} + {{/block}} + + + +

Extension Géoportail pour Leaflet (mode bundle)

+ + {{#block "body"}} + {{/block}} + + {{#block "js"}} + {{/block}} + + diff --git a/samples-src/templates/openlayers/ol-sample-bundle-multikeys-layout.hbs b/samples-src/templates/openlayers/ol-sample-bundle-multikeys-layout.hbs new file mode 100644 index 000000000..d3227e984 --- /dev/null +++ b/samples-src/templates/openlayers/ol-sample-bundle-multikeys-layout.hbs @@ -0,0 +1,28 @@ + + + + {{#extend "partials-common-head"}} + {{/extend}} + {{#extend "partials-ol-common-head"}} + {{/extend}} + {{#block "vendor"}} + {{/block}} + {{#extend "partials-ol-bundle-multikeys-head"}} + {{/extend}} + + {{#block "head"}} + {{/block}} + {{#block "style"}} + {{/block}} + + + +

Extension Géoportail pour OpenLayers

+ + {{#block "body"}} + {{/block}} + + {{#block "js"}} + {{/block}} + + diff --git a/samples-src/templates/partials/leaflet/partials-leaflet-bundle-multikeys-head.hbs b/samples-src/templates/partials/leaflet/partials-leaflet-bundle-multikeys-head.hbs new file mode 100644 index 000000000..5278a90c3 --- /dev/null +++ b/samples-src/templates/partials/leaflet/partials-leaflet-bundle-multikeys-head.hbs @@ -0,0 +1,4 @@ + + + + diff --git a/samples-src/templates/partials/openlayers/partials-ol-bundle-multikeys-head.hbs b/samples-src/templates/partials/openlayers/partials-ol-bundle-multikeys-head.hbs new file mode 100644 index 000000000..4d41d32d4 --- /dev/null +++ b/samples-src/templates/partials/openlayers/partials-ol-bundle-multikeys-head.hbs @@ -0,0 +1,5 @@ + + + + + diff --git a/src/Common/Utils/CheckRightManagement.js b/src/Common/Utils/CheckRightManagement.js index e23f983b1..d4ce480eb 100644 --- a/src/Common/Utils/CheckRightManagement.js +++ b/src/Common/Utils/CheckRightManagement.js @@ -77,96 +77,92 @@ export default { return; } else { // si l'autoconfiguration est chargée, - // on recupere la clef API, et on en profitera ensuite pour controler + // on recupere la/les clef(s) API, et on en profitera ensuite pour controler // les droits sur les ressources. - // FIXME par defaut, on recupere toujours la première... - _key = Object.keys(Config.configuration.generalOptions.apiKeys)[0]; + _key = Object.keys(Config.configuration.generalOptions.apiKeys); logger.log(_key); } } - // la clef API est renseignée ou recuperée de l'autoconfiguration - if (_key) { - // on verifie si l'autoconfiguration est disponible + // on verifie si l'autoconfiguration est disponible - if (!Config.isConfigLoaded()) { - // si l'autoconfiguration n'est pas chargée, - // il est toujours possible de requeter le service avec une clef API, - // mais les droits sur les ressources ne sont pas garantis, on risque - // d'obtenir des erreurs 403 forbidden... - // la responsabilité revient à l'utilisateur (message d'information)... + if (!Config.isConfigLoaded()) { + // si l'autoconfiguration n'est pas chargée, + // il est toujours possible de requeter le service avec une clef API, + // mais les droits sur les ressources ne sont pas garantis, on risque + // d'obtenir des erreurs 403 forbidden... + // la responsabilité revient à l'utilisateur (message d'information)... - logger.warn("WARNING : " + - "the contract key configuration has not been loaded, " + - "so be carefull !"); + logger.warn("WARNING : " + + "the contract key configuration has not been loaded, " + + "so be carefull !"); - // les ressouces non controlées - var _noRightManagement = {}; + // les ressouces non controlées + var _noRightManagement = {}; - for (var i = 0; i < _services.length; i++) { - var service = _services[i]; - _noRightManagement[service] = []; + for (var i = 0; i < _services.length; i++) { + var service = _services[i]; + _noRightManagement[service] = []; - for (var j = 0; j < _resources.length; j++) { - var resource = _resources[j]; - _noRightManagement[service].push(resource); - } + for (var j = 0; j < _resources.length; j++) { + var resource = _resources[j]; + _noRightManagement[service].push(resource); } + } - // on ajoute la clef - _noRightManagement.key = _key; + // on ajoute la clef + _noRightManagement.key = _key; - logger.log("right management not checked", _noRightManagement); + logger.log("right management not checked", _noRightManagement); - return _noRightManagement; - } else { - // si l'autoconf est chargée, - // on verifie la correspondance entre la clef et l'autoconfiguration, - // on previent l'utilisateur (message d'information) s'il n'a - // pas de droits sur certaines ressources ... - - // doit on ecarter les ressources sans droit ? - // oui, si possible avec un message d'information pour l'utilisateur... - - for (var k = 0; k < _resources.length; k++) { - var _resource = _resources[k]; - - for (var l = 0; l < _services.length; l++) { - var _service = _services[l]; - - var params = Config.getServiceParams(_resource, _service, _key); - if (!params || Object.keys(params).length === 0) { - logger.warn("WARNING : " + - "The contract key configuration has no rights to load this geoportal " + - "resource (" + _resource + ") " + - "for this service (" + _service + ") "); - continue; - } - - if (!_rightManagement[_service]) { - _rightManagement[_service] = []; - } - - _rightManagement[_service].push(_resource); + return _noRightManagement; + } else { + // si l'autoconf est chargée, + // on verifie la correspondance entre la clef et l'autoconfiguration, + // on previent l'utilisateur (message d'information) s'il n'a + // pas de droits sur certaines ressources ... + + // doit on ecarter les ressources sans droit ? + // oui, si possible avec un message d'information pour l'utilisateur... + + for (var k = 0; k < _resources.length; k++) { + var _resource = _resources[k]; + + for (var l = 0; l < _services.length; l++) { + var _service = _services[l]; + + var params = Config.getServiceParams(_resource, _service, _key); + if (!params || Object.keys(params).length === 0) { + logger.warn("WARNING : " + + "The contract key configuration has no rights to load this geoportal " + + "resource (" + _resource + ") " + + "for this service (" + _service + ") "); + continue; } - } - if (Object.keys(_rightManagement).length === 0) { - logger.warn("WARNING : " + - "The contract key configuration has been loaded, " + - "and the 'apiKey' parameter has been set, " + - "but, there is a problem on the mapping between the contract and the key !"); - return; + if (!_rightManagement[_service]) { + _rightManagement[_service] = []; + } + + _rightManagement[_service].push(_resource); } + } - // on ajoute la clef - _rightManagement.key = _key; + if (Object.keys(_rightManagement).length === 0) { + logger.warn("WARNING : " + + "The contract key configuration has been loaded, " + + "and the 'apiKey' parameter has been set, " + + "but, there is a problem on the mapping between the contract and the key !"); + return; + } - logger.log("right management checked", _rightManagement); + // on ajoute la clef qui correspond à la ressource vérifiée + _rightManagement.key = params.key; - return _rightManagement; - } + logger.log("right management checked", _rightManagement); + + return _rightManagement; } } }; diff --git a/src/Common/Utils/Config.js b/src/Common/Utils/Config.js index fc63876f4..17ac9022f 100644 --- a/src/Common/Utils/Config.js +++ b/src/Common/Utils/Config.js @@ -162,13 +162,13 @@ var Config = { * * @param {String} [resource] - "PositionOfInterest", "StreetAddress", "Voiture", "Pieton", ... * @param {String} [service] - Geocode, Itineraire, ... - * @param {String} [apiKey] - Clé de contrat API + * @param {Array} [apiKeys] - Clé(s) de contrat API * @returns {Object} params - paramètres de la ressource * @returns {String} params. - * @returns {String} params. - * @returns {String} params. - */ - getServiceParams : function (resource, service, apiKey) { + getServiceParams : function (resource, service, apiKeys) { var params = {}; if (this.configuration) { @@ -179,15 +179,26 @@ var Config = { // récupération de l'objet de configuration de la couche var layerConf = this.configuration.layers[layerId]; - // controle de la clef + // controle de la clef (on prend la première clé disponible qui est censée avoir accès à la ressource) var key = layerConf.apiKeys[0]; - if (apiKey) { - if (apiKey !== key) { - return; + if (apiKeys) { + if (!Array.isArray(apiKeys)) { + apiKeys = [apiKeys]; } + for (var i = 0; i < apiKeys.length; i++) { + if (apiKeys[i] === key) { + var keyIndex = i; + break; + } + } + // si aucune clé du tableau apiKeys ne correspond, on retourne rien => pas de droits pour la ressource + if (typeof keyIndex === 'undefined') { + return; + } } - apiKey = apiKey || key; + // on retourne la première clé qui a effectivement accès à la ressource + var apiKey = apiKeys[keyIndex] || key; params.key = apiKey; // récupération des paramètres du service params.url = layerConf.getServerUrl(apiKey);