@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">72.26% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>198/274</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">66.66% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>22/33</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">66.66% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>8/12</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">72.26% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>198/274</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,7 +282,62 @@
|
|
|
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
|
|
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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
286
341
|
<span class="cline-any cline-yes">1x</span>
|
|
287
342
|
<span class="cline-any cline-yes">1x</span>
|
|
288
343
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -303,35 +358,28 @@
|
|
|
303
358
|
<span class="cline-any cline-yes">1x</span>
|
|
304
359
|
<span class="cline-any cline-yes">1x</span>
|
|
305
360
|
<span class="cline-any cline-yes">1x</span>
|
|
361
|
+
<span class="cline-any cline-yes">13x</span>
|
|
362
|
+
<span class="cline-any cline-yes">13x</span>
|
|
306
363
|
<span class="cline-any cline-no"> </span>
|
|
307
|
-
<span class="cline-any cline-
|
|
308
|
-
<span class="cline-any cline-
|
|
309
|
-
<span class="cline-any cline-
|
|
310
|
-
<span class="cline-any cline-
|
|
311
|
-
<span class="cline-any cline-
|
|
312
|
-
<span class="cline-any cline-
|
|
313
|
-
<span class="cline-any cline-
|
|
314
|
-
<span class="cline-any cline-no"> </span>
|
|
315
|
-
<span class="cline-any cline-no"> </span>
|
|
364
|
+
<span class="cline-any cline-yes">13x</span>
|
|
365
|
+
<span class="cline-any cline-yes">8x</span>
|
|
366
|
+
<span class="cline-any cline-yes">8x</span>
|
|
367
|
+
<span class="cline-any cline-yes">13x</span>
|
|
368
|
+
<span class="cline-any cline-yes">5x</span>
|
|
369
|
+
<span class="cline-any cline-yes">5x</span>
|
|
370
|
+
<span class="cline-any cline-yes">13x</span>
|
|
316
371
|
<span class="cline-any cline-yes">1x</span>
|
|
317
372
|
<span class="cline-any cline-yes">1x</span>
|
|
318
373
|
<span class="cline-any cline-yes">1x</span>
|
|
374
|
+
<span class="cline-any cline-yes">13x</span>
|
|
375
|
+
<span class="cline-any cline-yes">13x</span>
|
|
376
|
+
<span class="cline-any cline-yes">2x</span>
|
|
377
|
+
<span class="cline-any cline-yes">2x</span>
|
|
378
|
+
<span class="cline-any cline-yes">2x</span>
|
|
379
|
+
<span class="cline-any cline-yes">13x</span>
|
|
380
|
+
<span class="cline-any cline-yes">13x</span>
|
|
381
|
+
<span class="cline-any cline-yes">1x</span>
|
|
319
382
|
<span class="cline-any cline-yes">1x</span>
|
|
320
|
-
<span class="cline-any cline-no"> </span>
|
|
321
|
-
<span class="cline-any cline-no"> </span>
|
|
322
|
-
<span class="cline-any cline-no"> </span>
|
|
323
|
-
<span class="cline-any cline-no"> </span>
|
|
324
|
-
<span class="cline-any cline-no"> </span>
|
|
325
|
-
<span class="cline-any cline-no"> </span>
|
|
326
|
-
<span class="cline-any cline-no"> </span>
|
|
327
|
-
<span class="cline-any cline-no"> </span>
|
|
328
|
-
<span class="cline-any cline-no"> </span>
|
|
329
|
-
<span class="cline-any cline-no"> </span>
|
|
330
|
-
<span class="cline-any cline-no"> </span>
|
|
331
|
-
<span class="cline-any cline-no"> </span>
|
|
332
|
-
<span class="cline-any cline-no"> </span>
|
|
333
|
-
<span class="cline-any cline-no"> </span>
|
|
334
|
-
<span class="cline-any cline-no"> </span>
|
|
335
383
|
<span class="cline-any cline-yes">1x</span>
|
|
336
384
|
<span class="cline-any cline-yes">1x</span>
|
|
337
385
|
<span class="cline-any cline-no"> </span>
|
|
@@ -346,22 +394,11 @@
|
|
|
346
394
|
<span class="cline-any cline-no"> </span>
|
|
347
395
|
<span class="cline-any cline-no"> </span>
|
|
348
396
|
<span class="cline-any cline-no"> </span>
|
|
349
|
-
<span class="cline-any cline-yes">1x</span>
|
|
350
|
-
<span class="cline-any cline-yes">1x</span>
|
|
351
|
-
<span class="cline-any cline-yes">1x</span>
|
|
352
|
-
<span class="cline-any cline-yes">1x</span>
|
|
353
|
-
<span class="cline-any cline-yes">1x</span>
|
|
354
|
-
<span class="cline-any cline-yes">1x</span>
|
|
355
|
-
<span class="cline-any cline-yes">1x</span>
|
|
356
|
-
<span class="cline-any cline-yes">1x</span>
|
|
357
|
-
<span class="cline-any cline-yes">1x</span>
|
|
358
|
-
<span class="cline-any cline-yes">1x</span>
|
|
359
|
-
<span class="cline-any cline-yes">1x</span>
|
|
360
|
-
<span class="cline-any cline-yes">1x</span>
|
|
361
|
-
<span class="cline-any cline-yes">1x</span>
|
|
362
397
|
<span class="cline-any cline-no"> </span>
|
|
363
398
|
<span class="cline-any cline-no"> </span>
|
|
364
399
|
<span class="cline-any cline-no"> </span>
|
|
400
|
+
<span class="cline-any cline-yes">1x</span>
|
|
401
|
+
<span class="cline-any cline-yes">1x</span>
|
|
365
402
|
<span class="cline-any cline-no"> </span>
|
|
366
403
|
<span class="cline-any cline-no"> </span>
|
|
367
404
|
<span class="cline-any cline-no"> </span>
|
|
@@ -377,6 +414,8 @@
|
|
|
377
414
|
<span class="cline-any cline-no"> </span>
|
|
378
415
|
<span class="cline-any cline-no"> </span>
|
|
379
416
|
<span class="cline-any cline-no"> </span>
|
|
417
|
+
<span class="cline-any cline-yes">1x</span>
|
|
418
|
+
<span class="cline-any cline-yes">1x</span>
|
|
380
419
|
<span class="cline-any cline-no"> </span>
|
|
381
420
|
<span class="cline-any cline-no"> </span>
|
|
382
421
|
<span class="cline-any cline-no"> </span>
|
|
@@ -398,19 +437,90 @@
|
|
|
398
437
|
<span class="cline-any cline-no"> </span>
|
|
399
438
|
<span class="cline-any cline-yes">1x</span>
|
|
400
439
|
<span class="cline-any cline-yes">1x</span>
|
|
440
|
+
<span class="cline-any cline-yes">1x</span>
|
|
441
|
+
<span class="cline-any cline-yes">1x</span>
|
|
442
|
+
<span class="cline-any cline-yes">1x</span>
|
|
443
|
+
<span class="cline-any cline-yes">1x</span>
|
|
444
|
+
<span class="cline-any cline-yes">1x</span>
|
|
445
|
+
<span class="cline-any cline-yes">1x</span>
|
|
446
|
+
<span class="cline-any cline-yes">1x</span>
|
|
447
|
+
<span class="cline-any cline-yes">1x</span>
|
|
448
|
+
<span class="cline-any cline-yes">1x</span>
|
|
449
|
+
<span class="cline-any cline-yes">1x</span>
|
|
450
|
+
<span class="cline-any cline-yes">1x</span>
|
|
451
|
+
<span class="cline-any cline-yes">44x</span>
|
|
452
|
+
<span class="cline-any cline-yes">44x</span>
|
|
453
|
+
<span class="cline-any cline-yes">44x</span>
|
|
454
|
+
<span class="cline-any cline-yes">44x</span>
|
|
455
|
+
<span class="cline-any cline-yes">44x</span>
|
|
456
|
+
<span class="cline-any cline-yes">44x</span>
|
|
457
|
+
<span class="cline-any cline-yes">44x</span>
|
|
458
|
+
<span class="cline-any cline-yes">44x</span>
|
|
401
459
|
<span class="cline-any cline-no"> </span>
|
|
402
460
|
<span class="cline-any cline-no"> </span>
|
|
403
|
-
<span class="cline-any cline-
|
|
404
|
-
<span class="cline-any cline-
|
|
405
|
-
<span class="cline-any cline-
|
|
406
|
-
<span class="cline-any cline-
|
|
407
|
-
<span class="cline-any cline-
|
|
408
|
-
<span class="cline-any cline-
|
|
409
|
-
<span class="cline-any cline-
|
|
410
|
-
<span class="cline-any cline-
|
|
411
|
-
<span class="cline-any cline-
|
|
412
|
-
<span class="cline-any cline-
|
|
413
|
-
<span class="cline-any cline-
|
|
461
|
+
<span class="cline-any cline-yes">44x</span>
|
|
462
|
+
<span class="cline-any cline-yes">44x</span>
|
|
463
|
+
<span class="cline-any cline-yes">44x</span>
|
|
464
|
+
<span class="cline-any cline-yes">44x</span>
|
|
465
|
+
<span class="cline-any cline-yes">44x</span>
|
|
466
|
+
<span class="cline-any cline-yes">44x</span>
|
|
467
|
+
<span class="cline-any cline-yes">44x</span>
|
|
468
|
+
<span class="cline-any cline-yes">44x</span>
|
|
469
|
+
<span class="cline-any cline-yes">44x</span>
|
|
470
|
+
<span class="cline-any cline-yes">44x</span>
|
|
471
|
+
<span class="cline-any cline-yes">44x</span>
|
|
472
|
+
<span class="cline-any cline-yes">44x</span>
|
|
473
|
+
<span class="cline-any cline-yes">44x</span>
|
|
474
|
+
<span class="cline-any cline-yes">44x</span>
|
|
475
|
+
<span class="cline-any cline-yes">44x</span>
|
|
476
|
+
<span class="cline-any cline-yes">44x</span>
|
|
477
|
+
<span class="cline-any cline-yes">44x</span>
|
|
478
|
+
<span class="cline-any cline-yes">44x</span>
|
|
479
|
+
<span class="cline-any cline-yes">44x</span>
|
|
480
|
+
<span class="cline-any cline-yes">44x</span>
|
|
481
|
+
<span class="cline-any cline-yes">17x</span>
|
|
482
|
+
<span class="cline-any cline-yes">17x</span>
|
|
483
|
+
<span class="cline-any cline-yes">17x</span>
|
|
484
|
+
<span class="cline-any cline-yes">17x</span>
|
|
485
|
+
<span class="cline-any cline-yes">17x</span>
|
|
486
|
+
<span class="cline-any cline-yes">17x</span>
|
|
487
|
+
<span class="cline-any cline-yes">17x</span>
|
|
488
|
+
<span class="cline-any cline-yes">44x</span>
|
|
489
|
+
<span class="cline-any cline-yes">27x</span>
|
|
490
|
+
<span class="cline-any cline-yes">27x</span>
|
|
491
|
+
<span class="cline-any cline-yes">27x</span>
|
|
492
|
+
<span class="cline-any cline-yes">27x</span>
|
|
493
|
+
<span class="cline-any cline-yes">27x</span>
|
|
494
|
+
<span class="cline-any cline-yes">27x</span>
|
|
495
|
+
<span class="cline-any cline-yes">27x</span>
|
|
496
|
+
<span class="cline-any cline-yes">27x</span>
|
|
497
|
+
<span class="cline-any cline-yes">27x</span>
|
|
498
|
+
<span class="cline-any cline-yes">27x</span>
|
|
499
|
+
<span class="cline-any cline-yes">18x</span>
|
|
500
|
+
<span class="cline-any cline-yes">18x</span>
|
|
501
|
+
<span class="cline-any cline-yes">18x</span>
|
|
502
|
+
<span class="cline-any cline-yes">18x</span>
|
|
503
|
+
<span class="cline-any cline-yes">18x</span>
|
|
504
|
+
<span class="cline-any cline-yes">27x</span>
|
|
505
|
+
<span class="cline-any cline-yes">44x</span>
|
|
506
|
+
<span class="cline-any cline-yes">9x</span>
|
|
507
|
+
<span class="cline-any cline-yes">9x</span>
|
|
508
|
+
<span class="cline-any cline-yes">44x</span>
|
|
509
|
+
<span class="cline-any cline-yes">1x</span>
|
|
510
|
+
<span class="cline-any cline-yes">1x</span>
|
|
511
|
+
<span class="cline-any cline-yes">51x</span>
|
|
512
|
+
<span class="cline-any cline-yes">51x</span>
|
|
513
|
+
<span class="cline-any cline-yes">6x</span>
|
|
514
|
+
<span class="cline-any cline-yes">6x</span>
|
|
515
|
+
<span class="cline-any cline-yes">6x</span>
|
|
516
|
+
<span class="cline-any cline-yes">6x</span>
|
|
517
|
+
<span class="cline-any cline-yes">6x</span>
|
|
518
|
+
<span class="cline-any cline-yes">6x</span>
|
|
519
|
+
<span class="cline-any cline-yes">51x</span>
|
|
520
|
+
<span class="cline-any cline-yes">45x</span>
|
|
521
|
+
<span class="cline-any cline-yes">45x</span>
|
|
522
|
+
<span class="cline-any cline-yes">45x</span>
|
|
523
|
+
<span class="cline-any cline-yes">51x</span>
|
|
414
524
|
<span class="cline-any cline-yes">1x</span>
|
|
415
525
|
<span class="cline-any cline-yes">1x</span>
|
|
416
526
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -432,109 +542,136 @@
|
|
|
432
542
|
<span class="cline-any cline-yes">1x</span>
|
|
433
543
|
<span class="cline-any cline-yes">1x</span>
|
|
434
544
|
<span class="cline-any cline-yes">1x</span>
|
|
545
|
+
<span class="cline-any cline-yes">2x</span>
|
|
546
|
+
<span class="cline-any cline-yes">2x</span>
|
|
435
547
|
<span class="cline-any cline-no"> </span>
|
|
436
548
|
<span class="cline-any cline-no"> </span>
|
|
437
549
|
<span class="cline-any cline-no"> </span>
|
|
438
550
|
<span class="cline-any cline-no"> </span>
|
|
439
551
|
<span class="cline-any cline-no"> </span>
|
|
440
|
-
<span class="cline-any cline-
|
|
441
|
-
<span class="cline-any cline-
|
|
442
|
-
<span class="cline-any cline-
|
|
443
|
-
<span class="cline-any cline-no"> </span>
|
|
444
|
-
<span class="cline-any cline-no"> </span>
|
|
445
|
-
<span class="cline-any cline-yes">1x</span>
|
|
446
|
-
<span class="cline-any cline-yes">1x</span>
|
|
447
|
-
<span class="cline-any cline-yes">9x</span>
|
|
448
|
-
<span class="cline-any cline-yes">9x</span>
|
|
449
|
-
<span class="cline-any cline-yes">9x</span>
|
|
450
|
-
<span class="cline-any cline-yes">9x</span>
|
|
451
|
-
<span class="cline-any cline-yes">9x</span>
|
|
452
|
-
<span class="cline-any cline-yes">9x</span>
|
|
453
|
-
<span class="cline-any cline-yes">9x</span>
|
|
454
|
-
<span class="cline-any cline-yes">9x</span>
|
|
455
|
-
<span class="cline-any cline-yes">9x</span>
|
|
456
|
-
<span class="cline-any cline-yes">9x</span>
|
|
457
|
-
<span class="cline-any cline-yes">9x</span>
|
|
458
|
-
<span class="cline-any cline-yes">9x</span>
|
|
459
|
-
<span class="cline-any cline-yes">9x</span>
|
|
460
|
-
<span class="cline-any cline-yes">9x</span>
|
|
461
|
-
<span class="cline-any cline-yes">9x</span>
|
|
462
|
-
<span class="cline-any cline-yes">9x</span>
|
|
463
|
-
<span class="cline-any cline-no"> </span>
|
|
464
|
-
<span class="cline-any cline-no"> </span>
|
|
465
|
-
<span class="cline-any cline-yes">9x</span>
|
|
466
|
-
<span class="cline-any cline-yes">9x</span>
|
|
467
|
-
<span class="cline-any cline-yes">9x</span>
|
|
468
|
-
<span class="cline-any cline-yes">9x</span>
|
|
469
|
-
<span class="cline-any cline-yes">9x</span>
|
|
470
|
-
<span class="cline-any cline-yes">9x</span>
|
|
471
|
-
<span class="cline-any cline-no"> </span>
|
|
472
|
-
<span class="cline-any cline-no"> </span>
|
|
473
|
-
<span class="cline-any cline-yes">9x</span>
|
|
474
|
-
<span class="cline-any cline-yes">9x</span>
|
|
475
|
-
<span class="cline-any cline-yes">9x</span>
|
|
476
|
-
<span class="cline-any cline-yes">9x</span>
|
|
477
|
-
<span class="cline-any cline-yes">9x</span>
|
|
478
|
-
<span class="cline-any cline-yes">1x</span>
|
|
479
|
-
<span class="cline-any cline-yes">1x</span>
|
|
480
|
-
<span class="cline-any cline-yes">1x</span>
|
|
481
|
-
<span class="cline-any cline-yes">1x</span>
|
|
482
|
-
<span class="cline-any cline-yes">1x</span>
|
|
483
|
-
<span class="cline-any cline-yes">1x</span>
|
|
484
|
-
<span class="cline-any cline-yes">1x</span>
|
|
485
|
-
<span class="cline-any cline-yes">1x</span>
|
|
486
|
-
<span class="cline-any cline-yes">1x</span>
|
|
487
|
-
<span class="cline-any cline-yes">1x</span>
|
|
488
|
-
<span class="cline-any cline-yes">1x</span>
|
|
489
|
-
<span class="cline-any cline-yes">1x</span>
|
|
490
|
-
<span class="cline-any cline-yes">1x</span>
|
|
552
|
+
<span class="cline-any cline-yes">2x</span>
|
|
553
|
+
<span class="cline-any cline-yes">2x</span>
|
|
554
|
+
<span class="cline-any cline-yes">2x</span>
|
|
491
555
|
<span class="cline-any cline-yes">1x</span>
|
|
492
556
|
<span class="cline-any cline-yes">1x</span>
|
|
557
|
+
<span class="cline-any cline-yes">11x</span>
|
|
558
|
+
<span class="cline-any cline-yes">11x</span>
|
|
559
|
+
<span class="cline-any cline-yes">11x</span>
|
|
560
|
+
<span class="cline-any cline-yes">11x</span>
|
|
561
|
+
<span class="cline-any cline-yes">11x</span>
|
|
562
|
+
<span class="cline-any cline-yes">11x</span>
|
|
563
|
+
<span class="cline-any cline-yes">11x</span>
|
|
564
|
+
<span class="cline-any cline-yes">11x</span>
|
|
565
|
+
<span class="cline-any cline-yes">11x</span>
|
|
566
|
+
<span class="cline-any cline-yes">11x</span>
|
|
567
|
+
<span class="cline-any cline-yes">11x</span>
|
|
568
|
+
<span class="cline-any cline-yes">11x</span>
|
|
569
|
+
<span class="cline-any cline-yes">11x</span>
|
|
570
|
+
<span class="cline-any cline-yes">11x</span>
|
|
571
|
+
<span class="cline-any cline-yes">11x</span>
|
|
572
|
+
<span class="cline-any cline-yes">11x</span>
|
|
493
573
|
<span class="cline-any cline-no"> </span>
|
|
494
574
|
<span class="cline-any cline-no"> </span>
|
|
575
|
+
<span class="cline-any cline-yes">11x</span>
|
|
576
|
+
<span class="cline-any cline-yes">11x</span>
|
|
577
|
+
<span class="cline-any cline-yes">11x</span>
|
|
578
|
+
<span class="cline-any cline-yes">11x</span>
|
|
579
|
+
<span class="cline-any cline-yes">11x</span>
|
|
580
|
+
<span class="cline-any cline-yes">11x</span>
|
|
495
581
|
<span class="cline-any cline-no"> </span>
|
|
496
582
|
<span class="cline-any cline-no"> </span>
|
|
583
|
+
<span class="cline-any cline-yes">11x</span>
|
|
584
|
+
<span class="cline-any cline-yes">11x</span>
|
|
585
|
+
<span class="cline-any cline-yes">11x</span>
|
|
586
|
+
<span class="cline-any cline-yes">11x</span>
|
|
587
|
+
<span class="cline-any cline-yes">11x</span>
|
|
588
|
+
<span class="cline-any cline-yes">17x</span>
|
|
589
|
+
<span class="cline-any cline-yes">17x</span>
|
|
590
|
+
<span class="cline-any cline-yes">4x</span>
|
|
591
|
+
<span class="cline-any cline-yes">4x</span>
|
|
592
|
+
<span class="cline-any cline-yes">4x</span>
|
|
593
|
+
<span class="cline-any cline-yes">4x</span>
|
|
594
|
+
<span class="cline-any cline-yes">4x</span>
|
|
595
|
+
<span class="cline-any cline-yes">4x</span>
|
|
596
|
+
<span class="cline-any cline-yes">4x</span>
|
|
597
|
+
<span class="cline-any cline-yes">4x</span>
|
|
598
|
+
<span class="cline-any cline-yes">4x</span>
|
|
599
|
+
<span class="cline-any cline-yes">17x</span>
|
|
600
|
+
<span class="cline-any cline-yes">4x</span>
|
|
601
|
+
<span class="cline-any cline-yes">4x</span>
|
|
602
|
+
<span class="cline-any cline-yes">4x</span>
|
|
497
603
|
<span class="cline-any cline-yes">1x</span>
|
|
498
604
|
<span class="cline-any cline-yes">1x</span>
|
|
499
605
|
<span class="cline-any cline-yes">1x</span>
|
|
500
606
|
<span class="cline-any cline-yes">1x</span>
|
|
501
|
-
<span class="cline-any cline-yes">
|
|
502
|
-
<span class="cline-any cline-yes">
|
|
503
|
-
<span class="cline-any cline-yes">
|
|
607
|
+
<span class="cline-any cline-yes">4x</span>
|
|
608
|
+
<span class="cline-any cline-yes">4x</span>
|
|
609
|
+
<span class="cline-any cline-yes">4x</span>
|
|
610
|
+
<span class="cline-any cline-yes">4x</span>
|
|
611
|
+
<span class="cline-any cline-yes">17x</span>
|
|
612
|
+
<span class="cline-any cline-yes">11x</span>
|
|
613
|
+
<span class="cline-any cline-yes">11x</span>
|
|
504
614
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import makeDebug from 'debug'
|
|
505
615
|
import _ from 'lodash'
|
|
616
|
+
import qs from 'qs'
|
|
506
617
|
import 'winston-daily-rotate-file'
|
|
507
618
|
// import { RateLimiter } from 'limiter'
|
|
508
619
|
import HttpLimiter from 'express-rate-limit'
|
|
509
|
-
import mongodb from 'mongodb'
|
|
510
620
|
import errors from '@feathersjs/errors'
|
|
511
621
|
import { AuthenticationService, JWTStrategy } from '@feathersjs/authentication'
|
|
512
622
|
import { LocalStrategy } from '@feathersjs/authentication-local'
|
|
513
623
|
import OAuth from '@feathersjs/authentication-oauth'
|
|
514
624
|
import PasswordValidator from 'password-validator'
|
|
625
|
+
import { isValidObjectID } from './db.js'
|
|
515
626
|
|
|
516
627
|
const debug = makeDebug('kdk:core:authentication')
|
|
517
|
-
const { ObjectID } = mongodb
|
|
518
628
|
const { oauth, OAuthStrategy } = OAuth
|
|
519
629
|
const { NotAuthenticated } = errors
|
|
520
630
|
|
|
521
631
|
export class Authentication extends AuthenticationService {
|
|
522
632
|
// Feathers does not seem to take input payload into account when renewing the token,
|
|
523
633
|
// see https://github.com/feathersjs/feathers/issues/3419
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
<span class="
|
|
634
|
+
async getPayload (authResult, params) {
|
|
635
|
+
// Params can override defaults
|
|
636
|
+
if (params.payload) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
527
637
|
<span class="cstat-no" title="statement not covered" > return params.payload</span>
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
638
|
+
} else if (authResult.authentication && authResult.authentication.payload) {
|
|
639
|
+
// Avoid conflicting with default token options added when generating a new token
|
|
640
|
+
return _.omit(authResult.authentication.payload, ['aud', 'iss', 'exp', 'sub', 'iat', 'jti', 'nbf'])
|
|
641
|
+
} else {
|
|
642
|
+
return {}
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
// Similarly the subject will not be set by Feathers for stateless tokens that do not target existing users.
|
|
647
|
+
async getTokenOptions (authResult, params) {
|
|
648
|
+
const jwtOptions = await super.getTokenOptions(authResult, params)
|
|
649
|
+
if (!jwtOptions.subject) {
|
|
650
|
+
const subject = _.get(authResult, 'authentication.payload.sub')
|
|
651
|
+
if (subject) jwtOptions.subject = subject
|
|
652
|
+
}
|
|
653
|
+
return jwtOptions
|
|
654
|
+
}
|
|
535
655
|
}
|
|
536
656
|
|
|
537
657
|
export class AuthenticationProviderStrategy extends OAuthStrategy {
|
|
658
|
+
<span class="fstat-no" title="function not covered" > setAuthentication (auth) {</span>
|
|
659
|
+
<span class="cstat-no" title="statement not covered" > super.setAuthentication(auth)</span>
|
|
660
|
+
<span class="cstat-no" title="statement not covered" > const authConfig = this.authentication.configuration</span>
|
|
661
|
+
<span class="cstat-no" title="statement not covered" > const { oauth } = authConfig</span>
|
|
662
|
+
<span class="cstat-no" title="statement not covered" > // Single logout supported ?</span>
|
|
663
|
+
<span class="cstat-no" title="statement not covered" > const { logout_url: logoutUrl, post_logout_url: postLogoutUrl, key } = this.configuration</span>
|
|
664
|
+
<span class="cstat-no" title="statement not covered" > if (logoutUrl && key) {</span>
|
|
665
|
+
<span class="cstat-no" title="statement not covered" > // Cannot use oauth/:provider/logout route as oauth/:provider is already intercepted by feathers and this causes an error</span>
|
|
666
|
+
<span class="cstat-no" title="statement not covered" > this.app.get(`/oauth-logout/${this.name}`, (req, res) => {</span>
|
|
667
|
+
<span class="cstat-no" title="statement not covered" > return res.redirect(logoutUrl + '?' + qs.stringify({</span>
|
|
668
|
+
<span class="cstat-no" title="statement not covered" > post_logout_redirect_uri: postLogoutUrl || oauth.redirect,</span>
|
|
669
|
+
<span class="cstat-no" title="statement not covered" > client_id: key</span>
|
|
670
|
+
<span class="cstat-no" title="statement not covered" > }))</span>
|
|
671
|
+
<span class="cstat-no" title="statement not covered" > })</span>
|
|
672
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
673
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
674
|
+
|
|
538
675
|
<span class="fstat-no" title="function not covered" > async getEntityData (profile, entity) {</span>
|
|
539
676
|
<span class="cstat-no" title="statement not covered" > const createEntity = _.isNil(entity)</span>
|
|
540
677
|
<span class="cstat-no" title="statement not covered" > // Add provider Id</span>
|
|
@@ -553,6 +690,13 @@ export class AuthenticationProviderStrategy extends OAuthStrategy {
|
|
|
553
690
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
554
691
|
|
|
555
692
|
<span class="fstat-no" title="function not covered" > async getEntityQuery (profile) {</span>
|
|
693
|
+
<span class="cstat-no" title="statement not covered" > // Ensure the profile is right before requesting based on it</span>
|
|
694
|
+
<span class="cstat-no" title="statement not covered" > // as when an error is raised the profile will not contain any ID or email</span>
|
|
695
|
+
<span class="cstat-no" title="statement not covered" > // and we might build a request retrieving any user</span>
|
|
696
|
+
<span class="cstat-no" title="statement not covered" > if (!_.has(profile, 'id') && !_.has(profile, 'sub') && !_.has(profile, this.emailFieldInProfile || 'email')) {</span>
|
|
697
|
+
<span class="cstat-no" title="statement not covered" > // This ensure no user will be retrieved</span>
|
|
698
|
+
<span class="cstat-no" title="statement not covered" > return { $limit: 0 }</span>
|
|
699
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
556
700
|
<span class="cstat-no" title="statement not covered" > const query = {</span>
|
|
557
701
|
<span class="cstat-no" title="statement not covered" > $or: [</span>
|
|
558
702
|
<span class="cstat-no" title="statement not covered" > { [`${this.name}Id`]: profile.id || profile.sub },</span>
|
|
@@ -577,59 +721,80 @@ export class AuthenticationProviderStrategy extends OAuthStrategy {
|
|
|
577
721
|
// - a socket or a rest transport
|
|
578
722
|
// It also supports token given as query parameter
|
|
579
723
|
export class JWTAuthenticationStrategy extends JWTStrategy {
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
724
|
+
async authenticate (authentication, params) {
|
|
725
|
+
const { accessToken } = authentication
|
|
726
|
+
const authConfig = this.authentication.configuration
|
|
727
|
+
const { identityFields } = authConfig
|
|
728
|
+
const { entity } = this.configuration
|
|
729
|
+
const renewJwt = _.get(this.configuration, 'renewJwt', true)
|
|
730
|
+
const { provider, ...paramsWithoutProvider } = params
|
|
731
|
+
|
|
732
|
+
if (!accessToken) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
586
733
|
<span class="cstat-no" title="statement not covered" > throw new NotAuthenticated('No access token')</span>
|
|
587
734
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
588
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
589
|
-
<span class="cstat-no" title="statement not covered" > const payload = await this.authentication.verifyAccessToken(accessToken, params.jwt)</span>
|
|
590
|
-
<span class="cstat-no" title="statement not covered" > const result = {</span>
|
|
591
|
-
<span class="cstat-no" title="statement not covered" > // First key trick - by deleting the token here</span>
|
|
592
|
-
<span class="cstat-no" title="statement not covered" > // we will get Feathers generate a new one</span>
|
|
593
|
-
<span class="cstat-no" title="statement not covered" > // accessToken,</span>
|
|
594
|
-
<span class="cstat-no" title="statement not covered" > authentication: {</span>
|
|
595
|
-
<span class="cstat-no" title="statement not covered" > strategy: 'jwt',</span>
|
|
596
|
-
<span class="cstat-no" title="statement not covered" > accessToken,</span>
|
|
597
|
-
<span class="cstat-no" title="statement not covered" > payload</span>
|
|
598
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
599
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
600
|
-
<span class="cstat-no" title="statement not covered" > if (!renewJwt) result.accessToken = accessToken</span>
|
|
601
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
602
|
-
<span class="cstat-no" title="statement not covered" > // Second key trick</span>
|
|
603
|
-
<span class="cstat-no" title="statement not covered" > // Return user attached to the token if any</span>
|
|
604
|
-
<span class="cstat-no" title="statement not covered" > // Return basic information for a stateless token otherwise</span>
|
|
605
|
-
<span class="cstat-no" title="statement not covered" > // As we only target MongoDB now, check for a valid ID otherwise assume a stateless token as well</span>
|
|
606
|
-
<span class="cstat-no" title="statement not covered" > if (payload.sub && ObjectID.isValid(payload.sub)) {</span>
|
|
607
|
-
<span class="cstat-no" title="statement not covered" > const entityId = await this.getEntityId(result, params)</span>
|
|
608
|
-
<span class="cstat-no" title="statement not covered" > const value = await this.getEntity(entityId, params)</span>
|
|
609
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
610
|
-
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
611
|
-
<span class="cstat-no" title="statement not covered" > ...result,</span>
|
|
612
|
-
<span class="cstat-no" title="statement not covered" > [entity]: value</span>
|
|
613
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
614
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
615
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
616
|
-
<span class="cstat-no" title="statement not covered" > return result</span>
|
|
617
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
618
735
|
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
<span class="
|
|
631
|
-
|
|
632
|
-
|
|
736
|
+
const payload = await this.authentication.verifyAccessToken(accessToken, params.jwt)
|
|
737
|
+
const result = {
|
|
738
|
+
// First key trick - by deleting the token here
|
|
739
|
+
// we will get Feathers generate a new one
|
|
740
|
+
// accessToken,
|
|
741
|
+
authentication: {
|
|
742
|
+
strategy: 'jwt',
|
|
743
|
+
accessToken,
|
|
744
|
+
payload
|
|
745
|
+
}
|
|
746
|
+
}
|
|
747
|
+
if (!renewJwt) <span class="branch-0 cbranch-no" title="branch not covered" >result.accessToken = accessToken</span>
|
|
748
|
+
|
|
749
|
+
// Second key trick
|
|
750
|
+
// Return user attached to the token if any
|
|
751
|
+
// Return basic information for a stateless token otherwise
|
|
752
|
+
if (payload.sub) {
|
|
753
|
+
// Check for a valid MongoDB ID
|
|
754
|
+
if (isValidObjectID(payload.sub)) {
|
|
755
|
+
const entityId = await this.getEntityId(result, params)
|
|
756
|
+
const value = await this.getEntity(entityId, params)
|
|
757
|
+
|
|
758
|
+
return {
|
|
759
|
+
...result,
|
|
760
|
+
[entity]: value
|
|
761
|
+
}
|
|
762
|
+
} else if (identityFields) {
|
|
763
|
+
// Otherwise use others fields to identify the user if defined
|
|
764
|
+
const query = {
|
|
765
|
+
$or: _.reduce(identityFields, (or, field) => or.concat([{ [field]: payload.sub }]), []),
|
|
766
|
+
$limit: 1
|
|
767
|
+
}
|
|
768
|
+
// Avoid sending provider to internal call as it might raises some issues with hooks relying on it otherwise
|
|
769
|
+
const response = await this.entityService.find({ ...paramsWithoutProvider, query })
|
|
770
|
+
const [value = null] = response.data ? response.data <span class="branch-0 cbranch-no" title="branch not covered" >: response</span>
|
|
771
|
+
// Otherwise assume a stateless token
|
|
772
|
+
if (value) {
|
|
773
|
+
return {
|
|
774
|
+
...result,
|
|
775
|
+
[entity]: value
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
return result
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
async parse (req) {
|
|
785
|
+
const { jwt } = req.query
|
|
786
|
+
if (jwt) {
|
|
787
|
+
debug('Found parsed query value')
|
|
788
|
+
delete req.query.jwt
|
|
789
|
+
return {
|
|
790
|
+
strategy: 'jwt',
|
|
791
|
+
accessToken: jwt
|
|
792
|
+
}
|
|
793
|
+
} else {
|
|
794
|
+
const result = await super.parse(req)
|
|
795
|
+
return result
|
|
796
|
+
}
|
|
797
|
+
}
|
|
633
798
|
}
|
|
634
799
|
|
|
635
800
|
export <span class="fstat-no" title="function not covered" >async function createDefaultUsers () {</span>
|
|
@@ -650,17 +815,17 @@ export <span class="fstat-no" title="function not covered" >async function creat
|
|
|
650
815
|
<span class="cstat-no" title="statement not covered" >}</span>
|
|
651
816
|
|
|
652
817
|
// Middleware to be used to support jwt as a query param
|
|
653
|
-
export
|
|
654
|
-
|
|
655
|
-
<span class="
|
|
818
|
+
export function extractJwtFromQuery (req, res, next) {
|
|
819
|
+
const { jwt } = req.query
|
|
820
|
+
if (jwt) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
656
821
|
<span class="cstat-no" title="statement not covered" > _.set(req, 'feathers.authentication', {</span>
|
|
657
822
|
<span class="cstat-no" title="statement not covered" > strategy: 'jwt',</span>
|
|
658
823
|
<span class="cstat-no" title="statement not covered" > accessToken: jwt</span>
|
|
659
824
|
<span class="cstat-no" title="statement not covered" > })</span>
|
|
660
825
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
826
|
+
|
|
827
|
+
next()
|
|
828
|
+
}
|
|
664
829
|
|
|
665
830
|
export default function auth (app) {
|
|
666
831
|
const config = app.get('authentication')
|
|
@@ -695,7 +860,7 @@ export default function auth (app) {
|
|
|
695
860
|
let validator
|
|
696
861
|
app.getPasswordPolicy = function () {
|
|
697
862
|
// Create on first access, should not be done outside a function because the app has not yet been correctly initialized
|
|
698
|
-
if (validator)
|
|
863
|
+
if (validator) return validator
|
|
699
864
|
const { minLength, maxLength, uppercase, lowercase, digits, symbols, noSpaces, prohibited } = config.passwordPolicy
|
|
700
865
|
|
|
701
866
|
validator = new PasswordValidator()
|
|
@@ -708,11 +873,11 @@ export default function auth (app) {
|
|
|
708
873
|
if (noSpaces) <span class="branch-0 cbranch-no" title="branch not covered" >validator.not().spaces()</span>
|
|
709
874
|
if (prohibited) validator.is().not().oneOf(prohibited)
|
|
710
875
|
|
|
711
|
-
validator.comparePassword =
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
876
|
+
validator.comparePassword = function (entity, password) {
|
|
877
|
+
const [localStrategy] = app.service(config.path).getStrategies('local')
|
|
878
|
+
|
|
879
|
+
return localStrategy.comparePassword(entity, password)
|
|
880
|
+
}
|
|
716
881
|
|
|
717
882
|
validator.options = config.passwordPolicy
|
|
718
883
|
|
|
@@ -727,7 +892,7 @@ export default function auth (app) {
|
|
|
727
892
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
728
893
|
Code coverage generated by
|
|
729
894
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
730
|
-
at
|
|
895
|
+
at 2026-03-10T09:15:24.774Z
|
|
731
896
|
</div>
|
|
732
897
|
<script src="../../prettify.js"></script>
|
|
733
898
|
<script>
|