@kalisio/kdk 2.6.4 → 2.7.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/core/api/application.js +2 -4
- package/core/api/authentication.js +2 -3
- package/core/api/db.js +10 -2
- package/core/api/hooks/hooks.authorisations.js +4 -2
- package/core/api/hooks/hooks.push.js +6 -2
- package/core/api/hooks/hooks.query.js +29 -12
- package/core/api/hooks/hooks.users.js +30 -17
- package/core/api/models/configurations.model.mongodb.js +4 -0
- package/core/api/services/authorisations/authorisations.service.js +1 -1
- package/core/api/services/configurations/configurations.hooks.js +33 -0
- package/core/api/services/index.js +41 -7
- package/core/api/services/messages/messages.hooks.js +9 -3
- package/core/client/api.js +14 -1
- package/core/client/capabilities.js +1 -6
- package/core/client/components/KAvatar.vue +24 -20
- package/core/client/components/account/KProfile.vue +10 -71
- package/core/client/components/account/index.js +0 -2
- package/core/client/components/app/KSettings.vue +1 -0
- package/core/client/components/collection/KBoard.vue +4 -3
- package/core/client/components/collection/KCardSection.vue +1 -0
- package/core/client/components/collection/KGrid.vue +2 -0
- package/core/client/components/collection/KTable.vue +5 -1
- package/core/client/components/collection/KTimeLine.vue +9 -1
- package/core/client/components/collection/index.js +0 -2
- package/core/client/components/form/KChipsField.vue +2 -1
- package/core/client/components/form/KEmailField.vue +1 -0
- package/core/client/components/form/KFileField.vue +22 -1
- package/core/client/components/form/KForm.vue +2 -0
- package/core/client/components/form/KItemField.vue +1 -0
- package/core/client/components/form/KNumberField.vue +1 -0
- package/core/client/components/form/KPasswordField.vue +1 -0
- package/core/client/components/form/KPhoneField.vue +1 -0
- package/core/client/components/form/KPropertyItemField.vue +1 -0
- package/core/client/components/form/KResolutionField.vue +1 -0
- package/core/client/components/form/KSelectField.vue +31 -0
- package/core/client/components/form/KTagField.vue +1 -0
- package/core/client/components/form/KTextField.vue +1 -0
- package/core/client/components/form/KTokenField.vue +1 -0
- package/core/client/components/form/KUnitField.vue +1 -0
- package/core/client/components/form/KUrlField.vue +1 -0
- package/core/client/components/graphics/KIcon.vue +3 -4
- package/core/client/components/layout/KPage.vue +1 -0
- package/core/client/components/layout/KWindow.vue +6 -3
- package/core/client/components/messages/KMessageComposer.vue +2 -1
- package/core/client/components/messages/KMessagesTimeLine.vue +1 -1
- package/core/client/components/time/KDate.vue +1 -2
- package/core/client/components/time/KDateTime.vue +11 -11
- package/core/client/components/time/KTime.vue +1 -1
- package/core/client/composables/collection.js +33 -8
- package/core/client/composables/errors.js +1 -1
- package/core/client/composables/layout.js +9 -9
- package/core/client/configurations.js +50 -0
- package/core/client/exporter.js +1 -1
- package/core/client/i18n/core_en.json +6 -39
- package/core/client/i18n/core_fr.json +6 -39
- package/core/client/index.js +2 -0
- package/core/client/layout.js +8 -8
- package/core/client/mixins/mixin.base-activity.js +5 -2
- package/core/client/mixins/mixin.base-field.js +3 -3
- package/core/client/search.js +2 -1
- package/core/client/utils/utils.collection.js +8 -8
- package/core/client/utils/utils.items.js +4 -0
- package/core/client/utils/utils.push.js +3 -3
- package/core/client/utils/utils.session.js +7 -5
- package/core/client/utils/utils.shapes.js +38 -7
- package/core/client/utils/utils.time.js +21 -22
- package/core/common/schemas/users.update-profile.json +3 -2
- package/coverage/core/api/application.js.html +392 -398
- package/coverage/core/api/authentication.js.html +352 -187
- package/coverage/core/api/db.js.html +165 -126
- package/coverage/core/api/hooks/hooks.authentication.js.html +22 -196
- package/coverage/core/api/hooks/hooks.authorisations.js.html +383 -662
- package/coverage/core/api/hooks/hooks.logger.js.html +41 -41
- package/coverage/core/api/hooks/hooks.model.js.html +113 -101
- package/coverage/core/api/hooks/hooks.push.js.html +124 -97
- package/coverage/core/api/hooks/hooks.query.js.html +292 -217
- package/coverage/core/api/hooks/hooks.schemas.js.html +123 -123
- package/coverage/core/api/hooks/hooks.service.js.html +1 -1
- package/coverage/core/api/hooks/hooks.storage.js.html +1 -1
- package/coverage/core/api/hooks/{hooks.groups.js.html → hooks.tags.js.html} +100 -76
- package/coverage/core/api/hooks/hooks.users.js.html +255 -447
- package/coverage/core/api/hooks/index.html +107 -122
- package/coverage/core/api/hooks/index.js.html +4 -10
- package/coverage/core/api/index.html +46 -61
- package/coverage/core/api/index.js.html +9 -9
- package/coverage/core/api/marshall.js.html +9 -9
- package/coverage/core/api/models/{organisations.model.mongodb.js.html → configurations.model.mongodb.js.html} +10 -7
- package/coverage/core/api/models/index.html +35 -50
- package/coverage/core/api/models/messages.model.mongodb.js.html +39 -27
- package/coverage/core/api/models/tags.model.mongodb.js.html +26 -32
- package/coverage/core/api/models/users.model.mongodb.js.html +10 -10
- package/coverage/core/api/services/account/account.hooks.js.html +5 -5
- package/coverage/core/api/services/account/account.service.js.html +127 -127
- package/coverage/core/api/services/account/index.html +22 -22
- package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +1 -1
- package/coverage/core/api/services/authorisations/authorisations.service.js.html +213 -222
- package/coverage/core/api/services/authorisations/index.html +21 -21
- package/coverage/core/api/services/{organisations/organisations.hooks.js.html → configurations/configurations.hooks.js.html} +16 -10
- package/coverage/core/api/services/{groups → configurations}/index.html +8 -8
- package/coverage/core/api/services/databases/databases.hooks.js.html +1 -1
- package/coverage/core/api/services/databases/databases.service.js.html +1 -1
- package/coverage/core/api/services/databases/index.html +1 -1
- package/coverage/core/api/services/import-export/import-export.hooks.js.html +76 -76
- package/coverage/core/api/services/import-export/import-export.service.js.html +32 -32
- package/coverage/core/api/services/import-export/index.html +32 -32
- package/coverage/core/api/services/index.html +21 -21
- package/coverage/core/api/services/index.js.html +313 -142
- package/coverage/core/api/services/mailer/index.html +32 -32
- package/coverage/core/api/services/mailer/mailer.hooks.js.html +80 -80
- package/coverage/core/api/services/mailer/mailer.service.js.html +32 -32
- package/coverage/core/api/services/messages/index.html +21 -21
- package/coverage/core/api/services/messages/messages.hooks.js.html +112 -76
- package/coverage/core/api/services/push/index.html +32 -32
- package/coverage/core/api/services/push/push.hooks.js.html +80 -80
- package/coverage/core/api/services/push/push.service.js.html +34 -34
- package/coverage/core/api/services/storage/index.html +29 -29
- package/coverage/core/api/services/storage/storage.hooks.js.html +80 -80
- package/coverage/core/api/services/storage/storage.service.js.html +29 -29
- package/coverage/core/api/services/tags/index.html +21 -21
- package/coverage/core/api/services/tags/tags.hooks.js.html +119 -71
- package/coverage/core/api/services/users/index.html +27 -12
- package/coverage/core/api/services/users/users.hooks.js.html +14 -11
- package/coverage/core/api/services/users/users.service.js.html +100 -0
- package/coverage/core/common/errors.js.html +1 -1
- package/coverage/core/common/index.html +42 -27
- package/coverage/core/common/index.js.html +1 -1
- package/coverage/core/common/permissions.js.html +166 -472
- package/coverage/core/common/schema.js.html +4 -4
- package/coverage/core/common/utils.js.html +31 -25
- package/coverage/core/common/utils.offline.js.html +199 -0
- package/coverage/index.html +192 -192
- package/coverage/lcov-report/core/api/application.js.html +392 -398
- package/coverage/lcov-report/core/api/authentication.js.html +352 -187
- package/coverage/lcov-report/core/api/db.js.html +165 -126
- package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +22 -196
- package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +383 -662
- package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +41 -41
- package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +113 -101
- package/coverage/lcov-report/core/api/hooks/hooks.push.js.html +124 -97
- package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +292 -217
- package/coverage/lcov-report/core/api/hooks/hooks.schemas.js.html +123 -123
- package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +1 -1
- package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +1 -1
- package/coverage/lcov-report/core/api/hooks/{hooks.groups.js.html → hooks.tags.js.html} +100 -76
- package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +255 -447
- package/coverage/lcov-report/core/api/hooks/index.html +107 -122
- package/coverage/lcov-report/core/api/hooks/index.js.html +4 -10
- package/coverage/lcov-report/core/api/index.html +46 -61
- package/coverage/lcov-report/core/api/index.js.html +9 -9
- package/coverage/lcov-report/core/api/marshall.js.html +9 -9
- package/coverage/lcov-report/core/api/models/{organisations.model.mongodb.js.html → configurations.model.mongodb.js.html} +10 -7
- package/coverage/lcov-report/core/api/models/index.html +35 -50
- package/coverage/lcov-report/core/api/models/messages.model.mongodb.js.html +39 -27
- package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +26 -32
- package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +10 -10
- package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +5 -5
- package/coverage/lcov-report/core/api/services/account/account.service.js.html +127 -127
- package/coverage/lcov-report/core/api/services/account/index.html +22 -22
- package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +213 -222
- package/coverage/lcov-report/core/api/services/authorisations/index.html +21 -21
- package/coverage/lcov-report/core/api/services/{groups/groups.hooks.js.html → configurations/configurations.hooks.js.html} +16 -10
- package/coverage/lcov-report/core/api/services/{groups → configurations}/index.html +8 -8
- package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +1 -1
- package/coverage/lcov-report/core/api/services/databases/index.html +1 -1
- package/coverage/lcov-report/core/api/services/import-export/import-export.hooks.js.html +76 -76
- package/coverage/lcov-report/core/api/services/import-export/import-export.service.js.html +32 -32
- package/coverage/lcov-report/core/api/services/import-export/index.html +32 -32
- package/coverage/lcov-report/core/api/services/index.html +21 -21
- package/coverage/lcov-report/core/api/services/index.js.html +313 -142
- package/coverage/lcov-report/core/api/services/mailer/index.html +32 -32
- package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +80 -80
- package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +32 -32
- package/coverage/lcov-report/core/api/services/messages/index.html +21 -21
- package/coverage/lcov-report/core/api/services/messages/messages.hooks.js.html +112 -76
- package/coverage/lcov-report/core/api/services/push/index.html +32 -32
- package/coverage/lcov-report/core/api/services/push/push.hooks.js.html +80 -80
- package/coverage/lcov-report/core/api/services/push/push.service.js.html +34 -34
- package/coverage/lcov-report/core/api/services/storage/index.html +29 -29
- package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +80 -80
- package/coverage/lcov-report/core/api/services/storage/storage.service.js.html +29 -29
- package/coverage/lcov-report/core/api/services/tags/index.html +21 -21
- package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +119 -71
- package/coverage/lcov-report/core/api/services/users/index.html +27 -12
- package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +14 -11
- package/coverage/lcov-report/core/api/services/users/users.service.js.html +100 -0
- 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 +1 -1
- package/coverage/lcov-report/core/common/permissions.js.html +166 -472
- package/coverage/lcov-report/core/common/schema.js.html +4 -4
- package/coverage/lcov-report/core/common/utils.js.html +31 -25
- package/coverage/lcov-report/core/common/utils.offline.js.html +199 -0
- package/coverage/lcov-report/index.html +192 -192
- package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +169 -31
- package/coverage/lcov-report/map/api/hooks/hooks.features.js.html +1 -1
- package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +215 -35
- 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 +82 -7
- package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/map/api/models/index.html +22 -7
- package/coverage/lcov-report/map/api/models/projects.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/{core/api/models/groups.model.mongodb.js.html → map/api/models/styles.model.mongodb.js.html} +10 -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 +39 -12
- package/coverage/lcov-report/map/api/services/catalog/index.html +5 -5
- 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 +86 -11
- package/coverage/lcov-report/map/api/services/features/features.service.js.html +307 -4
- package/coverage/lcov-report/map/api/services/features/index.html +7 -7
- package/coverage/lcov-report/map/api/services/index.html +5 -5
- package/coverage/lcov-report/map/api/services/index.js.html +326 -50
- package/coverage/lcov-report/map/api/services/projects/index.html +1 -1
- package/coverage/lcov-report/map/api/services/projects/projects.hooks.js.html +1 -1
- package/coverage/{core/api/services/organisations → lcov-report/map/api/services/styles}/index.html +10 -25
- package/coverage/lcov-report/{core/api/services/organisations/organisations.hooks.js.html → map/api/services/styles/styles.hooks.js.html} +45 -12
- 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 +7 -10
- package/coverage/lcov-report/map/common/grid.js.html +1 -1
- package/coverage/lcov-report/map/common/index.html +19 -19
- 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 +4 -7
- package/coverage/lcov-report/map/common/permissions.js.html +10 -4
- package/coverage/lcov-report/map/common/time-based-grid-source.js.html +1 -1
- package/coverage/lcov-report/map/common/tms-utils.js.html +9 -12
- package/coverage/lcov-report/map/common/wcs-grid-source.js.html +3 -3
- package/coverage/lcov-report/map/common/wcs-utils.js.html +12 -15
- package/coverage/lcov-report/map/common/weacast-grid-source.js.html +2 -2
- package/coverage/lcov-report/map/common/wfs-utils.js.html +14 -17
- package/coverage/lcov-report/map/common/wms-utils.js.html +30 -12
- package/coverage/lcov-report/map/common/wmts-utils.js.html +10 -13
- package/coverage/lcov.info +4157 -3816
- package/coverage/map/api/hooks/hooks.catalog.js.html +169 -31
- package/coverage/map/api/hooks/hooks.features.js.html +1 -1
- package/coverage/map/api/hooks/hooks.query.js.html +215 -35
- 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 +82 -7
- package/coverage/map/api/models/features.model.mongodb.js.html +1 -1
- package/coverage/map/api/models/index.html +22 -7
- package/coverage/map/api/models/projects.model.mongodb.js.html +1 -1
- package/coverage/{core/api/models/groups.model.mongodb.js.html → map/api/models/styles.model.mongodb.js.html} +10 -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 +39 -12
- package/coverage/map/api/services/catalog/index.html +5 -5
- 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 +86 -11
- package/coverage/map/api/services/features/features.service.js.html +307 -4
- package/coverage/map/api/services/features/index.html +7 -7
- package/coverage/map/api/services/index.html +5 -5
- package/coverage/map/api/services/index.js.html +326 -50
- package/coverage/map/api/services/projects/index.html +1 -1
- package/coverage/map/api/services/projects/projects.hooks.js.html +1 -1
- package/coverage/{lcov-report/core/api/services/organisations → map/api/services/styles}/index.html +10 -25
- package/coverage/{core/api/services/groups/groups.hooks.js.html → map/api/services/styles/styles.hooks.js.html} +45 -12
- 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 +7 -10
- package/coverage/map/common/grid.js.html +1 -1
- package/coverage/map/common/index.html +19 -19
- 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 +4 -7
- package/coverage/map/common/permissions.js.html +10 -4
- package/coverage/map/common/time-based-grid-source.js.html +1 -1
- package/coverage/map/common/tms-utils.js.html +9 -12
- package/coverage/map/common/wcs-grid-source.js.html +3 -3
- package/coverage/map/common/wcs-utils.js.html +12 -15
- package/coverage/map/common/weacast-grid-source.js.html +2 -2
- package/coverage/map/common/wfs-utils.js.html +14 -17
- package/coverage/map/common/wms-utils.js.html +30 -12
- package/coverage/map/common/wmts-utils.js.html +10 -13
- package/coverage/tmp/coverage-1028514-1773134124472-0.json +1 -0
- package/coverage/tmp/coverage-1028526-1773134124448-0.json +1 -0
- package/coverage/tmp/coverage-1028537-1773134124431-0.json +1 -0
- package/coverage/tmp/coverage-1028549-1773134124401-0.json +1 -0
- package/coverage/tmp/coverage-1028556-1773134124353-0.json +1 -0
- package/extras/configs/widgets.top.js +3 -3
- package/extras/tests/core/collection.mjs +2 -9
- package/extras/tours/pane.top.js +0 -9
- package/map/api/hooks/hooks.catalog.js +18 -4
- package/map/api/services/catalog/catalog.hooks.js +3 -0
- package/map/api/services/features/features.hooks.js +3 -1
- package/map/api/services/index.js +2 -6
- package/map/api/services/styles/styles.hooks.js +6 -1
- package/map/client/components/KFeatureActionButton.vue +9 -3
- package/map/client/components/KFeaturesFilterManager.vue +5 -5
- package/map/client/components/KFilterCondition.vue +17 -10
- package/map/client/components/KLayerEditor.vue +49 -39
- package/map/client/components/KMeasureTool.vue +7 -1
- package/map/client/components/KTimezoneMap.vue +29 -9
- package/map/client/components/catalog/KLayersPanel.vue +26 -16
- package/map/client/components/catalog/KLayersSelector.vue +13 -2
- package/map/client/components/catalog/KViewsPanel.vue +5 -4
- package/map/client/components/form/KSelectLayersField.vue +28 -17
- package/map/client/components/form/KSelectViewsField.vue +18 -9
- package/map/client/components/form/KTimezoneField.vue +1 -2
- package/map/client/components/legend/KVariablesLegend.vue +10 -1
- package/map/client/components/location/KLocationCardSection.vue +7 -2
- package/map/client/components/location/KLocationMap.vue +31 -7
- package/map/client/components/selection/KSelectedLayerFeatures.vue +2 -2
- package/map/client/components/stickies/KZoomControl.vue +1 -1
- package/map/client/components/styles/KStyleManager.vue +4 -1
- package/map/client/components/widget/KTimeSeries.vue +174 -497
- package/map/client/components/widget/KTimeSeriesSelector.vue +72 -0
- package/map/client/components/widget/KTimeSeriesToolbar.vue +83 -0
- package/map/client/composables/catalog.js +6 -10
- package/map/client/composables/highlight.js +12 -9
- package/map/client/composables/project.js +1 -1
- package/map/client/composables/selection.js +8 -7
- package/map/client/composables/weather.js +9 -2
- package/map/client/geolocation.js +8 -5
- package/map/client/i18n/map_en.json +11 -10
- package/map/client/i18n/map_fr.json +10 -9
- package/map/client/leaflet/TiledFeatureLayer.js +85 -82
- package/map/client/leaflet/utils/utils.geojson.js +3 -3
- package/map/client/mixins/globe/mixin.base-globe.js +15 -6
- package/map/client/mixins/globe/mixin.geojson-layers.js +27 -18
- package/map/client/mixins/map/mixin.edit-layers.js +9 -1
- package/map/client/mixins/map/mixin.pmtiles-layers.js +118 -29
- package/map/client/mixins/map/mixin.tiled-mesh-layers.js +12 -5
- package/map/client/mixins/map/mixin.tiled-wind-layers.js +19 -10
- package/map/client/mixins/mixin.activity.js +23 -30
- package/map/client/mixins/mixin.feature-selection.js +41 -5
- package/map/client/planets.js +1 -1
- package/map/client/readers/reader.kml.js +2 -3
- package/map/client/utils/utils.catalog.js +36 -10
- package/map/client/utils/utils.layers.js +39 -8
- package/map/client/utils/utils.project.js +4 -0
- package/map/client/utils/utils.style.js +37 -7
- package/map/client/utils/utils.time-series.js +215 -6
- package/map/common/schemas/catalog.update.json +1 -1
- package/map/common/weacast-grid-source.js +1 -1
- package/package.json +3 -3
- package/scripts/kash/CHANGELOG.md +0 -4
- package/scripts/kash/README.md +0 -9
- package/scripts/kash/kash.sh +45 -40
- package/scripts/kash/scripts/run_tests.sh +1 -4
- package/test/api/core/authentication.test.js +9 -4
- package/test/api/core/config/default.cjs +1 -0
- package/test/api/core/hooks.test.js +6 -0
- package/test/api/core/index.test.js +43 -18
- package/test/api/core/push.test.js +8 -8
- package/test/api/core/test-log-2026-03-10.log +60 -0
- package/test/api/core/users.test.js +384 -0
- package/test/api/map/grid-sources.test.js +1 -1
- package/test/api/map/test-log-2026-03-10.log +56 -0
- package/vite/package.json +11 -2
- package/vite/test/core/composables.test.js +77 -0
- package/vite/vitest.config.js +13 -0
- package/vite/yarn.lock +1096 -18
- package/.vscode/settings.json +0 -5
- package/core/client/components/account/KAccount.vue +0 -68
- package/core/client/components/account/KDeleteAccountManager.vue +0 -62
- package/core/client/components/account/KEmailManager.vue +0 -128
- package/core/client/components/account/KPasswordManager.vue +0 -90
- package/core/client/components/account/KVerifyEmailManager.vue +0 -105
- package/core/client/components/collection/KColumn.vue +0 -227
- package/core/client/components/collection/KHistory.vue +0 -113
- package/core/client/components/collection/KHistoryEntry.vue +0 -109
- package/coverage/core/api/hooks/hooks.organisations.js.html +0 -541
- package/coverage/core/api/services/organisations/organisations.service.js.html +0 -343
- package/coverage/core/api/utils.js.html +0 -118
- package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +0 -541
- package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +0 -343
- package/coverage/lcov-report/core/api/utils.js.html +0 -118
- package/coverage/tmp/coverage-151166-1723543324307-0.json +0 -1
- package/coverage/tmp/coverage-151178-1723543324283-0.json +0 -1
- package/coverage/tmp/coverage-151189-1723543324271-0.json +0 -1
- package/coverage/tmp/coverage-151201-1723543324248-0.json +0 -1
- package/coverage/tmp/coverage-151208-1723543324227-0.json +0 -1
- package/scripts/kash/LICENSE +0 -21
- package/test/api/core/test-log-2024-04-22.log +0 -84
- package/test/api/core/test-log-2024-04-23.log +0 -23
- package/test/api/core/test-log-2024-08-13.log +0 -3
- package/test/api/map/test-log-2025-03-08.log +0 -0
|
@@ -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">66.21% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>145/219</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">72.22% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>13/18</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">35.29% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>6/17</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">66.21% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>145/219</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
</div>
|
|
62
62
|
</template>
|
|
63
63
|
</div>
|
|
64
|
-
<div class='status-line
|
|
64
|
+
<div class='status-line medium'></div>
|
|
65
65
|
<pre><table class="coverage">
|
|
66
66
|
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
67
|
<a name='L2'></a><a href='#L2'>2</a>
|
|
@@ -282,109 +282,7 @@
|
|
|
282
282
|
<a name='L217'></a><a href='#L217'>217</a>
|
|
283
283
|
<a name='L218'></a><a href='#L218'>218</a>
|
|
284
284
|
<a name='L219'></a><a href='#L219'>219</a>
|
|
285
|
-
<a name='L220'></a><a href='#L220'>220</a>
|
|
286
|
-
<a name='L221'></a><a href='#L221'>221</a>
|
|
287
|
-
<a name='L222'></a><a href='#L222'>222</a>
|
|
288
|
-
<a name='L223'></a><a href='#L223'>223</a>
|
|
289
|
-
<a name='L224'></a><a href='#L224'>224</a>
|
|
290
|
-
<a name='L225'></a><a href='#L225'>225</a>
|
|
291
|
-
<a name='L226'></a><a href='#L226'>226</a>
|
|
292
|
-
<a name='L227'></a><a href='#L227'>227</a>
|
|
293
|
-
<a name='L228'></a><a href='#L228'>228</a>
|
|
294
|
-
<a name='L229'></a><a href='#L229'>229</a>
|
|
295
|
-
<a name='L230'></a><a href='#L230'>230</a>
|
|
296
|
-
<a name='L231'></a><a href='#L231'>231</a>
|
|
297
|
-
<a name='L232'></a><a href='#L232'>232</a>
|
|
298
|
-
<a name='L233'></a><a href='#L233'>233</a>
|
|
299
|
-
<a name='L234'></a><a href='#L234'>234</a>
|
|
300
|
-
<a name='L235'></a><a href='#L235'>235</a>
|
|
301
|
-
<a name='L236'></a><a href='#L236'>236</a>
|
|
302
|
-
<a name='L237'></a><a href='#L237'>237</a>
|
|
303
|
-
<a name='L238'></a><a href='#L238'>238</a>
|
|
304
|
-
<a name='L239'></a><a href='#L239'>239</a>
|
|
305
|
-
<a name='L240'></a><a href='#L240'>240</a>
|
|
306
|
-
<a name='L241'></a><a href='#L241'>241</a>
|
|
307
|
-
<a name='L242'></a><a href='#L242'>242</a>
|
|
308
|
-
<a name='L243'></a><a href='#L243'>243</a>
|
|
309
|
-
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
|
-
<a name='L245'></a><a href='#L245'>245</a>
|
|
311
|
-
<a name='L246'></a><a href='#L246'>246</a>
|
|
312
|
-
<a name='L247'></a><a href='#L247'>247</a>
|
|
313
|
-
<a name='L248'></a><a href='#L248'>248</a>
|
|
314
|
-
<a name='L249'></a><a href='#L249'>249</a>
|
|
315
|
-
<a name='L250'></a><a href='#L250'>250</a>
|
|
316
|
-
<a name='L251'></a><a href='#L251'>251</a>
|
|
317
|
-
<a name='L252'></a><a href='#L252'>252</a>
|
|
318
|
-
<a name='L253'></a><a href='#L253'>253</a>
|
|
319
|
-
<a name='L254'></a><a href='#L254'>254</a>
|
|
320
|
-
<a name='L255'></a><a href='#L255'>255</a>
|
|
321
|
-
<a name='L256'></a><a href='#L256'>256</a>
|
|
322
|
-
<a name='L257'></a><a href='#L257'>257</a>
|
|
323
|
-
<a name='L258'></a><a href='#L258'>258</a>
|
|
324
|
-
<a name='L259'></a><a href='#L259'>259</a>
|
|
325
|
-
<a name='L260'></a><a href='#L260'>260</a>
|
|
326
|
-
<a name='L261'></a><a href='#L261'>261</a>
|
|
327
|
-
<a name='L262'></a><a href='#L262'>262</a>
|
|
328
|
-
<a name='L263'></a><a href='#L263'>263</a>
|
|
329
|
-
<a name='L264'></a><a href='#L264'>264</a>
|
|
330
|
-
<a name='L265'></a><a href='#L265'>265</a>
|
|
331
|
-
<a name='L266'></a><a href='#L266'>266</a>
|
|
332
|
-
<a name='L267'></a><a href='#L267'>267</a>
|
|
333
|
-
<a name='L268'></a><a href='#L268'>268</a>
|
|
334
|
-
<a name='L269'></a><a href='#L269'>269</a>
|
|
335
|
-
<a name='L270'></a><a href='#L270'>270</a>
|
|
336
|
-
<a name='L271'></a><a href='#L271'>271</a>
|
|
337
|
-
<a name='L272'></a><a href='#L272'>272</a>
|
|
338
|
-
<a name='L273'></a><a href='#L273'>273</a>
|
|
339
|
-
<a name='L274'></a><a href='#L274'>274</a>
|
|
340
|
-
<a name='L275'></a><a href='#L275'>275</a>
|
|
341
|
-
<a name='L276'></a><a href='#L276'>276</a>
|
|
342
|
-
<a name='L277'></a><a href='#L277'>277</a>
|
|
343
|
-
<a name='L278'></a><a href='#L278'>278</a>
|
|
344
|
-
<a name='L279'></a><a href='#L279'>279</a>
|
|
345
|
-
<a name='L280'></a><a href='#L280'>280</a>
|
|
346
|
-
<a name='L281'></a><a href='#L281'>281</a>
|
|
347
|
-
<a name='L282'></a><a href='#L282'>282</a>
|
|
348
|
-
<a name='L283'></a><a href='#L283'>283</a>
|
|
349
|
-
<a name='L284'></a><a href='#L284'>284</a>
|
|
350
|
-
<a name='L285'></a><a href='#L285'>285</a>
|
|
351
|
-
<a name='L286'></a><a href='#L286'>286</a>
|
|
352
|
-
<a name='L287'></a><a href='#L287'>287</a>
|
|
353
|
-
<a name='L288'></a><a href='#L288'>288</a>
|
|
354
|
-
<a name='L289'></a><a href='#L289'>289</a>
|
|
355
|
-
<a name='L290'></a><a href='#L290'>290</a>
|
|
356
|
-
<a name='L291'></a><a href='#L291'>291</a>
|
|
357
|
-
<a name='L292'></a><a href='#L292'>292</a>
|
|
358
|
-
<a name='L293'></a><a href='#L293'>293</a>
|
|
359
|
-
<a name='L294'></a><a href='#L294'>294</a>
|
|
360
|
-
<a name='L295'></a><a href='#L295'>295</a>
|
|
361
|
-
<a name='L296'></a><a href='#L296'>296</a>
|
|
362
|
-
<a name='L297'></a><a href='#L297'>297</a>
|
|
363
|
-
<a name='L298'></a><a href='#L298'>298</a>
|
|
364
|
-
<a name='L299'></a><a href='#L299'>299</a>
|
|
365
|
-
<a name='L300'></a><a href='#L300'>300</a>
|
|
366
|
-
<a name='L301'></a><a href='#L301'>301</a>
|
|
367
|
-
<a name='L302'></a><a href='#L302'>302</a>
|
|
368
|
-
<a name='L303'></a><a href='#L303'>303</a>
|
|
369
|
-
<a name='L304'></a><a href='#L304'>304</a>
|
|
370
|
-
<a name='L305'></a><a href='#L305'>305</a>
|
|
371
|
-
<a name='L306'></a><a href='#L306'>306</a>
|
|
372
|
-
<a name='L307'></a><a href='#L307'>307</a>
|
|
373
|
-
<a name='L308'></a><a href='#L308'>308</a>
|
|
374
|
-
<a name='L309'></a><a href='#L309'>309</a>
|
|
375
|
-
<a name='L310'></a><a href='#L310'>310</a>
|
|
376
|
-
<a name='L311'></a><a href='#L311'>311</a>
|
|
377
|
-
<a name='L312'></a><a href='#L312'>312</a>
|
|
378
|
-
<a name='L313'></a><a href='#L313'>313</a>
|
|
379
|
-
<a name='L314'></a><a href='#L314'>314</a>
|
|
380
|
-
<a name='L315'></a><a href='#L315'>315</a>
|
|
381
|
-
<a name='L316'></a><a href='#L316'>316</a>
|
|
382
|
-
<a name='L317'></a><a href='#L317'>317</a>
|
|
383
|
-
<a name='L318'></a><a href='#L318'>318</a>
|
|
384
|
-
<a name='L319'></a><a href='#L319'>319</a>
|
|
385
|
-
<a name='L320'></a><a href='#L320'>320</a>
|
|
386
|
-
<a name='L321'></a><a href='#L321'>321</a>
|
|
387
|
-
<a name='L322'></a><a href='#L322'>322</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
285
|
+
<a name='L220'></a><a href='#L220'>220</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
388
286
|
<span class="cline-any cline-yes">1x</span>
|
|
389
287
|
<span class="cline-any cline-yes">1x</span>
|
|
390
288
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -432,129 +330,102 @@
|
|
|
432
330
|
<span class="cline-any cline-yes">1x</span>
|
|
433
331
|
<span class="cline-any cline-yes">1x</span>
|
|
434
332
|
<span class="cline-any cline-yes">1x</span>
|
|
435
|
-
<span class="cline-any cline-
|
|
436
|
-
<span class="cline-any cline-
|
|
437
|
-
<span class="cline-any cline-
|
|
438
|
-
<span class="cline-any cline-
|
|
439
|
-
<span class="cline-any cline-
|
|
440
|
-
<span class="cline-any cline-
|
|
441
|
-
<span class="cline-any cline-
|
|
442
|
-
<span class="cline-any cline-
|
|
443
|
-
<span class="cline-any cline-
|
|
444
|
-
<span class="cline-any cline-
|
|
445
|
-
<span class="cline-any cline-
|
|
446
|
-
<span class="cline-any cline-
|
|
447
|
-
<span class="cline-any cline-
|
|
448
|
-
<span class="cline-any cline-
|
|
449
|
-
<span class="cline-any cline-
|
|
450
|
-
<span class="cline-any cline-
|
|
451
|
-
<span class="cline-any cline-
|
|
452
|
-
<span class="cline-any cline-
|
|
453
|
-
<span class="cline-any cline-
|
|
454
|
-
<span class="cline-any cline-
|
|
455
|
-
<span class="cline-any cline-
|
|
456
|
-
<span class="cline-any cline-
|
|
457
|
-
<span class="cline-any cline-
|
|
458
|
-
<span class="cline-any cline-
|
|
459
|
-
<span class="cline-any cline-
|
|
460
|
-
<span class="cline-any cline-
|
|
461
|
-
<span class="cline-any cline-
|
|
462
|
-
<span class="cline-any cline-
|
|
463
|
-
<span class="cline-any cline-
|
|
464
|
-
<span class="cline-any cline-
|
|
465
|
-
<span class="cline-any cline-
|
|
466
|
-
<span class="cline-any cline-
|
|
467
|
-
<span class="cline-any cline-
|
|
333
|
+
<span class="cline-any cline-yes">23x</span>
|
|
334
|
+
<span class="cline-any cline-yes">23x</span>
|
|
335
|
+
<span class="cline-any cline-yes">23x</span>
|
|
336
|
+
<span class="cline-any cline-yes">23x</span>
|
|
337
|
+
<span class="cline-any cline-yes">23x</span>
|
|
338
|
+
<span class="cline-any cline-yes">23x</span>
|
|
339
|
+
<span class="cline-any cline-yes">23x</span>
|
|
340
|
+
<span class="cline-any cline-yes">23x</span>
|
|
341
|
+
<span class="cline-any cline-yes">23x</span>
|
|
342
|
+
<span class="cline-any cline-yes">23x</span>
|
|
343
|
+
<span class="cline-any cline-yes">23x</span>
|
|
344
|
+
<span class="cline-any cline-yes">23x</span>
|
|
345
|
+
<span class="cline-any cline-yes">23x</span>
|
|
346
|
+
<span class="cline-any cline-yes">23x</span>
|
|
347
|
+
<span class="cline-any cline-yes">23x</span>
|
|
348
|
+
<span class="cline-any cline-yes">23x</span>
|
|
349
|
+
<span class="cline-any cline-yes">22x</span>
|
|
350
|
+
<span class="cline-any cline-yes">22x</span>
|
|
351
|
+
<span class="cline-any cline-yes">22x</span>
|
|
352
|
+
<span class="cline-any cline-yes">22x</span>
|
|
353
|
+
<span class="cline-any cline-yes">22x</span>
|
|
354
|
+
<span class="cline-any cline-yes">22x</span>
|
|
355
|
+
<span class="cline-any cline-yes">22x</span>
|
|
356
|
+
<span class="cline-any cline-yes">22x</span>
|
|
357
|
+
<span class="cline-any cline-yes">22x</span>
|
|
358
|
+
<span class="cline-any cline-yes">22x</span>
|
|
359
|
+
<span class="cline-any cline-yes">22x</span>
|
|
360
|
+
<span class="cline-any cline-yes">22x</span>
|
|
361
|
+
<span class="cline-any cline-yes">22x</span>
|
|
362
|
+
<span class="cline-any cline-yes">22x</span>
|
|
363
|
+
<span class="cline-any cline-yes">22x</span>
|
|
364
|
+
<span class="cline-any cline-yes">22x</span>
|
|
365
|
+
<span class="cline-any cline-yes">22x</span>
|
|
366
|
+
<span class="cline-any cline-yes">22x</span>
|
|
367
|
+
<span class="cline-any cline-yes">22x</span>
|
|
368
|
+
<span class="cline-any cline-yes">23x</span>
|
|
468
369
|
<span class="cline-any cline-yes">1x</span>
|
|
469
370
|
<span class="cline-any cline-yes">1x</span>
|
|
470
371
|
<span class="cline-any cline-yes">1x</span>
|
|
372
|
+
<span class="cline-any cline-yes">23x</span>
|
|
373
|
+
<span class="cline-any cline-yes">23x</span>
|
|
374
|
+
<span class="cline-any cline-yes">23x</span>
|
|
375
|
+
<span class="cline-any cline-yes">23x</span>
|
|
376
|
+
<span class="cline-any cline-yes">23x</span>
|
|
377
|
+
<span class="cline-any cline-yes">23x</span>
|
|
378
|
+
<span class="cline-any cline-yes">23x</span>
|
|
379
|
+
<span class="cline-any cline-yes">23x</span>
|
|
380
|
+
<span class="cline-any cline-yes">23x</span>
|
|
381
|
+
<span class="cline-any cline-yes">23x</span>
|
|
382
|
+
<span class="cline-any cline-yes">23x</span>
|
|
383
|
+
<span class="cline-any cline-yes">3x</span>
|
|
471
384
|
<span class="cline-any cline-no"> </span>
|
|
472
385
|
<span class="cline-any cline-no"> </span>
|
|
473
|
-
<span class="cline-any cline-no"> </span>
|
|
474
|
-
<span class="cline-any cline-no"> </span>
|
|
475
|
-
<span class="cline-any cline-no"> </span>
|
|
476
|
-
<span class="cline-any cline-no"> </span>
|
|
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
|
-
<span class="cline-any cline-no"> </span>
|
|
482
|
-
<span class="cline-any cline-no"> </span>
|
|
483
|
-
<span class="cline-any cline-no"> </span>
|
|
484
|
-
<span class="cline-any cline-no"> </span>
|
|
485
|
-
<span class="cline-any cline-no"> </span>
|
|
486
|
-
<span class="cline-any cline-no"> </span>
|
|
487
|
-
<span class="cline-any cline-no"> </span>
|
|
488
|
-
<span class="cline-any cline-no"> </span>
|
|
489
|
-
<span class="cline-any cline-no"> </span>
|
|
490
|
-
<span class="cline-any cline-yes">1x</span>
|
|
491
|
-
<span class="cline-any cline-yes">1x</span>
|
|
492
|
-
<span class="cline-any cline-yes">8x</span>
|
|
493
|
-
<span class="cline-any cline-yes">3x</span>
|
|
494
386
|
<span class="cline-any cline-yes">3x</span>
|
|
495
|
-
<span class="cline-any cline-yes">
|
|
387
|
+
<span class="cline-any cline-yes">23x</span>
|
|
388
|
+
<span class="cline-any cline-yes">23x</span>
|
|
389
|
+
<span class="cline-any cline-yes">23x</span>
|
|
390
|
+
<span class="cline-any cline-yes">23x</span>
|
|
496
391
|
<span class="cline-any cline-yes">1x</span>
|
|
497
392
|
<span class="cline-any cline-yes">1x</span>
|
|
498
|
-
<span class="cline-any cline-
|
|
499
|
-
<span class="cline-any cline-no"> </span>
|
|
393
|
+
<span class="cline-any cline-yes">5x</span>
|
|
500
394
|
<span class="cline-any cline-yes">1x</span>
|
|
501
395
|
<span class="cline-any cline-yes">1x</span>
|
|
502
|
-
<span class="cline-any cline-
|
|
503
|
-
<span class="cline-any cline-no"> </span>
|
|
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
|
-
<span class="cline-any cline-no"> </span>
|
|
511
|
-
<span class="cline-any cline-no"> </span>
|
|
396
|
+
<span class="cline-any cline-yes">5x</span>
|
|
512
397
|
<span class="cline-any cline-yes">1x</span>
|
|
513
398
|
<span class="cline-any cline-yes">1x</span>
|
|
514
399
|
<span class="cline-any cline-no"> </span>
|
|
515
400
|
<span class="cline-any cline-no"> </span>
|
|
516
|
-
<span class="cline-any cline-no"> </span>
|
|
517
|
-
<span class="cline-any cline-no"> </span>
|
|
518
|
-
<span class="cline-any cline-no"> </span>
|
|
519
|
-
<span class="cline-any cline-no"> </span>
|
|
520
|
-
<span class="cline-any cline-no"> </span>
|
|
521
|
-
<span class="cline-any cline-no"> </span>
|
|
522
|
-
<span class="cline-any cline-no"> </span>
|
|
523
|
-
<span class="cline-any cline-no"> </span>
|
|
524
|
-
<span class="cline-any cline-no"> </span>
|
|
525
401
|
<span class="cline-any cline-yes">1x</span>
|
|
526
402
|
<span class="cline-any cline-yes">1x</span>
|
|
403
|
+
<span class="cline-any cline-yes">4x</span>
|
|
404
|
+
<span class="cline-any cline-yes">4x</span>
|
|
405
|
+
<span class="cline-any cline-yes">4x</span>
|
|
406
|
+
<span class="cline-any cline-yes">4x</span>
|
|
407
|
+
<span class="cline-any cline-yes">4x</span>
|
|
408
|
+
<span class="cline-any cline-yes">4x</span>
|
|
409
|
+
<span class="cline-any cline-yes">4x</span>
|
|
410
|
+
<span class="cline-any cline-yes">4x</span>
|
|
411
|
+
<span class="cline-any cline-yes">4x</span>
|
|
527
412
|
<span class="cline-any cline-yes">1x</span>
|
|
528
|
-
<span class="cline-any cline-
|
|
529
|
-
<span class="cline-any cline-no"> </span>
|
|
530
|
-
<span class="cline-any cline-no"> </span>
|
|
531
|
-
<span class="cline-any cline-no"> </span>
|
|
532
|
-
<span class="cline-any cline-no"> </span>
|
|
533
|
-
<span class="cline-any cline-no"> </span>
|
|
534
|
-
<span class="cline-any cline-no"> </span>
|
|
535
|
-
<span class="cline-any cline-no"> </span>
|
|
536
|
-
<span class="cline-any cline-no"> </span>
|
|
537
|
-
<span class="cline-any cline-no"> </span>
|
|
538
|
-
<span class="cline-any cline-no"> </span>
|
|
539
|
-
<span class="cline-any cline-no"> </span>
|
|
540
|
-
<span class="cline-any cline-no"> </span>
|
|
541
|
-
<span class="cline-any cline-no"> </span>
|
|
542
|
-
<span class="cline-any cline-no"> </span>
|
|
543
|
-
<span class="cline-any cline-no"> </span>
|
|
544
|
-
<span class="cline-any cline-no"> </span>
|
|
545
|
-
<span class="cline-any cline-no"> </span>
|
|
546
|
-
<span class="cline-any cline-no"> </span>
|
|
413
|
+
<span class="cline-any cline-yes">4x</span>
|
|
547
414
|
<span class="cline-any cline-yes">1x</span>
|
|
548
415
|
<span class="cline-any cline-yes">1x</span>
|
|
416
|
+
<span class="cline-any cline-yes">3x</span>
|
|
417
|
+
<span class="cline-any cline-yes">3x</span>
|
|
418
|
+
<span class="cline-any cline-yes">3x</span>
|
|
419
|
+
<span class="cline-any cline-yes">3x</span>
|
|
420
|
+
<span class="cline-any cline-yes">3x</span>
|
|
421
|
+
<span class="cline-any cline-yes">3x</span>
|
|
422
|
+
<span class="cline-any cline-yes">3x</span>
|
|
423
|
+
<span class="cline-any cline-yes">3x</span>
|
|
424
|
+
<span class="cline-any cline-yes">3x</span>
|
|
425
|
+
<span class="cline-any cline-yes">3x</span>
|
|
426
|
+
<span class="cline-any cline-yes">3x</span>
|
|
549
427
|
<span class="cline-any cline-yes">1x</span>
|
|
550
428
|
<span class="cline-any cline-yes">1x</span>
|
|
551
|
-
<span class="cline-any cline-no"> </span>
|
|
552
|
-
<span class="cline-any cline-no"> </span>
|
|
553
|
-
<span class="cline-any cline-no"> </span>
|
|
554
|
-
<span class="cline-any cline-no"> </span>
|
|
555
|
-
<span class="cline-any cline-no"> </span>
|
|
556
|
-
<span class="cline-any cline-no"> </span>
|
|
557
|
-
<span class="cline-any cline-no"> </span>
|
|
558
429
|
<span class="cline-any cline-yes">1x</span>
|
|
559
430
|
<span class="cline-any cline-no"> </span>
|
|
560
431
|
<span class="cline-any cline-no"> </span>
|
|
@@ -563,15 +434,11 @@
|
|
|
563
434
|
<span class="cline-any cline-no"> </span>
|
|
564
435
|
<span class="cline-any cline-no"> </span>
|
|
565
436
|
<span class="cline-any cline-no"> </span>
|
|
566
|
-
<span class="cline-any cline-yes">1x</span>
|
|
567
|
-
<span class="cline-any cline-yes">1x</span>
|
|
568
437
|
<span class="cline-any cline-no"> </span>
|
|
569
438
|
<span class="cline-any cline-no"> </span>
|
|
570
439
|
<span class="cline-any cline-no"> </span>
|
|
571
440
|
<span class="cline-any cline-no"> </span>
|
|
572
441
|
<span class="cline-any cline-no"> </span>
|
|
573
|
-
<span class="cline-any cline-yes">1x</span>
|
|
574
|
-
<span class="cline-any cline-yes">1x</span>
|
|
575
442
|
<span class="cline-any cline-no"> </span>
|
|
576
443
|
<span class="cline-any cline-no"> </span>
|
|
577
444
|
<span class="cline-any cline-no"> </span>
|
|
@@ -582,47 +449,6 @@
|
|
|
582
449
|
<span class="cline-any cline-yes">1x</span>
|
|
583
450
|
<span class="cline-any cline-yes">1x</span>
|
|
584
451
|
<span class="cline-any cline-yes">1x</span>
|
|
585
|
-
<span class="cline-any cline-no"> </span>
|
|
586
|
-
<span class="cline-any cline-no"> </span>
|
|
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
|
-
<span class="cline-any cline-no"> </span>
|
|
592
|
-
<span class="cline-any cline-no"> </span>
|
|
593
|
-
<span class="cline-any cline-no"> </span>
|
|
594
|
-
<span class="cline-any cline-no"> </span>
|
|
595
|
-
<span class="cline-any cline-no"> </span>
|
|
596
|
-
<span class="cline-any cline-no"> </span>
|
|
597
|
-
<span class="cline-any cline-no"> </span>
|
|
598
|
-
<span class="cline-any cline-no"> </span>
|
|
599
|
-
<span class="cline-any cline-no"> </span>
|
|
600
|
-
<span class="cline-any cline-no"> </span>
|
|
601
|
-
<span class="cline-any cline-no"> </span>
|
|
602
|
-
<span class="cline-any cline-no"> </span>
|
|
603
|
-
<span class="cline-any cline-no"> </span>
|
|
604
|
-
<span class="cline-any cline-no"> </span>
|
|
605
|
-
<span class="cline-any cline-no"> </span>
|
|
606
|
-
<span class="cline-any cline-no"> </span>
|
|
607
|
-
<span class="cline-any cline-no"> </span>
|
|
608
|
-
<span class="cline-any cline-no"> </span>
|
|
609
|
-
<span class="cline-any cline-no"> </span>
|
|
610
|
-
<span class="cline-any cline-no"> </span>
|
|
611
|
-
<span class="cline-any cline-no"> </span>
|
|
612
|
-
<span class="cline-any cline-no"> </span>
|
|
613
|
-
<span class="cline-any cline-no"> </span>
|
|
614
|
-
<span class="cline-any cline-no"> </span>
|
|
615
|
-
<span class="cline-any cline-no"> </span>
|
|
616
|
-
<span class="cline-any cline-no"> </span>
|
|
617
|
-
<span class="cline-any cline-no"> </span>
|
|
618
|
-
<span class="cline-any cline-no"> </span>
|
|
619
|
-
<span class="cline-any cline-no"> </span>
|
|
620
|
-
<span class="cline-any cline-no"> </span>
|
|
621
|
-
<span class="cline-any cline-no"> </span>
|
|
622
|
-
<span class="cline-any cline-no"> </span>
|
|
623
|
-
<span class="cline-any cline-no"> </span>
|
|
624
|
-
<span class="cline-any cline-yes">1x</span>
|
|
625
|
-
<span class="cline-any cline-yes">1x</span>
|
|
626
452
|
<span class="cline-any cline-yes">1x</span>
|
|
627
453
|
<span class="cline-any cline-no"> </span>
|
|
628
454
|
<span class="cline-any cline-no"> </span>
|
|
@@ -631,46 +457,17 @@
|
|
|
631
457
|
<span class="cline-any cline-no"> </span>
|
|
632
458
|
<span class="cline-any cline-no"> </span>
|
|
633
459
|
<span class="cline-any cline-no"> </span>
|
|
634
|
-
<span class="cline-any cline-no"> </span>
|
|
635
|
-
<span class="cline-any cline-no"> </span>
|
|
636
|
-
<span class="cline-any cline-no"> </span>
|
|
637
|
-
<span class="cline-any cline-no"> </span>
|
|
638
|
-
<span class="cline-any cline-no"> </span>
|
|
639
|
-
<span class="cline-any cline-no"> </span>
|
|
640
|
-
<span class="cline-any cline-no"> </span>
|
|
641
|
-
<span class="cline-any cline-no"> </span>
|
|
642
|
-
<span class="cline-any cline-no"> </span>
|
|
643
|
-
<span class="cline-any cline-no"> </span>
|
|
644
|
-
<span class="cline-any cline-no"> </span>
|
|
645
|
-
<span class="cline-any cline-yes">1x</span>
|
|
646
|
-
<span class="cline-any cline-yes">1x</span>
|
|
647
460
|
<span class="cline-any cline-yes">1x</span>
|
|
648
461
|
<span class="cline-any cline-no"> </span>
|
|
649
462
|
<span class="cline-any cline-no"> </span>
|
|
650
|
-
<span class="cline-any cline-yes">1x</span>
|
|
651
|
-
<span class="cline-any cline-yes">1x</span>
|
|
652
463
|
<span class="cline-any cline-no"> </span>
|
|
653
464
|
<span class="cline-any cline-no"> </span>
|
|
654
|
-
<span class="cline-any cline-yes">1x</span>
|
|
655
|
-
<span class="cline-any cline-yes">1x</span>
|
|
656
|
-
<span class="cline-any cline-yes">1x</span>
|
|
657
465
|
<span class="cline-any cline-no"> </span>
|
|
658
466
|
<span class="cline-any cline-no"> </span>
|
|
659
|
-
<span class="cline-any cline-yes">1x</span>
|
|
660
|
-
<span class="cline-any cline-yes">1x</span>
|
|
661
|
-
<span class="cline-any cline-no"> </span>
|
|
662
467
|
<span class="cline-any cline-no"> </span>
|
|
663
468
|
<span class="cline-any cline-yes">1x</span>
|
|
664
469
|
<span class="cline-any cline-yes">1x</span>
|
|
665
|
-
<span class="cline-any cline-yes">1x</span>
|
|
666
|
-
<span class="cline-any cline-no"> </span>
|
|
667
470
|
<span class="cline-any cline-no"> </span>
|
|
668
|
-
<span class="cline-any cline-yes">1x</span>
|
|
669
|
-
<span class="cline-any cline-yes">1x</span>
|
|
670
|
-
<span class="cline-any cline-no"> </span>
|
|
671
|
-
<span class="cline-any cline-no"> </span>
|
|
672
|
-
<span class="cline-any cline-yes">1x</span>
|
|
673
|
-
<span class="cline-any cline-yes">1x</span>
|
|
674
471
|
<span class="cline-any cline-no"> </span>
|
|
675
472
|
<span class="cline-any cline-no"> </span>
|
|
676
473
|
<span class="cline-any cline-no"> </span>
|
|
@@ -681,8 +478,7 @@
|
|
|
681
478
|
<span class="cline-any cline-no"> </span>
|
|
682
479
|
<span class="cline-any cline-no"> </span>
|
|
683
480
|
<span class="cline-any cline-no"> </span>
|
|
684
|
-
<span class="cline-any cline-
|
|
685
|
-
<span class="cline-any cline-yes">1x</span>
|
|
481
|
+
<span class="cline-any cline-no"> </span>
|
|
686
482
|
<span class="cline-any cline-no"> </span>
|
|
687
483
|
<span class="cline-any cline-no"> </span>
|
|
688
484
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -752,62 +548,65 @@ export <span class="fstat-no" title="function not covered" >function defineResou
|
|
|
752
548
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
753
549
|
|
|
754
550
|
// Hook computing default abilities for a given user
|
|
755
|
-
export
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
551
|
+
export function defineUserAbilities (subject, can, cannot) {
|
|
552
|
+
// Allow user registration
|
|
553
|
+
can('service', 'users')
|
|
554
|
+
can('create', 'users')
|
|
555
|
+
// Verification email, reset password, etc.
|
|
556
|
+
can('service', 'account')
|
|
557
|
+
can(['create', 'verifyEmail'], 'account')
|
|
558
|
+
// Allow import/export
|
|
559
|
+
can('service', 'import-export')
|
|
560
|
+
can('create', 'import-export')
|
|
561
|
+
// Allow push registration
|
|
562
|
+
can('service', 'push')
|
|
563
|
+
can('create', 'push')
|
|
564
|
+
// Allow tag management
|
|
565
|
+
can('service', 'tags')
|
|
566
|
+
can('read', 'tags')
|
|
567
|
+
if (subject && subject._id) {
|
|
568
|
+
// Read user profiles for authorizing
|
|
569
|
+
can('read', 'users')
|
|
570
|
+
// Update user profile and destroy it
|
|
571
|
+
can(['update', 'remove'], 'users', { _id: subject._id })
|
|
572
|
+
// Access authorisation service, then rights will be granted on a per-resource basis
|
|
573
|
+
can('service', 'authorisations')
|
|
574
|
+
// Access storage service, then rights will be granted on a per-resource basis
|
|
575
|
+
can('service', 'storage')
|
|
576
|
+
// This is for the user avatar
|
|
577
|
+
// take care that the storage service uses 'id' as input but produces _id as output
|
|
578
|
+
can('create', 'storage', { id: 'avatars/' + subject._id.toString() })
|
|
579
|
+
can('create', 'storage', { id: 'avatars/' + subject._id.toString() + '.thumbnail' })
|
|
580
|
+
can(['createMultipartUpload', 'completeMultipartUpload', 'uploadPart', 'putObject'], 'storage', { id: 'avatars/' + subject._id.toString() })
|
|
581
|
+
can(['createMultipartUpload', 'completeMultipartUpload', 'uploadPart', 'putObject'], 'storage', { id: 'avatars/' + subject._id.toString() + '.thumbnail' })
|
|
582
|
+
can('remove', 'storage', { _id: 'avatars/' + subject._id.toString() })
|
|
583
|
+
can('remove', 'storage', { _id: 'avatars/' + subject._id.toString() + '.thumbnail' })
|
|
584
|
+
// Avatar is part of user profiles so that they can be read by any
|
|
585
|
+
can('read', 'storage', { _id: { $regex: '^avatars/*' } })
|
|
586
|
+
}
|
|
587
|
+
}
|
|
789
588
|
|
|
790
589
|
// Compute abilities for a given user
|
|
791
|
-
export
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
<span class="
|
|
590
|
+
export async function defineAbilities (subject, ...args) {
|
|
591
|
+
const { build, can, cannot } = new AbilityBuilder(Ability)
|
|
592
|
+
|
|
593
|
+
// Run registered hooks providing any additional arguments used to handle complex use cases
|
|
594
|
+
await Promise.all(hooks.map(async hook => {
|
|
595
|
+
await hook(subject, can, cannot, ...args)
|
|
596
|
+
}))
|
|
597
|
+
|
|
598
|
+
// CASL cannot infer the object type from the object itself so we need
|
|
599
|
+
// to tell it how he can find the object type, i.e. service name.
|
|
600
|
+
return build({
|
|
601
|
+
detectSubjectType: resource => {
|
|
602
|
+
if (!resource || typeof resource === 'string') <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
804
603
|
<span class="cstat-no" title="statement not covered" > return resource</span>
|
|
805
604
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
605
|
+
return resource[RESOURCE_TYPE_KEY]
|
|
606
|
+
},
|
|
607
|
+
resolveAction
|
|
608
|
+
})
|
|
609
|
+
}
|
|
811
610
|
|
|
812
611
|
defineAbilities.registerHook = function (hook) {
|
|
813
612
|
if (!hooks.includes(hook)) {
|
|
@@ -819,30 +618,31 @@ defineAbilities.unregisterHook = <span class="fstat-no" title="function not cove
|
|
|
819
618
|
<span class="cstat-no" title="statement not covered" > hooks = hooks.filter(registeredHook => registeredHook !== hook)</span>
|
|
820
619
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
821
620
|
|
|
822
|
-
export
|
|
823
|
-
<span class="
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
<span class="
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
621
|
+
export function hasServiceAbilities (abilities, service) {
|
|
622
|
+
if (!abilities) <span class="branch-0 cbranch-no" title="branch not covered" >return false</span>
|
|
623
|
+
// The unique identifier of a service is its path not its name.
|
|
624
|
+
// Indeed we have for instance a 'groups' service in each context
|
|
625
|
+
// Take care that in client we have the service path while on server we have the actual object
|
|
626
|
+
const path = typeof service === 'string' <span class="branch-0 cbranch-no" title="branch not covered" >? service </span>: service.getPath()
|
|
627
|
+
// */groups will allow to access any groups service in any context
|
|
628
|
+
const allContextsPath = _.replace(path, /^.*\//, '*/')
|
|
629
|
+
return abilities.can('service', path) ||
|
|
630
|
+
abilities.can('service', `*/${path}`) ||
|
|
631
|
+
abilities.can('service', allContextsPath)
|
|
632
|
+
}
|
|
833
633
|
|
|
834
|
-
export
|
|
835
|
-
<span class="
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
<span class="
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
634
|
+
export function hasResourceAbilities (abilities, operation, resourceType, context, resource) {
|
|
635
|
+
if (!abilities) <span class="branch-0 cbranch-no" title="branch not covered" >return false</span>
|
|
636
|
+
// Create a shallow copy adding context and type
|
|
637
|
+
const object = Object.assign({}, resource)
|
|
638
|
+
object[RESOURCE_TYPE_KEY] = resourceType
|
|
639
|
+
// Add a virtual context to take it into account for object having no link to it
|
|
640
|
+
if (context) <span class="branch-0 cbranch-no" title="branch not covered" >object.context = (typeof context === 'object' ? context._id.toString() : context.toString())</span>
|
|
641
|
+
|
|
642
|
+
const result = abilities.can(operation, object)
|
|
643
|
+
|
|
644
|
+
return result
|
|
645
|
+
}
|
|
846
646
|
|
|
847
647
|
// Utility function used to remove the virtual context from query
|
|
848
648
|
export <span class="fstat-no" title="function not covered" >function removeContext (query) {</span>
|
|
@@ -901,112 +701,6 @@ export <span class="fstat-no" title="function not covered" >function countSubjec
|
|
|
901
701
|
<span class="cstat-no" title="statement not covered" > return subjectService.find({ query })</span>
|
|
902
702
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
903
703
|
|
|
904
|
-
// Hook computing organisation abilities for a given user
|
|
905
|
-
export <span class="fstat-no" title="function not covered" >function defineOrganisationAbilities (subject, can, cannot) {</span>
|
|
906
|
-
<span class="cstat-no" title="statement not covered" > if (subject) {</span>
|
|
907
|
-
<span class="cstat-no" title="statement not covered" > // Create new organisations</span>
|
|
908
|
-
<span class="cstat-no" title="statement not covered" > can('service', 'organisations')</span>
|
|
909
|
-
<span class="cstat-no" title="statement not covered" > can('create', 'organisations')</span>
|
|
910
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
911
|
-
<span class="cstat-no" title="statement not covered" > if (subject.organisations) {</span>
|
|
912
|
-
<span class="cstat-no" title="statement not covered" > subject.organisations.forEach(organisation => {</span>
|
|
913
|
-
<span class="cstat-no" title="statement not covered" > if (organisation._id) {</span>
|
|
914
|
-
<span class="cstat-no" title="statement not covered" > // Generic rules for resources</span>
|
|
915
|
-
<span class="cstat-no" title="statement not covered" > defineResourceRules(subject, organisation, 'organisations', can)</span>
|
|
916
|
-
<span class="cstat-no" title="statement not covered" > // Specific rules for organisations</span>
|
|
917
|
-
<span class="cstat-no" title="statement not covered" > const role = Roles[organisation.permissions]</span>
|
|
918
|
-
<span class="cstat-no" title="statement not covered" > if (role >= Roles.member) {</span>
|
|
919
|
-
<span class="cstat-no" title="statement not covered" > // The unique identifier of a service is its path not its name.</span>
|
|
920
|
-
<span class="cstat-no" title="statement not covered" > // Indeed we have for instance a 'groups' service in each organisation.</span>
|
|
921
|
-
<span class="cstat-no" title="statement not covered" > can('service', organisation._id.toString() + '/members')</span>
|
|
922
|
-
<span class="cstat-no" title="statement not covered" > can('read', 'members', { context: organisation._id })</span>
|
|
923
|
-
<span class="cstat-no" title="statement not covered" > can('service', organisation._id.toString() + '/tags')</span>
|
|
924
|
-
<span class="cstat-no" title="statement not covered" > // Tags are public</span>
|
|
925
|
-
<span class="cstat-no" title="statement not covered" > can('read', 'tags', { context: organisation._id })</span>
|
|
926
|
-
<span class="cstat-no" title="statement not covered" > // Groups are private</span>
|
|
927
|
-
<span class="cstat-no" title="statement not covered" > can('service', organisation._id.toString() + '/groups')</span>
|
|
928
|
-
<span class="cstat-no" title="statement not covered" > can('service', organisation._id.toString() + '/storage')</span>
|
|
929
|
-
<span class="cstat-no" title="statement not covered" > can(['read', 'create', 'remove', 'createMultipartUpload', 'completeMultipartUpload', 'uploadPart', 'putObject'], 'storage', { context: organisation._id })</span>
|
|
930
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
931
|
-
<span class="cstat-no" title="statement not covered" > if (role >= Roles.manager) {</span>
|
|
932
|
-
<span class="cstat-no" title="statement not covered" > can('update', 'members', { context: organisation._id })</span>
|
|
933
|
-
<span class="cstat-no" title="statement not covered" > // Managers can manage all groups/tags</span>
|
|
934
|
-
<span class="cstat-no" title="statement not covered" > can('all', 'groups', { context: organisation._id })</span>
|
|
935
|
-
<span class="cstat-no" title="statement not covered" > can(['create', 'remove'], 'authorisations', { resourcesService: organisation._id.toString() + '/groups', scope: 'groups' })</span>
|
|
936
|
-
<span class="cstat-no" title="statement not covered" > can('all', 'tags', { context: organisation._id })</span>
|
|
937
|
-
<span class="cstat-no" title="statement not covered" > // Remove invited members</span>
|
|
938
|
-
<span class="cstat-no" title="statement not covered" > can(['remove'], 'users', { 'sponsor.organisationId': organisation._id })</span>
|
|
939
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
940
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
941
|
-
<span class="cstat-no" title="statement not covered" > })</span>
|
|
942
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
943
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
944
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
945
|
-
|
|
946
|
-
// Hook computing group abilities for a given user
|
|
947
|
-
export <span class="fstat-no" title="function not covered" >function defineGroupAbilities (subject, can, cannot) {</span>
|
|
948
|
-
<span class="cstat-no" title="statement not covered" > if (subject) {</span>
|
|
949
|
-
<span class="cstat-no" title="statement not covered" > if (subject.groups) {</span>
|
|
950
|
-
<span class="cstat-no" title="statement not covered" > subject.groups.forEach(group => {</span>
|
|
951
|
-
<span class="cstat-no" title="statement not covered" > if (group._id) {</span>
|
|
952
|
-
<span class="cstat-no" title="statement not covered" > // Specific rules for groups</span>
|
|
953
|
-
<span class="cstat-no" title="statement not covered" > const role = Roles[group.permissions]</span>
|
|
954
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
955
|
-
<span class="cstat-no" title="statement not covered" > if (role >= Roles.member) {</span>
|
|
956
|
-
<span class="cstat-no" title="statement not covered" > can('read', 'groups', { _id: group._id })</span>
|
|
957
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
958
|
-
<span class="cstat-no" title="statement not covered" > if (role >= Roles.manager) {</span>
|
|
959
|
-
<span class="cstat-no" title="statement not covered" > can(['create', 'remove'], 'authorisations', { resource: group._id, permissions: 'member' })</span>
|
|
960
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
961
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
962
|
-
<span class="cstat-no" title="statement not covered" > })</span>
|
|
963
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
964
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
965
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
966
|
-
|
|
967
|
-
// Helper functions to find the members of a given organisation
|
|
968
|
-
export <span class="fstat-no" title="function not covered" >function findMembersOfOrganisation (usersService, organisationId, role) {</span>
|
|
969
|
-
<span class="cstat-no" title="statement not covered" > return findSubjectsForResource(usersService, 'organisations', organisationId, role)</span>
|
|
970
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
971
|
-
|
|
972
|
-
export <span class="fstat-no" title="function not covered" >function countMembersOfOrganisation (usersService, organisationId, role) {</span>
|
|
973
|
-
<span class="cstat-no" title="statement not covered" > return countSubjectsForResource(usersService, 'organisations', organisationId, role)</span>
|
|
974
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
975
|
-
|
|
976
|
-
// Helper functions to find the members of a given group
|
|
977
|
-
export <span class="fstat-no" title="function not covered" >function findMembersOfGroup (membersService, groupId, role) {</span>
|
|
978
|
-
<span class="cstat-no" title="statement not covered" > return findSubjectsForResource(membersService, 'groups', groupId, role)</span>
|
|
979
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
980
|
-
|
|
981
|
-
export <span class="fstat-no" title="function not covered" >function countMembersOfGroup (membersService, groupId, role) {</span>
|
|
982
|
-
<span class="cstat-no" title="statement not covered" > return countSubjectsForResource(membersService, 'groups', groupId, role)</span>
|
|
983
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
984
|
-
|
|
985
|
-
// Helper functions to find the members with a given tag
|
|
986
|
-
export <span class="fstat-no" title="function not covered" >function findMembersWithTag (membersService, tagId) {</span>
|
|
987
|
-
<span class="cstat-no" title="statement not covered" > return findSubjectsForResource(membersService, 'tags', tagId)</span>
|
|
988
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
989
|
-
|
|
990
|
-
export <span class="fstat-no" title="function not covered" >function countMembersWithTag (membersService, tagId) {</span>
|
|
991
|
-
<span class="cstat-no" title="statement not covered" > return countSubjectsForResource(membersService, 'tags', tagId)</span>
|
|
992
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
993
|
-
|
|
994
|
-
export <span class="fstat-no" title="function not covered" >function getRoleForOrganisation (user, organisationId) {</span>
|
|
995
|
-
<span class="cstat-no" title="statement not covered" > const result = _.find(user.organisations, { _id: organisationId })</span>
|
|
996
|
-
<span class="cstat-no" title="statement not covered" > if (!_.isUndefined(result)) return result.permissions</span>
|
|
997
|
-
<span class="cstat-no" title="statement not covered" > return undefined</span>
|
|
998
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
999
|
-
|
|
1000
|
-
export <span class="fstat-no" title="function not covered" >function getRoleForGroup (user, organisationId, groupId) {</span>
|
|
1001
|
-
<span class="cstat-no" title="statement not covered" > const result = _.find(user.groups, { context: organisationId, _id: groupId })</span>
|
|
1002
|
-
<span class="cstat-no" title="statement not covered" > if (!_.isUndefined(result)) return result.permissions</span>
|
|
1003
|
-
<span class="cstat-no" title="statement not covered" > return undefined</span>
|
|
1004
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1005
|
-
|
|
1006
|
-
export <span class="fstat-no" title="function not covered" >function findGroupsWithRole (user, organisationId, role) {</span>
|
|
1007
|
-
<span class="cstat-no" title="statement not covered" > return _.filter(user.groups || [], { context: organisationId, permissions: (typeof role === 'string' ? role : RoleNames[role]) })</span>
|
|
1008
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
1009
|
-
|
|
1010
704
|
export <span class="fstat-no" title="function not covered" >function isSeniorRole (roleName, juniorName) {</span>
|
|
1011
705
|
<span class="cstat-no" title="statement not covered" > return Roles[roleName] >= Roles[juniorName]</span>
|
|
1012
706
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
@@ -1033,7 +727,7 @@ export <span class="fstat-no" title="function not covered" >function getJuniorRo
|
|
|
1033
727
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
1034
728
|
Code coverage generated by
|
|
1035
729
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1036
|
-
at
|
|
730
|
+
at 2026-03-10T09:15:24.743Z
|
|
1037
731
|
</div>
|
|
1038
732
|
<script src="../../prettify.js"></script>
|
|
1039
733
|
<script>
|