@kalisio/kdk 1.4.2 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.nyc_output/02a7a308-a8d7-4cc6-8e61-6066a0055a96.json +1 -0
- package/.nyc_output/1900d596-5e87-433a-8fd6-fb7f7ded35ec.json +1 -0
- package/.nyc_output/{2e74ca23-8cf0-4161-9536-f71c2a1a74bb.json → 27401f21-8ccf-42fa-8230-4232189d86b3.json} +0 -0
- package/.nyc_output/{81d21e46-766a-46bc-b1b7-143ca577347a.json → 52278ef5-c337-4724-97be-e2e4416847c5.json} +0 -0
- package/.nyc_output/{aaf3ebbb-f895-4d7b-9255-bc5dee832570.json → 5dd49b8a-4c84-42f9-a3d5-712247a84775.json} +0 -0
- package/.nyc_output/{dbeb2602-0ac2-4e66-978b-0d29548359ca.json → 612b4859-9645-45c1-a41e-1fae420518c4.json} +0 -0
- package/.nyc_output/{e47d1e4c-2fff-4dcb-908f-d3081162547c.json → bab87fe9-d99a-4759-99e6-3fc4622eeca0.json} +0 -0
- package/.nyc_output/processinfo/02a7a308-a8d7-4cc6-8e61-6066a0055a96.json +1 -0
- package/.nyc_output/processinfo/1900d596-5e87-433a-8fd6-fb7f7ded35ec.json +1 -0
- package/.nyc_output/processinfo/27401f21-8ccf-42fa-8230-4232189d86b3.json +1 -0
- package/.nyc_output/processinfo/52278ef5-c337-4724-97be-e2e4416847c5.json +1 -0
- package/.nyc_output/processinfo/5dd49b8a-4c84-42f9-a3d5-712247a84775.json +1 -0
- package/.nyc_output/processinfo/612b4859-9645-45c1-a41e-1fae420518c4.json +1 -0
- package/.nyc_output/processinfo/bab87fe9-d99a-4759-99e6-3fc4622eeca0.json +1 -0
- package/.nyc_output/processinfo/index.json +1 -1
- package/CHANGELOG.md +69 -10
- package/coverage/core/api/application.js.html +500 -422
- package/coverage/core/api/authentication.js.html +119 -119
- package/coverage/core/api/db.js.html +172 -172
- package/coverage/core/api/hooks/hooks.account.js.html +45 -45
- package/coverage/core/api/hooks/hooks.authentication.js.html +71 -71
- package/coverage/core/api/hooks/hooks.authorisations.js.html +368 -353
- package/coverage/core/api/hooks/hooks.devices.js.html +49 -49
- package/coverage/core/api/hooks/hooks.groups.js.html +37 -37
- package/coverage/core/api/hooks/hooks.logger.js.html +27 -27
- package/coverage/core/api/hooks/hooks.model.js.html +269 -269
- package/coverage/core/api/hooks/hooks.organisations.js.html +190 -190
- package/coverage/core/api/hooks/hooks.pusher.js.html +114 -114
- package/coverage/core/api/hooks/hooks.query.js.html +277 -211
- package/coverage/core/api/hooks/hooks.service.js.html +82 -82
- package/coverage/core/api/hooks/hooks.storage.js.html +121 -121
- package/coverage/core/api/hooks/hooks.tags.js.html +232 -232
- package/coverage/core/api/hooks/hooks.users.js.html +263 -263
- package/coverage/core/api/hooks/index.html +172 -172
- package/coverage/core/api/hooks/index.js.html +24 -24
- package/coverage/core/api/index.html +76 -76
- package/coverage/core/api/index.js.html +30 -30
- package/coverage/core/api/marshall.js.html +57 -57
- package/coverage/core/api/models/groups.model.mongodb.js.html +20 -20
- package/coverage/core/api/models/index.html +50 -50
- package/coverage/core/api/models/organisations.model.mongodb.js.html +12 -12
- package/coverage/core/api/models/tags.model.mongodb.js.html +22 -22
- package/coverage/core/api/models/users.model.mongodb.js.html +20 -20
- package/coverage/core/api/oauth2-handler.js.html +18 -18
- package/coverage/core/api/oauth2-verifier.js.html +38 -38
- package/coverage/core/api/services/account/account.hooks.js.html +16 -16
- package/coverage/core/api/services/account/account.service.js.html +104 -104
- package/coverage/core/api/services/account/index.html +32 -32
- package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +9 -9
- package/coverage/core/api/services/authorisations/authorisations.service.js.html +156 -132
- package/coverage/core/api/services/authorisations/index.html +28 -28
- package/coverage/core/api/services/databases/databases.hooks.js.html +9 -9
- package/coverage/core/api/services/databases/databases.service.js.html +12 -12
- package/coverage/core/api/services/databases/index.html +24 -24
- package/coverage/core/api/services/devices/devices.hooks.js.html +9 -9
- package/coverage/core/api/services/devices/devices.service.js.html +121 -121
- package/coverage/core/api/services/devices/index.html +28 -28
- package/coverage/core/api/services/groups/groups.hooks.js.html +9 -9
- package/coverage/core/api/services/groups/index.html +13 -13
- package/coverage/core/api/services/index.html +21 -21
- package/coverage/core/api/services/index.js.html +118 -118
- package/coverage/core/api/services/mailer/index.html +24 -24
- package/coverage/core/api/services/mailer/mailer.hooks.js.html +9 -9
- package/coverage/core/api/services/mailer/mailer.service.js.html +19 -19
- package/coverage/core/api/services/organisations/index.html +24 -24
- package/coverage/core/api/services/organisations/organisations.hooks.js.html +8 -8
- package/coverage/core/api/services/organisations/organisations.service.js.html +67 -67
- package/coverage/core/api/services/pusher/index.html +34 -34
- package/coverage/core/api/services/pusher/pusher.channels.js.html +8 -8
- package/coverage/core/api/services/pusher/pusher.hooks.js.html +10 -10
- package/coverage/core/api/services/pusher/pusher.service.js.html +414 -414
- package/coverage/core/api/services/storage/index.html +21 -21
- package/coverage/core/api/services/storage/storage.hooks.js.html +35 -35
- package/coverage/core/api/services/tags/index.html +21 -21
- package/coverage/core/api/services/tags/tags.hooks.js.html +25 -25
- package/coverage/core/api/services/users/index.html +21 -21
- package/coverage/core/api/services/users/users.hooks.js.html +33 -33
- package/coverage/core/common/errors.js.html +1 -1
- package/coverage/core/common/index.html +42 -27
- package/coverage/core/common/index.js.html +16 -16
- package/coverage/core/common/permissions.js.html +320 -290
- package/coverage/index.html +181 -181
- package/coverage/lcov-report/core/api/application.js.html +500 -422
- package/coverage/lcov-report/core/api/authentication.js.html +119 -119
- package/coverage/lcov-report/core/api/db.js.html +172 -172
- package/coverage/lcov-report/core/api/hooks/hooks.account.js.html +45 -45
- package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +71 -71
- package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +368 -353
- package/coverage/lcov-report/core/api/hooks/hooks.devices.js.html +49 -49
- package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +37 -37
- package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +27 -27
- package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +269 -269
- package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +190 -190
- package/coverage/lcov-report/core/api/hooks/hooks.pusher.js.html +114 -114
- package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +277 -211
- package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +82 -82
- package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +121 -121
- package/coverage/lcov-report/core/api/hooks/hooks.tags.js.html +232 -232
- package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +263 -263
- package/coverage/lcov-report/core/api/hooks/index.html +172 -172
- package/coverage/lcov-report/core/api/hooks/index.js.html +24 -24
- package/coverage/lcov-report/core/api/index.html +76 -76
- package/coverage/lcov-report/core/api/index.js.html +30 -30
- package/coverage/lcov-report/core/api/marshall.js.html +57 -57
- package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +20 -20
- package/coverage/lcov-report/core/api/models/index.html +50 -50
- package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +12 -12
- package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +22 -22
- package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +20 -20
- package/coverage/lcov-report/core/api/oauth2-handler.js.html +18 -18
- package/coverage/lcov-report/core/api/oauth2-verifier.js.html +38 -38
- package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +16 -16
- package/coverage/lcov-report/core/api/services/account/account.service.js.html +104 -104
- package/coverage/lcov-report/core/api/services/account/index.html +32 -32
- package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +9 -9
- package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +156 -132
- package/coverage/lcov-report/core/api/services/authorisations/index.html +28 -28
- package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +9 -9
- package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +12 -12
- package/coverage/lcov-report/core/api/services/databases/index.html +24 -24
- package/coverage/lcov-report/core/api/services/devices/devices.hooks.js.html +9 -9
- package/coverage/lcov-report/core/api/services/devices/devices.service.js.html +121 -121
- package/coverage/lcov-report/core/api/services/devices/index.html +28 -28
- package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +9 -9
- package/coverage/lcov-report/core/api/services/groups/index.html +13 -13
- package/coverage/lcov-report/core/api/services/index.html +21 -21
- package/coverage/lcov-report/core/api/services/index.js.html +118 -118
- package/coverage/lcov-report/core/api/services/mailer/index.html +24 -24
- package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +9 -9
- package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +19 -19
- package/coverage/lcov-report/core/api/services/organisations/index.html +24 -24
- package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +8 -8
- package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +67 -67
- package/coverage/lcov-report/core/api/services/pusher/index.html +34 -34
- package/coverage/lcov-report/core/api/services/pusher/pusher.channels.js.html +8 -8
- package/coverage/lcov-report/core/api/services/pusher/pusher.hooks.js.html +10 -10
- package/coverage/lcov-report/core/api/services/pusher/pusher.service.js.html +414 -414
- package/coverage/lcov-report/core/api/services/storage/index.html +21 -21
- package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +35 -35
- package/coverage/lcov-report/core/api/services/tags/index.html +21 -21
- package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +25 -25
- package/coverage/lcov-report/core/api/services/users/index.html +21 -21
- package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +33 -33
- package/coverage/lcov-report/core/common/errors.js.html +1 -1
- package/coverage/lcov-report/core/common/index.html +42 -27
- package/coverage/lcov-report/core/common/index.js.html +16 -16
- package/coverage/lcov-report/core/common/permissions.js.html +320 -290
- package/coverage/lcov-report/index.html +181 -181
- package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +1 -1
- package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +25 -7
- package/coverage/lcov-report/map/api/hooks/index.html +7 -7
- package/coverage/lcov-report/map/api/hooks/index.js.html +1 -1
- package/coverage/lcov-report/map/api/index.html +1 -1
- package/coverage/lcov-report/map/api/index.js.html +1 -1
- package/coverage/lcov-report/map/api/marshall.js.html +1 -1
- package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +14 -5
- package/coverage/lcov-report/map/api/models/index.html +7 -7
- package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +1 -1
- package/coverage/lcov-report/map/api/services/alerts/index.html +1 -1
- package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/catalog/index.html +1 -1
- package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
- package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
- package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/features/index.html +1 -1
- package/coverage/lcov-report/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/geocoder/geocoder.service.js.html +1 -1
- package/coverage/lcov-report/map/api/services/geocoder/index.html +1 -1
- package/coverage/lcov-report/map/api/services/index.html +1 -1
- package/coverage/lcov-report/map/api/services/index.js.html +1 -1
- package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/errors.js.html +1 -1
- package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/grid.js.html +1 -1
- package/coverage/lcov-report/map/common/index.html +1 -1
- package/coverage/lcov-report/map/common/index.js.html +1 -1
- package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/moment-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/opendap-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/opendap-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/permissions.js.html +1 -1
- package/coverage/lcov-report/map/common/time-based-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/tms-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/wcs-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/wcs-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/weacast-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/wfs-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/wms-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/wmts-utils.js.html +1 -1
- package/coverage/lcov.info +3683 -3825
- package/coverage/map/api/hooks/hooks.catalog.js.html +1 -1
- package/coverage/map/api/hooks/hooks.query.js.html +25 -7
- package/coverage/map/api/hooks/index.html +7 -7
- package/coverage/map/api/hooks/index.js.html +1 -1
- package/coverage/map/api/index.html +1 -1
- package/coverage/map/api/index.js.html +1 -1
- package/coverage/map/api/marshall.js.html +1 -1
- package/coverage/map/api/models/alerts.model.mongodb.js.html +1 -1
- package/coverage/map/api/models/catalog.model.mongodb.js.html +1 -1
- package/coverage/map/api/models/features.model.mongodb.js.html +14 -5
- package/coverage/map/api/models/index.html +7 -7
- package/coverage/map/api/services/alerts/alerts.hooks.js.html +1 -1
- package/coverage/map/api/services/alerts/alerts.service.js.html +1 -1
- package/coverage/map/api/services/alerts/index.html +1 -1
- package/coverage/map/api/services/catalog/catalog.hooks.js.html +1 -1
- package/coverage/map/api/services/catalog/index.html +1 -1
- package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
- package/coverage/map/api/services/daptiles/index.html +1 -1
- package/coverage/map/api/services/features/features.hooks.js.html +1 -1
- package/coverage/map/api/services/features/index.html +1 -1
- package/coverage/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
- package/coverage/map/api/services/geocoder/geocoder.service.js.html +1 -1
- package/coverage/map/api/services/geocoder/index.html +1 -1
- package/coverage/map/api/services/index.html +1 -1
- package/coverage/map/api/services/index.js.html +1 -1
- package/coverage/map/common/dynamic-grid-source.js.html +1 -1
- package/coverage/map/common/errors.js.html +1 -1
- package/coverage/map/common/geotiff-grid-source.js.html +1 -1
- package/coverage/map/common/grid.js.html +1 -1
- package/coverage/map/common/index.html +1 -1
- package/coverage/map/common/index.js.html +1 -1
- package/coverage/map/common/meteo-model-grid-source.js.html +1 -1
- package/coverage/map/common/moment-utils.js.html +1 -1
- package/coverage/map/common/opendap-grid-source.js.html +1 -1
- package/coverage/map/common/opendap-utils.js.html +1 -1
- package/coverage/map/common/permissions.js.html +1 -1
- package/coverage/map/common/time-based-grid-source.js.html +1 -1
- package/coverage/map/common/tms-utils.js.html +1 -1
- package/coverage/map/common/wcs-grid-source.js.html +1 -1
- package/coverage/map/common/wcs-utils.js.html +1 -1
- package/coverage/map/common/weacast-grid-source.js.html +1 -1
- package/coverage/map/common/wfs-utils.js.html +1 -1
- package/coverage/map/common/wms-utils.js.html +1 -1
- package/coverage/map/common/wmts-utils.js.html +1 -1
- package/extras/tours/map/navigation-bar.js +49 -1
- package/lib/core/api/application.js +35 -9
- package/lib/core/api/application.js.map +1 -1
- package/lib/core/api/hooks/hooks.authorisations.js +8 -1
- package/lib/core/api/hooks/hooks.authorisations.js.map +1 -1
- package/lib/core/api/hooks/hooks.query.js +135 -100
- package/lib/core/api/hooks/hooks.query.js.map +1 -1
- package/lib/core/api/services/authorisations/authorisations.service.js +13 -1
- package/lib/core/api/services/authorisations/authorisations.service.js.map +1 -1
- package/lib/core/api/services/pusher/pusher.service.js +40 -16
- package/lib/core/api/services/pusher/pusher.service.js.map +1 -1
- package/lib/core/client/components/collection/KColumn.vue +29 -28
- package/lib/core/client/components/collection/KFilter.vue +97 -72
- package/lib/core/client/components/editor/KModalEditor.vue +3 -4
- package/lib/core/client/components/editor/KSettingsEditor.vue +6 -2
- package/lib/core/client/components/form/KFileField.vue +14 -36
- package/lib/core/client/components/form/KRoleField.vue +5 -2
- package/lib/core/client/components/form/KTextField.vue +12 -2
- package/lib/core/client/components/form/KUnitField.vue +57 -0
- package/lib/core/client/components/form/KUrlField.vue +1 -1
- package/lib/core/client/components/frame/KAction.vue +1 -2
- package/lib/core/client/components/frame/KModal.vue +66 -20
- package/lib/core/client/components/frame/KScrollArea.vue +65 -0
- package/lib/core/client/components/frame/index.js +6 -1
- package/lib/core/client/components/frame/index.js.map +1 -1
- package/lib/core/client/components/input/KColorChooser.vue +3 -5
- package/lib/core/client/components/input/KIconChooser.vue +38 -40
- package/lib/core/client/components/input/KOptionsChooser.vue +2 -2
- package/lib/core/client/components/layout/KAbout.vue +47 -49
- package/lib/core/client/components/team/KAddMember.vue +1 -1
- package/lib/core/client/components/team/KChangeRole.vue +11 -14
- package/lib/core/client/components/team/KGroupCard.vue +12 -5
- package/lib/core/client/components/team/KGroupsActivity.vue +1 -1
- package/lib/core/client/components/team/KJoinGroup.vue +22 -22
- package/lib/core/client/components/team/KMemberCard.vue +19 -4
- package/lib/core/client/components/viewer/KModalViewer.vue +10 -9
- package/lib/core/client/i18n/core_en.json +72 -8
- package/lib/core/client/i18n/core_fr.json +66 -8
- package/lib/core/client/index.js +31 -0
- package/lib/core/client/index.js.map +1 -1
- package/lib/core/client/layout.js +8 -1
- package/lib/core/client/layout.js.map +1 -1
- package/lib/core/client/mixins/mixin.base-widget.js +5 -3
- package/lib/core/client/mixins/mixin.base-widget.js.map +1 -1
- package/lib/core/client/reader.js +85 -0
- package/lib/core/client/reader.js.map +1 -0
- package/lib/core/client/readers/index.js +30 -0
- package/lib/core/client/readers/index.js.map +1 -0
- package/lib/core/client/readers/reader.csv.js +54 -0
- package/lib/core/client/readers/reader.csv.js.map +1 -0
- package/lib/core/client/readers/reader.json.js +49 -0
- package/lib/core/client/readers/reader.json.js.map +1 -0
- package/lib/core/client/services/index.js +14 -3
- package/lib/core/client/services/index.js.map +1 -1
- package/lib/core/client/services/local-settings.service.js +6 -4
- package/lib/core/client/services/local-settings.service.js.map +1 -1
- package/lib/core/client/time.js +4 -3
- package/lib/core/client/time.js.map +1 -1
- package/lib/core/client/units.js +195 -0
- package/lib/core/client/units.js.map +1 -0
- package/lib/core/common/permissions.js +44 -34
- package/lib/core/common/permissions.js.map +1 -1
- package/lib/core/common/schemas/settings.update.json +72 -0
- package/lib/map/api/hooks/hooks.query.js +7 -2
- package/lib/map/api/hooks/hooks.query.js.map +1 -1
- package/lib/map/api/models/features.model.mongodb.js +3 -0
- package/lib/map/api/models/features.model.mongodb.js.map +1 -1
- package/lib/map/client/components/KCaptureToolbar.vue +151 -0
- package/lib/map/client/components/KColorLegend.vue +16 -4
- package/lib/map/client/components/KFeaturesChart.vue +10 -11
- package/lib/map/client/components/KFeaturesFilter.vue +40 -39
- package/lib/map/client/components/KFeaturesTable.vue +15 -16
- package/lib/map/client/components/KLayerEditionToolbar.vue +19 -11
- package/lib/map/client/components/KLayerStyleEditor.vue +3 -2
- package/lib/map/client/components/KLayerStyleForm.vue +38 -27
- package/lib/map/client/components/KMeasureTool.vue +337 -0
- package/lib/map/client/components/KTimeline.vue +5 -9
- package/lib/map/client/components/catalog/KAddLayer.vue +3 -2
- package/lib/map/client/components/catalog/KCatalog.vue +26 -7
- package/lib/map/client/components/catalog/KImportLayer.vue +8 -35
- package/lib/map/client/components/catalog/KLayerCategories.vue +3 -2
- package/lib/map/client/components/catalog/KLayersSelector.vue +8 -6
- package/lib/map/client/components/catalog/KWeatherLayersSelector.vue +1 -1
- package/lib/map/client/components/widget/KInformationBox.vue +8 -17
- package/lib/map/client/components/widget/KMapillaryViewer.vue +5 -1
- package/lib/map/client/components/widget/KTimeSeries.vue +92 -9
- package/lib/map/client/i18n/map_en.json +51 -20
- package/lib/map/client/i18n/map_fr.json +51 -20
- package/lib/map/client/init.js +7 -1
- package/lib/map/client/init.js.map +1 -1
- package/lib/map/client/leaflet/MaskLayer.js +9 -0
- package/lib/map/client/leaflet/MaskLayer.js.map +1 -1
- package/lib/map/client/mixins/globe/mixin.base-globe.js +3 -5
- package/lib/map/client/mixins/globe/mixin.base-globe.js.map +1 -1
- package/lib/map/client/mixins/globe/mixin.geojson-layers.js +16 -21
- package/lib/map/client/mixins/globe/mixin.geojson-layers.js.map +1 -1
- package/lib/map/client/mixins/globe/mixin.popup.js +7 -1
- package/lib/map/client/mixins/globe/mixin.popup.js.map +1 -1
- package/lib/map/client/mixins/globe/mixin.tooltip.js +7 -1
- package/lib/map/client/mixins/globe/mixin.tooltip.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.base-map.js +54 -9
- package/lib/map/client/mixins/map/mixin.base-map.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.canvas-layers.js +2 -0
- package/lib/map/client/mixins/map/mixin.canvas-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.file-layers.js +51 -97
- package/lib/map/client/mixins/map/mixin.file-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.geojson-layers.js +43 -11
- package/lib/map/client/mixins/map/mixin.geojson-layers.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.popup.js +7 -1
- package/lib/map/client/mixins/map/mixin.popup.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.style.js +1 -1
- package/lib/map/client/mixins/map/mixin.style.js.map +1 -1
- package/lib/map/client/mixins/map/mixin.tooltip.js +7 -1
- package/lib/map/client/mixins/map/mixin.tooltip.js.map +1 -1
- package/lib/map/client/mixins/mixin.activity.js +2 -0
- package/lib/map/client/mixins/mixin.activity.js.map +1 -1
- package/lib/map/client/mixins/mixin.context.js +26 -3
- package/lib/map/client/mixins/mixin.context.js.map +1 -1
- package/lib/map/client/mixins/mixin.feature-service.js +3 -3
- package/lib/map/client/mixins/mixin.feature-service.js.map +1 -1
- package/lib/map/client/mixins/mixin.infobox.js +4 -0
- package/lib/map/client/mixins/mixin.infobox.js.map +1 -1
- package/lib/map/client/mixins/mixin.weacast.js +7 -5
- package/lib/map/client/mixins/mixin.weacast.js.map +1 -1
- package/lib/map/client/readers/index.js +54 -0
- package/lib/map/client/readers/index.js.map +1 -0
- package/lib/map/client/readers/reader.geojson.js +87 -0
- package/lib/map/client/readers/reader.geojson.js.map +1 -0
- package/lib/map/client/readers/reader.gpx.js +52 -0
- package/lib/map/client/readers/reader.gpx.js.map +1 -0
- package/lib/map/client/readers/reader.kml.js +52 -0
- package/lib/map/client/readers/reader.kml.js.map +1 -0
- package/lib/map/client/readers/reader.shp.js +116 -0
- package/lib/map/client/readers/reader.shp.js.map +1 -0
- package/lib/map/client/utils.js +0 -7
- package/lib/map/client/utils.js.map +1 -1
- package/lib/test/client/core/account.js +1 -1
- package/lib/test/client/core/account.js.map +1 -1
- package/lib/test/client/core/runner.js +1 -2
- package/lib/test/client/core/runner.js.map +1 -1
- package/lib/test/client/core/screens.js +1 -1
- package/lib/test/client/core/screens.js.map +1 -1
- package/lib/test/client/core/utils.js +2 -2
- package/lib/test/client/core/utils.js.map +1 -1
- package/lib/test/client/map/catalog.js +50 -49
- package/lib/test/client/map/catalog.js.map +1 -1
- package/package.json +3 -3
- package/.nyc_output/2c5b7c8e-81db-4d2c-a7a4-02dc640d301f.json +0 -1
- package/.nyc_output/a762cb58-70dc-4d39-ab69-928635affa98.json +0 -1
- package/.nyc_output/processinfo/2c5b7c8e-81db-4d2c-a7a4-02dc640d301f.json +0 -1
- package/.nyc_output/processinfo/2e74ca23-8cf0-4161-9536-f71c2a1a74bb.json +0 -1
- package/.nyc_output/processinfo/81d21e46-766a-46bc-b1b7-143ca577347a.json +0 -1
- package/.nyc_output/processinfo/a762cb58-70dc-4d39-ab69-928635affa98.json +0 -1
- package/.nyc_output/processinfo/aaf3ebbb-f895-4d7b-9255-bc5dee832570.json +0 -1
- package/.nyc_output/processinfo/dbeb2602-0ac2-4e66-978b-0d29548359ca.json +0 -1
- package/.nyc_output/processinfo/e47d1e4c-2fff-4dcb-908f-d3081162547c.json +0 -1
- package/extras/testcafe/Dockerfile +0 -48
- package/extras/testcafe/docker-entrypoint.sh +0 -27
- package/extras/testcafe/page-models/core/account.js +0 -75
- package/extras/testcafe/page-models/core/base-collection.js +0 -41
- package/extras/testcafe/page-models/core/base-page.js +0 -25
- package/extras/testcafe/page-models/core/groups.js +0 -36
- package/extras/testcafe/page-models/core/index.js +0 -140
- package/extras/testcafe/page-models/core/layout.js +0 -145
- package/extras/testcafe/page-models/core/members.js +0 -98
- package/extras/testcafe/page-models/core/organisations.js +0 -76
- package/extras/testcafe/page-models/core/screens.js +0 -99
- package/extras/testcafe/page-models/core/tags.js +0 -21
- package/extras/testcafe/page-models/map/add-layer.js +0 -51
- package/extras/testcafe/page-models/map/catalog.js +0 -132
- package/extras/testcafe/page-models/map/index.js +0 -36
- package/extras/testcafe/page-models/map/map-activity.js +0 -42
- package/extras/testcafe/page-models/map/timeline.js +0 -67
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">0% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>0/130</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">0% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>0/79</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">0% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>0/23</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">0% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>0/123</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
|
|
56
56
|
</p>
|
|
57
57
|
</div>
|
|
58
|
-
<div class='status-line
|
|
58
|
+
<div class='status-line low'></div>
|
|
59
59
|
<pre><table class="coverage">
|
|
60
60
|
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
61
61
|
<a name='L2'></a><a href='#L2'>2</a>
|
|
@@ -328,114 +328,114 @@
|
|
|
328
328
|
<a name='L269'></a><a href='#L269'>269</a>
|
|
329
329
|
<a name='L270'></a><a href='#L270'>270</a>
|
|
330
330
|
<a name='L271'></a><a href='#L271'>271</a>
|
|
331
|
-
<a name='L272'></a><a href='#L272'>272</a></td><td class="line-coverage quiet"><span class="cline-any cline-
|
|
332
|
-
<span class="cline-any cline-
|
|
333
|
-
<span class="cline-any cline-
|
|
334
|
-
<span class="cline-any cline-yes">1x</span>
|
|
335
|
-
<span class="cline-any cline-yes">1x</span>
|
|
336
|
-
<span class="cline-any cline-yes">1x</span>
|
|
331
|
+
<a name='L272'></a><a href='#L272'>272</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
332
|
+
<span class="cline-any cline-neutral"> </span>
|
|
333
|
+
<span class="cline-any cline-neutral"> </span>
|
|
337
334
|
<span class="cline-any cline-neutral"> </span>
|
|
338
|
-
<span class="cline-any cline-yes">1x</span>
|
|
339
335
|
<span class="cline-any cline-neutral"> </span>
|
|
340
|
-
<span class="cline-any cline-yes">1x</span>
|
|
341
336
|
<span class="cline-any cline-neutral"> </span>
|
|
342
337
|
<span class="cline-any cline-neutral"> </span>
|
|
343
|
-
<span class="cline-any cline-yes">21x</span>
|
|
344
|
-
<span class="cline-any cline-yes">15x</span>
|
|
345
338
|
<span class="cline-any cline-no"> </span>
|
|
346
339
|
<span class="cline-any cline-neutral"> </span>
|
|
340
|
+
<span class="cline-any cline-no"> </span>
|
|
347
341
|
<span class="cline-any cline-neutral"> </span>
|
|
348
|
-
<span class="cline-any cline-yes">15x</span>
|
|
349
|
-
<span class="cline-any cline-yes">15x</span>
|
|
350
|
-
<span class="cline-any cline-yes">15x</span>
|
|
351
|
-
<span class="cline-any cline-yes">15x</span>
|
|
352
342
|
<span class="cline-any cline-neutral"> </span>
|
|
353
|
-
<span class="cline-any cline-
|
|
354
|
-
<span class="cline-any cline-
|
|
355
|
-
<span class="cline-any cline-
|
|
356
|
-
<span class="cline-any cline-yes">11x</span>
|
|
357
|
-
<span class="cline-any cline-yes">11x</span>
|
|
343
|
+
<span class="cline-any cline-no"> </span>
|
|
344
|
+
<span class="cline-any cline-no"> </span>
|
|
345
|
+
<span class="cline-any cline-no"> </span>
|
|
358
346
|
<span class="cline-any cline-neutral"> </span>
|
|
359
|
-
<span class="cline-any cline-yes">11x</span>
|
|
360
347
|
<span class="cline-any cline-neutral"> </span>
|
|
361
|
-
<span class="cline-any cline-
|
|
362
|
-
<span class="cline-any cline-
|
|
363
|
-
<span class="cline-any cline-
|
|
348
|
+
<span class="cline-any cline-no"> </span>
|
|
349
|
+
<span class="cline-any cline-no"> </span>
|
|
350
|
+
<span class="cline-any cline-no"> </span>
|
|
351
|
+
<span class="cline-any cline-no"> </span>
|
|
364
352
|
<span class="cline-any cline-neutral"> </span>
|
|
365
|
-
<span class="cline-any cline-
|
|
366
|
-
<span class="cline-any cline-
|
|
353
|
+
<span class="cline-any cline-no"> </span>
|
|
354
|
+
<span class="cline-any cline-no"> </span>
|
|
355
|
+
<span class="cline-any cline-no"> </span>
|
|
356
|
+
<span class="cline-any cline-no"> </span>
|
|
357
|
+
<span class="cline-any cline-no"> </span>
|
|
367
358
|
<span class="cline-any cline-neutral"> </span>
|
|
359
|
+
<span class="cline-any cline-no"> </span>
|
|
360
|
+
<span class="cline-any cline-neutral"> </span>
|
|
361
|
+
<span class="cline-any cline-no"> </span>
|
|
362
|
+
<span class="cline-any cline-no"> </span>
|
|
363
|
+
<span class="cline-any cline-no"> </span>
|
|
364
|
+
<span class="cline-any cline-neutral"> </span>
|
|
365
|
+
<span class="cline-any cline-no"> </span>
|
|
366
|
+
<span class="cline-any cline-no"> </span>
|
|
368
367
|
<span class="cline-any cline-neutral"> </span>
|
|
369
368
|
<span class="cline-any cline-neutral"> </span>
|
|
370
369
|
<span class="cline-any cline-neutral"> </span>
|
|
371
370
|
<span class="cline-any cline-neutral"> </span>
|
|
372
|
-
<span class="cline-any cline-yes">11x</span>
|
|
373
|
-
<span class="cline-any cline-yes">4x</span>
|
|
374
371
|
<span class="cline-any cline-neutral"> </span>
|
|
372
|
+
<span class="cline-any cline-no"> </span>
|
|
373
|
+
<span class="cline-any cline-no"> </span>
|
|
375
374
|
<span class="cline-any cline-neutral"> </span>
|
|
376
|
-
<span class="cline-any cline-yes">18x</span>
|
|
377
375
|
<span class="cline-any cline-neutral"> </span>
|
|
376
|
+
<span class="cline-any cline-no"> </span>
|
|
378
377
|
<span class="cline-any cline-neutral"> </span>
|
|
379
378
|
<span class="cline-any cline-neutral"> </span>
|
|
380
379
|
<span class="cline-any cline-neutral"> </span>
|
|
381
380
|
<span class="cline-any cline-neutral"> </span>
|
|
382
|
-
<span class="cline-any cline-
|
|
381
|
+
<span class="cline-any cline-neutral"> </span>
|
|
382
|
+
<span class="cline-any cline-no"> </span>
|
|
383
383
|
<span class="cline-any cline-neutral"> </span>
|
|
384
384
|
<span class="cline-any cline-neutral"> </span>
|
|
385
385
|
<span class="cline-any cline-neutral"> </span>
|
|
386
386
|
<span class="cline-any cline-neutral"> </span>
|
|
387
|
-
<span class="cline-any cline-
|
|
388
|
-
<span class="cline-any cline-
|
|
387
|
+
<span class="cline-any cline-no"> </span>
|
|
388
|
+
<span class="cline-any cline-no"> </span>
|
|
389
389
|
<span class="cline-any cline-no"> </span>
|
|
390
390
|
<span class="cline-any cline-neutral"> </span>
|
|
391
|
-
<span class="cline-any cline-
|
|
392
|
-
<span class="cline-any cline-
|
|
393
|
-
<span class="cline-any cline-
|
|
394
|
-
<span class="cline-any cline-
|
|
391
|
+
<span class="cline-any cline-no"> </span>
|
|
392
|
+
<span class="cline-any cline-no"> </span>
|
|
393
|
+
<span class="cline-any cline-no"> </span>
|
|
394
|
+
<span class="cline-any cline-no"> </span>
|
|
395
395
|
<span class="cline-any cline-neutral"> </span>
|
|
396
|
-
<span class="cline-any cline-
|
|
397
|
-
<span class="cline-any cline-
|
|
398
|
-
<span class="cline-any cline-
|
|
399
|
-
<span class="cline-any cline-
|
|
400
|
-
<span class="cline-any cline-
|
|
401
|
-
<span class="cline-any cline-
|
|
402
|
-
<span class="cline-any cline-
|
|
403
|
-
<span class="cline-any cline-
|
|
396
|
+
<span class="cline-any cline-no"> </span>
|
|
397
|
+
<span class="cline-any cline-no"> </span>
|
|
398
|
+
<span class="cline-any cline-no"> </span>
|
|
399
|
+
<span class="cline-any cline-no"> </span>
|
|
400
|
+
<span class="cline-any cline-no"> </span>
|
|
401
|
+
<span class="cline-any cline-no"> </span>
|
|
402
|
+
<span class="cline-any cline-no"> </span>
|
|
403
|
+
<span class="cline-any cline-no"> </span>
|
|
404
404
|
<span class="cline-any cline-neutral"> </span>
|
|
405
|
-
<span class="cline-any cline-
|
|
406
|
-
<span class="cline-any cline-
|
|
407
|
-
<span class="cline-any cline-
|
|
408
|
-
<span class="cline-any cline-
|
|
405
|
+
<span class="cline-any cline-no"> </span>
|
|
406
|
+
<span class="cline-any cline-no"> </span>
|
|
407
|
+
<span class="cline-any cline-no"> </span>
|
|
408
|
+
<span class="cline-any cline-no"> </span>
|
|
409
409
|
<span class="cline-any cline-neutral"> </span>
|
|
410
410
|
<span class="cline-any cline-neutral"> </span>
|
|
411
|
-
<span class="cline-any cline-
|
|
411
|
+
<span class="cline-any cline-no"> </span>
|
|
412
412
|
<span class="cline-any cline-neutral"> </span>
|
|
413
413
|
<span class="cline-any cline-neutral"> </span>
|
|
414
414
|
<span class="cline-any cline-neutral"> </span>
|
|
415
415
|
<span class="cline-any cline-neutral"> </span>
|
|
416
|
-
<span class="cline-any cline-
|
|
417
|
-
<span class="cline-any cline-
|
|
416
|
+
<span class="cline-any cline-no"> </span>
|
|
417
|
+
<span class="cline-any cline-no"> </span>
|
|
418
418
|
<span class="cline-any cline-no"> </span>
|
|
419
419
|
<span class="cline-any cline-neutral"> </span>
|
|
420
|
-
<span class="cline-any cline-
|
|
421
|
-
<span class="cline-any cline-
|
|
422
|
-
<span class="cline-any cline-
|
|
423
|
-
<span class="cline-any cline-
|
|
420
|
+
<span class="cline-any cline-no"> </span>
|
|
421
|
+
<span class="cline-any cline-no"> </span>
|
|
422
|
+
<span class="cline-any cline-no"> </span>
|
|
423
|
+
<span class="cline-any cline-no"> </span>
|
|
424
424
|
<span class="cline-any cline-neutral"> </span>
|
|
425
|
-
<span class="cline-any cline-
|
|
425
|
+
<span class="cline-any cline-no"> </span>
|
|
426
426
|
<span class="cline-any cline-no"> </span>
|
|
427
427
|
<span class="cline-any cline-neutral"> </span>
|
|
428
428
|
<span class="cline-any cline-no"> </span>
|
|
429
429
|
<span class="cline-any cline-neutral"> </span>
|
|
430
430
|
<span class="cline-any cline-neutral"> </span>
|
|
431
|
-
<span class="cline-any cline-
|
|
431
|
+
<span class="cline-any cline-no"> </span>
|
|
432
432
|
<span class="cline-any cline-neutral"> </span>
|
|
433
|
-
<span class="cline-any cline-
|
|
434
|
-
<span class="cline-any cline-
|
|
433
|
+
<span class="cline-any cline-no"> </span>
|
|
434
|
+
<span class="cline-any cline-no"> </span>
|
|
435
435
|
<span class="cline-any cline-neutral"> </span>
|
|
436
|
-
<span class="cline-any cline-
|
|
437
|
-
<span class="cline-any cline-
|
|
438
|
-
<span class="cline-any cline-
|
|
436
|
+
<span class="cline-any cline-no"> </span>
|
|
437
|
+
<span class="cline-any cline-no"> </span>
|
|
438
|
+
<span class="cline-any cline-no"> </span>
|
|
439
439
|
<span class="cline-any cline-neutral"> </span>
|
|
440
440
|
<span class="cline-any cline-neutral"> </span>
|
|
441
441
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -444,25 +444,25 @@
|
|
|
444
444
|
<span class="cline-any cline-no"> </span>
|
|
445
445
|
<span class="cline-any cline-neutral"> </span>
|
|
446
446
|
<span class="cline-any cline-neutral"> </span>
|
|
447
|
-
<span class="cline-any cline-
|
|
447
|
+
<span class="cline-any cline-no"> </span>
|
|
448
448
|
<span class="cline-any cline-neutral"> </span>
|
|
449
449
|
<span class="cline-any cline-neutral"> </span>
|
|
450
450
|
<span class="cline-any cline-neutral"> </span>
|
|
451
451
|
<span class="cline-any cline-neutral"> </span>
|
|
452
|
-
<span class="cline-any cline-
|
|
452
|
+
<span class="cline-any cline-no"> </span>
|
|
453
453
|
<span class="cline-any cline-no"> </span>
|
|
454
454
|
<span class="cline-any cline-neutral"> </span>
|
|
455
455
|
<span class="cline-any cline-neutral"> </span>
|
|
456
456
|
<span class="cline-any cline-neutral"> </span>
|
|
457
|
-
<span class="cline-any cline-
|
|
458
|
-
<span class="cline-any cline-
|
|
457
|
+
<span class="cline-any cline-no"> </span>
|
|
458
|
+
<span class="cline-any cline-no"> </span>
|
|
459
459
|
<span class="cline-any cline-neutral"> </span>
|
|
460
|
-
<span class="cline-any cline-
|
|
460
|
+
<span class="cline-any cline-no"> </span>
|
|
461
461
|
<span class="cline-any cline-neutral"> </span>
|
|
462
|
-
<span class="cline-any cline-
|
|
463
|
-
<span class="cline-any cline-
|
|
464
|
-
<span class="cline-any cline-
|
|
465
|
-
<span class="cline-any cline-
|
|
462
|
+
<span class="cline-any cline-no"> </span>
|
|
463
|
+
<span class="cline-any cline-no"> </span>
|
|
464
|
+
<span class="cline-any cline-no"> </span>
|
|
465
|
+
<span class="cline-any cline-no"> </span>
|
|
466
466
|
<span class="cline-any cline-neutral"> </span>
|
|
467
467
|
<span class="cline-any cline-neutral"> </span>
|
|
468
468
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -470,17 +470,17 @@
|
|
|
470
470
|
<span class="cline-any cline-neutral"> </span>
|
|
471
471
|
<span class="cline-any cline-neutral"> </span>
|
|
472
472
|
<span class="cline-any cline-neutral"> </span>
|
|
473
|
-
<span class="cline-any cline-
|
|
473
|
+
<span class="cline-any cline-no"> </span>
|
|
474
474
|
<span class="cline-any cline-neutral"> </span>
|
|
475
475
|
<span class="cline-any cline-neutral"> </span>
|
|
476
476
|
<span class="cline-any cline-neutral"> </span>
|
|
477
|
-
<span class="cline-any cline-
|
|
478
|
-
<span class="cline-any cline-
|
|
479
|
-
<span class="cline-any cline-
|
|
480
|
-
<span class="cline-any cline-
|
|
477
|
+
<span class="cline-any cline-no"> </span>
|
|
478
|
+
<span class="cline-any cline-no"> </span>
|
|
479
|
+
<span class="cline-any cline-no"> </span>
|
|
480
|
+
<span class="cline-any cline-no"> </span>
|
|
481
481
|
<span class="cline-any cline-neutral"> </span>
|
|
482
482
|
<span class="cline-any cline-neutral"> </span>
|
|
483
|
-
<span class="cline-any cline-
|
|
483
|
+
<span class="cline-any cline-no"> </span>
|
|
484
484
|
<span class="cline-any cline-neutral"> </span>
|
|
485
485
|
<span class="cline-any cline-neutral"> </span>
|
|
486
486
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -490,28 +490,28 @@
|
|
|
490
490
|
<span class="cline-any cline-neutral"> </span>
|
|
491
491
|
<span class="cline-any cline-neutral"> </span>
|
|
492
492
|
<span class="cline-any cline-neutral"> </span>
|
|
493
|
-
<span class="cline-any cline-
|
|
494
|
-
<span class="cline-any cline-
|
|
493
|
+
<span class="cline-any cline-no"> </span>
|
|
494
|
+
<span class="cline-any cline-no"> </span>
|
|
495
495
|
<span class="cline-any cline-neutral"> </span>
|
|
496
496
|
<span class="cline-any cline-neutral"> </span>
|
|
497
497
|
<span class="cline-any cline-neutral"> </span>
|
|
498
498
|
<span class="cline-any cline-neutral"> </span>
|
|
499
|
-
<span class="cline-any cline-
|
|
500
|
-
<span class="cline-any cline-
|
|
499
|
+
<span class="cline-any cline-no"> </span>
|
|
500
|
+
<span class="cline-any cline-no"> </span>
|
|
501
501
|
<span class="cline-any cline-no"> </span>
|
|
502
502
|
<span class="cline-any cline-neutral"> </span>
|
|
503
503
|
<span class="cline-any cline-neutral"> </span>
|
|
504
|
-
<span class="cline-any cline-
|
|
505
|
-
<span class="cline-any cline-
|
|
506
|
-
<span class="cline-any cline-
|
|
507
|
-
<span class="cline-any cline-
|
|
508
|
-
<span class="cline-any cline-
|
|
509
|
-
<span class="cline-any cline-
|
|
504
|
+
<span class="cline-any cline-no"> </span>
|
|
505
|
+
<span class="cline-any cline-no"> </span>
|
|
506
|
+
<span class="cline-any cline-no"> </span>
|
|
507
|
+
<span class="cline-any cline-no"> </span>
|
|
508
|
+
<span class="cline-any cline-no"> </span>
|
|
509
|
+
<span class="cline-any cline-no"> </span>
|
|
510
510
|
<span class="cline-any cline-neutral"> </span>
|
|
511
|
-
<span class="cline-any cline-
|
|
511
|
+
<span class="cline-any cline-no"> </span>
|
|
512
512
|
<span class="cline-any cline-neutral"> </span>
|
|
513
|
-
<span class="cline-any cline-
|
|
514
|
-
<span class="cline-any cline-
|
|
513
|
+
<span class="cline-any cline-no"> </span>
|
|
514
|
+
<span class="cline-any cline-no"> </span>
|
|
515
515
|
<span class="cline-any cline-neutral"> </span>
|
|
516
516
|
<span class="cline-any cline-neutral"> </span>
|
|
517
517
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -525,69 +525,69 @@
|
|
|
525
525
|
<span class="cline-any cline-neutral"> </span>
|
|
526
526
|
<span class="cline-any cline-neutral"> </span>
|
|
527
527
|
<span class="cline-any cline-neutral"> </span>
|
|
528
|
-
<span class="cline-any cline-
|
|
529
|
-
<span class="cline-any cline-
|
|
528
|
+
<span class="cline-any cline-no"> </span>
|
|
529
|
+
<span class="cline-any cline-no"> </span>
|
|
530
530
|
<span class="cline-any cline-neutral"> </span>
|
|
531
531
|
<span class="cline-any cline-neutral"> </span>
|
|
532
532
|
<span class="cline-any cline-neutral"> </span>
|
|
533
533
|
<span class="cline-any cline-neutral"> </span>
|
|
534
|
-
<span class="cline-any cline-
|
|
534
|
+
<span class="cline-any cline-no"> </span>
|
|
535
535
|
<span class="cline-any cline-no"> </span>
|
|
536
536
|
<span class="cline-any cline-neutral"> </span>
|
|
537
537
|
<span class="cline-any cline-neutral"> </span>
|
|
538
538
|
<span class="cline-any cline-neutral"> </span>
|
|
539
|
-
<span class="cline-any cline-
|
|
539
|
+
<span class="cline-any cline-no"> </span>
|
|
540
540
|
<span class="cline-any cline-no"> </span>
|
|
541
541
|
<span class="cline-any cline-neutral"> </span>
|
|
542
542
|
<span class="cline-any cline-neutral"> </span>
|
|
543
|
-
<span class="cline-any cline-
|
|
544
|
-
<span class="cline-any cline-
|
|
543
|
+
<span class="cline-any cline-no"> </span>
|
|
544
|
+
<span class="cline-any cline-no"> </span>
|
|
545
545
|
<span class="cline-any cline-neutral"> </span>
|
|
546
|
-
<span class="cline-any cline-
|
|
546
|
+
<span class="cline-any cline-no"> </span>
|
|
547
547
|
<span class="cline-any cline-neutral"> </span>
|
|
548
548
|
<span class="cline-any cline-neutral"> </span>
|
|
549
549
|
<span class="cline-any cline-neutral"> </span>
|
|
550
550
|
<span class="cline-any cline-neutral"> </span>
|
|
551
551
|
<span class="cline-any cline-neutral"> </span>
|
|
552
|
-
<span class="cline-any cline-
|
|
552
|
+
<span class="cline-any cline-no"> </span>
|
|
553
553
|
<span class="cline-any cline-no"> </span>
|
|
554
554
|
<span class="cline-any cline-neutral"> </span>
|
|
555
555
|
<span class="cline-any cline-neutral"> </span>
|
|
556
|
-
<span class="cline-any cline-
|
|
557
|
-
<span class="cline-any cline-
|
|
556
|
+
<span class="cline-any cline-no"> </span>
|
|
557
|
+
<span class="cline-any cline-no"> </span>
|
|
558
558
|
<span class="cline-any cline-neutral"> </span>
|
|
559
|
-
<span class="cline-any cline-
|
|
559
|
+
<span class="cline-any cline-no"> </span>
|
|
560
560
|
<span class="cline-any cline-neutral"> </span>
|
|
561
561
|
<span class="cline-any cline-neutral"> </span>
|
|
562
562
|
<span class="cline-any cline-neutral"> </span>
|
|
563
563
|
<span class="cline-any cline-neutral"> </span>
|
|
564
|
-
<span class="cline-any cline-
|
|
564
|
+
<span class="cline-any cline-no"> </span>
|
|
565
565
|
<span class="cline-any cline-neutral"> </span>
|
|
566
|
-
<span class="cline-any cline-
|
|
566
|
+
<span class="cline-any cline-no"> </span>
|
|
567
567
|
<span class="cline-any cline-neutral"> </span>
|
|
568
568
|
<span class="cline-any cline-neutral"> </span>
|
|
569
|
-
<span class="cline-any cline-
|
|
570
|
-
<span class="cline-any cline-
|
|
569
|
+
<span class="cline-any cline-no"> </span>
|
|
570
|
+
<span class="cline-any cline-no"> </span>
|
|
571
571
|
<span class="cline-any cline-no"> </span>
|
|
572
572
|
<span class="cline-any cline-neutral"> </span>
|
|
573
|
-
<span class="cline-any cline-
|
|
574
|
-
<span class="cline-any cline-
|
|
573
|
+
<span class="cline-any cline-no"> </span>
|
|
574
|
+
<span class="cline-any cline-no"> </span>
|
|
575
575
|
<span class="cline-any cline-neutral"> </span>
|
|
576
576
|
<span class="cline-any cline-neutral"> </span>
|
|
577
577
|
<span class="cline-any cline-neutral"> </span>
|
|
578
578
|
<span class="cline-any cline-neutral"> </span>
|
|
579
|
-
<span class="cline-any cline-
|
|
579
|
+
<span class="cline-any cline-no"> </span>
|
|
580
580
|
<span class="cline-any cline-neutral"> </span>
|
|
581
581
|
<span class="cline-any cline-neutral"> </span>
|
|
582
582
|
<span class="cline-any cline-neutral"> </span>
|
|
583
|
-
<span class="cline-any cline-
|
|
584
|
-
<span class="cline-any cline-
|
|
585
|
-
<span class="cline-any cline-
|
|
583
|
+
<span class="cline-any cline-no"> </span>
|
|
584
|
+
<span class="cline-any cline-no"> </span>
|
|
585
|
+
<span class="cline-any cline-no"> </span>
|
|
586
586
|
<span class="cline-any cline-neutral"> </span>
|
|
587
|
-
<span class="cline-any cline-
|
|
588
|
-
<span class="cline-any cline-
|
|
589
|
-
<span class="cline-any cline-
|
|
590
|
-
<span class="cline-any cline-
|
|
587
|
+
<span class="cline-any cline-no"> </span>
|
|
588
|
+
<span class="cline-any cline-no"> </span>
|
|
589
|
+
<span class="cline-any cline-no"> </span>
|
|
590
|
+
<span class="cline-any cline-no"> </span>
|
|
591
591
|
<span class="cline-any cline-neutral"> </span>
|
|
592
592
|
<span class="cline-any cline-neutral"> </span>
|
|
593
593
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -596,8 +596,8 @@
|
|
|
596
596
|
<span class="cline-any cline-neutral"> </span>
|
|
597
597
|
<span class="cline-any cline-neutral"> </span>
|
|
598
598
|
<span class="cline-any cline-neutral"> </span>
|
|
599
|
-
<span class="cline-any cline-
|
|
600
|
-
<span class="cline-any cline-
|
|
599
|
+
<span class="cline-any cline-no"> </span>
|
|
600
|
+
<span class="cline-any cline-no"> </span>
|
|
601
601
|
<span class="cline-any cline-neutral"> </span>
|
|
602
602
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import _ from 'lodash'
|
|
603
603
|
import makeDebug from 'debug'
|
|
@@ -606,134 +606,134 @@ import { getItems, replaceItems } from 'feathers-hooks-common'
|
|
|
606
606
|
import { Forbidden, BadRequest } from '@feathersjs/errors'
|
|
607
607
|
import { Roles, RoleNames } from '../../common/permissions'
|
|
608
608
|
|
|
609
|
-
const verifyHooks = require('feathers-authentication-management').hooks
|
|
609
|
+
const verifyHooks = <span class="cstat-no" title="statement not covered" >require('feathers-authentication-management').hooks</span>
|
|
610
610
|
|
|
611
|
-
const debug = makeDebug('kdk:core:users:hooks')
|
|
611
|
+
const debug = <span class="cstat-no" title="statement not covered" >makeDebug('kdk:core:users:hooks')</span>
|
|
612
612
|
|
|
613
|
-
export function enforcePasswordPolicy (options = <span class="branch-0 cbranch-no" title="branch not covered" >{})
|
|
614
|
-
return
|
|
615
|
-
|
|
616
|
-
<span class="cstat-no" title="statement not covered" > throw
|
|
613
|
+
export function <span class="fstat-no" title="function not covered" >enforcePasswordPolicy </span>(options = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> {
|
|
614
|
+
<span class="cstat-no" title="statement not covered" > return <span class="fstat-no" title="function not covered" >as</span>ync function (hook) {</span>
|
|
615
|
+
<span class="cstat-no" title="statement not covered" > if (hook.type !== 'before') {</span>
|
|
616
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('The \'enforePasswordPolicy\' hook should only be used as a \'before\' hook.')</span>
|
|
617
617
|
}
|
|
618
618
|
// By pass check ?
|
|
619
|
-
|
|
620
|
-
const app = hook.app
|
|
621
|
-
const item = getItems(hook)
|
|
622
|
-
const user = options.userAsItem ? item : hook.params.user
|
|
619
|
+
<span class="cstat-no" title="statement not covered" > if (hook.params.force) <span class="cstat-no" title="statement not covered" >return hook</span></span>
|
|
620
|
+
const app = <span class="cstat-no" title="statement not covered" >hook.app</span>
|
|
621
|
+
const item = <span class="cstat-no" title="statement not covered" >getItems(hook)</span>
|
|
622
|
+
const user = <span class="cstat-no" title="statement not covered" >options.userAsItem ? item : hook.params.user</span>
|
|
623
623
|
// Get both password(s) since some rules target one and some the other one(s)
|
|
624
|
-
const clearPassword = _.get(item, options.passwordField || 'clearPassword')
|
|
625
|
-
const hashedPasswords = _.get(user, options.previousPasswordsField || 'previousPasswords', [])
|
|
626
|
-
if (clearPassword && hashedPasswords && app.getPasswordPolicy) {
|
|
627
|
-
debug('Enforcing password policy on user', user)
|
|
628
|
-
const validator = app.getPasswordPolicy()
|
|
624
|
+
const clearPassword = <span class="cstat-no" title="statement not covered" >_.get(item, options.passwordField || 'clearPassword')</span>
|
|
625
|
+
const hashedPasswords = <span class="cstat-no" title="statement not covered" >_.get(user, options.previousPasswordsField || 'previousPasswords', [])</span>
|
|
626
|
+
<span class="cstat-no" title="statement not covered" > if (clearPassword && hashedPasswords && app.getPasswordPolicy) {</span>
|
|
627
|
+
<span class="cstat-no" title="statement not covered" > debug('Enforcing password policy on user', user)</span>
|
|
628
|
+
const validator = <span class="cstat-no" title="statement not covered" >app.getPasswordPolicy()</span>
|
|
629
629
|
// First check the clear password
|
|
630
|
-
const result = validator.validate(clearPassword, { list: true })
|
|
630
|
+
const result = <span class="cstat-no" title="statement not covered" >validator.validate(clearPassword, { list: true })</span>
|
|
631
631
|
// Then check for the last used passwords using password policy verifier
|
|
632
|
-
for (let i = 0
|
|
633
|
-
try {
|
|
634
|
-
await validator.comparePassword({ password: hashedPasswords[i] }, clearPassword)
|
|
632
|
+
<span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i < hashedPasswords.length; i++) {</span>
|
|
633
|
+
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
634
|
+
<span class="cstat-no" title="statement not covered" > await validator.comparePassword({ password: hashedPasswords[i] }, clearPassword)</span>
|
|
635
635
|
// If we have found a similar password stop
|
|
636
|
-
result.push('previous')
|
|
637
|
-
break
|
|
636
|
+
<span class="cstat-no" title="statement not covered" > result.push('previous')</span>
|
|
637
|
+
<span class="cstat-no" title="statement not covered" > break</span>
|
|
638
638
|
} catch (error) {
|
|
639
639
|
// Check next one
|
|
640
640
|
}
|
|
641
641
|
}
|
|
642
642
|
|
|
643
|
-
if (!_.isEmpty(result)) {
|
|
644
|
-
throw new BadRequest('The provided password does not comply to the password policy', {
|
|
643
|
+
<span class="cstat-no" title="statement not covered" > if (!_.isEmpty(result)) {</span>
|
|
644
|
+
<span class="cstat-no" title="statement not covered" > throw new BadRequest('The provided password does not comply to the password policy', {</span>
|
|
645
645
|
translation: {
|
|
646
646
|
key: 'WEAK_PASSWORD',
|
|
647
|
-
keys: result.map(
|
|
647
|
+
keys: result.map(<span class="fstat-no" title="function not covered" >ru</span>le => <span class="cstat-no" title="statement not covered" >'WEAK_PASSWORD_' + rule.toUpperCase())</span>,
|
|
648
648
|
params: Object.assign({ failedRules: result }, _.omit(validator.options, ['prohibited']))
|
|
649
649
|
}
|
|
650
650
|
})
|
|
651
651
|
}
|
|
652
652
|
}
|
|
653
|
-
return hook
|
|
653
|
+
<span class="cstat-no" title="statement not covered" > return hook</span>
|
|
654
654
|
}
|
|
655
655
|
}
|
|
656
656
|
|
|
657
|
-
export function storePreviousPassword (options = <span class="branch-0 cbranch-no" title="branch not covered" >{})
|
|
658
|
-
return function (hook) {
|
|
659
|
-
|
|
660
|
-
<span class="cstat-no" title="statement not covered" > throw
|
|
657
|
+
export function <span class="fstat-no" title="function not covered" >storePreviousPassword </span>(options = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> {
|
|
658
|
+
<span class="cstat-no" title="statement not covered" > return <span class="fstat-no" title="function not covered" >fu</span>nction (hook) {</span>
|
|
659
|
+
<span class="cstat-no" title="statement not covered" > if (hook.type !== 'before') {</span>
|
|
660
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('The \'storePreviousPassword\' hook should only be used as a \'before\' hook.')</span>
|
|
661
661
|
}
|
|
662
|
-
const app = hook.app
|
|
663
|
-
const data = getItems(hook)
|
|
664
|
-
|
|
665
|
-
const validator = app.getPasswordPolicy()
|
|
662
|
+
const app = <span class="cstat-no" title="statement not covered" >hook.app</span>
|
|
663
|
+
const data = <span class="cstat-no" title="statement not covered" >getItems(hook)</span>
|
|
664
|
+
<span class="cstat-no" title="statement not covered" > if (app.getPasswordPolicy && hook.params.previousItem) {</span>
|
|
665
|
+
const validator = <span class="cstat-no" title="statement not covered" >app.getPasswordPolicy()</span>
|
|
666
666
|
// Based on previous password value
|
|
667
|
-
const user = hook.params.previousItem
|
|
668
|
-
const passwordField = options.passwordField || 'password'
|
|
669
|
-
const password = _.get(user, passwordField)
|
|
670
|
-
|
|
671
|
-
const previousPasswordsField = options.previousPasswordsField || 'previousPasswords'
|
|
672
|
-
const previousPasswords = _.get(user, previousPasswordsField, [])
|
|
673
|
-
debug(`Moving previous password from field ${passwordField} in field ${previousPasswords} on user`, user)
|
|
674
|
-
previousPasswords.push(password)
|
|
667
|
+
const user = <span class="cstat-no" title="statement not covered" >hook.params.previousItem</span>
|
|
668
|
+
const passwordField = <span class="cstat-no" title="statement not covered" >options.passwordField || 'password'</span>
|
|
669
|
+
const password = <span class="cstat-no" title="statement not covered" >_.get(user, passwordField)</span>
|
|
670
|
+
<span class="cstat-no" title="statement not covered" > if (password) {</span>
|
|
671
|
+
const previousPasswordsField = <span class="cstat-no" title="statement not covered" >options.previousPasswordsField || 'previousPasswords'</span>
|
|
672
|
+
const previousPasswords = <span class="cstat-no" title="statement not covered" >_.get(user, previousPasswordsField, [])</span>
|
|
673
|
+
<span class="cstat-no" title="statement not covered" > debug(`Moving previous password from field ${passwordField} in field ${previousPasswords} on user`, user)</span>
|
|
674
|
+
<span class="cstat-no" title="statement not covered" > previousPasswords.push(password)</span>
|
|
675
675
|
// Pop oldest password when required
|
|
676
|
-
const max = _.get(validator, 'options.history', 5)
|
|
677
|
-
|
|
678
|
-
Object.assign(data, { [previousPasswordsField]: previousPasswords })
|
|
679
|
-
replaceItems(hook, data)
|
|
676
|
+
const max = <span class="cstat-no" title="statement not covered" >_.get(validator, 'options.history', 5)</span>
|
|
677
|
+
<span class="cstat-no" title="statement not covered" > if (previousPasswords.length > max) <span class="cstat-no" title="statement not covered" >previousPasswords.shift()</span></span>
|
|
678
|
+
<span class="cstat-no" title="statement not covered" > Object.assign(data, { [previousPasswordsField]: previousPasswords })</span>
|
|
679
|
+
<span class="cstat-no" title="statement not covered" > replaceItems(hook, data)</span>
|
|
680
680
|
}
|
|
681
681
|
}
|
|
682
|
-
return hook
|
|
682
|
+
<span class="cstat-no" title="statement not covered" > return hook</span>
|
|
683
683
|
}
|
|
684
684
|
}
|
|
685
685
|
|
|
686
|
-
export function generatePassword (options = {}) {
|
|
687
|
-
return function (hook) {
|
|
688
|
-
|
|
689
|
-
<span class="cstat-no" title="statement not covered" > throw
|
|
686
|
+
export function <span class="fstat-no" title="function not covered" >generatePassword </span>(options = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> {
|
|
687
|
+
<span class="cstat-no" title="statement not covered" > return <span class="fstat-no" title="function not covered" >fu</span>nction (hook) {</span>
|
|
688
|
+
<span class="cstat-no" title="statement not covered" > if (hook.type !== 'before') {</span>
|
|
689
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('The \'generatePassword\' hook should only be used as a \'before\' hook.')</span>
|
|
690
690
|
}
|
|
691
|
-
const app = hook.app
|
|
692
|
-
const data = hook.data
|
|
693
|
-
const passwordField = options.passwordField || 'password'
|
|
694
|
-
const suggestedPasswordField = options.suggestedPasswordField || 'password'
|
|
691
|
+
const app = <span class="cstat-no" title="statement not covered" >hook.app</span>
|
|
692
|
+
const data = <span class="cstat-no" title="statement not covered" >hook.data</span>
|
|
693
|
+
const passwordField = <span class="cstat-no" title="statement not covered" >options.passwordField || 'password'</span>
|
|
694
|
+
const suggestedPasswordField = <span class="cstat-no" title="statement not covered" >options.suggestedPasswordField || 'password'</span>
|
|
695
695
|
// If a password is already provided and compliant with rules we will use it
|
|
696
|
-
|
|
697
|
-
<span class="cstat-no" title="statement not covered" > _.
|
|
696
|
+
<span class="cstat-no" title="statement not covered" > if (_.get(data, suggestedPasswordField)) {</span>
|
|
697
|
+
<span class="cstat-no" title="statement not covered" > _.set(data, passwordField, _.get(data, suggestedPasswordField))</span>
|
|
698
698
|
// Avoid leaking clear password
|
|
699
|
-
<span class="cstat-no" title="statement not covered" > _.
|
|
699
|
+
<span class="cstat-no" title="statement not covered" > _.unset(data, suggestedPasswordField)</span>
|
|
700
700
|
}
|
|
701
701
|
// Generated password rule
|
|
702
|
-
const passwordRule = new RegExp('[\\w\\d\\?\\-]')
|
|
702
|
+
const passwordRule = <span class="cstat-no" title="statement not covered" >new RegExp('[\\w\\d\\?\\-]')</span>
|
|
703
703
|
// If we have a password policy ensure we match it
|
|
704
|
-
|
|
705
|
-
const validator = app.getPasswordPolicy()
|
|
704
|
+
<span class="cstat-no" title="statement not covered" > if (app.getPasswordPolicy) {</span>
|
|
705
|
+
const validator = <span class="cstat-no" title="statement not covered" >app.getPasswordPolicy()</span>
|
|
706
706
|
// Check if a compliant password has been provided, otherwise generate it
|
|
707
|
-
|
|
708
|
-
do {
|
|
709
|
-
_.set(data, passwordField, generateRandomPassword(validator.options.minLength ||
|
|
707
|
+
<span class="cstat-no" title="statement not covered" > if (!_.get(data, passwordField) || !validator.validate(_.get(data, passwordField))) {</span>
|
|
708
|
+
<span class="cstat-no" title="statement not covered" > do {</span>
|
|
709
|
+
<span class="cstat-no" title="statement not covered" > _.set(data, passwordField, generateRandomPassword(validator.options.minLength || 12, false, passwordRule))</span>
|
|
710
710
|
} while (!validator.validate(_.get(data, passwordField)))
|
|
711
711
|
}
|
|
712
712
|
} else {
|
|
713
713
|
// Check if a password has been provided, otherwise generate it
|
|
714
714
|
<span class="cstat-no" title="statement not covered" > if (!_.get(data, passwordField)) {</span>
|
|
715
|
-
<span class="cstat-no" title="statement not covered" > _.
|
|
715
|
+
<span class="cstat-no" title="statement not covered" > _.set(data, passwordField, generateRandomPassword(12, false, passwordRule))</span>
|
|
716
716
|
}
|
|
717
717
|
}
|
|
718
|
-
return hook
|
|
718
|
+
<span class="cstat-no" title="statement not covered" > return hook</span>
|
|
719
719
|
}
|
|
720
720
|
}
|
|
721
721
|
|
|
722
|
-
export function preventRemoveUser (hook) {
|
|
723
|
-
|
|
724
|
-
<span class="cstat-no" title="statement not covered" > throw
|
|
722
|
+
export function <span class="fstat-no" title="function not covered" >preventRemoveUser </span>(hook) {
|
|
723
|
+
<span class="cstat-no" title="statement not covered" > if (hook.type !== 'before') {</span>
|
|
724
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('The \'preventRemoveUser\' hook should only be used as a \'before\' hook.')</span>
|
|
725
725
|
}
|
|
726
726
|
|
|
727
727
|
// By pass check ?
|
|
728
|
-
|
|
729
|
-
const user = hook.params.user
|
|
728
|
+
<span class="cstat-no" title="statement not covered" > if (hook.params.force) <span class="cstat-no" title="statement not covered" >return hook</span></span>
|
|
729
|
+
const user = <span class="cstat-no" title="statement not covered" >hook.params.user</span>
|
|
730
730
|
// Check if the target is the current user
|
|
731
|
-
|
|
731
|
+
<span class="cstat-no" title="statement not covered" > if ((user._id.toString() === hook.id.toString()) && user.organisations) {</span>
|
|
732
732
|
// We must ensure the user is no more a owner of an organisation
|
|
733
|
-
const owningOrganisations = _.filter(user.organisations, { permissions: RoleNames[Roles.owner] })
|
|
734
|
-
if (!_.isEmpty(owningOrganisations)) {
|
|
735
|
-
debug('Cannot remove the user: ', user)
|
|
736
|
-
throw new Forbidden('You are not allowed to delete the user ' + user.name, {
|
|
733
|
+
const owningOrganisations = <span class="cstat-no" title="statement not covered" >_.filter(user.organisations, { permissions: RoleNames[Roles.owner] })</span>
|
|
734
|
+
<span class="cstat-no" title="statement not covered" > if (!_.isEmpty(owningOrganisations)) {</span>
|
|
735
|
+
<span class="cstat-no" title="statement not covered" > debug('Cannot remove the user: ', user)</span>
|
|
736
|
+
<span class="cstat-no" title="statement not covered" > throw new Forbidden('You are not allowed to delete the user ' + user.name, {</span>
|
|
737
737
|
translation: {
|
|
738
738
|
key: 'CANNOT_REMOVE_USER',
|
|
739
739
|
params: { user: user.name }
|
|
@@ -741,17 +741,17 @@ export function preventRemoveUser (hook) {
|
|
|
741
741
|
})
|
|
742
742
|
}
|
|
743
743
|
}
|
|
744
|
-
return hook
|
|
744
|
+
<span class="cstat-no" title="statement not covered" > return hook</span>
|
|
745
745
|
}
|
|
746
746
|
|
|
747
|
-
export function joinOrganisation (hook) {
|
|
748
|
-
const app = hook.app
|
|
749
|
-
const subject = getItems(hook)
|
|
750
|
-
const authorisationService = app.getService('authorisations')
|
|
751
|
-
const usersService = app.getService('users')
|
|
747
|
+
export function <span class="fstat-no" title="function not covered" >joinOrganisation </span>(hook) {
|
|
748
|
+
const app = <span class="cstat-no" title="statement not covered" >hook.app</span>
|
|
749
|
+
const subject = <span class="cstat-no" title="statement not covered" >getItems(hook)</span>
|
|
750
|
+
const authorisationService = <span class="cstat-no" title="statement not covered" >app.getService('authorisations')</span>
|
|
751
|
+
const usersService = <span class="cstat-no" title="statement not covered" >app.getService('users')</span>
|
|
752
752
|
|
|
753
753
|
// Set membership for the created user
|
|
754
|
-
return authorisationService.create({
|
|
754
|
+
<span class="cstat-no" title="statement not covered" > return authorisationService.create({</span>
|
|
755
755
|
scope: 'organisations',
|
|
756
756
|
permissions: subject.sponsor.roleGranted, // Member by default
|
|
757
757
|
resource: subject.sponsor.organisationId,
|
|
@@ -760,29 +760,29 @@ export function joinOrganisation (hook) {
|
|
|
760
760
|
subjectsService: usersService,
|
|
761
761
|
subjects: [subject]
|
|
762
762
|
})
|
|
763
|
-
.then(
|
|
764
|
-
debug('Organisation membership set for user ' + subject._id)
|
|
765
|
-
return hook
|
|
763
|
+
.then(<span class="fstat-no" title="function not covered" >au</span>thorisation => {
|
|
764
|
+
<span class="cstat-no" title="statement not covered" > debug('Organisation membership set for user ' + subject._id)</span>
|
|
765
|
+
<span class="cstat-no" title="statement not covered" > return hook</span>
|
|
766
766
|
})
|
|
767
767
|
}
|
|
768
768
|
|
|
769
|
-
export function leaveOrganisations (options = { skipPrivate: true }) {
|
|
770
|
-
return
|
|
771
|
-
|
|
772
|
-
<span class="cstat-no" title="statement not covered" > throw
|
|
769
|
+
export function <span class="fstat-no" title="function not covered" >leaveOrganisations </span>(options = <span class="branch-0 cbranch-no" title="branch not covered" >{ skipPrivate: true })</span> {
|
|
770
|
+
<span class="cstat-no" title="statement not covered" > return <span class="fstat-no" title="function not covered" >as</span>ync function (hook) {</span>
|
|
771
|
+
<span class="cstat-no" title="statement not covered" > if (hook.type !== 'after') {</span>
|
|
772
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('The \'leaveOrganisations\' hook should only be used as a \'after\' hook.')</span>
|
|
773
773
|
}
|
|
774
774
|
|
|
775
|
-
const app = hook.app
|
|
776
|
-
const organisationsService = app.getService('organisations')
|
|
777
|
-
const authorisationService = app.getService('authorisations')
|
|
778
|
-
const usersService = app.getService('users')
|
|
779
|
-
const subject = getItems(hook)
|
|
780
|
-
const organisations = _.get(subject, 'organisations', [])
|
|
775
|
+
const app = <span class="cstat-no" title="statement not covered" >hook.app</span>
|
|
776
|
+
const organisationsService = <span class="cstat-no" title="statement not covered" >app.getService('organisations')</span>
|
|
777
|
+
const authorisationService = <span class="cstat-no" title="statement not covered" >app.getService('authorisations')</span>
|
|
778
|
+
const usersService = <span class="cstat-no" title="statement not covered" >app.getService('users')</span>
|
|
779
|
+
const subject = <span class="cstat-no" title="statement not covered" >getItems(hook)</span>
|
|
780
|
+
const organisations = <span class="cstat-no" title="statement not covered" >_.get(subject, 'organisations', [])</span>
|
|
781
781
|
|
|
782
|
-
await Promise.all(organisations.map(
|
|
782
|
+
<span class="cstat-no" title="statement not covered" > await Promise.all(organisations.map(<span class="fstat-no" title="function not covered" >or</span>ganisation => {</span>
|
|
783
783
|
// Unset membership on org except private org if required
|
|
784
|
-
|
|
785
|
-
return authorisationService.remove(organisation._id.toString(), {
|
|
784
|
+
<span class="cstat-no" title="statement not covered" > if (options.skipPrivate && organisation._id.toString() === subject._id.toString()) <span class="cstat-no" title="statement not covered" >return</span></span>
|
|
785
|
+
<span class="cstat-no" title="statement not covered" > return authorisationService.remove(organisation._id.toString(), {</span>
|
|
786
786
|
query: {
|
|
787
787
|
scope: 'organisations'
|
|
788
788
|
},
|
|
@@ -796,69 +796,69 @@ export function leaveOrganisations (options = { skipPrivate: true }) {
|
|
|
796
796
|
})
|
|
797
797
|
}))
|
|
798
798
|
|
|
799
|
-
debug('Membership unset for all organisations on user ' + subject._id)
|
|
800
|
-
return hook
|
|
799
|
+
<span class="cstat-no" title="statement not covered" > debug('Membership unset for all organisations on user ' + subject._id)</span>
|
|
800
|
+
<span class="cstat-no" title="statement not covered" > return hook</span>
|
|
801
801
|
}
|
|
802
802
|
}
|
|
803
803
|
|
|
804
|
-
export function sendVerificationEmail (hook) {
|
|
805
|
-
|
|
806
|
-
<span class="cstat-no" title="statement not covered" > throw
|
|
804
|
+
export function <span class="fstat-no" title="function not covered" >sendVerificationEmail </span>(hook) {
|
|
805
|
+
<span class="cstat-no" title="statement not covered" > if (hook.type !== 'after') {</span>
|
|
806
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('The \'sendVerificationEmail\' hook should only be used as a \'after\' hook.')</span>
|
|
807
807
|
}
|
|
808
808
|
|
|
809
809
|
// Check for by-passing OAuth2 providers
|
|
810
|
-
for (const provider of hook.app.authenticationProviders) {
|
|
811
|
-
<span class="cstat-no" title="statement not covered" > if (hook.result[provider + 'Id']) <span class="cstat-no" title="statement not covered" >return
|
|
810
|
+
<span class="cstat-no" title="statement not covered" > for (const provider of hook.app.authenticationProviders) {</span>
|
|
811
|
+
<span class="cstat-no" title="statement not covered" > if (hook.result[provider + 'Id']) <span class="cstat-no" title="statement not covered" >return Promise.resolve(hook)</span></span>
|
|
812
812
|
}
|
|
813
813
|
|
|
814
|
-
const accountService = hook.app.getService('account')
|
|
815
|
-
return accountService.options.notifier('resendVerifySignup', hook.result)
|
|
816
|
-
.then(
|
|
817
|
-
return hook
|
|
814
|
+
const accountService = <span class="cstat-no" title="statement not covered" >hook.app.getService('account')</span>
|
|
815
|
+
<span class="cstat-no" title="statement not covered" > return accountService.options.notifier('resendVerifySignup', hook.result)</span>
|
|
816
|
+
.then(<span class="fstat-no" title="function not covered" >re</span>sult => {
|
|
817
|
+
<span class="cstat-no" title="statement not covered" > return hook</span>
|
|
818
818
|
})
|
|
819
819
|
}
|
|
820
820
|
|
|
821
|
-
export function sendInvitationEmail (hook) {
|
|
821
|
+
export function <span class="fstat-no" title="function not covered" >sendInvitationEmail </span>(hook) {
|
|
822
822
|
// Before because we need to send the clear password by email
|
|
823
|
-
|
|
824
|
-
<span class="cstat-no" title="statement not covered" > throw
|
|
823
|
+
<span class="cstat-no" title="statement not covered" > if (hook.type !== 'before') {</span>
|
|
824
|
+
<span class="cstat-no" title="statement not covered" > throw new Error('The \'sendInvitationEmail\' hook should only be used as a \'before\' hook.')</span>
|
|
825
825
|
}
|
|
826
826
|
|
|
827
|
-
const accountService = hook.app.getService('account')
|
|
828
|
-
return accountService.options.notifier('sendInvitation', hook.data)
|
|
829
|
-
.then(
|
|
830
|
-
return hook
|
|
827
|
+
const accountService = <span class="cstat-no" title="statement not covered" >hook.app.getService('account')</span>
|
|
828
|
+
<span class="cstat-no" title="statement not covered" > return accountService.options.notifier('sendInvitation', hook.data)</span>
|
|
829
|
+
.then(<span class="fstat-no" title="function not covered" >re</span>sult => {
|
|
830
|
+
<span class="cstat-no" title="statement not covered" > return hook</span>
|
|
831
831
|
})
|
|
832
832
|
}
|
|
833
833
|
|
|
834
|
-
export function addVerification (hook) {
|
|
835
|
-
const accountService = hook.app.getService('account')
|
|
834
|
+
export function <span class="fstat-no" title="function not covered" >addVerification </span>(hook) {
|
|
835
|
+
const accountService = <span class="cstat-no" title="statement not covered" >hook.app.getService('account')</span>
|
|
836
836
|
|
|
837
|
-
return verifyHooks.addVerification(accountService.getPath(true))(hook)
|
|
838
|
-
.then(
|
|
837
|
+
<span class="cstat-no" title="statement not covered" > return verifyHooks.addVerification(accountService.getPath(true))(hook)</span>
|
|
838
|
+
.then(<span class="fstat-no" title="function not covered" >ho</span>ok => {
|
|
839
839
|
// Check for OAuth2 providers
|
|
840
|
-
let isVerified = false
|
|
841
|
-
for (const provider of hook.app.authenticationProviders) {
|
|
842
|
-
<span class="cstat-no" title="statement not covered" > if (hook.data[provider + 'Id']) <span class="cstat-no" title="statement not covered" >isVerified =
|
|
840
|
+
let isVerified = <span class="cstat-no" title="statement not covered" >false</span>
|
|
841
|
+
<span class="cstat-no" title="statement not covered" > for (const provider of hook.app.authenticationProviders) {</span>
|
|
842
|
+
<span class="cstat-no" title="statement not covered" > if (hook.data[provider + 'Id']) <span class="cstat-no" title="statement not covered" >isVerified = true</span></span>
|
|
843
843
|
}
|
|
844
|
-
hook.data.isVerified = isVerified
|
|
845
|
-
return hook
|
|
844
|
+
<span class="cstat-no" title="statement not covered" > hook.data.isVerified = isVerified</span>
|
|
845
|
+
<span class="cstat-no" title="statement not covered" > return hook</span>
|
|
846
846
|
})
|
|
847
847
|
}
|
|
848
848
|
|
|
849
|
-
export function removeVerification (hook) {
|
|
850
|
-
return verifyHooks.removeVerification()(hook)
|
|
849
|
+
export function <span class="fstat-no" title="function not covered" >removeVerification </span>(hook) {
|
|
850
|
+
<span class="cstat-no" title="statement not covered" > return verifyHooks.removeVerification()(hook)</span>
|
|
851
851
|
}
|
|
852
852
|
|
|
853
|
-
export function unregisterDevices (hook) {
|
|
854
|
-
debug('Unregistering devices for user ', hook.params.user)
|
|
855
|
-
const pusherService = hook.app.getService('pusher')
|
|
856
|
-
const user = hook.params.user
|
|
853
|
+
export function <span class="fstat-no" title="function not covered" >unregisterDevices </span>(hook) {
|
|
854
|
+
<span class="cstat-no" title="statement not covered" > debug('Unregistering devices for user ', hook.params.user)</span>
|
|
855
|
+
const pusherService = <span class="cstat-no" title="statement not covered" >hook.app.getService('pusher')</span>
|
|
856
|
+
const user = <span class="cstat-no" title="statement not covered" >hook.params.user</span>
|
|
857
857
|
// Process with each registered device
|
|
858
|
-
const unregisterPromises = []
|
|
859
|
-
if (user.devices) {
|
|
860
|
-
user.devices.forEach(
|
|
861
|
-
unregisterPromises.push(
|
|
858
|
+
const unregisterPromises = <span class="cstat-no" title="statement not covered" >[]</span>
|
|
859
|
+
<span class="cstat-no" title="statement not covered" > if (user.devices) {</span>
|
|
860
|
+
<span class="cstat-no" title="statement not covered" > user.devices.forEach(<span class="fstat-no" title="function not covered" >de</span>vice => {</span>
|
|
861
|
+
<span class="cstat-no" title="statement not covered" > unregisterPromises.push(</span>
|
|
862
862
|
pusherService.remove(device.registrationId,
|
|
863
863
|
{
|
|
864
864
|
query: { action: 'device' },
|
|
@@ -867,8 +867,8 @@ export function unregisterDevices (hook) {
|
|
|
867
867
|
)
|
|
868
868
|
})
|
|
869
869
|
}
|
|
870
|
-
return Promise.all(unregisterPromises)
|
|
871
|
-
.then(
|
|
870
|
+
<span class="cstat-no" title="statement not covered" > return Promise.all(unregisterPromises)</span>
|
|
871
|
+
.then(<span class="fstat-no" title="function not covered" >re</span>sults => <span class="cstat-no" title="statement not covered" >hook)</span>
|
|
872
872
|
}
|
|
873
873
|
</pre></td></tr></table></pre>
|
|
874
874
|
|
|
@@ -877,7 +877,7 @@ export function unregisterDevices (hook) {
|
|
|
877
877
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
878
878
|
Code coverage generated by
|
|
879
879
|
<a href="https://istanbul.js.org/" target="_blank">istanbul</a>
|
|
880
|
-
at
|
|
880
|
+
at Thu Feb 17 2022 13:49:01 GMT+0100 (GMT+01:00)
|
|
881
881
|
</div>
|
|
882
882
|
</div>
|
|
883
883
|
<script src="../../../prettify.js"></script>
|