@kalisio/kdk 2.1.6 → 2.1.7
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/.codeclimate.yml +34 -34
- package/.nycrc +5 -5
- package/.travis.doc.sh +8 -8
- package/.travis.test.sh +40 -40
- package/CHANGELOG.md +727 -727
- package/LICENSE +21 -21
- package/README.md +32 -32
- package/core/api/application.js +591 -591
- package/core/api/authentication.js +203 -203
- package/core/api/db.js +226 -226
- package/core/api/hooks/hooks.authentication.js +73 -73
- package/core/api/hooks/hooks.authorisations.js +376 -376
- package/core/api/hooks/hooks.groups.js +48 -48
- package/core/api/hooks/hooks.logger.js +26 -26
- package/core/api/hooks/hooks.model.js +290 -290
- package/core/api/hooks/hooks.organisations.js +156 -156
- package/core/api/hooks/hooks.push.js +56 -56
- package/core/api/hooks/hooks.query.js +246 -246
- package/core/api/hooks/hooks.schemas.js +73 -73
- package/core/api/hooks/hooks.service.js +78 -78
- package/core/api/hooks/hooks.storage.js +36 -36
- package/core/api/hooks/hooks.users.js +261 -261
- package/core/api/hooks/index.js +12 -12
- package/core/api/index.js +21 -21
- package/core/api/marshall.js +90 -90
- package/core/api/models/groups.model.mongodb.js +8 -8
- package/core/api/models/organisations.model.mongodb.js +3 -3
- package/core/api/models/tags.model.mongodb.js +10 -10
- package/core/api/models/users.model.mongodb.js +10 -10
- package/core/api/services/account/account.hooks.js +37 -37
- package/core/api/services/account/account.service.js +117 -117
- package/core/api/services/authorisations/authorisations.hooks.js +33 -33
- package/core/api/services/authorisations/authorisations.service.js +139 -139
- package/core/api/services/databases/databases.hooks.js +36 -36
- package/core/api/services/databases/databases.service.js +5 -5
- package/core/api/services/groups/groups.hooks.js +31 -31
- package/core/api/services/index.js +126 -126
- package/core/api/services/mailer/mailer.hooks.js +35 -35
- package/core/api/services/mailer/mailer.service.js +11 -11
- package/core/api/services/organisations/organisations.hooks.js +31 -31
- package/core/api/services/organisations/organisations.service.js +86 -86
- package/core/api/services/push/push.hooks.js +35 -35
- package/core/api/services/push/push.service.js +12 -12
- package/core/api/services/storage/storage.hooks.js +35 -35
- package/core/api/services/storage/storage.service.js +29 -29
- package/core/api/services/tags/tags.hooks.js +31 -31
- package/core/api/services/users/users.hooks.js +75 -75
- package/core/api/utils.js +11 -11
- package/core/client/api.js +293 -293
- package/core/client/capabilities.js +22 -22
- package/core/client/components/KAction.vue +393 -393
- package/core/client/components/KAvatar.vue +129 -129
- package/core/client/components/KBlock.vue +67 -67
- package/core/client/components/KChip.vue +68 -68
- package/core/client/components/KChipsPane.vue +103 -103
- package/core/client/components/KContent.vue +105 -105
- package/core/client/components/KDialog.vue +160 -160
- package/core/client/components/KExpandable.vue +49 -49
- package/core/client/components/KLogo.vue +32 -32
- package/core/client/components/KModal.vue +173 -173
- package/core/client/components/KPanel.vue +64 -64
- package/core/client/components/KScrollArea.vue +88 -88
- package/core/client/components/KSponsor.vue +40 -40
- package/core/client/components/KStamp.vue +65 -65
- package/core/client/components/KStore.vue +102 -102
- package/core/client/components/KTextArea.vue +143 -143
- package/core/client/components/KTree.vue +31 -31
- package/core/client/components/KVersion.vue +19 -19
- package/core/client/components/account/KAccount.vue +68 -68
- package/core/client/components/account/KDeleteAccountManager.vue +62 -62
- package/core/client/components/account/KEmailManager.vue +128 -128
- package/core/client/components/account/KPasswordManager.vue +90 -90
- package/core/client/components/account/KProfile.vue +109 -109
- package/core/client/components/account/KResetPassword.vue +120 -120
- package/core/client/components/account/KSendResetPassword.vue +97 -97
- package/core/client/components/account/KSubscription.vue +71 -71
- package/core/client/components/account/KSubscriptionsManager.vue +46 -46
- package/core/client/components/account/KVerifyEmailManager.vue +105 -105
- package/core/client/components/account/index.js +7 -7
- package/core/client/components/app/KAbout.vue +98 -98
- package/core/client/components/app/KHome.vue +12 -12
- package/core/client/components/app/KPlatform.vue +55 -55
- package/core/client/components/app/KSettings.vue +42 -42
- package/core/client/components/app/KTerms.vue +41 -41
- package/core/client/components/app/KTour.vue +448 -448
- package/core/client/components/app/KWelcome.vue +133 -133
- package/core/client/components/app/index.js +11 -11
- package/core/client/components/chart/KChart.vue +197 -197
- package/core/client/components/chart/KDataTable.vue +183 -183
- package/core/client/components/chart/KStatisticsChart.vue +94 -94
- package/core/client/components/chart/KTimeSeriesChart.vue +431 -431
- package/core/client/components/chart/index.js +9 -9
- package/core/client/components/collection/KBoard.vue +65 -65
- package/core/client/components/collection/KCard.vue +196 -196
- package/core/client/components/collection/KCardSection.vue +52 -52
- package/core/client/components/collection/KColumn.vue +229 -225
- package/core/client/components/collection/KFilter.vue +158 -158
- package/core/client/components/collection/KGrid.vue +121 -121
- package/core/client/components/collection/KHistory.vue +118 -112
- package/core/client/components/collection/KHistoryEntry.vue +111 -111
- package/core/client/components/collection/KItem.vue +128 -128
- package/core/client/components/collection/KList.vue +135 -135
- package/core/client/components/collection/KSorter.vue +46 -46
- package/core/client/components/collection/KTable.vue +238 -238
- package/core/client/components/collection/index.js +19 -19
- package/core/client/components/editor/KEditor.vue +52 -52
- package/core/client/components/editor/KModalEditor.vue +96 -96
- package/core/client/components/editor/index.js +7 -7
- package/core/client/components/form/KChipsField.vue +162 -162
- package/core/client/components/form/KColorField.vue +69 -69
- package/core/client/components/form/KColorScaleField.vue +86 -86
- package/core/client/components/form/KDateTimeRangeField.vue +65 -65
- package/core/client/components/form/KDatetimeField.vue +70 -70
- package/core/client/components/form/KEmailField.vue +33 -33
- package/core/client/components/form/KFileField.vue +161 -161
- package/core/client/components/form/KForm.vue +247 -247
- package/core/client/components/form/KIconField.vue +101 -101
- package/core/client/components/form/KItemField.vue +123 -123
- package/core/client/components/form/KNumberField.vue +33 -33
- package/core/client/components/form/KOptionsField.vue +63 -63
- package/core/client/components/form/KPasswordField.vue +57 -57
- package/core/client/components/form/KPhoneField.vue +32 -32
- package/core/client/components/form/KPropertyItemField.vue +119 -119
- package/core/client/components/form/KRoleField.vue +60 -60
- package/core/client/components/form/KSelectField.vue +143 -143
- package/core/client/components/form/KTextField.vue +48 -48
- package/core/client/components/form/KTextareaField.vue +88 -88
- package/core/client/components/form/KToggleField.vue +46 -46
- package/core/client/components/form/KTokenField.vue +80 -80
- package/core/client/components/form/KUnitField.vue +57 -57
- package/core/client/components/form/KUrlField.vue +32 -32
- package/core/client/components/form/KView.vue +118 -118
- package/core/client/components/form/index.js +7 -7
- package/core/client/components/index.js +48 -48
- package/core/client/components/input/KColorChooser.vue +63 -63
- package/core/client/components/input/KIconChooser.vue +308 -308
- package/core/client/components/input/KOptionsChooser.vue +122 -122
- package/core/client/components/input/KPalette.vue +40 -40
- package/core/client/components/input/index.js +11 -11
- package/core/client/components/layout/KFab.vue +113 -113
- package/core/client/components/layout/KLayout.vue +64 -64
- package/core/client/components/layout/KOpener.vue +140 -140
- package/core/client/components/layout/KPage.vue +320 -320
- package/core/client/components/layout/KPageSticky.vue +53 -53
- package/core/client/components/layout/KWindow.vue +443 -443
- package/core/client/components/layout/index.js +13 -13
- package/core/client/components/media/KColorScale.vue +254 -254
- package/core/client/components/media/KImageViewer.vue +44 -44
- package/core/client/components/media/KMarkdownViewer.vue +55 -55
- package/core/client/components/media/KMediaBrowser.vue +340 -340
- package/core/client/components/media/KShape.vue +120 -120
- package/core/client/components/media/index.js +13 -13
- package/core/client/components/menu/KMenu.vue +147 -147
- package/core/client/components/menu/KRadialFab.vue +122 -122
- package/core/client/components/menu/KRadialFabItem.vue +73 -73
- package/core/client/components/menu/index.js +9 -9
- package/core/client/components/screen/KEndpointScreen.vue +80 -80
- package/core/client/components/screen/KErrorScreen.vue +24 -24
- package/core/client/components/screen/KLoginScreen.vue +84 -84
- package/core/client/components/screen/KLogoutScreen.vue +20 -20
- package/core/client/components/screen/KRegisterScreen.vue +114 -114
- package/core/client/components/screen/KScreen.vue +106 -106
- package/core/client/components/screen/KScreenFooter.vue +32 -32
- package/core/client/components/screen/KScreenHeader.vue +17 -17
- package/core/client/components/screen/index.js +5 -5
- package/core/client/components/team/KAddMember.vue +375 -375
- package/core/client/components/team/KAddTag.vue +121 -121
- package/core/client/components/team/KChangeRole.vue +118 -118
- package/core/client/components/team/KGroupCard.vue +110 -110
- package/core/client/components/team/KGroupsActivity.vue +66 -66
- package/core/client/components/team/KJoinGroup.vue +132 -132
- package/core/client/components/team/KMemberCard.vue +328 -328
- package/core/client/components/team/KMemberFilter.vue +49 -49
- package/core/client/components/team/KMembersActivity.vue +126 -126
- package/core/client/components/team/KOrganisationsActivity.vue +53 -53
- package/core/client/components/team/KTagCard.vue +72 -72
- package/core/client/components/team/KTagsActivity.vue +61 -61
- package/core/client/components/team/index.js +9 -9
- package/core/client/components/time/KAbsoluteTimeRange.vue +183 -183
- package/core/client/components/time/KDate.vue +75 -75
- package/core/client/components/time/KDateTime.vue +172 -172
- package/core/client/components/time/KDateTimeRange.vue +118 -118
- package/core/client/components/time/KRelativeTimeRanges.vue +193 -193
- package/core/client/components/time/KTime.vue +74 -74
- package/core/client/components/time/index.js +7 -7
- package/core/client/components/viewer/KModalViewer.vue +47 -47
- package/core/client/components/viewer/KViewer.vue +30 -30
- package/core/client/composables/activity.js +67 -67
- package/core/client/composables/collection.js +181 -181
- package/core/client/composables/index.js +8 -8
- package/core/client/composables/pwa.js +71 -71
- package/core/client/composables/schema.js +64 -64
- package/core/client/composables/selection.js +88 -88
- package/core/client/composables/session.js +172 -172
- package/core/client/composables/store.js +49 -49
- package/core/client/composables/version.js +47 -47
- package/core/client/events.js +3 -3
- package/core/client/filter.js +60 -60
- package/core/client/guards.js +101 -101
- package/core/client/hooks/hooks.events.js +7 -7
- package/core/client/hooks/hooks.logger.js +24 -24
- package/core/client/hooks/hooks.users.js +22 -22
- package/core/client/hooks/index.js +3 -3
- package/core/client/i18n/core_en.json +845 -845
- package/core/client/i18n/core_fr.json +843 -843
- package/core/client/i18n.js +88 -88
- package/core/client/index.js +84 -84
- package/core/client/layout.js +323 -323
- package/core/client/local-storage.js +28 -28
- package/core/client/mixins/index.js +12 -12
- package/core/client/mixins/mixin.account.js +61 -61
- package/core/client/mixins/mixin.base-activity.js +232 -232
- package/core/client/mixins/mixin.base-collection.js +162 -162
- package/core/client/mixins/mixin.base-context.js +54 -54
- package/core/client/mixins/mixin.base-editor.js +194 -194
- package/core/client/mixins/mixin.base-field.js +105 -105
- package/core/client/mixins/mixin.base-item.js +166 -166
- package/core/client/mixins/mixin.base-modal.js +36 -36
- package/core/client/mixins/mixin.base-viewer.js +43 -43
- package/core/client/mixins/mixin.object-proxy.js +46 -46
- package/core/client/mixins/mixin.schema-proxy.js +97 -97
- package/core/client/mixins/mixin.service.js +22 -22
- package/core/client/reader.js +65 -65
- package/core/client/readers/index.js +3 -3
- package/core/client/readers/reader.blob.js +39 -39
- package/core/client/readers/reader.csv.js +36 -36
- package/core/client/readers/reader.json.js +34 -34
- package/core/client/search.js +47 -47
- package/core/client/services/index.js +49 -49
- package/core/client/services/local-settings.service.js +67 -67
- package/core/client/sorter.js +31 -31
- package/core/client/storage.js +102 -102
- package/core/client/store.js +39 -39
- package/core/client/theme.js +40 -40
- package/core/client/time.js +167 -167
- package/core/client/units.js +218 -218
- package/core/client/utils/index.js +203 -203
- package/core/client/utils/utils.account.js +52 -52
- package/core/client/utils/utils.colors.js +36 -36
- package/core/client/utils/utils.content.js +185 -185
- package/core/client/utils/utils.locale.js +28 -28
- package/core/client/utils/utils.platform.js +11 -11
- package/core/client/utils/utils.push.js +53 -53
- package/core/client/utils/utils.pwa.js +62 -62
- package/core/client/utils/utils.session.js +89 -89
- package/core/common/errors.js +1 -1
- package/core/common/index.js +10 -10
- package/core/common/permissions.js +318 -318
- package/core/common/schema.js +35 -35
- package/core/common/schemas/groups.create.json +28 -28
- package/core/common/schemas/groups.update.json +28 -28
- package/core/common/schemas/organisations.create.json +28 -28
- package/core/common/schemas/organisations.update.json +49 -49
- package/core/common/schemas/settings.update.json +234 -234
- package/core/common/schemas/tags.create.json +35 -35
- package/core/common/schemas/tags.update.json +35 -35
- package/core/common/schemas/users.update-profile.json +33 -33
- package/core/common/utils.js +45 -45
- package/core.api.js +5 -5
- package/core.client.js +5 -5
- package/core.common.js +1 -1
- package/coverage/core/api/application.js.html +272 -332
- package/coverage/core/api/authentication.js.html +56 -56
- package/coverage/core/api/db.js.html +132 -144
- package/coverage/core/api/hooks/hooks.account.js.html +1 -1
- package/coverage/core/api/hooks/hooks.authentication.js.html +12 -12
- package/coverage/core/api/hooks/hooks.authorisations.js.html +187 -199
- package/coverage/core/api/hooks/{hooks.push.js.html → hooks.devices.js.html} +56 -77
- package/coverage/core/api/hooks/hooks.groups.js.html +7 -7
- package/coverage/core/api/hooks/hooks.logger.js.html +18 -18
- package/coverage/core/api/hooks/hooks.model.js.html +160 -166
- package/coverage/core/api/hooks/hooks.organisations.js.html +406 -136
- package/coverage/core/api/hooks/hooks.pusher.js.html +730 -0
- package/coverage/core/api/hooks/hooks.query.js.html +129 -129
- package/coverage/core/api/hooks/hooks.schemas.js.html +22 -82
- package/coverage/core/api/hooks/hooks.service.js.html +13 -13
- package/coverage/core/api/hooks/hooks.storage.js.html +7 -7
- package/coverage/core/api/hooks/hooks.tags.js.html +1 -1
- package/coverage/core/api/hooks/hooks.users.js.html +126 -63
- package/coverage/core/api/hooks/index.html +119 -74
- package/coverage/core/api/hooks/index.js.html +26 -17
- package/coverage/core/api/index.html +26 -41
- package/coverage/core/api/index.js.html +17 -17
- package/coverage/core/api/marshall.js.html +21 -21
- package/coverage/core/api/models/groups.model.mongodb.js.html +8 -8
- package/coverage/core/api/models/index.html +1 -1
- package/coverage/core/api/models/organisations.model.mongodb.js.html +1 -1
- package/coverage/core/api/models/tags.model.mongodb.js.html +10 -10
- package/coverage/core/api/models/users.model.mongodb.js.html +1 -1
- package/coverage/core/api/oauth2-handler.js.html +202 -0
- package/coverage/core/api/oauth2-verifier.js.html +355 -0
- package/coverage/core/api/services/account/account.hooks.js.html +4 -4
- package/coverage/core/api/services/account/account.service.js.html +15 -12
- package/coverage/core/api/services/account/index.html +10 -10
- package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +1 -1
- package/coverage/core/api/services/authorisations/authorisations.service.js.html +77 -77
- package/coverage/core/api/services/authorisations/index.html +1 -1
- 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/devices/devices.hooks.js.html +190 -0
- package/coverage/core/api/services/devices/devices.service.js.html +382 -0
- package/coverage/core/api/services/devices/index.html +131 -0
- package/coverage/core/api/services/groups/groups.hooks.js.html +13 -7
- package/coverage/core/api/services/groups/index.html +5 -5
- package/coverage/core/api/services/index.html +19 -19
- package/coverage/core/api/services/index.js.html +80 -83
- package/coverage/core/api/services/mailer/index.html +1 -1
- package/coverage/core/api/services/mailer/mailer.hooks.js.html +1 -1
- package/coverage/core/api/services/mailer/mailer.service.js.html +1 -1
- package/coverage/core/api/services/organisations/index.html +11 -11
- package/coverage/core/api/services/organisations/organisations.hooks.js.html +1 -1
- package/coverage/core/api/services/organisations/organisations.service.js.html +32 -56
- package/coverage/{lcov-report/core/api/services/push → core/api/services/pusher}/index.html +36 -21
- package/coverage/{lcov-report/core/api/services/push/push.service.js.html → core/api/services/pusher/pusher.channels.js.html} +11 -38
- package/coverage/{lcov-report/core/api/services/push/push.hooks.js.html → core/api/services/pusher/pusher.hooks.js.html} +8 -8
- package/coverage/core/api/services/pusher/pusher.service.js.html +1420 -0
- package/coverage/core/api/services/storage/index.html +1 -1
- package/coverage/core/api/services/storage/storage.hooks.js.html +1 -1
- package/coverage/core/api/services/storage/storage.service.js.html +22 -22
- package/coverage/core/api/services/tags/index.html +7 -7
- package/coverage/core/api/services/tags/tags.hooks.js.html +54 -12
- package/coverage/core/api/services/users/index.html +1 -1
- package/coverage/core/api/services/users/users.hooks.js.html +3 -3
- package/coverage/core/common/errors.js.html +2 -2
- package/coverage/core/common/index.html +19 -19
- package/coverage/core/common/index.js.html +11 -11
- package/coverage/core/common/permissions.js.html +249 -273
- package/coverage/core/common/schema.js.html +23 -23
- package/coverage/core/common/utils.js.html +14 -14
- package/coverage/index.html +131 -116
- package/coverage/lcov-report/core/api/application.js.html +272 -332
- package/coverage/lcov-report/core/api/authentication.js.html +56 -56
- package/coverage/lcov-report/core/api/db.js.html +132 -144
- package/coverage/lcov-report/core/api/hooks/hooks.account.js.html +1 -1
- package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +12 -12
- package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +187 -199
- package/coverage/lcov-report/core/api/hooks/{hooks.push.js.html → hooks.devices.js.html} +56 -77
- package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +7 -7
- package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +18 -18
- package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +160 -166
- package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +406 -136
- package/coverage/lcov-report/core/api/hooks/hooks.pusher.js.html +730 -0
- package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +129 -129
- package/coverage/lcov-report/core/api/hooks/hooks.schemas.js.html +22 -82
- package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +13 -13
- package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +7 -7
- package/coverage/lcov-report/core/api/hooks/hooks.tags.js.html +1 -1
- package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +126 -63
- package/coverage/lcov-report/core/api/hooks/index.html +119 -74
- package/coverage/lcov-report/core/api/hooks/index.js.html +26 -17
- package/coverage/lcov-report/core/api/index.html +26 -41
- package/coverage/lcov-report/core/api/index.js.html +17 -17
- package/coverage/lcov-report/core/api/marshall.js.html +21 -21
- package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +8 -8
- package/coverage/lcov-report/core/api/models/index.html +1 -1
- package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +10 -10
- package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/core/api/oauth2-handler.js.html +202 -0
- package/coverage/lcov-report/core/api/oauth2-verifier.js.html +355 -0
- package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +4 -4
- package/coverage/lcov-report/core/api/services/account/account.service.js.html +15 -12
- package/coverage/lcov-report/core/api/services/account/index.html +10 -10
- 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 +77 -77
- package/coverage/lcov-report/core/api/services/authorisations/index.html +1 -1
- 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/devices/devices.hooks.js.html +190 -0
- package/coverage/lcov-report/core/api/services/devices/devices.service.js.html +382 -0
- package/coverage/lcov-report/core/api/services/devices/index.html +131 -0
- package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +13 -7
- package/coverage/lcov-report/core/api/services/groups/index.html +5 -5
- package/coverage/lcov-report/core/api/services/index.html +19 -19
- package/coverage/lcov-report/core/api/services/index.js.html +80 -83
- package/coverage/lcov-report/core/api/services/mailer/index.html +1 -1
- package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +1 -1
- package/coverage/lcov-report/core/api/services/organisations/index.html +11 -11
- package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +32 -56
- package/coverage/{core/api/services/push → lcov-report/core/api/services/pusher}/index.html +36 -21
- package/coverage/{core/api/services/push/push.service.js.html → lcov-report/core/api/services/pusher/pusher.channels.js.html} +11 -38
- package/coverage/{core/api/services/push/push.hooks.js.html → lcov-report/core/api/services/pusher/pusher.hooks.js.html} +8 -8
- package/coverage/lcov-report/core/api/services/pusher/pusher.service.js.html +1420 -0
- package/coverage/lcov-report/core/api/services/storage/index.html +1 -1
- package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +1 -1
- package/coverage/lcov-report/core/api/services/storage/storage.service.js.html +22 -22
- package/coverage/lcov-report/core/api/services/tags/index.html +7 -7
- package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +54 -12
- package/coverage/lcov-report/core/api/services/users/index.html +1 -1
- package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +3 -3
- package/coverage/lcov-report/core/common/errors.js.html +2 -2
- package/coverage/lcov-report/core/common/index.html +19 -19
- package/coverage/lcov-report/core/common/index.js.html +11 -11
- package/coverage/lcov-report/core/common/permissions.js.html +249 -273
- package/coverage/lcov-report/core/common/schema.js.html +23 -23
- package/coverage/lcov-report/core/common/utils.js.html +14 -14
- package/coverage/lcov-report/index.html +131 -116
- package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +48 -48
- package/coverage/lcov-report/map/api/hooks/hooks.features.js.html +51 -51
- package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +40 -46
- package/coverage/lcov-report/map/api/hooks/index.html +49 -49
- package/coverage/lcov-report/map/api/hooks/index.js.html +16 -16
- package/coverage/lcov-report/map/api/index.html +26 -26
- package/coverage/lcov-report/map/api/index.js.html +38 -38
- package/coverage/lcov-report/map/api/marshall.js.html +17 -17
- package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +1 -1
- package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +11 -5
- package/coverage/lcov-report/map/api/models/index.html +5 -5
- package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +1 -1
- package/coverage/lcov-report/map/api/services/alerts/index.html +1 -1
- package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/catalog/index.html +1 -1
- package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
- package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
- package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/features/features.service.js.html +1 -1
- package/coverage/lcov-report/map/api/services/features/index.html +1 -1
- package/coverage/lcov-report/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
- package/coverage/lcov-report/map/api/services/geocoder/geocoder.service.js.html +1 -1
- package/coverage/lcov-report/map/api/services/geocoder/index.html +1 -1
- package/coverage/lcov-report/map/api/services/index.html +17 -17
- package/coverage/lcov-report/map/api/services/index.js.html +81 -90
- package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +68 -68
- package/coverage/lcov-report/map/common/errors.js.html +16 -16
- package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +53 -53
- package/coverage/lcov-report/map/common/grid.js.html +298 -298
- package/coverage/lcov-report/map/common/index.html +148 -148
- package/coverage/lcov-report/map/common/index.js.html +67 -67
- package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +68 -68
- package/coverage/lcov-report/map/common/moment-utils.js.html +18 -18
- package/coverage/lcov-report/map/common/opendap-grid-source.js.html +60 -60
- package/coverage/lcov-report/map/common/opendap-utils.js.html +113 -113
- package/coverage/lcov-report/map/common/permissions.js.html +11 -11
- package/coverage/lcov-report/map/common/time-based-grid-source.js.html +54 -54
- package/coverage/lcov-report/map/common/tms-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/wcs-grid-source.js.html +42 -42
- package/coverage/lcov-report/map/common/wcs-utils.js.html +211 -211
- package/coverage/lcov-report/map/common/weacast-grid-source.js.html +72 -72
- package/coverage/lcov-report/map/common/wfs-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/wms-utils.js.html +1 -1
- package/coverage/lcov-report/map/common/wmts-utils.js.html +1 -1
- package/coverage/lcov.info +5502 -3743
- package/coverage/map/api/hooks/hooks.catalog.js.html +48 -48
- package/coverage/map/api/hooks/hooks.features.js.html +51 -51
- package/coverage/map/api/hooks/hooks.query.js.html +40 -46
- package/coverage/map/api/hooks/index.html +49 -49
- package/coverage/map/api/hooks/index.js.html +16 -16
- package/coverage/map/api/index.html +26 -26
- package/coverage/map/api/index.js.html +38 -38
- package/coverage/map/api/marshall.js.html +17 -17
- package/coverage/map/api/models/alerts.model.mongodb.js.html +1 -1
- package/coverage/map/api/models/catalog.model.mongodb.js.html +1 -1
- package/coverage/map/api/models/features.model.mongodb.js.html +11 -5
- package/coverage/map/api/models/index.html +5 -5
- package/coverage/map/api/services/alerts/alerts.hooks.js.html +1 -1
- package/coverage/map/api/services/alerts/alerts.service.js.html +1 -1
- package/coverage/map/api/services/alerts/index.html +1 -1
- package/coverage/map/api/services/catalog/catalog.hooks.js.html +1 -1
- package/coverage/map/api/services/catalog/index.html +1 -1
- package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
- package/coverage/map/api/services/daptiles/index.html +1 -1
- package/coverage/map/api/services/features/features.hooks.js.html +1 -1
- package/coverage/map/api/services/features/features.service.js.html +1 -1
- package/coverage/map/api/services/features/index.html +1 -1
- package/coverage/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
- package/coverage/map/api/services/geocoder/geocoder.service.js.html +1 -1
- package/coverage/map/api/services/geocoder/index.html +1 -1
- package/coverage/map/api/services/index.html +17 -17
- package/coverage/map/api/services/index.js.html +81 -90
- package/coverage/map/common/dynamic-grid-source.js.html +68 -68
- package/coverage/map/common/errors.js.html +16 -16
- package/coverage/map/common/geotiff-grid-source.js.html +53 -53
- package/coverage/map/common/grid.js.html +298 -298
- package/coverage/map/common/index.html +148 -148
- package/coverage/map/common/index.js.html +67 -67
- package/coverage/map/common/meteo-model-grid-source.js.html +68 -68
- package/coverage/map/common/moment-utils.js.html +18 -18
- package/coverage/map/common/opendap-grid-source.js.html +60 -60
- package/coverage/map/common/opendap-utils.js.html +113 -113
- package/coverage/map/common/permissions.js.html +11 -11
- package/coverage/map/common/time-based-grid-source.js.html +54 -54
- package/coverage/map/common/tms-utils.js.html +1 -1
- package/coverage/map/common/wcs-grid-source.js.html +42 -42
- package/coverage/map/common/wcs-utils.js.html +211 -211
- package/coverage/map/common/weacast-grid-source.js.html +72 -72
- package/coverage/map/common/wfs-utils.js.html +1 -1
- package/coverage/map/common/wms-utils.js.html +1 -1
- package/coverage/map/common/wmts-utils.js.html +1 -1
- package/coverage/tmp/coverage-19264-1684834146599-0.json +1 -0
- package/coverage/tmp/coverage-2508-1684834182408-0.json +1 -0
- package/coverage/tmp/coverage-25908-1684834189369-0.json +1 -0
- package/coverage/tmp/coverage-32364-1684834189420-0.json +1 -0
- package/coverage/tmp/coverage-36604-1684834189485-0.json +1 -0
- package/coverage/tmp/coverage-40652-1684834182272-0.json +1 -0
- package/coverage/tmp/coverage-48484-1684834182342-0.json +1 -0
- package/coverage/tmp/coverage-51652-1684834189584-0.json +1 -0
- package/coverage/tmp/coverage-9776-1684834189519-0.json +1 -0
- package/extras/css/core.variables.scss +38 -38
- package/extras/icons/center-on-feature.svg +315 -315
- package/extras/icons/json.svg +83 -83
- package/extras/icons/map-legend.svg +251 -251
- package/extras/icons/target.svg +37 -37
- package/extras/tours/core/account-profile.js +32 -32
- package/extras/tours/core/account.js +143 -143
- package/extras/tours/core/add-member.js +74 -74
- package/extras/tours/core/add-tag.js +12 -12
- package/extras/tours/core/create-group.js +19 -19
- package/extras/tours/core/create-organisation.js +19 -19
- package/extras/tours/core/create-tag.js +26 -26
- package/extras/tours/core/edit-member-role.js +13 -13
- package/extras/tours/core/groups.js +65 -65
- package/extras/tours/core/join-group.js +13 -13
- package/extras/tours/core/login.js +41 -41
- package/extras/tours/core/members.js +108 -108
- package/extras/tours/core/register.js +61 -61
- package/extras/tours/core/send-reset-password.js +14 -14
- package/extras/tours/core/tags.js +65 -65
- package/extras/tours/map/add-layer.js +28 -28
- package/extras/tours/map/catalog-categories.js +59 -59
- package/extras/tours/map/catalog-panel.js +112 -112
- package/extras/tours/map/connect-layer.js +39 -39
- package/extras/tours/map/create-layer.js +33 -33
- package/extras/tours/map/create-view.js +25 -25
- package/extras/tours/map/fab.js +26 -26
- package/extras/tours/map/import-layer.js +33 -33
- package/extras/tours/map/navigation-bar.js +185 -185
- package/extras/tours/map/side-nav.js +35 -35
- package/extras/tours/map/timeline.js +77 -77
- package/map/api/config/categories.cjs +42 -42
- package/map/api/config/layers.cjs +43 -43
- package/map/api/config/sublegends.cjs +42 -42
- package/map/api/hooks/hooks.catalog.js +85 -85
- package/map/api/hooks/hooks.features.js +84 -84
- package/map/api/hooks/hooks.query.js +361 -361
- package/map/api/hooks/index.js +3 -3
- package/map/api/index.js +18 -18
- package/map/api/marshall.js +31 -31
- package/map/api/models/alerts.model.mongodb.js +7 -7
- package/map/api/models/catalog.model.mongodb.js +14 -14
- package/map/api/models/features.model.mongodb.js +37 -37
- package/map/api/services/alerts/alerts.hooks.js +63 -63
- package/map/api/services/alerts/alerts.service.js +175 -175
- package/map/api/services/catalog/catalog.hooks.js +76 -76
- package/map/api/services/daptiles/daptiles.service.js +475 -475
- package/map/api/services/features/features.hooks.js +40 -40
- package/map/api/services/features/features.service.js +52 -52
- package/map/api/services/geocoder/geocoder.hooks.js +31 -31
- package/map/api/services/geocoder/geocoder.service.js +79 -79
- package/map/api/services/index.js +228 -228
- package/map/client/canvas-draw-context.js +16 -16
- package/map/client/cesium/utils.js +133 -133
- package/map/client/components/KCaptureToolbar.vue +155 -155
- package/map/client/components/KColorLegend.vue +349 -349
- package/map/client/components/KCompass.vue +143 -143
- package/map/client/components/KEditLayerData.vue +85 -85
- package/map/client/components/KFeatureActionButton.vue +119 -119
- package/map/client/components/KFeatureEditor.vue +92 -92
- package/map/client/components/KFeaturesChart.vue +285 -285
- package/map/client/components/KFeaturesFilter.vue +259 -259
- package/map/client/components/KFeaturesTable.vue +99 -99
- package/map/client/components/KLayerEditionToolbar.vue +54 -54
- package/map/client/components/KLayerEditor.vue +48 -48
- package/map/client/components/KLayerStyleEditor.vue +118 -118
- package/map/client/components/KLayerStyleForm.vue +906 -906
- package/map/client/components/KLevelSlider.vue +100 -100
- package/map/client/components/KMeasureTool.vue +568 -568
- package/map/client/components/KPositionIndicator.vue +90 -90
- package/map/client/components/KTimeline.vue +293 -293
- package/map/client/components/KTimezoneMap.vue +158 -158
- package/map/client/components/KUrlLegend.vue +122 -122
- package/map/client/components/catalog/KAddLayer.vue +66 -66
- package/map/client/components/catalog/KBaseLayersSelector.vue +114 -114
- package/map/client/components/catalog/KConnectLayer.vue +323 -323
- package/map/client/components/catalog/KCreateLayer.vue +184 -184
- package/map/client/components/catalog/KCreateView.vue +108 -108
- package/map/client/components/catalog/KFilteredLayerItem.vue +53 -53
- package/map/client/components/catalog/KImportLayer.vue +168 -168
- package/map/client/components/catalog/KLayerCategories.vue +274 -274
- package/map/client/components/catalog/KLayerItem.vue +70 -70
- package/map/client/components/catalog/KLayersPanel.vue +137 -137
- package/map/client/components/catalog/KLayersSelector.vue +78 -78
- package/map/client/components/catalog/KViewSelector.vue +46 -46
- package/map/client/components/catalog/KViewsPanel.vue +123 -123
- package/map/client/components/catalog/KWeatherLayersSelector.vue +129 -129
- package/map/client/components/form/KDirectionField.vue +113 -113
- package/map/client/components/form/KLayerCategoryField.vue +46 -46
- package/map/client/components/form/KLocationField.vue +189 -189
- package/map/client/components/form/KOwsLayerField.vue +130 -130
- package/map/client/components/form/KOwsServiceField.vue +238 -238
- package/map/client/components/form/KTimezoneField.vue +142 -142
- package/map/client/components/index.js +1 -1
- package/map/client/components/legend/KColorScaleLegend.vue +31 -31
- package/map/client/components/legend/KImageLegend.vue +52 -52
- package/map/client/components/legend/KLegend.vue +191 -191
- package/map/client/components/legend/KLegendRenderer.vue +20 -20
- package/map/client/components/legend/KSymbolsLegend.vue +101 -101
- package/map/client/components/location/KGeocodersFilter.vue +44 -44
- package/map/client/components/location/KLocationCardSection.vue +61 -61
- package/map/client/components/location/KLocationMap.vue +280 -280
- package/map/client/components/location/KLocationSearch.vue +144 -144
- package/map/client/components/location/KLocationTip.vue +29 -29
- package/map/client/components/tools/KGeolocateTool.vue +46 -46
- package/map/client/components/tools/KSearchTool.vue +93 -93
- package/map/client/components/widget/KElevationProfile.vue +454 -454
- package/map/client/components/widget/KInformationBox.vue +145 -145
- package/map/client/components/widget/KMapillaryViewer.vue +178 -178
- package/map/client/components/widget/KStackableTimeSeries.vue +214 -214
- package/map/client/components/widget/KTimeSeries.vue +500 -500
- package/map/client/composables/activity.js +88 -88
- package/map/client/composables/highlight.js +214 -214
- package/map/client/composables/index.js +7 -7
- package/map/client/composables/location.js +53 -53
- package/map/client/composables/measure.js +42 -42
- package/map/client/composables/probe.js +133 -133
- package/map/client/composables/selection.js +300 -300
- package/map/client/composables/weather.js +213 -213
- package/map/client/elevation-utils.js +258 -258
- package/map/client/geolocation.js +119 -119
- package/map/client/globe.js +13 -13
- package/map/client/i18n/map_en.json +645 -645
- package/map/client/i18n/map_fr.json +646 -646
- package/map/client/index.js +18 -18
- package/map/client/init.js +80 -80
- package/map/client/leaflet/GSMaPLayer.js +55 -55
- package/map/client/leaflet/GradientPath.js +180 -180
- package/map/client/leaflet/MaskLayer.js +57 -57
- package/map/client/leaflet/TiledFeatureLayer.js +572 -572
- package/map/client/leaflet/TiledMeshLayer.js +486 -486
- package/map/client/leaflet/TiledWindLayer.js +384 -384
- package/map/client/leaflet/utils.js +246 -246
- package/map/client/map.js +15 -15
- package/map/client/mixins/globe/index.js +8 -8
- package/map/client/mixins/globe/mixin.base-globe.js +462 -462
- package/map/client/mixins/globe/mixin.file-layers.js +40 -40
- package/map/client/mixins/globe/mixin.geojson-layers.js +314 -314
- package/map/client/mixins/globe/mixin.globe-activity.js +52 -52
- package/map/client/mixins/globe/mixin.opendap-layers.js +51 -51
- package/map/client/mixins/globe/mixin.popup.js +82 -82
- package/map/client/mixins/globe/mixin.style.js +110 -110
- package/map/client/mixins/globe/mixin.tooltip.js +101 -101
- package/map/client/mixins/index.js +9 -9
- package/map/client/mixins/map/index.js +16 -16
- package/map/client/mixins/map/mixin.base-map.js +592 -592
- package/map/client/mixins/map/mixin.canvas-layers.js +529 -529
- package/map/client/mixins/map/mixin.edit-layers.js +474 -474
- package/map/client/mixins/map/mixin.file-layers.js +49 -49
- package/map/client/mixins/map/mixin.forecast-layers.js +79 -79
- package/map/client/mixins/map/mixin.geojson-layers.js +557 -557
- package/map/client/mixins/map/mixin.georaster-layers.js +114 -114
- package/map/client/mixins/map/mixin.gsmap-layers.js +27 -27
- package/map/client/mixins/map/mixin.heatmap-layers.js +116 -116
- package/map/client/mixins/map/mixin.map-activity.js +38 -38
- package/map/client/mixins/map/mixin.mapillary-layers.js +45 -45
- package/map/client/mixins/map/mixin.popup.js +53 -53
- package/map/client/mixins/map/mixin.style.js +73 -73
- package/map/client/mixins/map/mixin.tiled-mesh-layers.js +120 -120
- package/map/client/mixins/map/mixin.tiled-wind-layers.js +126 -126
- package/map/client/mixins/map/mixin.tooltip.js +47 -47
- package/map/client/mixins/mixin.activity.js +477 -477
- package/map/client/mixins/mixin.catalog-panel.js +26 -26
- package/map/client/mixins/mixin.context.js +262 -262
- package/map/client/mixins/mixin.feature-selection.js +28 -28
- package/map/client/mixins/mixin.feature-service.js +403 -403
- package/map/client/mixins/mixin.infobox.js +29 -29
- package/map/client/mixins/mixin.levels.js +66 -66
- package/map/client/mixins/mixin.style.js +29 -29
- package/map/client/mixins/mixin.weacast.js +212 -212
- package/map/client/pixi-utils.js +256 -256
- package/map/client/readers/index.js +4 -4
- package/map/client/readers/reader.geojson.js +64 -64
- package/map/client/readers/reader.gpx.js +36 -36
- package/map/client/readers/reader.kml.js +36 -36
- package/map/client/readers/reader.shp.js +82 -82
- package/map/client/utils/index.js +3 -3
- package/map/client/utils/utils.js +228 -228
- package/map/client/utils/utils.location.js +45 -45
- package/map/client/utils/utils.schema.js +75 -75
- package/map/client/utils.all.js +3 -3
- package/map/client/utils.globe.js +2 -2
- package/map/client/utils.js +4 -4
- package/map/client/utils.map.js +2 -2
- package/map/common/dynamic-grid-source.js +127 -127
- package/map/common/errors.js +3 -3
- package/map/common/geotiff-grid-source.js +150 -150
- package/map/common/grid.js +509 -509
- package/map/common/index.js +29 -29
- package/map/common/meteo-model-grid-source.js +157 -157
- package/map/common/moment-utils.js +24 -24
- package/map/common/opendap-grid-source.js +261 -261
- package/map/common/opendap-utils.js +247 -247
- package/map/common/permissions.js +11 -11
- package/map/common/schemas/catalog.update.json +28 -28
- package/map/common/time-based-grid-source.js +111 -111
- package/map/common/tms-utils.js +63 -63
- package/map/common/wcs-grid-source.js +93 -93
- package/map/common/wcs-utils.js +167 -167
- package/map/common/weacast-grid-source.js +316 -316
- package/map/common/wfs-utils.js +163 -163
- package/map/common/wms-utils.js +117 -117
- package/map/common/wmts-utils.js +154 -154
- package/map.api.js +5 -5
- package/map.client.globe.js +5 -5
- package/map.client.js +5 -5
- package/map.client.map.js +5 -5
- package/map.common.js +1 -1
- package/map.config.cjs +9 -9
- package/package.json +161 -161
- package/test/api/core/account.test.js +485 -485
- package/test/api/core/client.test.js.skip +37 -37
- package/test/api/core/config/default.cjs +118 -118
- package/test/api/core/config/email-templates/confirmInvitation/html.ejs +18 -18
- package/test/api/core/config/email-templates/identityChange/html.ejs +14 -14
- package/test/api/core/config/email-templates/newDevice/html.ejs +7 -7
- package/test/api/core/config/email-templates/newSubscription/html.ejs +7 -7
- package/test/api/core/config/email-templates/passwordChange/html.ejs +5 -5
- package/test/api/core/config/email-templates/resendVerifySignup/html.ejs +12 -12
- package/test/api/core/config/email-templates/resetPwd/html.ejs +5 -5
- package/test/api/core/config/email-templates/sendResetPwd/html.ejs +12 -12
- package/test/api/core/config/email-templates/verifySignup/html.ejs +3 -3
- package/test/api/core/data/invalid-objects.json +59 -59
- package/test/api/core/data/schema.json +57 -57
- package/test/api/core/data/valid-objects.json +37 -37
- package/test/api/core/hooks.test.js +330 -330
- package/test/api/core/index.js +1 -1
- package/test/api/core/index.test.js +478 -478
- package/test/api/core/push.test.js +197 -197
- package/test/api/core/schemas.test.js +82 -82
- package/test/api/core/storage.test.js +153 -153
- package/test/api/core/team.test.js +670 -670
- package/test/api/core/utils.js +92 -92
- package/test/api/index.js +3 -3
- package/test/api/map/alerts.test.js +560 -560
- package/test/api/map/config/default.cjs +125 -125
- package/test/api/map/config/layers.json +38 -38
- package/test/api/map/data/DescribeCoverage.xml +54 -54
- package/test/api/map/data/adsb.observations.json +131 -131
- package/test/api/map/data/dataset.grb.das +55 -55
- package/test/api/map/data/dataset.grb.dds +17 -17
- package/test/api/map/data/vigicrues.observations.json +47041 -47041
- package/test/api/map/data/vigicrues.stations.json +15421 -15421
- package/test/api/map/data/zones.json +1227 -1227
- package/test/api/map/grid-sources.test.js +313 -313
- package/test/api/map/hooks.test.js +98 -98
- package/test/api/map/index.test.js +563 -563
- package/test/api/map/test-log-2022-12-01.log +19 -0
- package/test/api/map/test-log-2023-01-05.log +4 -0
- package/test/api/map/test-log-2023-01-09.log +3 -0
- package/test/api/map/{test-log-2023-09-21.log → test-log-2023-02-05.log} +11 -12
- package/test/api/map/test-log-2023-02-14.log +82 -0
- package/test/api/map/test-log-2023-02-28.log +28 -0
- package/test/api/map/{test-log-2023-07-19.log → test-log-2023-03-02.log} +11 -13
- package/test/api/map/test-log-2023-03-06.log +11 -0
- package/test/api/map/test-log-2023-03-07.log +61 -0
- package/test/api/map/test-log-2023-03-31.log +11 -0
- package/test/api/map/test-log-2023-05-23.log +11 -0
- package/test/api/map/test-log-2023-05-24.log +11 -0
- package/test/client/core/account.js +36 -36
- package/test/client/core/api.js +361 -361
- package/test/client/core/collection.js +64 -64
- package/test/client/core/index.js +8 -8
- package/test/client/core/layout.js +116 -116
- package/test/client/core/runner.js +224 -224
- package/test/client/core/screens.js +35 -35
- package/test/client/core/time.js +10 -10
- package/test/client/core/utils.js +260 -260
- package/test/client/index.js +3 -3
- package/test/client/map/catalog.js +193 -193
- package/test/client/map/controls.js +41 -41
- package/test/client/map/index.js +4 -4
- package/test/client/map/time.js +24 -24
- package/test/client/map/utils.js +27 -27
- package/coverage/core/api/utils.js.html +0 -118
- package/coverage/lcov-report/core/api/utils.js.html +0 -118
- package/coverage/tmp/coverage-59096-1692631696256-0.json +0 -1
- package/coverage/tmp/coverage-59108-1692631696233-0.json +0 -1
- package/coverage/tmp/coverage-59119-1692631696222-0.json +0 -1
- package/coverage/tmp/coverage-59131-1692631696200-0.json +0 -1
- package/coverage/tmp/coverage-59138-1692631696175-0.json +0 -1
- package/test/api/core/test-log-2023-07-10.log +0 -2
- package/test/api/core/test-log-2023-07-12.log +0 -0
- package/test/api/core/test-log-2023-07-18.log +0 -78
- package/test/api/core/test-log-2023-07-19.log +0 -44
- package/test/api/core/test-log-2023-08-01.log +0 -162
- package/test/api/core/test-log-2023-08-21.log +0 -66
- package/test/api/core/test-log-2023-08-22.log +0 -96
- package/test/api/core/test-log-2023-08-23.log +0 -22
- package/test/api/core/test-log-2023-09-20.log +0 -22
- package/test/api/core/test-log-2023-09-21.log +0 -105
- package/test/api/core/test-log-2023-10-04.log +0 -22
- package/test/api/map/test-log-2023-07-18.log +0 -62
- package/test/api/map/test-log-2023-08-21.log +0 -65
- package/test/api/map/test-log-2023-09-20.log +0 -60
- /package/test/api/core/{test-log-2023-07-04.log → test-log-2023-06-05.log} +0 -0
|
@@ -1,261 +1,261 @@
|
|
|
1
|
-
import _ from 'lodash'
|
|
2
|
-
import makeDebug from 'debug'
|
|
3
|
-
import generateRandomPassword from 'password-generator'
|
|
4
|
-
import common from 'feathers-hooks-common'
|
|
5
|
-
import errors from '@feathersjs/errors'
|
|
6
|
-
import { Roles, RoleNames } from '../../common/permissions.js'
|
|
7
|
-
import authManagement from 'feathers-authentication-management'
|
|
8
|
-
|
|
9
|
-
const { Forbidden, BadRequest } = errors
|
|
10
|
-
const { getItems, replaceItems } = common
|
|
11
|
-
const verifyHooks = authManagement.hooks
|
|
12
|
-
|
|
13
|
-
const debug = makeDebug('kdk:core:users:hooks')
|
|
14
|
-
|
|
15
|
-
// Helper functions to be used in iff hooks
|
|
16
|
-
export function disallowRegistration (hook) {
|
|
17
|
-
return _.get(hook.app.get('authentication'), 'disallowRegistration')
|
|
18
|
-
}
|
|
19
|
-
export function allowLocalAuthentication (hook) {
|
|
20
|
-
return _.get(hook.app.get('authentication'), 'authStrategies', []).includes('local')
|
|
21
|
-
}
|
|
22
|
-
export function isNotMe (hook) {
|
|
23
|
-
const userId = _.get(hook.params, 'user._id', '')
|
|
24
|
-
const item = getItems(hook)
|
|
25
|
-
const targetId = _.get(item, '_id', '')
|
|
26
|
-
return userId.toString() !== targetId.toString()
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export function enforcePasswordPolicy (options = {}) {
|
|
30
|
-
return async function (hook) {
|
|
31
|
-
if (hook.type !== 'before') {
|
|
32
|
-
throw new Error('The \'enforePasswordPolicy\' hook should only be used as a \'before\' hook.')
|
|
33
|
-
}
|
|
34
|
-
// By pass check ?
|
|
35
|
-
if (hook.params.force) return hook
|
|
36
|
-
const app = hook.app
|
|
37
|
-
const item = getItems(hook)
|
|
38
|
-
const user = options.userAsItem ? item : hook.params.user
|
|
39
|
-
// Get both password(s) since some rules target one and some the other one(s)
|
|
40
|
-
const clearPassword = _.get(item, options.passwordField || 'clearPassword')
|
|
41
|
-
const hashedPasswords = _.get(user, options.previousPasswordsField || 'previousPasswords', [])
|
|
42
|
-
if (clearPassword && hashedPasswords && app.getPasswordPolicy) {
|
|
43
|
-
debug('Enforcing password policy on user', user)
|
|
44
|
-
const validator = app.getPasswordPolicy()
|
|
45
|
-
// First check the clear password
|
|
46
|
-
const result = validator.validate(clearPassword, { list: true })
|
|
47
|
-
// Then check for the last used passwords using password policy verifier
|
|
48
|
-
for (let i = 0; i < hashedPasswords.length; i++) {
|
|
49
|
-
try {
|
|
50
|
-
await validator.comparePassword({ password: hashedPasswords[i] }, clearPassword)
|
|
51
|
-
// If we have found a similar password stop
|
|
52
|
-
result.push('previous')
|
|
53
|
-
break
|
|
54
|
-
} catch (error) {
|
|
55
|
-
// Check next one
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
if (!_.isEmpty(result)) {
|
|
60
|
-
throw new BadRequest('The provided password does not comply to the password policy', {
|
|
61
|
-
translation: {
|
|
62
|
-
key: 'WEAK_PASSWORD',
|
|
63
|
-
keys: result.map(rule => 'WEAK_PASSWORD_' + rule.toUpperCase()),
|
|
64
|
-
params: Object.assign({ failedRules: result }, _.omit(validator.options, ['prohibited']))
|
|
65
|
-
}
|
|
66
|
-
})
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
return hook
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export function storePreviousPassword (options = {}) {
|
|
74
|
-
return function (hook) {
|
|
75
|
-
if (hook.type !== 'before') {
|
|
76
|
-
throw new Error('The \'storePreviousPassword\' hook should only be used as a \'before\' hook.')
|
|
77
|
-
}
|
|
78
|
-
const app = hook.app
|
|
79
|
-
const data = getItems(hook)
|
|
80
|
-
if (app.getPasswordPolicy && hook.params.previousItem) {
|
|
81
|
-
const validator = app.getPasswordPolicy()
|
|
82
|
-
// Based on previous password value
|
|
83
|
-
const user = hook.params.previousItem
|
|
84
|
-
const passwordField = options.passwordField || 'password'
|
|
85
|
-
const password = _.get(user, passwordField)
|
|
86
|
-
if (password) {
|
|
87
|
-
const previousPasswordsField = options.previousPasswordsField || 'previousPasswords'
|
|
88
|
-
const previousPasswords = _.get(user, previousPasswordsField, [])
|
|
89
|
-
debug(`Moving previous password from field ${passwordField} in field ${previousPasswords} on user`, user)
|
|
90
|
-
previousPasswords.push(password)
|
|
91
|
-
// Pop oldest password when required
|
|
92
|
-
const max = _.get(validator, 'options.history', 5)
|
|
93
|
-
if (previousPasswords.length > max) previousPasswords.shift()
|
|
94
|
-
Object.assign(data, { [previousPasswordsField]: previousPasswords })
|
|
95
|
-
replaceItems(hook, data)
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
return hook
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
export function generatePassword (options = {}) {
|
|
103
|
-
return function (hook) {
|
|
104
|
-
if (hook.type !== 'before') {
|
|
105
|
-
throw new Error('The \'generatePassword\' hook should only be used as a \'before\' hook.')
|
|
106
|
-
}
|
|
107
|
-
const app = hook.app
|
|
108
|
-
const data = hook.data
|
|
109
|
-
const passwordField = options.passwordField || 'password'
|
|
110
|
-
const suggestedPasswordField = options.suggestedPasswordField || 'password'
|
|
111
|
-
// If a password is already provided and compliant with rules we will use it
|
|
112
|
-
if (_.get(data, suggestedPasswordField)) {
|
|
113
|
-
_.set(data, passwordField, _.get(data, suggestedPasswordField))
|
|
114
|
-
// Avoid leaking clear password
|
|
115
|
-
_.unset(data, suggestedPasswordField)
|
|
116
|
-
}
|
|
117
|
-
// Generated password rule
|
|
118
|
-
const passwordRule = /[\w\d?-]/
|
|
119
|
-
// If we have a password policy ensure we match it
|
|
120
|
-
if (app.getPasswordPolicy) {
|
|
121
|
-
const validator = app.getPasswordPolicy()
|
|
122
|
-
// Check if a compliant password has been provided, otherwise generate it
|
|
123
|
-
if (!_.get(data, passwordField) || !validator.validate(_.get(data, passwordField))) {
|
|
124
|
-
do {
|
|
125
|
-
_.set(data, passwordField, generateRandomPassword(validator.options.minLength || 12, false, passwordRule))
|
|
126
|
-
} while (!validator.validate(_.get(data, passwordField)))
|
|
127
|
-
}
|
|
128
|
-
} else {
|
|
129
|
-
// Check if a password has been provided, otherwise generate it
|
|
130
|
-
if (!_.get(data, passwordField)) {
|
|
131
|
-
_.set(data, passwordField, generateRandomPassword(12, false, passwordRule))
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
return hook
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
export function preventRemoveUser (hook) {
|
|
139
|
-
if (hook.type !== 'before') {
|
|
140
|
-
throw new Error('The \'preventRemoveUser\' hook should only be used as a \'before\' hook.')
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
// By pass check ?
|
|
144
|
-
if (hook.params.force) return hook
|
|
145
|
-
const user = hook.params.user
|
|
146
|
-
// Check if the target is the current user
|
|
147
|
-
if ((user._id.toString() === hook.id.toString()) && user.organisations) {
|
|
148
|
-
// We must ensure the user is no more a owner of an organisation
|
|
149
|
-
const owningOrganisations = _.filter(user.organisations, { permissions: RoleNames[Roles.owner] })
|
|
150
|
-
if (!_.isEmpty(owningOrganisations)) {
|
|
151
|
-
debug('Cannot remove the user: ', user)
|
|
152
|
-
throw new Forbidden('You are not allowed to delete the user ' + user.name, {
|
|
153
|
-
translation: {
|
|
154
|
-
key: 'CANNOT_REMOVE_USER',
|
|
155
|
-
params: { user: _.get(user, 'profile.name') }
|
|
156
|
-
}
|
|
157
|
-
})
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
return hook
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
export async function joinOrganisation (hook) {
|
|
164
|
-
const app = hook.app
|
|
165
|
-
const subject = getItems(hook)
|
|
166
|
-
const authorisationService = app.getService('authorisations')
|
|
167
|
-
const usersService = app.getService('users')
|
|
168
|
-
|
|
169
|
-
// Set membership for the created user
|
|
170
|
-
await authorisationService.create({
|
|
171
|
-
scope: 'organisations',
|
|
172
|
-
permissions: subject.sponsor.roleGranted, // Member by default
|
|
173
|
-
resource: subject.sponsor.organisationId,
|
|
174
|
-
resourcesService: 'organisations'
|
|
175
|
-
}, {
|
|
176
|
-
subjectsService: usersService,
|
|
177
|
-
subjects: [subject]
|
|
178
|
-
})
|
|
179
|
-
debug('Organisation membership set for user ' + subject._id)
|
|
180
|
-
return hook
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
export function leaveOrganisations (options = { skipPrivate: true }) {
|
|
184
|
-
return async function (hook) {
|
|
185
|
-
if (hook.type !== 'after') {
|
|
186
|
-
throw new Error('The \'leaveOrganisations\' hook should only be used as a \'after\' hook.')
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
const app = hook.app
|
|
190
|
-
const organisationsService = app.getService('organisations')
|
|
191
|
-
const authorisationService = app.getService('authorisations')
|
|
192
|
-
const usersService = app.getService('users')
|
|
193
|
-
const subject = getItems(hook)
|
|
194
|
-
const organisations = _.get(subject, 'organisations', [])
|
|
195
|
-
|
|
196
|
-
await Promise.all(organisations.map(organisation => {
|
|
197
|
-
// Unset membership on org except private org if required
|
|
198
|
-
if (options.skipPrivate && organisation._id.toString() === subject._id.toString()) return Promise.resolve()
|
|
199
|
-
return authorisationService.remove(organisation._id.toString(), {
|
|
200
|
-
query: {
|
|
201
|
-
scope: 'organisations'
|
|
202
|
-
},
|
|
203
|
-
user: hook.params.user,
|
|
204
|
-
// Because we already have resource set it as objects to avoid populating
|
|
205
|
-
// Moreover used as an after hook the subject might not already exist anymore
|
|
206
|
-
subjects: [subject],
|
|
207
|
-
subjectsService: usersService,
|
|
208
|
-
resource: organisation,
|
|
209
|
-
resourcesService: organisationsService
|
|
210
|
-
})
|
|
211
|
-
}))
|
|
212
|
-
|
|
213
|
-
debug('Membership unset for all organisations on user ' + subject._id)
|
|
214
|
-
return hook
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
export async function sendVerificationEmail (hook) {
|
|
219
|
-
if (hook.type !== 'after') {
|
|
220
|
-
throw new Error('The \'sendVerificationEmail\' hook should only be used as a \'after\' hook.')
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
// Check for by-passing OAuth2 providers
|
|
224
|
-
for (const provider of hook.app.authenticationProviders) {
|
|
225
|
-
if (hook.result[provider + 'Id']) return Promise.resolve(hook)
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
const accountService = hook.app.getService('account')
|
|
229
|
-
await accountService.options.notifier('resendVerifySignup', hook.result)
|
|
230
|
-
return hook
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
export async function sendInvitationEmail (hook) {
|
|
234
|
-
// Before because we need to send the clear password by email
|
|
235
|
-
if (hook.type !== 'before') {
|
|
236
|
-
throw new Error('The \'sendInvitationEmail\' hook should only be used as a \'before\' hook.')
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
const accountService = hook.app.getService('account')
|
|
240
|
-
await accountService.options.notifier('sendInvitation', hook.data)
|
|
241
|
-
return hook
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
export function addVerification (hook) {
|
|
245
|
-
const accountService = hook.app.getService('account')
|
|
246
|
-
|
|
247
|
-
return verifyHooks.addVerification(accountService.getPath(true))(hook)
|
|
248
|
-
.then(hook => {
|
|
249
|
-
// Check for OAuth2 providers
|
|
250
|
-
let isVerified = false
|
|
251
|
-
for (const provider of hook.app.authenticationProviders) {
|
|
252
|
-
if (hook.data[provider + 'Id']) isVerified = true
|
|
253
|
-
}
|
|
254
|
-
hook.data.isVerified = isVerified
|
|
255
|
-
return hook
|
|
256
|
-
})
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
export function removeVerification (hook) {
|
|
260
|
-
return verifyHooks.removeVerification()(hook)
|
|
261
|
-
}
|
|
1
|
+
import _ from 'lodash'
|
|
2
|
+
import makeDebug from 'debug'
|
|
3
|
+
import generateRandomPassword from 'password-generator'
|
|
4
|
+
import common from 'feathers-hooks-common'
|
|
5
|
+
import errors from '@feathersjs/errors'
|
|
6
|
+
import { Roles, RoleNames } from '../../common/permissions.js'
|
|
7
|
+
import authManagement from 'feathers-authentication-management'
|
|
8
|
+
|
|
9
|
+
const { Forbidden, BadRequest } = errors
|
|
10
|
+
const { getItems, replaceItems } = common
|
|
11
|
+
const verifyHooks = authManagement.hooks
|
|
12
|
+
|
|
13
|
+
const debug = makeDebug('kdk:core:users:hooks')
|
|
14
|
+
|
|
15
|
+
// Helper functions to be used in iff hooks
|
|
16
|
+
export function disallowRegistration (hook) {
|
|
17
|
+
return _.get(hook.app.get('authentication'), 'disallowRegistration')
|
|
18
|
+
}
|
|
19
|
+
export function allowLocalAuthentication (hook) {
|
|
20
|
+
return _.get(hook.app.get('authentication'), 'authStrategies', []).includes('local')
|
|
21
|
+
}
|
|
22
|
+
export function isNotMe (hook) {
|
|
23
|
+
const userId = _.get(hook.params, 'user._id', '')
|
|
24
|
+
const item = getItems(hook)
|
|
25
|
+
const targetId = _.get(item, '_id', '')
|
|
26
|
+
return userId.toString() !== targetId.toString()
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function enforcePasswordPolicy (options = {}) {
|
|
30
|
+
return async function (hook) {
|
|
31
|
+
if (hook.type !== 'before') {
|
|
32
|
+
throw new Error('The \'enforePasswordPolicy\' hook should only be used as a \'before\' hook.')
|
|
33
|
+
}
|
|
34
|
+
// By pass check ?
|
|
35
|
+
if (hook.params.force) return hook
|
|
36
|
+
const app = hook.app
|
|
37
|
+
const item = getItems(hook)
|
|
38
|
+
const user = options.userAsItem ? item : hook.params.user
|
|
39
|
+
// Get both password(s) since some rules target one and some the other one(s)
|
|
40
|
+
const clearPassword = _.get(item, options.passwordField || 'clearPassword')
|
|
41
|
+
const hashedPasswords = _.get(user, options.previousPasswordsField || 'previousPasswords', [])
|
|
42
|
+
if (clearPassword && hashedPasswords && app.getPasswordPolicy) {
|
|
43
|
+
debug('Enforcing password policy on user', user)
|
|
44
|
+
const validator = app.getPasswordPolicy()
|
|
45
|
+
// First check the clear password
|
|
46
|
+
const result = validator.validate(clearPassword, { list: true })
|
|
47
|
+
// Then check for the last used passwords using password policy verifier
|
|
48
|
+
for (let i = 0; i < hashedPasswords.length; i++) {
|
|
49
|
+
try {
|
|
50
|
+
await validator.comparePassword({ password: hashedPasswords[i] }, clearPassword)
|
|
51
|
+
// If we have found a similar password stop
|
|
52
|
+
result.push('previous')
|
|
53
|
+
break
|
|
54
|
+
} catch (error) {
|
|
55
|
+
// Check next one
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (!_.isEmpty(result)) {
|
|
60
|
+
throw new BadRequest('The provided password does not comply to the password policy', {
|
|
61
|
+
translation: {
|
|
62
|
+
key: 'WEAK_PASSWORD',
|
|
63
|
+
keys: result.map(rule => 'WEAK_PASSWORD_' + rule.toUpperCase()),
|
|
64
|
+
params: Object.assign({ failedRules: result }, _.omit(validator.options, ['prohibited']))
|
|
65
|
+
}
|
|
66
|
+
})
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return hook
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export function storePreviousPassword (options = {}) {
|
|
74
|
+
return function (hook) {
|
|
75
|
+
if (hook.type !== 'before') {
|
|
76
|
+
throw new Error('The \'storePreviousPassword\' hook should only be used as a \'before\' hook.')
|
|
77
|
+
}
|
|
78
|
+
const app = hook.app
|
|
79
|
+
const data = getItems(hook)
|
|
80
|
+
if (app.getPasswordPolicy && hook.params.previousItem) {
|
|
81
|
+
const validator = app.getPasswordPolicy()
|
|
82
|
+
// Based on previous password value
|
|
83
|
+
const user = hook.params.previousItem
|
|
84
|
+
const passwordField = options.passwordField || 'password'
|
|
85
|
+
const password = _.get(user, passwordField)
|
|
86
|
+
if (password) {
|
|
87
|
+
const previousPasswordsField = options.previousPasswordsField || 'previousPasswords'
|
|
88
|
+
const previousPasswords = _.get(user, previousPasswordsField, [])
|
|
89
|
+
debug(`Moving previous password from field ${passwordField} in field ${previousPasswords} on user`, user)
|
|
90
|
+
previousPasswords.push(password)
|
|
91
|
+
// Pop oldest password when required
|
|
92
|
+
const max = _.get(validator, 'options.history', 5)
|
|
93
|
+
if (previousPasswords.length > max) previousPasswords.shift()
|
|
94
|
+
Object.assign(data, { [previousPasswordsField]: previousPasswords })
|
|
95
|
+
replaceItems(hook, data)
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return hook
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export function generatePassword (options = {}) {
|
|
103
|
+
return function (hook) {
|
|
104
|
+
if (hook.type !== 'before') {
|
|
105
|
+
throw new Error('The \'generatePassword\' hook should only be used as a \'before\' hook.')
|
|
106
|
+
}
|
|
107
|
+
const app = hook.app
|
|
108
|
+
const data = hook.data
|
|
109
|
+
const passwordField = options.passwordField || 'password'
|
|
110
|
+
const suggestedPasswordField = options.suggestedPasswordField || 'password'
|
|
111
|
+
// If a password is already provided and compliant with rules we will use it
|
|
112
|
+
if (_.get(data, suggestedPasswordField)) {
|
|
113
|
+
_.set(data, passwordField, _.get(data, suggestedPasswordField))
|
|
114
|
+
// Avoid leaking clear password
|
|
115
|
+
_.unset(data, suggestedPasswordField)
|
|
116
|
+
}
|
|
117
|
+
// Generated password rule
|
|
118
|
+
const passwordRule = /[\w\d?-]/
|
|
119
|
+
// If we have a password policy ensure we match it
|
|
120
|
+
if (app.getPasswordPolicy) {
|
|
121
|
+
const validator = app.getPasswordPolicy()
|
|
122
|
+
// Check if a compliant password has been provided, otherwise generate it
|
|
123
|
+
if (!_.get(data, passwordField) || !validator.validate(_.get(data, passwordField))) {
|
|
124
|
+
do {
|
|
125
|
+
_.set(data, passwordField, generateRandomPassword(validator.options.minLength || 12, false, passwordRule))
|
|
126
|
+
} while (!validator.validate(_.get(data, passwordField)))
|
|
127
|
+
}
|
|
128
|
+
} else {
|
|
129
|
+
// Check if a password has been provided, otherwise generate it
|
|
130
|
+
if (!_.get(data, passwordField)) {
|
|
131
|
+
_.set(data, passwordField, generateRandomPassword(12, false, passwordRule))
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return hook
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export function preventRemoveUser (hook) {
|
|
139
|
+
if (hook.type !== 'before') {
|
|
140
|
+
throw new Error('The \'preventRemoveUser\' hook should only be used as a \'before\' hook.')
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// By pass check ?
|
|
144
|
+
if (hook.params.force) return hook
|
|
145
|
+
const user = hook.params.user
|
|
146
|
+
// Check if the target is the current user
|
|
147
|
+
if ((user._id.toString() === hook.id.toString()) && user.organisations) {
|
|
148
|
+
// We must ensure the user is no more a owner of an organisation
|
|
149
|
+
const owningOrganisations = _.filter(user.organisations, { permissions: RoleNames[Roles.owner] })
|
|
150
|
+
if (!_.isEmpty(owningOrganisations)) {
|
|
151
|
+
debug('Cannot remove the user: ', user)
|
|
152
|
+
throw new Forbidden('You are not allowed to delete the user ' + user.name, {
|
|
153
|
+
translation: {
|
|
154
|
+
key: 'CANNOT_REMOVE_USER',
|
|
155
|
+
params: { user: _.get(user, 'profile.name') }
|
|
156
|
+
}
|
|
157
|
+
})
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return hook
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export async function joinOrganisation (hook) {
|
|
164
|
+
const app = hook.app
|
|
165
|
+
const subject = getItems(hook)
|
|
166
|
+
const authorisationService = app.getService('authorisations')
|
|
167
|
+
const usersService = app.getService('users')
|
|
168
|
+
|
|
169
|
+
// Set membership for the created user
|
|
170
|
+
await authorisationService.create({
|
|
171
|
+
scope: 'organisations',
|
|
172
|
+
permissions: subject.sponsor.roleGranted, // Member by default
|
|
173
|
+
resource: subject.sponsor.organisationId,
|
|
174
|
+
resourcesService: 'organisations'
|
|
175
|
+
}, {
|
|
176
|
+
subjectsService: usersService,
|
|
177
|
+
subjects: [subject]
|
|
178
|
+
})
|
|
179
|
+
debug('Organisation membership set for user ' + subject._id)
|
|
180
|
+
return hook
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export function leaveOrganisations (options = { skipPrivate: true }) {
|
|
184
|
+
return async function (hook) {
|
|
185
|
+
if (hook.type !== 'after') {
|
|
186
|
+
throw new Error('The \'leaveOrganisations\' hook should only be used as a \'after\' hook.')
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
const app = hook.app
|
|
190
|
+
const organisationsService = app.getService('organisations')
|
|
191
|
+
const authorisationService = app.getService('authorisations')
|
|
192
|
+
const usersService = app.getService('users')
|
|
193
|
+
const subject = getItems(hook)
|
|
194
|
+
const organisations = _.get(subject, 'organisations', [])
|
|
195
|
+
|
|
196
|
+
await Promise.all(organisations.map(organisation => {
|
|
197
|
+
// Unset membership on org except private org if required
|
|
198
|
+
if (options.skipPrivate && organisation._id.toString() === subject._id.toString()) return Promise.resolve()
|
|
199
|
+
return authorisationService.remove(organisation._id.toString(), {
|
|
200
|
+
query: {
|
|
201
|
+
scope: 'organisations'
|
|
202
|
+
},
|
|
203
|
+
user: hook.params.user,
|
|
204
|
+
// Because we already have resource set it as objects to avoid populating
|
|
205
|
+
// Moreover used as an after hook the subject might not already exist anymore
|
|
206
|
+
subjects: [subject],
|
|
207
|
+
subjectsService: usersService,
|
|
208
|
+
resource: organisation,
|
|
209
|
+
resourcesService: organisationsService
|
|
210
|
+
})
|
|
211
|
+
}))
|
|
212
|
+
|
|
213
|
+
debug('Membership unset for all organisations on user ' + subject._id)
|
|
214
|
+
return hook
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
export async function sendVerificationEmail (hook) {
|
|
219
|
+
if (hook.type !== 'after') {
|
|
220
|
+
throw new Error('The \'sendVerificationEmail\' hook should only be used as a \'after\' hook.')
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// Check for by-passing OAuth2 providers
|
|
224
|
+
for (const provider of hook.app.authenticationProviders) {
|
|
225
|
+
if (hook.result[provider + 'Id']) return Promise.resolve(hook)
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
const accountService = hook.app.getService('account')
|
|
229
|
+
await accountService.options.notifier('resendVerifySignup', hook.result)
|
|
230
|
+
return hook
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
export async function sendInvitationEmail (hook) {
|
|
234
|
+
// Before because we need to send the clear password by email
|
|
235
|
+
if (hook.type !== 'before') {
|
|
236
|
+
throw new Error('The \'sendInvitationEmail\' hook should only be used as a \'before\' hook.')
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
const accountService = hook.app.getService('account')
|
|
240
|
+
await accountService.options.notifier('sendInvitation', hook.data)
|
|
241
|
+
return hook
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
export function addVerification (hook) {
|
|
245
|
+
const accountService = hook.app.getService('account')
|
|
246
|
+
|
|
247
|
+
return verifyHooks.addVerification(accountService.getPath(true))(hook)
|
|
248
|
+
.then(hook => {
|
|
249
|
+
// Check for OAuth2 providers
|
|
250
|
+
let isVerified = false
|
|
251
|
+
for (const provider of hook.app.authenticationProviders) {
|
|
252
|
+
if (hook.data[provider + 'Id']) isVerified = true
|
|
253
|
+
}
|
|
254
|
+
hook.data.isVerified = isVerified
|
|
255
|
+
return hook
|
|
256
|
+
})
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
export function removeVerification (hook) {
|
|
260
|
+
return verifyHooks.removeVerification()(hook)
|
|
261
|
+
}
|
package/core/api/hooks/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
export * from './hooks.authentication.js'
|
|
2
|
-
export * from './hooks.authorisations.js'
|
|
3
|
-
export * from './hooks.groups.js'
|
|
4
|
-
export * from './hooks.logger.js'
|
|
5
|
-
export * from './hooks.model.js'
|
|
6
|
-
export * from './hooks.organisations.js'
|
|
7
|
-
export * from './hooks.query.js'
|
|
8
|
-
export * from './hooks.schemas.js'
|
|
9
|
-
export * from './hooks.service.js'
|
|
10
|
-
export * from './hooks.storage.js'
|
|
11
|
-
export * from './hooks.users.js'
|
|
12
|
-
export * from './hooks.push.js'
|
|
1
|
+
export * from './hooks.authentication.js'
|
|
2
|
+
export * from './hooks.authorisations.js'
|
|
3
|
+
export * from './hooks.groups.js'
|
|
4
|
+
export * from './hooks.logger.js'
|
|
5
|
+
export * from './hooks.model.js'
|
|
6
|
+
export * from './hooks.organisations.js'
|
|
7
|
+
export * from './hooks.query.js'
|
|
8
|
+
export * from './hooks.schemas.js'
|
|
9
|
+
export * from './hooks.service.js'
|
|
10
|
+
export * from './hooks.storage.js'
|
|
11
|
+
export * from './hooks.users.js'
|
|
12
|
+
export * from './hooks.push.js'
|
package/core/api/index.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import makeDebug from 'debug'
|
|
2
|
-
import services from './services/index.js'
|
|
3
|
-
import * as hooks from './hooks/index.js'
|
|
4
|
-
import { Schema } from '../common/index.js'
|
|
5
|
-
|
|
6
|
-
export * from './services/index.js'
|
|
7
|
-
export { hooks }
|
|
8
|
-
export * from './db.js'
|
|
9
|
-
export * from './authentication.js'
|
|
10
|
-
export * from './application.js'
|
|
11
|
-
export * from './marshall.js'
|
|
12
|
-
export * from '../common/index.js'
|
|
13
|
-
|
|
14
|
-
const debug = makeDebug('kdk:core')
|
|
15
|
-
|
|
16
|
-
export default async function init (app) {
|
|
17
|
-
debug('Initializing KDK core')
|
|
18
|
-
|
|
19
|
-
Schema.initialize(app.get('schema'))
|
|
20
|
-
await app.configure(services)
|
|
21
|
-
}
|
|
1
|
+
import makeDebug from 'debug'
|
|
2
|
+
import services from './services/index.js'
|
|
3
|
+
import * as hooks from './hooks/index.js'
|
|
4
|
+
import { Schema } from '../common/index.js'
|
|
5
|
+
|
|
6
|
+
export * from './services/index.js'
|
|
7
|
+
export { hooks }
|
|
8
|
+
export * from './db.js'
|
|
9
|
+
export * from './authentication.js'
|
|
10
|
+
export * from './application.js'
|
|
11
|
+
export * from './marshall.js'
|
|
12
|
+
export * from '../common/index.js'
|
|
13
|
+
|
|
14
|
+
const debug = makeDebug('kdk:core')
|
|
15
|
+
|
|
16
|
+
export default async function init (app) {
|
|
17
|
+
debug('Initializing KDK core')
|
|
18
|
+
|
|
19
|
+
Schema.initialize(app.get('schema'))
|
|
20
|
+
await app.configure(services)
|
|
21
|
+
}
|