@kalisio/kdk 1.3.6 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (577) hide show
  1. package/.nyc_output/{0d403586-0c7c-4336-94d1-a49e9f02a905.json → 058fc679-d60a-4501-ac04-71171e5200b8.json} +0 -0
  2. package/.nyc_output/2226bcce-9d22-4dad-b9fa-46564b5565c7.json +1 -0
  3. package/.nyc_output/6dc4b140-1a8a-4d69-b91c-89c557883d6e.json +1 -0
  4. package/.nyc_output/{21dd57bd-48c5-41c8-8800-252db32a9366.json → 8b1830fa-932e-4a61-9837-4a5b18f83ea9.json} +0 -0
  5. package/.nyc_output/{3eb3a2ca-53c2-4551-ba6b-adf70f9a53cd.json → afd2d144-3570-4858-b94a-b523dbd023dd.json} +0 -0
  6. package/.nyc_output/processinfo/058fc679-d60a-4501-ac04-71171e5200b8.json +1 -0
  7. package/.nyc_output/processinfo/2226bcce-9d22-4dad-b9fa-46564b5565c7.json +1 -0
  8. package/.nyc_output/processinfo/6dc4b140-1a8a-4d69-b91c-89c557883d6e.json +1 -0
  9. package/.nyc_output/processinfo/8b1830fa-932e-4a61-9837-4a5b18f83ea9.json +1 -0
  10. package/.nyc_output/processinfo/afd2d144-3570-4858-b94a-b523dbd023dd.json +1 -0
  11. package/.nyc_output/processinfo/index.json +1 -1
  12. package/CHANGELOG.md +167 -79
  13. package/README.md +1 -1
  14. package/coverage/core/api/application.js.html +436 -436
  15. package/coverage/core/api/authentication.js.html +119 -119
  16. package/coverage/core/api/db.js.html +201 -201
  17. package/coverage/core/api/hooks/hooks.account.js.html +48 -48
  18. package/coverage/core/api/hooks/hooks.authentication.js.html +64 -64
  19. package/coverage/core/api/hooks/hooks.authorisations.js.html +369 -378
  20. package/coverage/core/api/hooks/hooks.devices.js.html +49 -49
  21. package/coverage/core/api/hooks/hooks.groups.js.html +37 -37
  22. package/coverage/core/api/hooks/hooks.logger.js.html +27 -27
  23. package/coverage/core/api/hooks/hooks.model.js.html +269 -269
  24. package/coverage/core/api/hooks/hooks.organisations.js.html +183 -231
  25. package/coverage/core/api/hooks/hooks.pusher.js.html +114 -114
  26. package/coverage/core/api/hooks/hooks.query.js.html +234 -198
  27. package/coverage/core/api/hooks/hooks.service.js.html +82 -82
  28. package/coverage/core/api/hooks/hooks.storage.js.html +121 -121
  29. package/coverage/core/api/hooks/hooks.tags.js.html +232 -232
  30. package/coverage/core/api/hooks/hooks.users.js.html +304 -256
  31. package/coverage/core/api/hooks/index.html +172 -172
  32. package/coverage/core/api/hooks/index.js.html +24 -24
  33. package/coverage/core/api/index.html +75 -75
  34. package/coverage/core/api/index.js.html +26 -26
  35. package/coverage/core/api/marshall.js.html +57 -57
  36. package/coverage/core/api/models/groups.model.mongodb.js.html +20 -20
  37. package/coverage/core/api/models/index.html +50 -50
  38. package/coverage/core/api/models/organisations.model.mongodb.js.html +12 -12
  39. package/coverage/core/api/models/tags.model.mongodb.js.html +22 -22
  40. package/coverage/core/api/models/users.model.mongodb.js.html +20 -20
  41. package/coverage/core/api/oauth2-handler.js.html +18 -18
  42. package/coverage/core/api/oauth2-verifier.js.html +38 -38
  43. package/coverage/core/api/services/account/account.hooks.js.html +16 -16
  44. package/coverage/core/api/services/account/account.service.js.html +108 -108
  45. package/coverage/core/api/services/account/index.html +32 -32
  46. package/coverage/core/api/services/authorisations/authorisations.hooks.js.html +9 -9
  47. package/coverage/core/api/services/authorisations/authorisations.service.js.html +132 -129
  48. package/coverage/core/api/services/authorisations/index.html +28 -28
  49. package/coverage/core/api/services/databases/databases.hooks.js.html +9 -9
  50. package/coverage/core/api/services/databases/databases.service.js.html +12 -12
  51. package/coverage/core/api/services/databases/index.html +24 -24
  52. package/coverage/core/api/services/devices/devices.hooks.js.html +9 -9
  53. package/coverage/core/api/services/devices/devices.service.js.html +121 -121
  54. package/coverage/core/api/services/devices/index.html +28 -28
  55. package/coverage/core/api/services/groups/groups.hooks.js.html +9 -9
  56. package/coverage/core/api/services/groups/index.html +13 -13
  57. package/coverage/core/api/services/index.html +21 -21
  58. package/coverage/core/api/services/index.js.html +137 -137
  59. package/coverage/core/api/services/mailer/index.html +24 -24
  60. package/coverage/core/api/services/mailer/mailer.hooks.js.html +9 -9
  61. package/coverage/core/api/services/mailer/mailer.service.js.html +19 -19
  62. package/coverage/core/api/services/organisations/index.html +24 -24
  63. package/coverage/core/api/services/organisations/organisations.hooks.js.html +8 -8
  64. package/coverage/core/api/services/organisations/organisations.service.js.html +67 -67
  65. package/coverage/core/api/services/pusher/index.html +34 -34
  66. package/coverage/core/api/services/pusher/pusher.channels.js.html +8 -8
  67. package/coverage/core/api/services/pusher/pusher.hooks.js.html +10 -10
  68. package/coverage/core/api/services/pusher/pusher.service.js.html +414 -414
  69. package/coverage/core/api/services/storage/index.html +21 -21
  70. package/coverage/core/api/services/storage/storage.hooks.js.html +35 -35
  71. package/coverage/core/api/services/tags/index.html +21 -21
  72. package/coverage/core/api/services/tags/tags.hooks.js.html +25 -25
  73. package/coverage/core/api/services/users/index.html +21 -21
  74. package/coverage/core/api/services/users/users.hooks.js.html +33 -33
  75. package/coverage/core/common/errors.js.html +1 -1
  76. package/coverage/core/common/index.html +42 -27
  77. package/coverage/core/common/index.js.html +16 -16
  78. package/coverage/core/common/permissions.js.html +325 -265
  79. package/coverage/index.html +182 -182
  80. package/coverage/lcov-report/core/api/application.js.html +436 -436
  81. package/coverage/lcov-report/core/api/authentication.js.html +119 -119
  82. package/coverage/lcov-report/core/api/db.js.html +201 -201
  83. package/coverage/lcov-report/core/api/hooks/hooks.account.js.html +48 -48
  84. package/coverage/lcov-report/core/api/hooks/hooks.authentication.js.html +64 -64
  85. package/coverage/lcov-report/core/api/hooks/hooks.authorisations.js.html +369 -378
  86. package/coverage/lcov-report/core/api/hooks/hooks.devices.js.html +49 -49
  87. package/coverage/lcov-report/core/api/hooks/hooks.groups.js.html +37 -37
  88. package/coverage/lcov-report/core/api/hooks/hooks.logger.js.html +27 -27
  89. package/coverage/lcov-report/core/api/hooks/hooks.model.js.html +269 -269
  90. package/coverage/lcov-report/core/api/hooks/hooks.organisations.js.html +183 -231
  91. package/coverage/lcov-report/core/api/hooks/hooks.pusher.js.html +114 -114
  92. package/coverage/lcov-report/core/api/hooks/hooks.query.js.html +234 -198
  93. package/coverage/lcov-report/core/api/hooks/hooks.service.js.html +82 -82
  94. package/coverage/lcov-report/core/api/hooks/hooks.storage.js.html +121 -121
  95. package/coverage/lcov-report/core/api/hooks/hooks.tags.js.html +232 -232
  96. package/coverage/lcov-report/core/api/hooks/hooks.users.js.html +304 -256
  97. package/coverage/lcov-report/core/api/hooks/index.html +172 -172
  98. package/coverage/lcov-report/core/api/hooks/index.js.html +24 -24
  99. package/coverage/lcov-report/core/api/index.html +75 -75
  100. package/coverage/lcov-report/core/api/index.js.html +26 -26
  101. package/coverage/lcov-report/core/api/marshall.js.html +57 -57
  102. package/coverage/lcov-report/core/api/models/groups.model.mongodb.js.html +20 -20
  103. package/coverage/lcov-report/core/api/models/index.html +50 -50
  104. package/coverage/lcov-report/core/api/models/organisations.model.mongodb.js.html +12 -12
  105. package/coverage/lcov-report/core/api/models/tags.model.mongodb.js.html +22 -22
  106. package/coverage/lcov-report/core/api/models/users.model.mongodb.js.html +20 -20
  107. package/coverage/lcov-report/core/api/oauth2-handler.js.html +18 -18
  108. package/coverage/lcov-report/core/api/oauth2-verifier.js.html +38 -38
  109. package/coverage/lcov-report/core/api/services/account/account.hooks.js.html +16 -16
  110. package/coverage/lcov-report/core/api/services/account/account.service.js.html +108 -108
  111. package/coverage/lcov-report/core/api/services/account/index.html +32 -32
  112. package/coverage/lcov-report/core/api/services/authorisations/authorisations.hooks.js.html +9 -9
  113. package/coverage/lcov-report/core/api/services/authorisations/authorisations.service.js.html +132 -129
  114. package/coverage/lcov-report/core/api/services/authorisations/index.html +28 -28
  115. package/coverage/lcov-report/core/api/services/databases/databases.hooks.js.html +9 -9
  116. package/coverage/lcov-report/core/api/services/databases/databases.service.js.html +12 -12
  117. package/coverage/lcov-report/core/api/services/databases/index.html +24 -24
  118. package/coverage/lcov-report/core/api/services/devices/devices.hooks.js.html +9 -9
  119. package/coverage/lcov-report/core/api/services/devices/devices.service.js.html +121 -121
  120. package/coverage/lcov-report/core/api/services/devices/index.html +28 -28
  121. package/coverage/lcov-report/core/api/services/groups/groups.hooks.js.html +9 -9
  122. package/coverage/lcov-report/core/api/services/groups/index.html +13 -13
  123. package/coverage/lcov-report/core/api/services/index.html +21 -21
  124. package/coverage/lcov-report/core/api/services/index.js.html +137 -137
  125. package/coverage/lcov-report/core/api/services/mailer/index.html +24 -24
  126. package/coverage/lcov-report/core/api/services/mailer/mailer.hooks.js.html +9 -9
  127. package/coverage/lcov-report/core/api/services/mailer/mailer.service.js.html +19 -19
  128. package/coverage/lcov-report/core/api/services/organisations/index.html +24 -24
  129. package/coverage/lcov-report/core/api/services/organisations/organisations.hooks.js.html +8 -8
  130. package/coverage/lcov-report/core/api/services/organisations/organisations.service.js.html +67 -67
  131. package/coverage/lcov-report/core/api/services/pusher/index.html +34 -34
  132. package/coverage/lcov-report/core/api/services/pusher/pusher.channels.js.html +8 -8
  133. package/coverage/lcov-report/core/api/services/pusher/pusher.hooks.js.html +10 -10
  134. package/coverage/lcov-report/core/api/services/pusher/pusher.service.js.html +414 -414
  135. package/coverage/lcov-report/core/api/services/storage/index.html +21 -21
  136. package/coverage/lcov-report/core/api/services/storage/storage.hooks.js.html +35 -35
  137. package/coverage/lcov-report/core/api/services/tags/index.html +21 -21
  138. package/coverage/lcov-report/core/api/services/tags/tags.hooks.js.html +25 -25
  139. package/coverage/lcov-report/core/api/services/users/index.html +21 -21
  140. package/coverage/lcov-report/core/api/services/users/users.hooks.js.html +33 -33
  141. package/coverage/lcov-report/core/common/errors.js.html +1 -1
  142. package/coverage/lcov-report/core/common/index.html +42 -27
  143. package/coverage/lcov-report/core/common/index.js.html +16 -16
  144. package/coverage/lcov-report/core/common/permissions.js.html +325 -265
  145. package/coverage/lcov-report/index.html +182 -182
  146. package/coverage/lcov-report/map/api/hooks/hooks.catalog.js.html +1 -1
  147. package/coverage/lcov-report/map/api/hooks/hooks.query.js.html +118 -37
  148. package/coverage/lcov-report/map/api/hooks/index.html +7 -7
  149. package/coverage/lcov-report/map/api/hooks/index.js.html +1 -1
  150. package/coverage/lcov-report/map/api/index.html +1 -1
  151. package/coverage/lcov-report/map/api/index.js.html +1 -1
  152. package/coverage/lcov-report/map/api/marshall.js.html +1 -1
  153. package/coverage/lcov-report/map/api/models/alerts.model.mongodb.js.html +1 -1
  154. package/coverage/lcov-report/map/api/models/catalog.model.mongodb.js.html +1 -1
  155. package/coverage/lcov-report/map/api/models/features.model.mongodb.js.html +1 -1
  156. package/coverage/lcov-report/map/api/models/index.html +1 -1
  157. package/coverage/lcov-report/map/api/services/alerts/alerts.hooks.js.html +1 -1
  158. package/coverage/lcov-report/map/api/services/alerts/alerts.service.js.html +1 -1
  159. package/coverage/lcov-report/map/api/services/alerts/index.html +1 -1
  160. package/coverage/lcov-report/map/api/services/catalog/catalog.hooks.js.html +1 -1
  161. package/coverage/lcov-report/map/api/services/catalog/index.html +1 -1
  162. package/coverage/lcov-report/map/api/services/daptiles/daptiles.service.js.html +1 -1
  163. package/coverage/lcov-report/map/api/services/daptiles/index.html +1 -1
  164. package/coverage/lcov-report/map/api/services/features/features.hooks.js.html +2 -2
  165. package/coverage/lcov-report/map/api/services/features/index.html +1 -1
  166. package/coverage/lcov-report/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
  167. package/coverage/lcov-report/map/api/services/geocoder/geocoder.service.js.html +1 -1
  168. package/coverage/lcov-report/map/api/services/geocoder/index.html +1 -1
  169. package/coverage/lcov-report/map/api/services/index.html +1 -1
  170. package/coverage/lcov-report/map/api/services/index.js.html +1 -1
  171. package/coverage/lcov-report/map/common/dynamic-grid-source.js.html +1 -1
  172. package/coverage/lcov-report/map/common/errors.js.html +1 -1
  173. package/coverage/lcov-report/map/common/geotiff-grid-source.js.html +1 -1
  174. package/coverage/lcov-report/map/common/grid.js.html +1 -1
  175. package/coverage/lcov-report/map/common/index.html +12 -12
  176. package/coverage/lcov-report/map/common/index.js.html +1 -1
  177. package/coverage/lcov-report/map/common/meteo-model-grid-source.js.html +1 -1
  178. package/coverage/lcov-report/map/common/moment-utils.js.html +1 -1
  179. package/coverage/lcov-report/map/common/opendap-grid-source.js.html +1 -1
  180. package/coverage/lcov-report/map/common/opendap-utils.js.html +1 -1
  181. package/coverage/lcov-report/map/common/permissions.js.html +1 -1
  182. package/coverage/lcov-report/map/common/time-based-grid-source.js.html +1 -1
  183. package/coverage/lcov-report/map/common/tms-utils.js.html +1 -1
  184. package/coverage/lcov-report/map/common/wcs-grid-source.js.html +1 -1
  185. package/coverage/lcov-report/map/common/wcs-utils.js.html +1 -1
  186. package/coverage/lcov-report/map/common/weacast-grid-source.js.html +1 -1
  187. package/coverage/lcov-report/map/common/wfs-utils.js.html +8 -5
  188. package/coverage/lcov-report/map/common/wms-utils.js.html +1 -1
  189. package/coverage/lcov-report/map/common/wmts-utils.js.html +71 -11
  190. package/coverage/lcov.info +3742 -3949
  191. package/coverage/map/api/hooks/hooks.catalog.js.html +1 -1
  192. package/coverage/map/api/hooks/hooks.query.js.html +118 -37
  193. package/coverage/map/api/hooks/index.html +7 -7
  194. package/coverage/map/api/hooks/index.js.html +1 -1
  195. package/coverage/map/api/index.html +1 -1
  196. package/coverage/map/api/index.js.html +1 -1
  197. package/coverage/map/api/marshall.js.html +1 -1
  198. package/coverage/map/api/models/alerts.model.mongodb.js.html +1 -1
  199. package/coverage/map/api/models/catalog.model.mongodb.js.html +1 -1
  200. package/coverage/map/api/models/features.model.mongodb.js.html +1 -1
  201. package/coverage/map/api/models/index.html +1 -1
  202. package/coverage/map/api/services/alerts/alerts.hooks.js.html +1 -1
  203. package/coverage/map/api/services/alerts/alerts.service.js.html +1 -1
  204. package/coverage/map/api/services/alerts/index.html +1 -1
  205. package/coverage/map/api/services/catalog/catalog.hooks.js.html +1 -1
  206. package/coverage/map/api/services/catalog/index.html +1 -1
  207. package/coverage/map/api/services/daptiles/daptiles.service.js.html +1 -1
  208. package/coverage/map/api/services/daptiles/index.html +1 -1
  209. package/coverage/map/api/services/features/features.hooks.js.html +2 -2
  210. package/coverage/map/api/services/features/index.html +1 -1
  211. package/coverage/map/api/services/geocoder/geocoder.hooks.js.html +1 -1
  212. package/coverage/map/api/services/geocoder/geocoder.service.js.html +1 -1
  213. package/coverage/map/api/services/geocoder/index.html +1 -1
  214. package/coverage/map/api/services/index.html +1 -1
  215. package/coverage/map/api/services/index.js.html +1 -1
  216. package/coverage/map/common/dynamic-grid-source.js.html +1 -1
  217. package/coverage/map/common/errors.js.html +1 -1
  218. package/coverage/map/common/geotiff-grid-source.js.html +1 -1
  219. package/coverage/map/common/grid.js.html +1 -1
  220. package/coverage/map/common/index.html +12 -12
  221. package/coverage/map/common/index.js.html +1 -1
  222. package/coverage/map/common/meteo-model-grid-source.js.html +1 -1
  223. package/coverage/map/common/moment-utils.js.html +1 -1
  224. package/coverage/map/common/opendap-grid-source.js.html +1 -1
  225. package/coverage/map/common/opendap-utils.js.html +1 -1
  226. package/coverage/map/common/permissions.js.html +1 -1
  227. package/coverage/map/common/time-based-grid-source.js.html +1 -1
  228. package/coverage/map/common/tms-utils.js.html +1 -1
  229. package/coverage/map/common/wcs-grid-source.js.html +1 -1
  230. package/coverage/map/common/wcs-utils.js.html +1 -1
  231. package/coverage/map/common/weacast-grid-source.js.html +1 -1
  232. package/coverage/map/common/wfs-utils.js.html +8 -5
  233. package/coverage/map/common/wms-utils.js.html +1 -1
  234. package/coverage/map/common/wmts-utils.js.html +71 -11
  235. package/extras/icons/kanban.png +0 -0
  236. package/extras/tours/core/add-member.js +10 -1
  237. package/extras/tours/core/{tag-member.js → edit-member-tags.js} +4 -3
  238. package/extras/tours/core/groups.js +8 -2
  239. package/extras/tours/core/members.js +11 -21
  240. package/extras/tours/core/tags.js +7 -1
  241. package/extras/tours/map/catalog-categories.js +4 -4
  242. package/extras/tours/map/catalog-panel.js +16 -16
  243. package/extras/tours/map/favorite-views.js +3 -3
  244. package/lib/core/api/hooks/hooks.authorisations.js +149 -140
  245. package/lib/core/api/hooks/hooks.authorisations.js.map +1 -1
  246. package/lib/core/api/hooks/hooks.organisations.js +1 -23
  247. package/lib/core/api/hooks/hooks.organisations.js.map +1 -1
  248. package/lib/core/api/hooks/hooks.query.js +22 -0
  249. package/lib/core/api/hooks/hooks.query.js.map +1 -1
  250. package/lib/core/api/hooks/hooks.users.js +34 -18
  251. package/lib/core/api/hooks/hooks.users.js.map +1 -1
  252. package/lib/core/api/services/authorisations/authorisations.service.js +34 -25
  253. package/lib/core/api/services/authorisations/authorisations.service.js.map +1 -1
  254. package/lib/core/client/api.js +1 -0
  255. package/lib/core/client/api.js.map +1 -1
  256. package/lib/core/client/components/account/KAccountDZ.vue +3 -4
  257. package/lib/core/client/components/account/KAccountDevices.vue +5 -6
  258. package/lib/core/client/components/account/KDeviceCard.vue +2 -1
  259. package/lib/core/client/components/account/KIdentityPanel.vue +1 -7
  260. package/lib/core/client/components/collection/KBoard.vue +26 -155
  261. package/lib/core/client/components/collection/KCard.vue +144 -42
  262. package/lib/core/client/components/collection/KCardSection.vue +52 -0
  263. package/lib/core/client/components/collection/KColumn.vue +181 -0
  264. package/lib/core/client/components/collection/KGrid.vue +13 -18
  265. package/lib/core/client/components/collection/KHistory.vue +61 -89
  266. package/lib/core/client/components/collection/KHistoryEntry.vue +90 -66
  267. package/lib/core/client/components/collection/KItem.vue +21 -2
  268. package/lib/core/client/components/collection/KList.vue +9 -12
  269. package/lib/core/client/components/collection/KTable.vue +33 -39
  270. package/lib/core/client/components/collection/index.js +6 -1
  271. package/lib/core/client/components/collection/index.js.map +1 -1
  272. package/lib/core/client/components/editor/KEditor.vue +0 -6
  273. package/lib/core/client/components/editor/KModalEditor.vue +4 -4
  274. package/lib/core/client/components/editor/KSettingsEditor.vue +49 -0
  275. package/lib/core/client/components/form/KAttachmentField.vue +10 -10
  276. package/lib/core/client/components/form/KChipsField.vue +28 -23
  277. package/lib/core/client/components/form/KColorField.vue +30 -25
  278. package/lib/core/client/components/form/KFileField.vue +11 -40
  279. package/lib/core/client/components/form/KForm.vue +0 -12
  280. package/lib/core/client/components/form/KIconField.vue +1 -0
  281. package/lib/core/client/components/form/KItemField.vue +6 -2
  282. package/lib/core/client/components/form/KRoleField.vue +56 -0
  283. package/lib/core/client/components/form/KSelectField.vue +16 -1
  284. package/lib/core/client/components/form/KView.vue +5 -14
  285. package/lib/core/client/components/frame/KAction.vue +18 -12
  286. package/lib/core/client/components/frame/KAvatar.vue +3 -3
  287. package/lib/core/client/components/frame/KChart.vue +60 -0
  288. package/lib/core/client/components/frame/KChipsPane.vue +80 -0
  289. package/lib/core/client/components/frame/KContent.vue +1 -1
  290. package/lib/core/client/components/frame/KModal.vue +30 -44
  291. package/lib/core/client/components/frame/KPanel.vue +1 -1
  292. package/lib/core/client/components/frame/{KMenu.vue → KPopupAction.vue} +6 -7
  293. package/lib/core/client/components/frame/KSpot.vue +31 -0
  294. package/lib/core/client/components/frame/KStamp.vue +62 -0
  295. package/lib/core/client/components/frame/index.js +56 -1
  296. package/lib/core/client/components/frame/index.js.map +1 -1
  297. package/lib/core/client/components/input/KColorChooser.vue +16 -8
  298. package/lib/core/client/components/input/KIconChooser.vue +2 -1
  299. package/lib/core/client/components/input/KOptionsChooser.vue +2 -2
  300. package/lib/core/client/components/input/KUploader.vue +14 -5
  301. package/lib/core/client/components/layout/KAbout.vue +9 -3
  302. package/lib/core/client/components/layout/KFab.vue +1 -1
  303. package/lib/core/client/components/layout/KPage.vue +44 -19
  304. package/lib/core/client/components/layout/KTour.vue +2 -2
  305. package/lib/core/client/components/layout/KWelcome.vue +13 -12
  306. package/lib/core/client/components/layout/KWindow.vue +1 -1
  307. package/lib/core/client/components/media/KImageViewer.vue +9 -7
  308. package/lib/core/client/components/media/KMediaBrowser.vue +12 -8
  309. package/lib/core/client/components/menu/KMenu.vue +103 -0
  310. package/lib/core/client/components/team/KAddMember.vue +17 -9
  311. package/lib/core/client/components/team/KChangeRole.vue +5 -7
  312. package/lib/core/client/components/team/KGroupCard.vue +34 -51
  313. package/lib/core/client/components/team/KGroupsActivity.vue +9 -2
  314. package/lib/core/client/components/team/KJoinGroup.vue +5 -7
  315. package/lib/core/client/components/team/KMemberCard.vue +104 -63
  316. package/lib/core/client/components/team/KMembersActivity.vue +9 -2
  317. package/lib/core/client/components/team/KOrganisationsActivity.vue +8 -1
  318. package/lib/core/client/components/team/KTagCard.vue +26 -26
  319. package/lib/core/client/components/team/KTagsActivity.vue +9 -2
  320. package/lib/core/client/components/time/KTimeRange.vue +144 -0
  321. package/lib/core/client/components/viewer/KModalViewer.vue +6 -0
  322. package/lib/core/client/components/viewer/KViewer.vue +0 -6
  323. package/lib/core/client/i18n/core_en.json +138 -94
  324. package/lib/core/client/i18n/core_fr.json +61 -17
  325. package/lib/core/client/index.js +46 -14
  326. package/lib/core/client/index.js.map +1 -1
  327. package/lib/core/client/layout.js +8 -1
  328. package/lib/core/client/layout.js.map +1 -1
  329. package/lib/core/client/mixins/mixin.authorisation.js +28 -18
  330. package/lib/core/client/mixins/mixin.authorisation.js.map +1 -1
  331. package/lib/core/client/mixins/mixin.base-collection.js +57 -9
  332. package/lib/core/client/mixins/mixin.base-collection.js.map +1 -1
  333. package/lib/core/client/mixins/mixin.base-context.js +1 -1
  334. package/lib/core/client/mixins/mixin.base-context.js.map +1 -1
  335. package/lib/core/client/mixins/mixin.base-editor.js +26 -16
  336. package/lib/core/client/mixins/mixin.base-editor.js.map +1 -1
  337. package/lib/core/client/mixins/mixin.base-field.js +0 -4
  338. package/lib/core/client/mixins/mixin.base-field.js.map +1 -1
  339. package/lib/core/client/mixins/mixin.base-item.js +29 -14
  340. package/lib/core/client/mixins/mixin.base-item.js.map +1 -1
  341. package/lib/core/client/mixins/mixin.base-viewer.js +0 -2
  342. package/lib/core/client/mixins/mixin.base-viewer.js.map +1 -1
  343. package/lib/core/client/mixins/mixin.object-proxy.js +17 -3
  344. package/lib/core/client/mixins/mixin.object-proxy.js.map +1 -1
  345. package/lib/core/client/mixins/mixin.schema-proxy.js +31 -0
  346. package/lib/core/client/mixins/mixin.schema-proxy.js.map +1 -1
  347. package/lib/core/client/mixins/mixin.service.js +5 -33
  348. package/lib/core/client/mixins/mixin.service.js.map +1 -1
  349. package/lib/core/client/reader.js +54 -0
  350. package/lib/core/client/reader.js.map +1 -0
  351. package/lib/core/client/readers/index.js +30 -0
  352. package/lib/core/client/readers/index.js.map +1 -0
  353. package/lib/core/client/readers/reader.csv.js +43 -0
  354. package/lib/core/client/readers/reader.csv.js.map +1 -0
  355. package/lib/core/client/readers/reader.json.js +38 -0
  356. package/lib/core/client/readers/reader.json.js.map +1 -0
  357. package/lib/core/client/services/index.js +23 -0
  358. package/lib/core/client/services/index.js.map +1 -1
  359. package/lib/core/client/services/local-settings.service.js +4 -0
  360. package/lib/core/client/services/local-settings.service.js.map +1 -1
  361. package/lib/core/client/time.js +131 -0
  362. package/lib/core/client/time.js.map +1 -0
  363. package/lib/core/common/permissions.js +65 -23
  364. package/lib/core/common/permissions.js.map +1 -1
  365. package/lib/core/common/schemas/groups.create.json +1 -1
  366. package/lib/core/common/schemas/groups.update.json +1 -1
  367. package/lib/core/common/schemas/organisations.create.json +1 -1
  368. package/lib/core/common/schemas/organisations.update.json +2 -2
  369. package/lib/core/common/schemas/settings.update.json +139 -0
  370. package/lib/core/common/schemas/tags.update.json +9 -1
  371. package/lib/map/api/hooks/hooks.query.js +55 -29
  372. package/lib/map/api/hooks/hooks.query.js.map +1 -1
  373. package/lib/map/api/services/features/features.hooks.js +1 -1
  374. package/lib/map/api/services/features/features.hooks.js.map +1 -1
  375. package/lib/map/client/components/KCaptureToolbar.vue +156 -0
  376. package/lib/map/client/components/KColorLegend.vue +25 -23
  377. package/lib/map/client/components/KFavoriteViews.vue +71 -35
  378. package/lib/map/client/components/KFeaturesChart.vue +11 -9
  379. package/lib/map/client/components/KFeaturesFilter.vue +18 -8
  380. package/lib/map/client/components/KFeaturesTable.vue +27 -2
  381. package/lib/map/client/components/KLayerEditionToolbar.vue +51 -0
  382. package/lib/map/client/components/KLayerStyleEditor.vue +12 -5
  383. package/lib/map/client/components/KLayerStyleForm.vue +44 -33
  384. package/lib/map/client/components/KLocationInput.vue +126 -65
  385. package/lib/map/client/components/KLocationMap.vue +199 -84
  386. package/lib/map/client/components/KMeasureTool.vue +340 -0
  387. package/lib/map/client/components/KPositionIndicator.vue +1 -0
  388. package/lib/map/client/components/KTimeline.vue +41 -37
  389. package/lib/map/client/components/KUrlLegend.vue +21 -19
  390. package/lib/map/client/components/catalog/KBaseLayersSelector.vue +105 -0
  391. package/lib/map/client/components/catalog/KCatalog.vue +14 -2
  392. package/lib/map/client/components/catalog/KConnectLayer.vue +31 -11
  393. package/lib/map/client/components/catalog/KCreateLayer.vue +37 -14
  394. package/lib/map/client/components/catalog/KImportLayer.vue +33 -40
  395. package/lib/map/client/components/catalog/KLayerCategories.vue +86 -62
  396. package/lib/map/client/components/catalog/KLayersSelector.vue +44 -42
  397. package/lib/map/client/components/catalog/KWeatherLayersSelector.vue +3 -3
  398. package/lib/map/client/components/form/KLocationField.vue +1 -1
  399. package/lib/map/client/components/form/KOwsLayerField.vue +7 -0
  400. package/lib/map/client/components/form/KOwsServiceField.vue +1 -0
  401. package/lib/map/client/components/widget/KInformationBox.vue +10 -16
  402. package/lib/map/client/components/widget/KMapillaryViewer.vue +59 -49
  403. package/lib/map/client/components/widget/KTimeSeries.vue +119 -31
  404. package/lib/map/client/i18n/map_en.json +105 -20
  405. package/lib/map/client/i18n/map_fr.json +107 -23
  406. package/lib/map/client/init.js +24 -7
  407. package/lib/map/client/init.js.map +1 -1
  408. package/lib/map/client/leaflet/GSMaPLayer.js +4 -9
  409. package/lib/map/client/leaflet/GSMaPLayer.js.map +1 -1
  410. package/lib/map/client/leaflet/MaskLayer.js +73 -0
  411. package/lib/map/client/leaflet/MaskLayer.js.map +1 -0
  412. package/lib/map/client/mixins/globe/mixin.base-globe.js +7 -6
  413. package/lib/map/client/mixins/globe/mixin.base-globe.js.map +1 -1
  414. package/lib/map/client/mixins/globe/mixin.geojson-layers.js +7 -9
  415. package/lib/map/client/mixins/globe/mixin.geojson-layers.js.map +1 -1
  416. package/lib/map/client/mixins/globe/mixin.popup.js +4 -0
  417. package/lib/map/client/mixins/globe/mixin.popup.js.map +1 -1
  418. package/lib/map/client/mixins/globe/mixin.tooltip.js +4 -0
  419. package/lib/map/client/mixins/globe/mixin.tooltip.js.map +1 -1
  420. package/lib/map/client/mixins/index.js +8 -13
  421. package/lib/map/client/mixins/index.js.map +1 -1
  422. package/lib/map/client/mixins/map/mixin.base-map.js +71 -8
  423. package/lib/map/client/mixins/map/mixin.base-map.js.map +1 -1
  424. package/lib/map/client/mixins/map/mixin.canvas-layers.js +276 -51
  425. package/lib/map/client/mixins/map/mixin.canvas-layers.js.map +1 -1
  426. package/lib/map/client/mixins/map/mixin.edit-layers.js +218 -121
  427. package/lib/map/client/mixins/map/mixin.edit-layers.js.map +1 -1
  428. package/lib/map/client/mixins/map/mixin.file-layers.js +46 -93
  429. package/lib/map/client/mixins/map/mixin.file-layers.js.map +1 -1
  430. package/lib/map/client/mixins/map/mixin.geojson-layers.js +22 -11
  431. package/lib/map/client/mixins/map/mixin.geojson-layers.js.map +1 -1
  432. package/lib/map/client/mixins/map/mixin.georaster-layers.js +7 -4
  433. package/lib/map/client/mixins/map/mixin.georaster-layers.js.map +1 -1
  434. package/lib/map/client/mixins/map/mixin.gsmap-layers.js +3 -3
  435. package/lib/map/client/mixins/map/mixin.gsmap-layers.js.map +1 -1
  436. package/lib/map/client/mixins/map/mixin.heatmap-layers.js +8 -10
  437. package/lib/map/client/mixins/map/mixin.heatmap-layers.js.map +1 -1
  438. package/lib/map/client/mixins/map/mixin.mapillary-layers.js +25 -40
  439. package/lib/map/client/mixins/map/mixin.mapillary-layers.js.map +1 -1
  440. package/lib/map/client/mixins/map/mixin.popup.js +4 -0
  441. package/lib/map/client/mixins/map/mixin.popup.js.map +1 -1
  442. package/lib/map/client/mixins/map/mixin.tiled-mesh-layers.js +5 -3
  443. package/lib/map/client/mixins/map/mixin.tiled-mesh-layers.js.map +1 -1
  444. package/lib/map/client/mixins/map/mixin.tiled-wind-layers.js +5 -3
  445. package/lib/map/client/mixins/map/mixin.tiled-wind-layers.js.map +1 -1
  446. package/lib/map/client/mixins/map/mixin.tooltip.js +4 -0
  447. package/lib/map/client/mixins/map/mixin.tooltip.js.map +1 -1
  448. package/lib/map/client/mixins/mixin.activity.js +62 -68
  449. package/lib/map/client/mixins/mixin.activity.js.map +1 -1
  450. package/lib/map/client/mixins/mixin.context.js +26 -3
  451. package/lib/map/client/mixins/mixin.context.js.map +1 -1
  452. package/lib/map/client/mixins/mixin.feature-selection.js +8 -10
  453. package/lib/map/client/mixins/mixin.feature-selection.js.map +1 -1
  454. package/lib/map/client/mixins/mixin.feature-service.js +9 -7
  455. package/lib/map/client/mixins/mixin.feature-service.js.map +1 -1
  456. package/lib/map/client/mixins/mixin.infobox.js +4 -0
  457. package/lib/map/client/mixins/mixin.infobox.js.map +1 -1
  458. package/lib/map/client/mixins/mixin.weacast.js +6 -4
  459. package/lib/map/client/mixins/mixin.weacast.js.map +1 -1
  460. package/lib/map/client/pixi-utils.js +9 -0
  461. package/lib/map/client/pixi-utils.js.map +1 -1
  462. package/lib/map/client/readers/index.js +42 -0
  463. package/lib/map/client/readers/index.js.map +1 -0
  464. package/lib/map/client/readers/reader.geojson.js +59 -0
  465. package/lib/map/client/readers/reader.geojson.js.map +1 -0
  466. package/lib/map/client/readers/reader.gpx.js +41 -0
  467. package/lib/map/client/readers/reader.gpx.js.map +1 -0
  468. package/lib/map/client/readers/reader.kml.js +41 -0
  469. package/lib/map/client/readers/reader.kml.js.map +1 -0
  470. package/lib/map/client/utils.js +52 -1
  471. package/lib/map/client/utils.js.map +1 -1
  472. package/lib/map/common/wfs-utils.js +1 -1
  473. package/lib/map/common/wfs-utils.js.map +1 -1
  474. package/lib/map/common/wmts-utils.js +31 -7
  475. package/lib/map/common/wmts-utils.js.map +1 -1
  476. package/lib/test/client/core/account.js +100 -0
  477. package/lib/test/client/core/account.js.map +1 -0
  478. package/lib/test/client/core/api.js +400 -0
  479. package/lib/test/client/core/api.js.map +1 -0
  480. package/lib/test/client/core/collection.js +109 -0
  481. package/lib/test/client/core/collection.js.map +1 -0
  482. package/lib/test/client/core/index.js +90 -0
  483. package/lib/test/client/core/index.js.map +1 -0
  484. package/lib/test/client/core/layout.js +221 -0
  485. package/lib/test/client/core/layout.js.map +1 -0
  486. package/lib/test/client/core/runner.js +203 -0
  487. package/lib/test/client/core/runner.js.map +1 -0
  488. package/lib/test/client/core/screens.js +68 -0
  489. package/lib/test/client/core/screens.js.map +1 -0
  490. package/lib/test/client/core/utils.js +304 -0
  491. package/lib/test/client/core/utils.js.map +1 -0
  492. package/lib/test/client/index.js +20 -0
  493. package/lib/test/client/index.js.map +1 -0
  494. package/lib/test/client/map/catalog.js +192 -0
  495. package/lib/test/client/map/catalog.js.map +1 -0
  496. package/lib/test/client/map/controls.js +54 -0
  497. package/lib/test/client/map/controls.js.map +1 -0
  498. package/lib/test/client/map/index.js +30 -0
  499. package/lib/test/client/map/index.js.map +1 -0
  500. package/package.json +18 -9
  501. package/test.client.js +1 -0
  502. package/tests/core/test-log-2021-09-02.log +47 -0
  503. package/tests/map/test-log-%DATE%.logYYYY-09-DD +6 -0
  504. package/tests/map/test-log-2021-09-02.log +3 -0
  505. package/.nyc_output/5baea3f8-cf8e-4c76-8ccf-0e48b6f16fa4.json +0 -1
  506. package/.nyc_output/dddde6b5-9024-4b0e-8d8b-4502d437b8a4.json +0 -1
  507. package/.nyc_output/ef5e94ba-9a99-4fb6-ab1d-1a974112bb83.json +0 -1
  508. package/.nyc_output/fd4681f8-5f41-4f17-b393-9f399b24c128.json +0 -1
  509. package/.nyc_output/processinfo/0d403586-0c7c-4336-94d1-a49e9f02a905.json +0 -1
  510. package/.nyc_output/processinfo/21dd57bd-48c5-41c8-8800-252db32a9366.json +0 -1
  511. package/.nyc_output/processinfo/3eb3a2ca-53c2-4551-ba6b-adf70f9a53cd.json +0 -1
  512. package/.nyc_output/processinfo/5baea3f8-cf8e-4c76-8ccf-0e48b6f16fa4.json +0 -1
  513. package/.nyc_output/processinfo/dddde6b5-9024-4b0e-8d8b-4502d437b8a4.json +0 -1
  514. package/.nyc_output/processinfo/ef5e94ba-9a99-4fb6-ab1d-1a974112bb83.json +0 -1
  515. package/.nyc_output/processinfo/fd4681f8-5f41-4f17-b393-9f399b24c128.json +0 -1
  516. package/extras/testcafe/Dockerfile +0 -48
  517. package/extras/testcafe/docker-entrypoint.sh +0 -27
  518. package/extras/testcafe/page-models/core/account.js +0 -75
  519. package/extras/testcafe/page-models/core/base-collection.js +0 -41
  520. package/extras/testcafe/page-models/core/base-page.js +0 -25
  521. package/extras/testcafe/page-models/core/groups.js +0 -36
  522. package/extras/testcafe/page-models/core/index.js +0 -140
  523. package/extras/testcafe/page-models/core/layout.js +0 -145
  524. package/extras/testcafe/page-models/core/members.js +0 -98
  525. package/extras/testcafe/page-models/core/organisations.js +0 -76
  526. package/extras/testcafe/page-models/core/screens.js +0 -99
  527. package/extras/testcafe/page-models/core/tags.js +0 -21
  528. package/extras/testcafe/page-models/map/add-layer.js +0 -51
  529. package/extras/testcafe/page-models/map/catalog.js +0 -132
  530. package/extras/testcafe/page-models/map/index.js +0 -36
  531. package/extras/testcafe/page-models/map/map-activity.js +0 -42
  532. package/extras/testcafe/page-models/map/timeline.js +0 -67
  533. package/lib/core/client/components/frame/KLabel.vue +0 -56
  534. package/lib/core/client/components/team/KTagsPane.vue +0 -35
  535. package/lib/map/client/leaflet/TiledMapillaryLayer.js +0 -137
  536. package/lib/map/client/leaflet/TiledMapillaryLayer.js.map +0 -1
  537. package/lib/map/client/mixins/mixin.time.js +0 -73
  538. package/lib/map/client/mixins/mixin.time.js.map +0 -1
  539. package/tests/core/account.test.js +0 -423
  540. package/tests/core/client.test.js.skip +0 -37
  541. package/tests/core/config/default.js +0 -96
  542. package/tests/core/config/email-templates/confirmInvitation/html.ejs +0 -18
  543. package/tests/core/config/email-templates/identityChange/html.ejs +0 -12
  544. package/tests/core/config/email-templates/newDevice/html.ejs +0 -7
  545. package/tests/core/config/email-templates/passwordChange/html.ejs +0 -5
  546. package/tests/core/config/email-templates/resendVerifySignup/html.ejs +0 -10
  547. package/tests/core/config/email-templates/resetPwd/html.ejs +0 -5
  548. package/tests/core/config/email-templates/sendResetPwd/html.ejs +0 -8
  549. package/tests/core/config/email-templates/verifySignup/html.ejs +0 -3
  550. package/tests/core/data/10k_most_common_passwords.txt +0 -10000
  551. package/tests/core/data/logo.png +0 -0
  552. package/tests/core/hooks.test.js +0 -175
  553. package/tests/core/index.test.js +0 -432
  554. package/tests/core/notifications.test.js +0 -465
  555. package/tests/core/storage.test.js +0 -134
  556. package/tests/core/team.test.js +0 -610
  557. package/tests/core/utils.js +0 -62
  558. package/tests/map/alerts.test.js +0 -554
  559. package/tests/map/config/default.js +0 -112
  560. package/tests/map/config/layers.json +0 -37
  561. package/tests/map/daptiles.test.js +0 -41
  562. package/tests/map/data/DescribeCoverage.xml +0 -55
  563. package/tests/map/data/GetCoverage.tif +0 -0
  564. package/tests/map/data/adsb.observations.json +0 -132
  565. package/tests/map/data/dataset.grb.das +0 -55
  566. package/tests/map/data/dataset.grb.dds +0 -17
  567. package/tests/map/data/dataset.grb.dods +0 -0
  568. package/tests/map/data/lat_lon_bounds.grb.dods +0 -0
  569. package/tests/map/data/subdataset.grb.dods +0 -0
  570. package/tests/map/data/vigicrues.observations.json +0 -47042
  571. package/tests/map/data/vigicrues.stations.json +0 -15422
  572. package/tests/map/data/zones.json +0 -1228
  573. package/tests/map/forecast-data/gfs-world/u-wind/2021-07-15_12-00-00_2021-07-15_12-00-00.grib +0 -0
  574. package/tests/map/forecast-data/gfs-world/v-wind/2021-07-15_12-00-00_2021-07-15_12-00-00.grib +0 -0
  575. package/tests/map/grid-sources.test.js +0 -304
  576. package/tests/map/hooks.test.js +0 -96
  577. package/tests/map/index.test.js +0 -333
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">87.5% </span>
26
+ <span class="strong">0% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>112/128</span>
28
+ <span class='fraction'>0/130</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">66.67% </span>
33
+ <span class="strong">0% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>44/66</span>
35
+ <span class='fraction'>0/79</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">100% </span>
40
+ <span class="strong">0% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>24/24</span>
42
+ <span class='fraction'>0/23</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">91.74% </span>
47
+ <span class="strong">0% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>111/121</span>
49
+ <span class='fraction'>0/123</span>
50
50
  </div>
51
51
 
52
52
 
@@ -55,7 +55,7 @@
55
55
  Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
56
  </p>
57
57
  </div>
58
- <div class='status-line high'></div>
58
+ <div class='status-line low'></div>
59
59
  <pre><table class="coverage">
60
60
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
61
61
  <a name='L2'></a><a href='#L2'>2</a>
@@ -312,125 +312,157 @@
312
312
  <a name='L253'></a><a href='#L253'>253</a>
313
313
  <a name='L254'></a><a href='#L254'>254</a>
314
314
  <a name='L255'></a><a href='#L255'>255</a>
315
- <a name='L256'></a><a href='#L256'>256</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
316
- <span class="cline-any cline-yes">1x</span>
317
- <span class="cline-any cline-yes">1x</span>
318
- <span class="cline-any cline-yes">1x</span>
319
- <span class="cline-any cline-yes">1x</span>
320
- <span class="cline-any cline-yes">1x</span>
315
+ <a name='L256'></a><a href='#L256'>256</a>
316
+ <a name='L257'></a><a href='#L257'>257</a>
317
+ <a name='L258'></a><a href='#L258'>258</a>
318
+ <a name='L259'></a><a href='#L259'>259</a>
319
+ <a name='L260'></a><a href='#L260'>260</a>
320
+ <a name='L261'></a><a href='#L261'>261</a>
321
+ <a name='L262'></a><a href='#L262'>262</a>
322
+ <a name='L263'></a><a href='#L263'>263</a>
323
+ <a name='L264'></a><a href='#L264'>264</a>
324
+ <a name='L265'></a><a href='#L265'>265</a>
325
+ <a name='L266'></a><a href='#L266'>266</a>
326
+ <a name='L267'></a><a href='#L267'>267</a>
327
+ <a name='L268'></a><a href='#L268'>268</a>
328
+ <a name='L269'></a><a href='#L269'>269</a>
329
+ <a name='L270'></a><a href='#L270'>270</a>
330
+ <a name='L271'></a><a href='#L271'>271</a>
331
+ <a name='L272'></a><a href='#L272'>272</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
332
+ <span class="cline-any cline-neutral">&nbsp;</span>
333
+ <span class="cline-any cline-neutral">&nbsp;</span>
321
334
  <span class="cline-any cline-neutral">&nbsp;</span>
322
- <span class="cline-any cline-yes">1x</span>
323
335
  <span class="cline-any cline-neutral">&nbsp;</span>
324
- <span class="cline-any cline-yes">1x</span>
325
336
  <span class="cline-any cline-neutral">&nbsp;</span>
326
337
  <span class="cline-any cline-neutral">&nbsp;</span>
327
- <span class="cline-any cline-yes">21x</span>
328
- <span class="cline-any cline-yes">15x</span>
329
338
  <span class="cline-any cline-no">&nbsp;</span>
330
339
  <span class="cline-any cline-neutral">&nbsp;</span>
340
+ <span class="cline-any cline-no">&nbsp;</span>
331
341
  <span class="cline-any cline-neutral">&nbsp;</span>
332
- <span class="cline-any cline-yes">15x</span>
333
- <span class="cline-any cline-yes">15x</span>
334
- <span class="cline-any cline-yes">15x</span>
335
- <span class="cline-any cline-yes">15x</span>
336
342
  <span class="cline-any cline-neutral">&nbsp;</span>
337
- <span class="cline-any cline-yes">15x</span>
338
- <span class="cline-any cline-yes">15x</span>
339
- <span class="cline-any cline-yes">15x</span>
340
- <span class="cline-any cline-yes">11x</span>
341
- <span class="cline-any cline-yes">11x</span>
343
+ <span class="cline-any cline-no">&nbsp;</span>
344
+ <span class="cline-any cline-no">&nbsp;</span>
345
+ <span class="cline-any cline-no">&nbsp;</span>
342
346
  <span class="cline-any cline-neutral">&nbsp;</span>
343
- <span class="cline-any cline-yes">11x</span>
344
347
  <span class="cline-any cline-neutral">&nbsp;</span>
345
- <span class="cline-any cline-yes">11x</span>
346
- <span class="cline-any cline-yes">1x</span>
347
- <span class="cline-any cline-yes">1x</span>
348
+ <span class="cline-any cline-no">&nbsp;</span>
349
+ <span class="cline-any cline-no">&nbsp;</span>
350
+ <span class="cline-any cline-no">&nbsp;</span>
351
+ <span class="cline-any cline-no">&nbsp;</span>
352
+ <span class="cline-any cline-neutral">&nbsp;</span>
353
+ <span class="cline-any cline-no">&nbsp;</span>
354
+ <span class="cline-any cline-no">&nbsp;</span>
355
+ <span class="cline-any cline-no">&nbsp;</span>
356
+ <span class="cline-any cline-no">&nbsp;</span>
357
+ <span class="cline-any cline-no">&nbsp;</span>
358
+ <span class="cline-any cline-neutral">&nbsp;</span>
359
+ <span class="cline-any cline-no">&nbsp;</span>
360
+ <span class="cline-any cline-neutral">&nbsp;</span>
361
+ <span class="cline-any cline-no">&nbsp;</span>
362
+ <span class="cline-any cline-no">&nbsp;</span>
363
+ <span class="cline-any cline-no">&nbsp;</span>
364
+ <span class="cline-any cline-neutral">&nbsp;</span>
365
+ <span class="cline-any cline-no">&nbsp;</span>
366
+ <span class="cline-any cline-no">&nbsp;</span>
348
367
  <span class="cline-any cline-neutral">&nbsp;</span>
349
- <span class="cline-any cline-yes">1x</span>
350
- <span class="cline-any cline-yes">1x</span>
351
368
  <span class="cline-any cline-neutral">&nbsp;</span>
352
369
  <span class="cline-any cline-neutral">&nbsp;</span>
353
370
  <span class="cline-any cline-neutral">&nbsp;</span>
354
371
  <span class="cline-any cline-neutral">&nbsp;</span>
372
+ <span class="cline-any cline-no">&nbsp;</span>
373
+ <span class="cline-any cline-no">&nbsp;</span>
374
+ <span class="cline-any cline-neutral">&nbsp;</span>
375
+ <span class="cline-any cline-neutral">&nbsp;</span>
376
+ <span class="cline-any cline-no">&nbsp;</span>
377
+ <span class="cline-any cline-neutral">&nbsp;</span>
355
378
  <span class="cline-any cline-neutral">&nbsp;</span>
356
- <span class="cline-any cline-yes">11x</span>
357
- <span class="cline-any cline-yes">4x</span>
358
379
  <span class="cline-any cline-neutral">&nbsp;</span>
359
380
  <span class="cline-any cline-neutral">&nbsp;</span>
360
- <span class="cline-any cline-yes">18x</span>
381
+ <span class="cline-any cline-neutral">&nbsp;</span>
382
+ <span class="cline-any cline-no">&nbsp;</span>
361
383
  <span class="cline-any cline-neutral">&nbsp;</span>
362
384
  <span class="cline-any cline-neutral">&nbsp;</span>
363
385
  <span class="cline-any cline-neutral">&nbsp;</span>
364
386
  <span class="cline-any cline-neutral">&nbsp;</span>
387
+ <span class="cline-any cline-no">&nbsp;</span>
388
+ <span class="cline-any cline-no">&nbsp;</span>
389
+ <span class="cline-any cline-no">&nbsp;</span>
365
390
  <span class="cline-any cline-neutral">&nbsp;</span>
366
- <span class="cline-any cline-yes">11x</span>
391
+ <span class="cline-any cline-no">&nbsp;</span>
392
+ <span class="cline-any cline-no">&nbsp;</span>
393
+ <span class="cline-any cline-no">&nbsp;</span>
394
+ <span class="cline-any cline-no">&nbsp;</span>
367
395
  <span class="cline-any cline-neutral">&nbsp;</span>
396
+ <span class="cline-any cline-no">&nbsp;</span>
397
+ <span class="cline-any cline-no">&nbsp;</span>
398
+ <span class="cline-any cline-no">&nbsp;</span>
399
+ <span class="cline-any cline-no">&nbsp;</span>
400
+ <span class="cline-any cline-no">&nbsp;</span>
401
+ <span class="cline-any cline-no">&nbsp;</span>
402
+ <span class="cline-any cline-no">&nbsp;</span>
403
+ <span class="cline-any cline-no">&nbsp;</span>
368
404
  <span class="cline-any cline-neutral">&nbsp;</span>
405
+ <span class="cline-any cline-no">&nbsp;</span>
406
+ <span class="cline-any cline-no">&nbsp;</span>
407
+ <span class="cline-any cline-no">&nbsp;</span>
408
+ <span class="cline-any cline-no">&nbsp;</span>
369
409
  <span class="cline-any cline-neutral">&nbsp;</span>
370
410
  <span class="cline-any cline-neutral">&nbsp;</span>
371
- <span class="cline-any cline-yes">2x</span>
372
- <span class="cline-any cline-yes">2x</span>
373
411
  <span class="cline-any cline-no">&nbsp;</span>
374
412
  <span class="cline-any cline-neutral">&nbsp;</span>
375
- <span class="cline-any cline-yes">2x</span>
376
- <span class="cline-any cline-yes">2x</span>
377
- <span class="cline-any cline-yes">2x</span>
378
- <span class="cline-any cline-yes">2x</span>
379
413
  <span class="cline-any cline-neutral">&nbsp;</span>
380
- <span class="cline-any cline-yes">2x</span>
381
- <span class="cline-any cline-yes">2x</span>
382
- <span class="cline-any cline-yes">2x</span>
383
- <span class="cline-any cline-yes">2x</span>
384
- <span class="cline-any cline-yes">2x</span>
385
- <span class="cline-any cline-yes">2x</span>
386
- <span class="cline-any cline-yes">2x</span>
387
- <span class="cline-any cline-yes">2x</span>
388
414
  <span class="cline-any cline-neutral">&nbsp;</span>
389
- <span class="cline-any cline-yes">2x</span>
390
- <span class="cline-any cline-yes">2x</span>
391
- <span class="cline-any cline-yes">2x</span>
392
- <span class="cline-any cline-yes">2x</span>
393
415
  <span class="cline-any cline-neutral">&nbsp;</span>
416
+ <span class="cline-any cline-no">&nbsp;</span>
417
+ <span class="cline-any cline-no">&nbsp;</span>
418
+ <span class="cline-any cline-no">&nbsp;</span>
419
+ <span class="cline-any cline-neutral">&nbsp;</span>
420
+ <span class="cline-any cline-no">&nbsp;</span>
421
+ <span class="cline-any cline-no">&nbsp;</span>
422
+ <span class="cline-any cline-no">&nbsp;</span>
423
+ <span class="cline-any cline-no">&nbsp;</span>
424
+ <span class="cline-any cline-neutral">&nbsp;</span>
425
+ <span class="cline-any cline-no">&nbsp;</span>
426
+ <span class="cline-any cline-no">&nbsp;</span>
394
427
  <span class="cline-any cline-neutral">&nbsp;</span>
395
- <span class="cline-any cline-yes">2x</span>
428
+ <span class="cline-any cline-no">&nbsp;</span>
396
429
  <span class="cline-any cline-neutral">&nbsp;</span>
397
430
  <span class="cline-any cline-neutral">&nbsp;</span>
431
+ <span class="cline-any cline-no">&nbsp;</span>
398
432
  <span class="cline-any cline-neutral">&nbsp;</span>
433
+ <span class="cline-any cline-no">&nbsp;</span>
434
+ <span class="cline-any cline-no">&nbsp;</span>
399
435
  <span class="cline-any cline-neutral">&nbsp;</span>
400
- <span class="cline-any cline-yes">2x</span>
436
+ <span class="cline-any cline-no">&nbsp;</span>
437
+ <span class="cline-any cline-no">&nbsp;</span>
401
438
  <span class="cline-any cline-no">&nbsp;</span>
402
439
  <span class="cline-any cline-neutral">&nbsp;</span>
403
- <span class="cline-any cline-yes">2x</span>
404
- <span class="cline-any cline-yes">2x</span>
405
440
  <span class="cline-any cline-neutral">&nbsp;</span>
406
- <span class="cline-any cline-yes">2x</span>
407
441
  <span class="cline-any cline-neutral">&nbsp;</span>
408
- <span class="cline-any cline-yes">2x</span>
409
- <span class="cline-any cline-yes">2x</span>
410
- <span class="cline-any cline-yes">2x</span>
411
- <span class="cline-any cline-yes">12x</span>
442
+ <span class="cline-any cline-neutral">&nbsp;</span>
443
+ <span class="cline-any cline-no">&nbsp;</span>
444
+ <span class="cline-any cline-no">&nbsp;</span>
412
445
  <span class="cline-any cline-neutral">&nbsp;</span>
413
446
  <span class="cline-any cline-neutral">&nbsp;</span>
414
447
  <span class="cline-any cline-no">&nbsp;</span>
415
448
  <span class="cline-any cline-neutral">&nbsp;</span>
416
- <span class="cline-any cline-yes">2x</span>
417
449
  <span class="cline-any cline-neutral">&nbsp;</span>
418
450
  <span class="cline-any cline-neutral">&nbsp;</span>
419
451
  <span class="cline-any cline-neutral">&nbsp;</span>
420
- <span class="cline-any cline-yes">4x</span>
452
+ <span class="cline-any cline-no">&nbsp;</span>
421
453
  <span class="cline-any cline-no">&nbsp;</span>
422
454
  <span class="cline-any cline-neutral">&nbsp;</span>
423
455
  <span class="cline-any cline-neutral">&nbsp;</span>
424
456
  <span class="cline-any cline-neutral">&nbsp;</span>
425
- <span class="cline-any cline-yes">4x</span>
426
- <span class="cline-any cline-yes">4x</span>
457
+ <span class="cline-any cline-no">&nbsp;</span>
458
+ <span class="cline-any cline-no">&nbsp;</span>
427
459
  <span class="cline-any cline-neutral">&nbsp;</span>
428
- <span class="cline-any cline-yes">4x</span>
460
+ <span class="cline-any cline-no">&nbsp;</span>
429
461
  <span class="cline-any cline-neutral">&nbsp;</span>
430
- <span class="cline-any cline-yes">4x</span>
431
- <span class="cline-any cline-yes">4x</span>
432
- <span class="cline-any cline-yes">1x</span>
433
- <span class="cline-any cline-yes">1x</span>
462
+ <span class="cline-any cline-no">&nbsp;</span>
463
+ <span class="cline-any cline-no">&nbsp;</span>
464
+ <span class="cline-any cline-no">&nbsp;</span>
465
+ <span class="cline-any cline-no">&nbsp;</span>
434
466
  <span class="cline-any cline-neutral">&nbsp;</span>
435
467
  <span class="cline-any cline-neutral">&nbsp;</span>
436
468
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -438,17 +470,17 @@
438
470
  <span class="cline-any cline-neutral">&nbsp;</span>
439
471
  <span class="cline-any cline-neutral">&nbsp;</span>
440
472
  <span class="cline-any cline-neutral">&nbsp;</span>
441
- <span class="cline-any cline-yes">3x</span>
473
+ <span class="cline-any cline-no">&nbsp;</span>
442
474
  <span class="cline-any cline-neutral">&nbsp;</span>
443
475
  <span class="cline-any cline-neutral">&nbsp;</span>
444
476
  <span class="cline-any cline-neutral">&nbsp;</span>
445
- <span class="cline-any cline-yes">1x</span>
446
- <span class="cline-any cline-yes">1x</span>
447
- <span class="cline-any cline-yes">1x</span>
448
- <span class="cline-any cline-yes">1x</span>
477
+ <span class="cline-any cline-no">&nbsp;</span>
478
+ <span class="cline-any cline-no">&nbsp;</span>
479
+ <span class="cline-any cline-no">&nbsp;</span>
480
+ <span class="cline-any cline-no">&nbsp;</span>
449
481
  <span class="cline-any cline-neutral">&nbsp;</span>
450
482
  <span class="cline-any cline-neutral">&nbsp;</span>
451
- <span class="cline-any cline-yes">1x</span>
483
+ <span class="cline-any cline-no">&nbsp;</span>
452
484
  <span class="cline-any cline-neutral">&nbsp;</span>
453
485
  <span class="cline-any cline-neutral">&nbsp;</span>
454
486
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -458,28 +490,28 @@
458
490
  <span class="cline-any cline-neutral">&nbsp;</span>
459
491
  <span class="cline-any cline-neutral">&nbsp;</span>
460
492
  <span class="cline-any cline-neutral">&nbsp;</span>
461
- <span class="cline-any cline-yes">1x</span>
462
- <span class="cline-any cline-yes">1x</span>
493
+ <span class="cline-any cline-no">&nbsp;</span>
494
+ <span class="cline-any cline-no">&nbsp;</span>
463
495
  <span class="cline-any cline-neutral">&nbsp;</span>
464
496
  <span class="cline-any cline-neutral">&nbsp;</span>
465
497
  <span class="cline-any cline-neutral">&nbsp;</span>
466
498
  <span class="cline-any cline-neutral">&nbsp;</span>
467
- <span class="cline-any cline-yes">6x</span>
468
- <span class="cline-any cline-yes">3x</span>
499
+ <span class="cline-any cline-no">&nbsp;</span>
500
+ <span class="cline-any cline-no">&nbsp;</span>
469
501
  <span class="cline-any cline-no">&nbsp;</span>
470
502
  <span class="cline-any cline-neutral">&nbsp;</span>
471
503
  <span class="cline-any cline-neutral">&nbsp;</span>
472
- <span class="cline-any cline-yes">3x</span>
473
- <span class="cline-any cline-yes">3x</span>
474
- <span class="cline-any cline-yes">3x</span>
475
- <span class="cline-any cline-yes">3x</span>
476
- <span class="cline-any cline-yes">3x</span>
477
- <span class="cline-any cline-yes">3x</span>
504
+ <span class="cline-any cline-no">&nbsp;</span>
505
+ <span class="cline-any cline-no">&nbsp;</span>
506
+ <span class="cline-any cline-no">&nbsp;</span>
507
+ <span class="cline-any cline-no">&nbsp;</span>
508
+ <span class="cline-any cline-no">&nbsp;</span>
509
+ <span class="cline-any cline-no">&nbsp;</span>
478
510
  <span class="cline-any cline-neutral">&nbsp;</span>
479
- <span class="cline-any cline-yes">3x</span>
511
+ <span class="cline-any cline-no">&nbsp;</span>
480
512
  <span class="cline-any cline-neutral">&nbsp;</span>
481
- <span class="cline-any cline-yes">1x</span>
482
- <span class="cline-any cline-yes">1x</span>
513
+ <span class="cline-any cline-no">&nbsp;</span>
514
+ <span class="cline-any cline-no">&nbsp;</span>
483
515
  <span class="cline-any cline-neutral">&nbsp;</span>
484
516
  <span class="cline-any cline-neutral">&nbsp;</span>
485
517
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -493,69 +525,69 @@
493
525
  <span class="cline-any cline-neutral">&nbsp;</span>
494
526
  <span class="cline-any cline-neutral">&nbsp;</span>
495
527
  <span class="cline-any cline-neutral">&nbsp;</span>
496
- <span class="cline-any cline-yes">3x</span>
497
- <span class="cline-any cline-yes">3x</span>
528
+ <span class="cline-any cline-no">&nbsp;</span>
529
+ <span class="cline-any cline-no">&nbsp;</span>
498
530
  <span class="cline-any cline-neutral">&nbsp;</span>
499
531
  <span class="cline-any cline-neutral">&nbsp;</span>
500
532
  <span class="cline-any cline-neutral">&nbsp;</span>
501
533
  <span class="cline-any cline-neutral">&nbsp;</span>
502
- <span class="cline-any cline-yes">1x</span>
534
+ <span class="cline-any cline-no">&nbsp;</span>
503
535
  <span class="cline-any cline-no">&nbsp;</span>
504
536
  <span class="cline-any cline-neutral">&nbsp;</span>
505
537
  <span class="cline-any cline-neutral">&nbsp;</span>
506
538
  <span class="cline-any cline-neutral">&nbsp;</span>
507
- <span class="cline-any cline-yes">1x</span>
539
+ <span class="cline-any cline-no">&nbsp;</span>
508
540
  <span class="cline-any cline-no">&nbsp;</span>
509
541
  <span class="cline-any cline-neutral">&nbsp;</span>
510
542
  <span class="cline-any cline-neutral">&nbsp;</span>
511
- <span class="cline-any cline-yes">1x</span>
512
- <span class="cline-any cline-yes">1x</span>
543
+ <span class="cline-any cline-no">&nbsp;</span>
544
+ <span class="cline-any cline-no">&nbsp;</span>
513
545
  <span class="cline-any cline-neutral">&nbsp;</span>
514
- <span class="cline-any cline-yes">1x</span>
546
+ <span class="cline-any cline-no">&nbsp;</span>
515
547
  <span class="cline-any cline-neutral">&nbsp;</span>
516
548
  <span class="cline-any cline-neutral">&nbsp;</span>
517
549
  <span class="cline-any cline-neutral">&nbsp;</span>
518
550
  <span class="cline-any cline-neutral">&nbsp;</span>
519
551
  <span class="cline-any cline-neutral">&nbsp;</span>
520
- <span class="cline-any cline-yes">1x</span>
552
+ <span class="cline-any cline-no">&nbsp;</span>
521
553
  <span class="cline-any cline-no">&nbsp;</span>
522
554
  <span class="cline-any cline-neutral">&nbsp;</span>
523
555
  <span class="cline-any cline-neutral">&nbsp;</span>
524
- <span class="cline-any cline-yes">1x</span>
525
- <span class="cline-any cline-yes">1x</span>
556
+ <span class="cline-any cline-no">&nbsp;</span>
557
+ <span class="cline-any cline-no">&nbsp;</span>
526
558
  <span class="cline-any cline-neutral">&nbsp;</span>
527
- <span class="cline-any cline-yes">1x</span>
559
+ <span class="cline-any cline-no">&nbsp;</span>
528
560
  <span class="cline-any cline-neutral">&nbsp;</span>
529
561
  <span class="cline-any cline-neutral">&nbsp;</span>
530
562
  <span class="cline-any cline-neutral">&nbsp;</span>
531
563
  <span class="cline-any cline-neutral">&nbsp;</span>
532
- <span class="cline-any cline-yes">2x</span>
564
+ <span class="cline-any cline-no">&nbsp;</span>
533
565
  <span class="cline-any cline-neutral">&nbsp;</span>
534
- <span class="cline-any cline-yes">2x</span>
566
+ <span class="cline-any cline-no">&nbsp;</span>
535
567
  <span class="cline-any cline-neutral">&nbsp;</span>
536
568
  <span class="cline-any cline-neutral">&nbsp;</span>
537
- <span class="cline-any cline-yes">2x</span>
538
- <span class="cline-any cline-yes">2x</span>
569
+ <span class="cline-any cline-no">&nbsp;</span>
570
+ <span class="cline-any cline-no">&nbsp;</span>
539
571
  <span class="cline-any cline-no">&nbsp;</span>
540
572
  <span class="cline-any cline-neutral">&nbsp;</span>
541
- <span class="cline-any cline-yes">2x</span>
542
- <span class="cline-any cline-yes">2x</span>
573
+ <span class="cline-any cline-no">&nbsp;</span>
574
+ <span class="cline-any cline-no">&nbsp;</span>
543
575
  <span class="cline-any cline-neutral">&nbsp;</span>
544
576
  <span class="cline-any cline-neutral">&nbsp;</span>
545
577
  <span class="cline-any cline-neutral">&nbsp;</span>
546
578
  <span class="cline-any cline-neutral">&nbsp;</span>
547
- <span class="cline-any cline-yes">2x</span>
579
+ <span class="cline-any cline-no">&nbsp;</span>
548
580
  <span class="cline-any cline-neutral">&nbsp;</span>
549
581
  <span class="cline-any cline-neutral">&nbsp;</span>
550
582
  <span class="cline-any cline-neutral">&nbsp;</span>
551
- <span class="cline-any cline-yes">3x</span>
552
- <span class="cline-any cline-yes">3x</span>
553
- <span class="cline-any cline-yes">3x</span>
583
+ <span class="cline-any cline-no">&nbsp;</span>
584
+ <span class="cline-any cline-no">&nbsp;</span>
585
+ <span class="cline-any cline-no">&nbsp;</span>
554
586
  <span class="cline-any cline-neutral">&nbsp;</span>
555
- <span class="cline-any cline-yes">3x</span>
556
- <span class="cline-any cline-yes">3x</span>
557
- <span class="cline-any cline-yes">1x</span>
558
- <span class="cline-any cline-yes">1x</span>
587
+ <span class="cline-any cline-no">&nbsp;</span>
588
+ <span class="cline-any cline-no">&nbsp;</span>
589
+ <span class="cline-any cline-no">&nbsp;</span>
590
+ <span class="cline-any cline-no">&nbsp;</span>
559
591
  <span class="cline-any cline-neutral">&nbsp;</span>
560
592
  <span class="cline-any cline-neutral">&nbsp;</span>
561
593
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -564,8 +596,8 @@
564
596
  <span class="cline-any cline-neutral">&nbsp;</span>
565
597
  <span class="cline-any cline-neutral">&nbsp;</span>
566
598
  <span class="cline-any cline-neutral">&nbsp;</span>
567
- <span class="cline-any cline-yes">3x</span>
568
- <span class="cline-any cline-yes">3x</span>
599
+ <span class="cline-any cline-no">&nbsp;</span>
600
+ <span class="cline-any cline-no">&nbsp;</span>
569
601
  <span class="cline-any cline-neutral">&nbsp;</span>
570
602
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import _ from 'lodash'
571
603
  import makeDebug from 'debug'
@@ -574,118 +606,134 @@ import { getItems, replaceItems } from 'feathers-hooks-common'
574
606
  import { Forbidden, BadRequest } from '@feathersjs/errors'
575
607
  import { Roles, RoleNames } from '../../common/permissions'
576
608
  &nbsp;
577
- const verifyHooks = require('feathers-authentication-management').hooks
609
+ const verifyHooks = <span class="cstat-no" title="statement not covered" >require('feathers-authentication-management').hooks</span>
578
610
  &nbsp;
579
- const debug = makeDebug('kdk:core:users:hooks')
611
+ const debug = <span class="cstat-no" title="statement not covered" >makeDebug('kdk:core:users:hooks')</span>
580
612
  &nbsp;
581
- export function enforcePasswordPolicy (options = <span class="branch-0 cbranch-no" title="branch not covered" >{}) {</span>
582
- return async function (hook) {
583
- <span class="missing-if-branch" title="if path not taken" >I</span>if (hook.type !== 'before') {
584
- <span class="cstat-no" title="statement not covered" > throw n</span>ew Error('The \'enforePasswordPolicy\' hook should only be used as a \'before\' hook.')
613
+ export function <span class="fstat-no" title="function not covered" >enforcePasswordPolicy </span>(options = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> {
614
+ <span class="cstat-no" title="statement not covered" > return <span class="fstat-no" title="function not covered" >as</span>ync function (hook) {</span>
615
+ <span class="cstat-no" title="statement not covered" > if (hook.type !== 'before') {</span>
616
+ <span class="cstat-no" title="statement not covered" > throw new Error('The \'enforePasswordPolicy\' hook should only be used as a \'before\' hook.')</span>
585
617
  }
586
618
  // By pass check ?
587
- <span class="missing-if-branch" title="if path not taken" >I</span>if (hook.params.force) <span class="cstat-no" title="statement not covered" >return h</span>ook
588
- const app = hook.app
589
- const item = getItems(hook)
590
- const user = options.userAsItem ? item : hook.params.user
619
+ <span class="cstat-no" title="statement not covered" > if (hook.params.force) <span class="cstat-no" title="statement not covered" >return hook</span></span>
620
+ const app = <span class="cstat-no" title="statement not covered" >hook.app</span>
621
+ const item = <span class="cstat-no" title="statement not covered" >getItems(hook)</span>
622
+ const user = <span class="cstat-no" title="statement not covered" >options.userAsItem ? item : hook.params.user</span>
591
623
  // Get both password(s) since some rules target one and some the other one(s)
592
- const clearPassword = _.get(item, options.passwordField || 'clearPassword')
593
- const hashedPasswords = _.get(user, options.previousPasswordsField || 'previousPasswords', [])
594
- if (clearPassword &amp;&amp; hashedPasswords &amp;&amp; app.getPasswordPolicy) {
595
- debug('Enforcing password policy on user', user)
596
- const validator = app.getPasswordPolicy()
624
+ const clearPassword = <span class="cstat-no" title="statement not covered" >_.get(item, options.passwordField || 'clearPassword')</span>
625
+ const hashedPasswords = <span class="cstat-no" title="statement not covered" >_.get(user, options.previousPasswordsField || 'previousPasswords', [])</span>
626
+ <span class="cstat-no" title="statement not covered" > if (clearPassword &amp;&amp; hashedPasswords &amp;&amp; app.getPasswordPolicy) {</span>
627
+ <span class="cstat-no" title="statement not covered" > debug('Enforcing password policy on user', user)</span>
628
+ const validator = <span class="cstat-no" title="statement not covered" >app.getPasswordPolicy()</span>
597
629
  // First check the clear password
598
- const result = validator.validate(clearPassword, { list: true })
630
+ const result = <span class="cstat-no" title="statement not covered" >validator.validate(clearPassword, { list: true })</span>
599
631
  // Then check for the last used passwords using password policy verifier
600
- for (let i = 0; i &lt; hashedPasswords.length; i++) {
601
- try {
602
- await validator.comparePassword({ password: hashedPasswords[i] }, clearPassword)
632
+ <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i &lt; hashedPasswords.length; i++) {</span>
633
+ <span class="cstat-no" title="statement not covered" > try {</span>
634
+ <span class="cstat-no" title="statement not covered" > await validator.comparePassword({ password: hashedPasswords[i] }, clearPassword)</span>
603
635
  // If we have found a similar password stop
604
- result.push('previous')
605
- break
636
+ <span class="cstat-no" title="statement not covered" > result.push('previous')</span>
637
+ <span class="cstat-no" title="statement not covered" > break</span>
606
638
  } catch (error) {
607
639
  // Check next one
608
640
  }
609
641
  }
610
642
  &nbsp;
611
- if (!_.isEmpty(result)) {
612
- throw new BadRequest('The provided password does not comply to the password policy', {
643
+ <span class="cstat-no" title="statement not covered" > if (!_.isEmpty(result)) {</span>
644
+ <span class="cstat-no" title="statement not covered" > throw new BadRequest('The provided password does not comply to the password policy', {</span>
613
645
  translation: {
614
646
  key: 'WEAK_PASSWORD',
615
- keys: result.map(rule =&gt; 'WEAK_PASSWORD_' + rule.toUpperCase()),
647
+ keys: result.map(<span class="fstat-no" title="function not covered" >ru</span>le =&gt; <span class="cstat-no" title="statement not covered" >'WEAK_PASSWORD_' + rule.toUpperCase())</span>,
616
648
  params: Object.assign({ failedRules: result }, _.omit(validator.options, ['prohibited']))
617
649
  }
618
650
  })
619
651
  }
620
652
  }
621
- return hook
653
+ <span class="cstat-no" title="statement not covered" > return hook</span>
622
654
  }
623
655
  }
624
656
  &nbsp;
625
- export function storePreviousPassword (options = <span class="branch-0 cbranch-no" title="branch not covered" >{}) {</span>
626
- return function (hook) {
627
- <span class="missing-if-branch" title="if path not taken" >I</span>if (hook.type !== 'before') {
628
- <span class="cstat-no" title="statement not covered" > throw n</span>ew Error('The \'storePreviousPassword\' hook should only be used as a \'before\' hook.')
657
+ export function <span class="fstat-no" title="function not covered" >storePreviousPassword </span>(options = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> {
658
+ <span class="cstat-no" title="statement not covered" > return <span class="fstat-no" title="function not covered" >fu</span>nction (hook) {</span>
659
+ <span class="cstat-no" title="statement not covered" > if (hook.type !== 'before') {</span>
660
+ <span class="cstat-no" title="statement not covered" > throw new Error('The \'storePreviousPassword\' hook should only be used as a \'before\' hook.')</span>
629
661
  }
630
- const app = hook.app
631
- const data = getItems(hook)
632
- <span class="missing-if-branch" title="else path not taken" >E</span>if (app.getPasswordPolicy &amp;&amp; hook.params.previousItem) {
633
- const validator = app.getPasswordPolicy()
662
+ const app = <span class="cstat-no" title="statement not covered" >hook.app</span>
663
+ const data = <span class="cstat-no" title="statement not covered" >getItems(hook)</span>
664
+ <span class="cstat-no" title="statement not covered" > if (app.getPasswordPolicy &amp;&amp; hook.params.previousItem) {</span>
665
+ const validator = <span class="cstat-no" title="statement not covered" >app.getPasswordPolicy()</span>
634
666
  // Based on previous password value
635
- const user = hook.params.previousItem
636
- const passwordField = options.passwordField || 'password'
637
- const password = _.get(user, passwordField)
638
- <span class="missing-if-branch" title="else path not taken" >E</span>if (password) {
639
- const previousPasswordsField = options.previousPasswordsField || 'previousPasswords'
640
- const previousPasswords = _.get(user, previousPasswordsField, [])
641
- debug(`Moving previous password from field ${passwordField} in field ${previousPasswords} on user`, user)
642
- previousPasswords.push(password)
667
+ const user = <span class="cstat-no" title="statement not covered" >hook.params.previousItem</span>
668
+ const passwordField = <span class="cstat-no" title="statement not covered" >options.passwordField || 'password'</span>
669
+ const password = <span class="cstat-no" title="statement not covered" >_.get(user, passwordField)</span>
670
+ <span class="cstat-no" title="statement not covered" > if (password) {</span>
671
+ const previousPasswordsField = <span class="cstat-no" title="statement not covered" >options.previousPasswordsField || 'previousPasswords'</span>
672
+ const previousPasswords = <span class="cstat-no" title="statement not covered" >_.get(user, previousPasswordsField, [])</span>
673
+ <span class="cstat-no" title="statement not covered" > debug(`Moving previous password from field ${passwordField} in field ${previousPasswords} on user`, user)</span>
674
+ <span class="cstat-no" title="statement not covered" > previousPasswords.push(password)</span>
643
675
  // Pop oldest password when required
644
- const max = _.get(validator, 'options.history', 5)
645
- <span class="missing-if-branch" title="if path not taken" >I</span>if (previousPasswords.length &gt; max) <span class="cstat-no" title="statement not covered" >previousPasswords.s</span>hift()
646
- Object.assign(data, { [previousPasswordsField]: previousPasswords })
647
- replaceItems(hook, data)
676
+ const max = <span class="cstat-no" title="statement not covered" >_.get(validator, 'options.history', 5)</span>
677
+ <span class="cstat-no" title="statement not covered" > if (previousPasswords.length &gt; max) <span class="cstat-no" title="statement not covered" >previousPasswords.shift()</span></span>
678
+ <span class="cstat-no" title="statement not covered" > Object.assign(data, { [previousPasswordsField]: previousPasswords })</span>
679
+ <span class="cstat-no" title="statement not covered" > replaceItems(hook, data)</span>
648
680
  }
649
681
  }
650
- return hook
682
+ <span class="cstat-no" title="statement not covered" > return hook</span>
651
683
  }
652
684
  }
653
685
  &nbsp;
654
- export function generatePassword (hook) {
655
- <span class="missing-if-branch" title="if path not taken" >I</span>if (hook.type !== 'before') {
656
- <span class="cstat-no" title="statement not covered" > throw n</span>ew Error('The \'generatePassword\' hook should only be used as a \'before\' hook.')
657
- }
658
- const app = hook.app
659
- const data = hook.data
660
- // Generate a password
661
- const passwordRule = new RegExp('[\\w\\d\\?\\-]')
662
- // If we have a password policy ensure we match it
663
- <span class="missing-if-branch" title="else path not taken" >E</span>if (app.getPasswordPolicy) {
664
- const validator = app.getPasswordPolicy()
665
- do {
666
- data.password = generateRandomPassword(validator.options.minLength || <span class="branch-1 cbranch-no" title="branch not covered" >12, f</span>alse, passwordRule)
667
- } while (!validator.validate(data.password))
668
- } else {
669
- <span class="cstat-no" title="statement not covered" > data.p</span>assword = generateRandomPassword(12, false, passwordRule)
686
+ export function <span class="fstat-no" title="function not covered" >generatePassword </span>(options = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> {
687
+ <span class="cstat-no" title="statement not covered" > return <span class="fstat-no" title="function not covered" >fu</span>nction (hook) {</span>
688
+ <span class="cstat-no" title="statement not covered" > if (hook.type !== 'before') {</span>
689
+ <span class="cstat-no" title="statement not covered" > throw new Error('The \'generatePassword\' hook should only be used as a \'before\' hook.')</span>
690
+ }
691
+ const app = <span class="cstat-no" title="statement not covered" >hook.app</span>
692
+ const data = <span class="cstat-no" title="statement not covered" >hook.data</span>
693
+ const passwordField = <span class="cstat-no" title="statement not covered" >options.passwordField || 'password'</span>
694
+ const suggestedPasswordField = <span class="cstat-no" title="statement not covered" >options.suggestedPasswordField || 'password'</span>
695
+ // If a password is already provided and compliant with rules we will use it
696
+ <span class="cstat-no" title="statement not covered" > if (_.get(data, suggestedPasswordField)) {</span>
697
+ <span class="cstat-no" title="statement not covered" > _.set(data, passwordField, _.get(data, suggestedPasswordField))</span>
698
+ // Avoid leaking clear password
699
+ <span class="cstat-no" title="statement not covered" > _.unset(data, suggestedPasswordField)</span>
700
+ }
701
+ // Generated password rule
702
+ const passwordRule = <span class="cstat-no" title="statement not covered" >new RegExp('[\\w\\d\\?\\-]')</span>
703
+ // If we have a password policy ensure we match it
704
+ <span class="cstat-no" title="statement not covered" > if (app.getPasswordPolicy) {</span>
705
+ const validator = <span class="cstat-no" title="statement not covered" >app.getPasswordPolicy()</span>
706
+ // Check if a compliant password has been provided, otherwise generate it
707
+ <span class="cstat-no" title="statement not covered" > if (!_.get(data, passwordField) || !validator.validate(_.get(data, passwordField))) {</span>
708
+ <span class="cstat-no" title="statement not covered" > do {</span>
709
+ <span class="cstat-no" title="statement not covered" > _.set(data, passwordField, generateRandomPassword(validator.options.minLength || 12, false, passwordRule))</span>
710
+ } while (!validator.validate(_.get(data, passwordField)))
711
+ }
712
+ } else {
713
+ // Check if a password has been provided, otherwise generate it
714
+ <span class="cstat-no" title="statement not covered" > if (!_.get(data, passwordField)) {</span>
715
+ <span class="cstat-no" title="statement not covered" > _.set(data, passwordField, generateRandomPassword(12, false, passwordRule))</span>
716
+ }
717
+ }
718
+ <span class="cstat-no" title="statement not covered" > return hook</span>
670
719
  }
671
- return hook
672
720
  }
673
721
  &nbsp;
674
- export function preventRemoveUser (hook) {
675
- <span class="missing-if-branch" title="if path not taken" >I</span>if (hook.type !== 'before') {
676
- <span class="cstat-no" title="statement not covered" > throw n</span>ew Error('The \'preventRemoveUser\' hook should only be used as a \'before\' hook.')
722
+ export function <span class="fstat-no" title="function not covered" >preventRemoveUser </span>(hook) {
723
+ <span class="cstat-no" title="statement not covered" > if (hook.type !== 'before') {</span>
724
+ <span class="cstat-no" title="statement not covered" > throw new Error('The \'preventRemoveUser\' hook should only be used as a \'before\' hook.')</span>
677
725
  }
678
726
  &nbsp;
679
727
  // By pass check ?
680
- <span class="missing-if-branch" title="if path not taken" >I</span>if (hook.params.force) <span class="cstat-no" title="statement not covered" >return h</span>ook
681
- const user = hook.params.user
728
+ <span class="cstat-no" title="statement not covered" > if (hook.params.force) <span class="cstat-no" title="statement not covered" >return hook</span></span>
729
+ const user = <span class="cstat-no" title="statement not covered" >hook.params.user</span>
682
730
  // Check if the target is the current user
683
- <span class="missing-if-branch" title="else path not taken" >E</span>if ((user._id.toString() === hook.id.toString()) &amp;&amp; user.organisations) {
731
+ <span class="cstat-no" title="statement not covered" > if ((user._id.toString() === hook.id.toString()) &amp;&amp; user.organisations) {</span>
684
732
  // We must ensure the user is no more a owner of an organisation
685
- const owningOrganisations = _.filter(user.organisations, { permissions: RoleNames[Roles.owner] })
686
- if (!_.isEmpty(owningOrganisations)) {
687
- debug('Cannot remove the user: ', user)
688
- throw new Forbidden('You are not allowed to delete the user ' + user.name, {
733
+ const owningOrganisations = <span class="cstat-no" title="statement not covered" >_.filter(user.organisations, { permissions: RoleNames[Roles.owner] })</span>
734
+ <span class="cstat-no" title="statement not covered" > if (!_.isEmpty(owningOrganisations)) {</span>
735
+ <span class="cstat-no" title="statement not covered" > debug('Cannot remove the user: ', user)</span>
736
+ <span class="cstat-no" title="statement not covered" > throw new Forbidden('You are not allowed to delete the user ' + user.name, {</span>
689
737
  translation: {
690
738
  key: 'CANNOT_REMOVE_USER',
691
739
  params: { user: user.name }
@@ -693,17 +741,17 @@ export function preventRemoveUser (hook) {
693
741
  })
694
742
  }
695
743
  }
696
- return hook
744
+ <span class="cstat-no" title="statement not covered" > return hook</span>
697
745
  }
698
746
  &nbsp;
699
- export function joinOrganisation (hook) {
700
- const app = hook.app
701
- const subject = getItems(hook)
702
- const authorisationService = app.getService('authorisations')
703
- const usersService = app.getService('users')
747
+ export function <span class="fstat-no" title="function not covered" >joinOrganisation </span>(hook) {
748
+ const app = <span class="cstat-no" title="statement not covered" >hook.app</span>
749
+ const subject = <span class="cstat-no" title="statement not covered" >getItems(hook)</span>
750
+ const authorisationService = <span class="cstat-no" title="statement not covered" >app.getService('authorisations')</span>
751
+ const usersService = <span class="cstat-no" title="statement not covered" >app.getService('users')</span>
704
752
  &nbsp;
705
753
  // Set membership for the created user
706
- return authorisationService.create({
754
+ <span class="cstat-no" title="statement not covered" > return authorisationService.create({</span>
707
755
  scope: 'organisations',
708
756
  permissions: subject.sponsor.roleGranted, // Member by default
709
757
  resource: subject.sponsor.organisationId,
@@ -712,29 +760,29 @@ export function joinOrganisation (hook) {
712
760
  subjectsService: usersService,
713
761
  subjects: [subject]
714
762
  })
715
- .then(authorisation =&gt; {
716
- debug('Organisation membership set for user ' + subject._id)
717
- return hook
763
+ .then(<span class="fstat-no" title="function not covered" >au</span>thorisation =&gt; {
764
+ <span class="cstat-no" title="statement not covered" > debug('Organisation membership set for user ' + subject._id)</span>
765
+ <span class="cstat-no" title="statement not covered" > return hook</span>
718
766
  })
719
767
  }
720
768
  &nbsp;
721
- export function leaveOrganisations (options = { skipPrivate: true }) {
722
- return async function (hook) {
723
- <span class="missing-if-branch" title="if path not taken" >I</span>if (hook.type !== 'after') {
724
- <span class="cstat-no" title="statement not covered" > throw n</span>ew Error('The \'leaveOrganisations\' hook should only be used as a \'after\' hook.')
769
+ export function <span class="fstat-no" title="function not covered" >leaveOrganisations </span>(options = <span class="branch-0 cbranch-no" title="branch not covered" >{ skipPrivate: true })</span> {
770
+ <span class="cstat-no" title="statement not covered" > return <span class="fstat-no" title="function not covered" >as</span>ync function (hook) {</span>
771
+ <span class="cstat-no" title="statement not covered" > if (hook.type !== 'after') {</span>
772
+ <span class="cstat-no" title="statement not covered" > throw new Error('The \'leaveOrganisations\' hook should only be used as a \'after\' hook.')</span>
725
773
  }
726
774
  &nbsp;
727
- const app = hook.app
728
- const organisationsService = app.getService('organisations')
729
- const authorisationService = app.getService('authorisations')
730
- const usersService = app.getService('users')
731
- const subject = getItems(hook)
732
- const organisations = _.get(subject, 'organisations', [])
775
+ const app = <span class="cstat-no" title="statement not covered" >hook.app</span>
776
+ const organisationsService = <span class="cstat-no" title="statement not covered" >app.getService('organisations')</span>
777
+ const authorisationService = <span class="cstat-no" title="statement not covered" >app.getService('authorisations')</span>
778
+ const usersService = <span class="cstat-no" title="statement not covered" >app.getService('users')</span>
779
+ const subject = <span class="cstat-no" title="statement not covered" >getItems(hook)</span>
780
+ const organisations = <span class="cstat-no" title="statement not covered" >_.get(subject, 'organisations', [])</span>
733
781
  &nbsp;
734
- await Promise.all(organisations.map(organisation =&gt; {
782
+ <span class="cstat-no" title="statement not covered" > await Promise.all(organisations.map(<span class="fstat-no" title="function not covered" >or</span>ganisation =&gt; {</span>
735
783
  // Unset membership on org except private org if required
736
- <span class="missing-if-branch" title="if path not taken" >I</span>if (options.skipPrivate &amp;&amp; organisation._id.toString() === subject._id.toString()) <span class="cstat-no" title="statement not covered" >return</span>
737
- return authorisationService.remove(organisation._id.toString(), {
784
+ <span class="cstat-no" title="statement not covered" > if (options.skipPrivate &amp;&amp; organisation._id.toString() === subject._id.toString()) <span class="cstat-no" title="statement not covered" >return</span></span>
785
+ <span class="cstat-no" title="statement not covered" > return authorisationService.remove(organisation._id.toString(), {</span>
738
786
  query: {
739
787
  scope: 'organisations'
740
788
  },
@@ -748,69 +796,69 @@ export function leaveOrganisations (options = { skipPrivate: true }) {
748
796
  })
749
797
  }))
750
798
  &nbsp;
751
- debug('Membership unset for all organisations on user ' + subject._id)
752
- return hook
799
+ <span class="cstat-no" title="statement not covered" > debug('Membership unset for all organisations on user ' + subject._id)</span>
800
+ <span class="cstat-no" title="statement not covered" > return hook</span>
753
801
  }
754
802
  }
755
803
  &nbsp;
756
- export function sendVerificationEmail (hook) {
757
- <span class="missing-if-branch" title="if path not taken" >I</span>if (hook.type !== 'after') {
758
- <span class="cstat-no" title="statement not covered" > throw n</span>ew Error('The \'sendVerificationEmail\' hook should only be used as a \'after\' hook.')
804
+ export function <span class="fstat-no" title="function not covered" >sendVerificationEmail </span>(hook) {
805
+ <span class="cstat-no" title="statement not covered" > if (hook.type !== 'after') {</span>
806
+ <span class="cstat-no" title="statement not covered" > throw new Error('The \'sendVerificationEmail\' hook should only be used as a \'after\' hook.')</span>
759
807
  }
760
808
  &nbsp;
761
809
  // Check for by-passing OAuth2 providers
762
- for (const provider of hook.app.authenticationProviders) {
763
- <span class="cstat-no" title="statement not covered" > if (hook.result[provider + 'Id']) <span class="cstat-no" title="statement not covered" >return P</span></span>romise.resolve(hook)
810
+ <span class="cstat-no" title="statement not covered" > for (const provider of hook.app.authenticationProviders) {</span>
811
+ <span class="cstat-no" title="statement not covered" > if (hook.result[provider + 'Id']) <span class="cstat-no" title="statement not covered" >return Promise.resolve(hook)</span></span>
764
812
  }
765
813
  &nbsp;
766
- const accountService = hook.app.getService('account')
767
- return accountService.options.notifier('resendVerifySignup', hook.result)
768
- .then(result =&gt; {
769
- return hook
814
+ const accountService = <span class="cstat-no" title="statement not covered" >hook.app.getService('account')</span>
815
+ <span class="cstat-no" title="statement not covered" > return accountService.options.notifier('resendVerifySignup', hook.result)</span>
816
+ .then(<span class="fstat-no" title="function not covered" >re</span>sult =&gt; {
817
+ <span class="cstat-no" title="statement not covered" > return hook</span>
770
818
  })
771
819
  }
772
820
  &nbsp;
773
- export function sendInvitationEmail (hook) {
821
+ export function <span class="fstat-no" title="function not covered" >sendInvitationEmail </span>(hook) {
774
822
  // Before because we need to send the clear password by email
775
- <span class="missing-if-branch" title="if path not taken" >I</span>if (hook.type !== 'before') {
776
- <span class="cstat-no" title="statement not covered" > throw n</span>ew Error('The \'sendInvitationEmail\' hook should only be used as a \'before\' hook.')
823
+ <span class="cstat-no" title="statement not covered" > if (hook.type !== 'before') {</span>
824
+ <span class="cstat-no" title="statement not covered" > throw new Error('The \'sendInvitationEmail\' hook should only be used as a \'before\' hook.')</span>
777
825
  }
778
826
  &nbsp;
779
- const accountService = hook.app.getService('account')
780
- return accountService.options.notifier('sendInvitation', hook.data)
781
- .then(result =&gt; {
782
- return hook
827
+ const accountService = <span class="cstat-no" title="statement not covered" >hook.app.getService('account')</span>
828
+ <span class="cstat-no" title="statement not covered" > return accountService.options.notifier('sendInvitation', hook.data)</span>
829
+ .then(<span class="fstat-no" title="function not covered" >re</span>sult =&gt; {
830
+ <span class="cstat-no" title="statement not covered" > return hook</span>
783
831
  })
784
832
  }
785
833
  &nbsp;
786
- export function addVerification (hook) {
787
- const accountService = hook.app.getService('account')
834
+ export function <span class="fstat-no" title="function not covered" >addVerification </span>(hook) {
835
+ const accountService = <span class="cstat-no" title="statement not covered" >hook.app.getService('account')</span>
788
836
  &nbsp;
789
- return verifyHooks.addVerification(accountService.getPath(true))(hook)
790
- .then(hook =&gt; {
837
+ <span class="cstat-no" title="statement not covered" > return verifyHooks.addVerification(accountService.getPath(true))(hook)</span>
838
+ .then(<span class="fstat-no" title="function not covered" >ho</span>ok =&gt; {
791
839
  // Check for OAuth2 providers
792
- let isVerified = false
793
- for (const provider of hook.app.authenticationProviders) {
794
- <span class="cstat-no" title="statement not covered" > if (hook.data[provider + 'Id']) <span class="cstat-no" title="statement not covered" >isVerified = t</span></span>rue
840
+ let isVerified = <span class="cstat-no" title="statement not covered" >false</span>
841
+ <span class="cstat-no" title="statement not covered" > for (const provider of hook.app.authenticationProviders) {</span>
842
+ <span class="cstat-no" title="statement not covered" > if (hook.data[provider + 'Id']) <span class="cstat-no" title="statement not covered" >isVerified = true</span></span>
795
843
  }
796
- hook.data.isVerified = isVerified
797
- return hook
844
+ <span class="cstat-no" title="statement not covered" > hook.data.isVerified = isVerified</span>
845
+ <span class="cstat-no" title="statement not covered" > return hook</span>
798
846
  })
799
847
  }
800
848
  &nbsp;
801
- export function removeVerification (hook) {
802
- return verifyHooks.removeVerification()(hook)
849
+ export function <span class="fstat-no" title="function not covered" >removeVerification </span>(hook) {
850
+ <span class="cstat-no" title="statement not covered" > return verifyHooks.removeVerification()(hook)</span>
803
851
  }
804
852
  &nbsp;
805
- export function unregisterDevices (hook) {
806
- debug('Unregistering devices for user ', hook.params.user)
807
- const pusherService = hook.app.getService('pusher')
808
- const user = hook.params.user
853
+ export function <span class="fstat-no" title="function not covered" >unregisterDevices </span>(hook) {
854
+ <span class="cstat-no" title="statement not covered" > debug('Unregistering devices for user ', hook.params.user)</span>
855
+ const pusherService = <span class="cstat-no" title="statement not covered" >hook.app.getService('pusher')</span>
856
+ const user = <span class="cstat-no" title="statement not covered" >hook.params.user</span>
809
857
  // Process with each registered device
810
- const unregisterPromises = []
811
- if (user.devices) {
812
- user.devices.forEach(device =&gt; {
813
- unregisterPromises.push(
858
+ const unregisterPromises = <span class="cstat-no" title="statement not covered" >[]</span>
859
+ <span class="cstat-no" title="statement not covered" > if (user.devices) {</span>
860
+ <span class="cstat-no" title="statement not covered" > user.devices.forEach(<span class="fstat-no" title="function not covered" >de</span>vice =&gt; {</span>
861
+ <span class="cstat-no" title="statement not covered" > unregisterPromises.push(</span>
814
862
  pusherService.remove(device.registrationId,
815
863
  {
816
864
  query: { action: 'device' },
@@ -819,8 +867,8 @@ export function unregisterDevices (hook) {
819
867
  )
820
868
  })
821
869
  }
822
- return Promise.all(unregisterPromises)
823
- .then(results =&gt; hook)
870
+ <span class="cstat-no" title="statement not covered" > return Promise.all(unregisterPromises)</span>
871
+ .then(<span class="fstat-no" title="function not covered" >re</span>sults =&gt; <span class="cstat-no" title="statement not covered" >hook)</span>
824
872
  }
825
873
  &nbsp;</pre></td></tr></table></pre>
826
874
 
@@ -829,7 +877,7 @@ export function unregisterDevices (hook) {
829
877
  <div class='footer quiet pad2 space-top1 center small'>
830
878
  Code coverage generated by
831
879
  <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
832
- at Thu Jul 15 2021 17:32:35 GMT+0200 (GMT+02:00)
880
+ at Fri Jan 07 2022 19:29:57 GMT+0100 (GMT+01:00)
833
881
  </div>
834
882
  </div>
835
883
  <script src="../../../prettify.js"></script>