@kalisio/kdk 2.6.2 → 2.6.3
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/client/css/core.variables.scss +72 -0
- package/client/i18n/core_en.json +744 -0
- package/client/i18n/core_fr.json +744 -0
- package/client/i18n/map_en.json +800 -0
- package/client/i18n/map_fr.json +800 -0
- package/client/kdk.client.css +47 -0
- package/client/kdk.client.js +41097 -0
- package/client/kdk.client.map.css +47 -0
- package/client/kdk.client.map.js +38182 -0
- package/client/kdk.client.map.min.css +1 -0
- package/client/kdk.client.map.min.js +27032 -0
- package/client/kdk.client.min.css +1 -0
- package/client/kdk.client.min.js +29074 -0
- package/client/schemas/capture.create.json +132 -0
- package/client/schemas/catalog.update.json +44 -0
- package/client/schemas/messages.update.json +16 -0
- package/client/schemas/projects.create.json +52 -0
- package/client/schemas/projects.update.json +52 -0
- package/client/schemas/settings.update.json +286 -0
- package/client/schemas/tags.update.json +35 -0
- package/client/schemas/users.update-profile.json +34 -0
- package/core/api/authentication.js +13 -1
- package/core/api/hooks/hooks.query.js +9 -0
- package/core/client/capabilities.js +6 -1
- package/core/client/components/KChip.vue +27 -6
- package/core/client/components/collection/KCard.vue +2 -2
- package/core/client/utils/utils.session.js +5 -1
- 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 +112 -97
- package/coverage/core/api/hooks/hooks.query.js.html +270 -222
- 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/{groups/groups.hooks.js.html → configurations/configurations.hooks.js.html} +16 -10
- package/coverage/{lcov-report/core/api/services/groups → core/api/services/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 +112 -97
- package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +270 -222
- 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/{core/api/services/groups → lcov-report/core/api/services/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 +32 -32
- package/coverage/lcov-report/map/api/hooks/index.html +5 -5
- 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/{core/api/services/organisations/organisations.hooks.js.html → lcov-report/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 +4172 -3909
- 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 +32 -32
- package/coverage/map/api/hooks/index.html +5 -5
- 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/{lcov-report/core/api/services/organisations/organisations.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-222524-1765963609350-0.json +1 -0
- package/coverage/tmp/coverage-222536-1765963609335-0.json +1 -0
- package/coverage/tmp/coverage-222547-1765963609324-0.json +1 -0
- package/coverage/tmp/coverage-222559-1765963609309-0.json +1 -0
- package/coverage/tmp/coverage-222566-1765963609278-0.json +1 -0
- package/map/api/hooks/hooks.query.js +60 -0
- package/map/client/components/stickies/KZoomControl.vue +17 -9
- package/map/client/i18n/map_en.json +6 -0
- package/map/client/i18n/map_fr.json +6 -0
- package/map/client/mixins/map/mixin.base-map.js +19 -1
- package/package.json +2 -2
- package/scripts/kash/CHANGELOG.md +4 -0
- package/scripts/kash/LICENSE +21 -0
- package/scripts/kash/README.md +9 -0
- package/scripts/kash/kash.sh +40 -45
- package/scripts/kash/scripts/run_tests.sh +4 -1
- package/test/api/core/config/default.cjs +1 -0
- package/test/api/core/test-log-2025-07-31.log +15 -0
- package/test/api/core/{test-log-2024-04-23.log → test-log-2025-10-03.log} +4 -9
- package/test/api/core/test-log-2025-11-12.log +117 -0
- package/test/api/core/test-log-2025-11-27.log +0 -0
- package/test/api/core/test-log-2025-11-28.log +17 -0
- package/test/api/core/test-log-2025-12-09.log +148 -0
- package/test/api/core/test-log-2025-12-17.log +58 -0
- package/test/api/core/test-log-2026-01-29.log +17 -0
- package/test/api/map/index.test.js +21 -0
- package/test/api/map/test-log-2025-07-23.log +1 -0
- package/test/api/map/test-log-2025-11-28.log +33 -0
- package/test/api/map/test-log-2025-12-10.log +2 -0
- package/test/api/map/test-log-2026-01-06.log +26 -0
- package/.vscode/settings.json +0 -5
- 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/test/api/core/test-log-2024-04-22.log +0 -84
- package/test/api/core/test-log-2024-08-13.log +0 -3
- /package/test/api/{map/test-log-2025-03-08.log → core/test-log-2025-11-10.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">85.24% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>52/61</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">71.42% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>10/14</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">100% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>2/2</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">85.24% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>52/61</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 high'></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>
|
|
@@ -119,7 +119,12 @@
|
|
|
119
119
|
<a name='L54'></a><a href='#L54'>54</a>
|
|
120
120
|
<a name='L55'></a><a href='#L55'>55</a>
|
|
121
121
|
<a name='L56'></a><a href='#L56'>56</a>
|
|
122
|
-
<a name='L57'></a><a href='#L57'>57</a
|
|
122
|
+
<a name='L57'></a><a href='#L57'>57</a>
|
|
123
|
+
<a name='L58'></a><a href='#L58'>58</a>
|
|
124
|
+
<a name='L59'></a><a href='#L59'>59</a>
|
|
125
|
+
<a name='L60'></a><a href='#L60'>60</a>
|
|
126
|
+
<a name='L61'></a><a href='#L61'>61</a>
|
|
127
|
+
<a name='L62'></a><a href='#L62'>62</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
123
128
|
<span class="cline-any cline-yes">1x</span>
|
|
124
129
|
<span class="cline-any cline-yes">1x</span>
|
|
125
130
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -128,53 +133,58 @@
|
|
|
128
133
|
<span class="cline-any cline-yes">1x</span>
|
|
129
134
|
<span class="cline-any cline-yes">1x</span>
|
|
130
135
|
<span class="cline-any cline-yes">1x</span>
|
|
131
|
-
<span class="cline-any cline-
|
|
132
|
-
<span class="cline-any cline-
|
|
136
|
+
<span class="cline-any cline-yes">2x</span>
|
|
137
|
+
<span class="cline-any cline-yes">2x</span>
|
|
133
138
|
<span class="cline-any cline-yes">1x</span>
|
|
134
139
|
<span class="cline-any cline-yes">1x</span>
|
|
135
|
-
<span class="cline-any cline-
|
|
136
|
-
<span class="cline-any cline-no"> </span>
|
|
137
|
-
<span class="cline-any cline-no"> </span>
|
|
138
|
-
<span class="cline-any cline-
|
|
139
|
-
<span class="cline-any cline-
|
|
140
|
-
<span class="cline-any cline-
|
|
141
|
-
<span class="cline-any cline-
|
|
142
|
-
<span class="cline-any cline-
|
|
143
|
-
<span class="cline-any cline-
|
|
144
|
-
<span class="cline-any cline-
|
|
145
|
-
<span class="cline-any cline-
|
|
146
|
-
<span class="cline-any cline-
|
|
147
|
-
<span class="cline-any cline-
|
|
148
|
-
<span class="cline-any cline-
|
|
149
|
-
<span class="cline-any cline-
|
|
150
|
-
<span class="cline-any cline-
|
|
151
|
-
<span class="cline-any cline-no"> </span>
|
|
152
|
-
<span class="cline-any cline-
|
|
153
|
-
<span class="cline-any cline-
|
|
154
|
-
<span class="cline-any cline-no"> </span>
|
|
155
|
-
<span class="cline-any cline-no"> </span>
|
|
156
|
-
<span class="cline-any cline-no"> </span>
|
|
157
|
-
<span class="cline-any cline-
|
|
158
|
-
<span class="cline-any cline-
|
|
159
|
-
<span class="cline-any cline-
|
|
160
|
-
<span class="cline-any cline-
|
|
161
|
-
<span class="cline-any cline-
|
|
162
|
-
<span class="cline-any cline-
|
|
163
|
-
<span class="cline-any cline-
|
|
164
|
-
<span class="cline-any cline-
|
|
165
|
-
<span class="cline-any cline-
|
|
166
|
-
<span class="cline-any cline-
|
|
167
|
-
<span class="cline-any cline-
|
|
168
|
-
<span class="cline-any cline-
|
|
169
|
-
<span class="cline-any cline-
|
|
170
|
-
<span class="cline-any cline-
|
|
171
|
-
<span class="cline-any cline-
|
|
172
|
-
<span class="cline-any cline-
|
|
173
|
-
<span class="cline-any cline-
|
|
174
|
-
<span class="cline-any cline-
|
|
175
|
-
<span class="cline-any cline-
|
|
176
|
-
<span class="cline-any cline-
|
|
177
|
-
<span class="cline-any cline-
|
|
140
|
+
<span class="cline-any cline-yes">17x</span>
|
|
141
|
+
<span class="cline-any cline-no"> </span>
|
|
142
|
+
<span class="cline-any cline-no"> </span>
|
|
143
|
+
<span class="cline-any cline-yes">17x</span>
|
|
144
|
+
<span class="cline-any cline-yes">17x</span>
|
|
145
|
+
<span class="cline-any cline-yes">17x</span>
|
|
146
|
+
<span class="cline-any cline-yes">17x</span>
|
|
147
|
+
<span class="cline-any cline-yes">17x</span>
|
|
148
|
+
<span class="cline-any cline-yes">17x</span>
|
|
149
|
+
<span class="cline-any cline-yes">17x</span>
|
|
150
|
+
<span class="cline-any cline-yes">17x</span>
|
|
151
|
+
<span class="cline-any cline-yes">6x</span>
|
|
152
|
+
<span class="cline-any cline-yes">6x</span>
|
|
153
|
+
<span class="cline-any cline-yes">17x</span>
|
|
154
|
+
<span class="cline-any cline-yes">2x</span>
|
|
155
|
+
<span class="cline-any cline-yes">2x</span>
|
|
156
|
+
<span class="cline-any cline-no"> </span>
|
|
157
|
+
<span class="cline-any cline-yes">2x</span>
|
|
158
|
+
<span class="cline-any cline-yes">17x</span>
|
|
159
|
+
<span class="cline-any cline-no"> </span>
|
|
160
|
+
<span class="cline-any cline-no"> </span>
|
|
161
|
+
<span class="cline-any cline-no"> </span>
|
|
162
|
+
<span class="cline-any cline-yes">2x</span>
|
|
163
|
+
<span class="cline-any cline-yes">2x</span>
|
|
164
|
+
<span class="cline-any cline-yes">2x</span>
|
|
165
|
+
<span class="cline-any cline-yes">2x</span>
|
|
166
|
+
<span class="cline-any cline-yes">2x</span>
|
|
167
|
+
<span class="cline-any cline-yes">17x</span>
|
|
168
|
+
<span class="cline-any cline-yes">17x</span>
|
|
169
|
+
<span class="cline-any cline-yes">17x</span>
|
|
170
|
+
<span class="cline-any cline-yes">17x</span>
|
|
171
|
+
<span class="cline-any cline-yes">17x</span>
|
|
172
|
+
<span class="cline-any cline-yes">17x</span>
|
|
173
|
+
<span class="cline-any cline-yes">17x</span>
|
|
174
|
+
<span class="cline-any cline-yes">17x</span>
|
|
175
|
+
<span class="cline-any cline-yes">17x</span>
|
|
176
|
+
<span class="cline-any cline-yes">17x</span>
|
|
177
|
+
<span class="cline-any cline-yes">17x</span>
|
|
178
|
+
<span class="cline-any cline-yes">17x</span>
|
|
179
|
+
<span class="cline-any cline-yes">2x</span>
|
|
180
|
+
<span class="cline-any cline-yes">2x</span>
|
|
181
|
+
<span class="cline-any cline-yes">2x</span>
|
|
182
|
+
<span class="cline-any cline-yes">2x</span>
|
|
183
|
+
<span class="cline-any cline-yes">17x</span>
|
|
184
|
+
<span class="cline-any cline-no"> </span>
|
|
185
|
+
<span class="cline-any cline-no"> </span>
|
|
186
|
+
<span class="cline-any cline-no"> </span>
|
|
187
|
+
<span class="cline-any cline-yes">17x</span>
|
|
178
188
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import emails from 'email-templates'
|
|
179
189
|
import path from 'path'
|
|
180
190
|
import makeDebug from 'debug'
|
|
@@ -183,54 +193,59 @@ import _ from 'lodash'
|
|
|
183
193
|
const debug = makeDebug('kdk:core:push:hooks')
|
|
184
194
|
|
|
185
195
|
// Helper functions to be used in iff hooks
|
|
186
|
-
export
|
|
187
|
-
|
|
188
|
-
|
|
196
|
+
export function disallowExternalPush (hook) {
|
|
197
|
+
return _.get(hook.app.get('push'), 'disallowExternalPush', true)
|
|
198
|
+
}
|
|
189
199
|
|
|
190
|
-
export
|
|
191
|
-
<span class="
|
|
200
|
+
export async function sendNewSubscriptionEmail (hook) {
|
|
201
|
+
if (hook.type !== 'after') <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
192
202
|
<span class="cstat-no" title="statement not covered" > throw new Error('The \'sendNewSubscriptionEmail\' hook should only be used as a \'after\' hook.')</span>
|
|
193
203
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
<span class="
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
<span class="cstat-no" title="statement not covered" >
|
|
208
|
-
|
|
209
|
-
<span class="
|
|
210
|
-
<span class="cstat-no" title="statement not covered" >
|
|
211
|
-
<span class="cstat-no" title="statement not covered" >
|
|
212
|
-
<span class="cstat-no" title="statement not covered" > link: domainPath,</span>
|
|
213
|
-
<span class="cstat-no" title="statement not covered" > domainPath</span>
|
|
204
|
+
const app = hook.app
|
|
205
|
+
const mailerService = app.getService('mailer')
|
|
206
|
+
if (!mailerService) <span class="branch-0 cbranch-no" title="branch not covered" >return</span>
|
|
207
|
+
// Check for a new subscription if any
|
|
208
|
+
const currentUser = hook.result
|
|
209
|
+
const previousUser = hook.params.user
|
|
210
|
+
// If we can't compare abort, eg f-a-m might patch user to update tokens
|
|
211
|
+
if (!currentUser || !previousUser) return
|
|
212
|
+
// Retrieve the last subscription
|
|
213
|
+
const lastSubscription = _.last(_.get(currentUser, 'subscriptions', []))
|
|
214
|
+
if (!lastSubscription) return
|
|
215
|
+
// Check whether the subscription has an existing fingerprint
|
|
216
|
+
const existingSubscription = _.find(_.get(previousUser, 'subscriptions', []), subscription => {
|
|
217
|
+
<span class="cstat-no" title="statement not covered" > return _.isEqual(subscription.fingerprint, lastSubscription.fingerprint)</span>
|
|
218
|
+
})
|
|
219
|
+
if (existingSubscription) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
220
|
+
<span class="cstat-no" title="statement not covered" > debug('Last subscription uses an existing fingerprint')</span>
|
|
221
|
+
<span class="cstat-no" title="statement not covered" > return</span>
|
|
214
222
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
223
|
+
debug('Last subscription uses a new fingerprint')
|
|
224
|
+
// Send an email to notify the user
|
|
225
|
+
const domainPath = app.get('domain') + '/#/'
|
|
226
|
+
const email = {
|
|
227
|
+
subject: 'Security alert - new browser detected',
|
|
228
|
+
from: mailerService.options.from || mailerService.options.auth.user,
|
|
229
|
+
to: currentUser.email,
|
|
230
|
+
link: domainPath,
|
|
231
|
+
domainPath
|
|
232
|
+
}
|
|
233
|
+
// Build the subject & link to the app to perform the different actions
|
|
234
|
+
const templateDir = path.join(mailerService.options.templateDir, 'newSubscription')
|
|
235
|
+
const template = new emails.EmailTemplate(templateDir)
|
|
236
|
+
// Errors does not seem to be correctly catched by the caller
|
|
237
|
+
// so we catch them here to avoid any problem
|
|
238
|
+
try {
|
|
239
|
+
const emailContent = await template.render({ email, user: currentUser, subscription: lastSubscription }, currentUser.locale || 'en-us')
|
|
240
|
+
// Update compiled content
|
|
241
|
+
email.html = emailContent.html
|
|
242
|
+
debug('Sending email ', email)
|
|
243
|
+
await mailerService.create(email)
|
|
244
|
+
} <span class="branch-0 cbranch-no" title="branch not covered" >catch (error) {</span>
|
|
228
245
|
<span class="cstat-no" title="statement not covered" > debug('Sending email failed', error)</span>
|
|
229
246
|
<span class="cstat-no" title="statement not covered" > app.logger.error(error)</span>
|
|
230
247
|
<span class="cstat-no" title="statement not covered" > }</span>
|
|
231
|
-
|
|
232
|
-
<span class="cstat-no" title="statement not covered" > return hook</span>
|
|
233
|
-
<span class="cstat-no" title="statement not covered" >}</span>
|
|
248
|
+
}
|
|
234
249
|
</pre></td></tr></table></pre>
|
|
235
250
|
|
|
236
251
|
<div class='push'></div><!-- for sticky footer -->
|
|
@@ -238,7 +253,7 @@ export <span class="fstat-no" title="function not covered" >async function sendN
|
|
|
238
253
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
239
254
|
Code coverage generated by
|
|
240
255
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
241
|
-
at
|
|
256
|
+
at 2025-12-17T09:26:49.744Z
|
|
242
257
|
</div>
|
|
243
258
|
<script src="../../../prettify.js"></script>
|
|
244
259
|
<script>
|