sumba 2.0.1 → 2.1.1

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 (280) hide show
  1. package/.github/FUNDING.yml +0 -0
  2. package/.github/workflows/repo-lockdown.yml +0 -0
  3. package/.jsdoc.conf.json +0 -0
  4. package/LICENSE +0 -0
  5. package/README.md +0 -0
  6. package/docs/Sumba.html +0 -0
  7. package/docs/data/search.json +0 -0
  8. package/docs/fonts/Inconsolata-Regular.ttf +0 -0
  9. package/docs/fonts/OpenSans-Regular.ttf +0 -0
  10. package/docs/fonts/WorkSans-Bold.ttf +0 -0
  11. package/docs/global.html +0 -0
  12. package/docs/index.html +0 -0
  13. package/docs/index.js.html +40 -28
  14. package/docs/scripts/core.js +0 -0
  15. package/docs/scripts/core.min.js +0 -0
  16. package/docs/scripts/resize.js +0 -0
  17. package/docs/scripts/search.js +0 -0
  18. package/docs/scripts/search.min.js +0 -0
  19. package/docs/scripts/third-party/Apache-License-2.0.txt +0 -0
  20. package/docs/scripts/third-party/fuse.js +0 -0
  21. package/docs/scripts/third-party/hljs-line-num-original.js +0 -0
  22. package/docs/scripts/third-party/hljs-line-num.js +0 -0
  23. package/docs/scripts/third-party/hljs-original.js +0 -0
  24. package/docs/scripts/third-party/hljs.js +0 -0
  25. package/docs/scripts/third-party/popper.js +0 -0
  26. package/docs/scripts/third-party/tippy.js +0 -0
  27. package/docs/scripts/third-party/tocbot.js +0 -0
  28. package/docs/scripts/third-party/tocbot.min.js +0 -0
  29. package/docs/static/bitcoin.jpeg +0 -0
  30. package/docs/static/home.md +0 -0
  31. package/docs/static/logo-ecosystem.png +0 -0
  32. package/docs/static/logo.png +0 -0
  33. package/docs/styles/clean-jsdoc-theme-base.css +0 -0
  34. package/docs/styles/clean-jsdoc-theme-dark.css +0 -0
  35. package/docs/styles/clean-jsdoc-theme-light.css +0 -0
  36. package/docs/styles/clean-jsdoc-theme-scrollbar.css +0 -0
  37. package/docs/styles/clean-jsdoc-theme-without-scrollbar.min.css +0 -0
  38. package/docs/styles/clean-jsdoc-theme.min.css +0 -0
  39. package/extend/bajo/hook/{dobo.sumba-contact-form@after-record-create.js → dobo.sumba-contact-form@after-create-record.js} +2 -2
  40. package/extend/bajo/hook/{dobo.sumba-contact-form@before-record-create.js → dobo.sumba-contact-form@before-create-record.js} +2 -2
  41. package/extend/bajo/hook/{dobo.sumba-user@after-record-create.js → dobo.sumba-user@after-create-record.js} +2 -2
  42. package/extend/bajo/hook/dobo.sumba-user@after-record-validation.js +2 -2
  43. package/extend/bajo/hook/{dobo.sumba-user@after-record-update.js → dobo.sumba-user@after-update-record.js} +2 -2
  44. package/extend/bajo/hook/{dobo.sumba-user@before-record-create.js → dobo.sumba-user@before-create-record.js} +2 -2
  45. package/extend/bajo/hook/dobo.sumba-user@before-record-validation.js +2 -2
  46. package/extend/bajo/hook/{dobo.sumba-user@before-record-update.js → dobo.sumba-user@before-update-record.js} +2 -2
  47. package/extend/bajo/hook/dobo@before-count-record.js +8 -0
  48. package/extend/bajo/hook/{dobo@before-record-create.js → dobo@before-create-record.js} +5 -5
  49. package/extend/bajo/hook/dobo@before-find-one-record.js +8 -0
  50. package/extend/bajo/hook/{dobo@before-record-find.js → dobo@before-find-record.js} +9 -9
  51. package/extend/bajo/hook/dobo@before-get-record.js +23 -0
  52. package/extend/bajo/hook/dobo@before-remove-record.js +10 -0
  53. package/extend/bajo/hook/dobo@before-update-record.js +10 -0
  54. package/extend/bajo/hook/waibu-mpa.sumba@after-build-locals.js +0 -0
  55. package/extend/bajo/hook/waibu-mpa@pre-parsing.js +0 -0
  56. package/extend/bajo/hook/waibu-rest-api@pre-parsing.js +0 -0
  57. package/extend/bajo/hook/waibu-static@pre-parsing.js +0 -0
  58. package/extend/bajo/hook/waibu@after-app-boot.js +0 -0
  59. package/extend/bajo/hook/waibu@after-create-context.js +0 -0
  60. package/extend/bajo/hook/waibu@on-request.js +0 -0
  61. package/extend/bajo/intl/en-US.json +1 -0
  62. package/extend/bajo/intl/id.json +0 -0
  63. package/extend/bajoTemplate/layout/centered.html +0 -0
  64. package/extend/bajoTemplate/layout/default.html +0 -0
  65. package/extend/bajoTemplate/layout/error.html +0 -0
  66. package/extend/bajoTemplate/layout/info.html +0 -0
  67. package/extend/bajoTemplate/partial/403.html +0 -0
  68. package/extend/bajoTemplate/partial/_admin/reset-user-password.html +0 -0
  69. package/extend/bajoTemplate/partial/_mail/help-contact-form.html +0 -0
  70. package/extend/bajoTemplate/partial/_mail/help-contact-form.id.html +0 -0
  71. package/extend/bajoTemplate/partial/_mail/mystuff-change-password.html +0 -0
  72. package/extend/bajoTemplate/partial/_mail/mystuff-change-password.id.html +0 -0
  73. package/extend/bajoTemplate/partial/_mail/mystuff-reset-api-key.html +0 -0
  74. package/extend/bajoTemplate/partial/_mail/mystuff-reset-api-key.id.html +0 -0
  75. package/extend/bajoTemplate/partial/_mail/user-activation-success.html +0 -0
  76. package/extend/bajoTemplate/partial/_mail/user-activation-success.id.html +0 -0
  77. package/extend/bajoTemplate/partial/_mail/user-forgot-password-changed.html +0 -0
  78. package/extend/bajoTemplate/partial/_mail/user-forgot-password-changed.id.html +0 -0
  79. package/extend/bajoTemplate/partial/_mail/user-forgot-password-link.html +0 -0
  80. package/extend/bajoTemplate/partial/_mail/user-forgot-password-link.id.html +0 -0
  81. package/extend/bajoTemplate/partial/_mail/user-signup-success-active.html +0 -0
  82. package/extend/bajoTemplate/partial/_mail/user-signup-success-active.id.html +0 -0
  83. package/extend/bajoTemplate/partial/_mail/user-signup-success.html +0 -0
  84. package/extend/bajoTemplate/partial/_mail/user-signup-success.id.html +0 -0
  85. package/extend/bajoTemplate/partial/api-key-modal.html +0 -0
  86. package/extend/bajoTemplate/partial/app-launcher.html +0 -0
  87. package/extend/bajoTemplate/partial/help/contact-form/form.html +0 -0
  88. package/extend/bajoTemplate/partial/help/contact-form/success.html +0 -0
  89. package/extend/bajoTemplate/partial/help/trouble-tickets/add.html +0 -0
  90. package/extend/bajoTemplate/partial/help/trouble-tickets/details.html +0 -0
  91. package/extend/bajoTemplate/partial/help/trouble-tickets/list.html +0 -0
  92. package/extend/bajoTemplate/partial/layout/address.html +0 -0
  93. package/extend/bajoTemplate/partial/layout/breadcrumb.html +0 -0
  94. package/extend/bajoTemplate/partial/layout/footer.html +0 -0
  95. package/extend/bajoTemplate/partial/layout/more-info.html +0 -0
  96. package/extend/bajoTemplate/partial/layout/more-info.id.html +0 -0
  97. package/extend/bajoTemplate/partial/layout/navbar.html +0 -0
  98. package/extend/bajoTemplate/partial/layout/sidebar.html +0 -0
  99. package/extend/bajoTemplate/partial/layout/socmed.html +0 -0
  100. package/extend/bajoTemplate/partial/list-item/change-password.html +0 -0
  101. package/extend/bajoTemplate/partial/list-item/forgot-password.html +0 -0
  102. package/extend/bajoTemplate/partial/list-item/goto-home.html +0 -0
  103. package/extend/bajoTemplate/partial/list-item/member-links.html +0 -0
  104. package/extend/bajoTemplate/partial/list-item/oauth-signin.html +0 -0
  105. package/extend/bajoTemplate/partial/list-item/signin.html +0 -0
  106. package/extend/bajoTemplate/partial/list-item/signout.html +0 -0
  107. package/extend/bajoTemplate/partial/list-item/user-signup.html +0 -0
  108. package/extend/bajoTemplate/partial/list-item/your-profile.html +0 -0
  109. package/extend/bajoTemplate/partial/signin.html +0 -0
  110. package/extend/bajoTemplate/partial/signout.html +0 -0
  111. package/extend/bajoTemplate/partial/user/activation.html +0 -0
  112. package/extend/bajoTemplate/partial/user/forgot-password-nomail.id.md +0 -0
  113. package/extend/bajoTemplate/partial/user/forgot-password-nomail.md +0 -0
  114. package/extend/bajoTemplate/partial/user/forgot-password.html +0 -0
  115. package/extend/bajoTemplate/partial/user/fpl-invalid.html +0 -0
  116. package/extend/bajoTemplate/partial/user/fpl-invalid.id.md +0 -0
  117. package/extend/bajoTemplate/partial/user/fpl-invalid.md +0 -0
  118. package/extend/bajoTemplate/partial/user/fpl.html +0 -0
  119. package/extend/bajoTemplate/partial/user/signup/form.html +0 -0
  120. package/extend/bajoTemplate/partial/user/signup/success-mail.id.md +0 -0
  121. package/extend/bajoTemplate/partial/user/signup/success-mail.md +0 -0
  122. package/extend/bajoTemplate/partial/user/signup/success-nomail.id.md +0 -0
  123. package/extend/bajoTemplate/partial/user/signup/success-nomail.md +0 -0
  124. package/extend/bajoTemplate/partial/user/signup/success.html +0 -0
  125. package/extend/bajoTemplate/partial/your-stuff/change-password.html +0 -0
  126. package/extend/bajoTemplate/partial/your-stuff/profile/edit.html +0 -0
  127. package/extend/bajoTemplate/partial/your-stuff/profile/view.html +0 -0
  128. package/extend/bajoTemplate/partial/your-stuff/reset-api-key.html +0 -0
  129. package/extend/bajoTemplate/template/403.html +0 -0
  130. package/extend/bajoTemplate/template/_admin/reset-user-password.html +0 -0
  131. package/extend/bajoTemplate/template/_mail/help-contact-form.html +0 -0
  132. package/extend/bajoTemplate/template/_mail/mystuff-change-password.html +0 -0
  133. package/extend/bajoTemplate/template/_mail/mystuff-reset-api-key.html +0 -0
  134. package/extend/bajoTemplate/template/_mail/user-activation-success.html +0 -0
  135. package/extend/bajoTemplate/template/_mail/user-forgot-password-changed.html +0 -0
  136. package/extend/bajoTemplate/template/_mail/user-forgot-password-link.html +0 -0
  137. package/extend/bajoTemplate/template/_mail/user-signup-success-active.html +0 -0
  138. package/extend/bajoTemplate/template/_mail/user-signup-success.html +0 -0
  139. package/extend/bajoTemplate/template/help/contact-form/form.html +0 -0
  140. package/extend/bajoTemplate/template/help/contact-form/success.html +0 -0
  141. package/extend/bajoTemplate/template/help/trouble-tickets/add.html +0 -0
  142. package/extend/bajoTemplate/template/help/trouble-tickets/details.html +0 -0
  143. package/extend/bajoTemplate/template/help/trouble-tickets/list.html +0 -0
  144. package/extend/bajoTemplate/template/info/about-us.md +0 -0
  145. package/extend/bajoTemplate/template/info/cookie-policy.md +0 -0
  146. package/extend/bajoTemplate/template/info/privacy.md +0 -0
  147. package/extend/bajoTemplate/template/info/terms-conditions.md +0 -0
  148. package/extend/bajoTemplate/template/signin.html +0 -0
  149. package/extend/bajoTemplate/template/signout.html +0 -0
  150. package/extend/bajoTemplate/template/user/activation.html +0 -0
  151. package/extend/bajoTemplate/template/user/forgot-password.html +0 -0
  152. package/extend/bajoTemplate/template/user/fpl-invalid.html +0 -0
  153. package/extend/bajoTemplate/template/user/fpl.html +0 -0
  154. package/extend/bajoTemplate/template/user/signup/form.html +0 -0
  155. package/extend/bajoTemplate/template/user/signup/success.html +0 -0
  156. package/extend/bajoTemplate/template/your-stuff/change-password.html +0 -0
  157. package/extend/bajoTemplate/template/your-stuff/profile/edit.html +0 -0
  158. package/extend/bajoTemplate/template/your-stuff/profile/view.html +0 -0
  159. package/extend/bajoTemplate/template/your-stuff/reset-api-key.html +0 -0
  160. package/extend/dobo/feature/address.js +1 -1
  161. package/extend/dobo/feature/category.js +0 -0
  162. package/extend/dobo/feature/country.js +1 -1
  163. package/extend/dobo/feature/email.js +0 -0
  164. package/extend/dobo/feature/lat-lng.js +2 -2
  165. package/extend/dobo/feature/lat.js +2 -2
  166. package/extend/dobo/feature/lng.js +2 -2
  167. package/extend/dobo/feature/person-in-charge.js +0 -0
  168. package/extend/dobo/feature/phone.js +0 -0
  169. package/extend/dobo/feature/site-id.js +3 -3
  170. package/extend/dobo/feature/slug.js +5 -6
  171. package/extend/dobo/feature/social.js +0 -0
  172. package/extend/dobo/feature/status.js +1 -1
  173. package/extend/dobo/feature/team-id.js +3 -3
  174. package/extend/dobo/feature/ts.js +0 -0
  175. package/extend/dobo/feature/url.js +5 -5
  176. package/extend/dobo/feature/user-id.js +5 -5
  177. package/extend/dobo/fixture/contact-form-cat.json +0 -0
  178. package/extend/dobo/fixture/site.json +0 -4
  179. package/extend/dobo/fixture/team-user.json +0 -0
  180. package/extend/dobo/fixture/team.json +2 -1
  181. package/extend/dobo/fixture/ticket-cat.json +0 -0
  182. package/extend/dobo/fixture/user.json +0 -0
  183. package/extend/dobo/model/contact-form-cat.json +3 -0
  184. package/extend/dobo/model/contact-form.json +16 -0
  185. package/extend/dobo/model/download.json +19 -0
  186. package/extend/dobo/model/site-setting.json +8 -0
  187. package/extend/dobo/{schema → model}/site.json +4 -8
  188. package/extend/dobo/{schema → model}/team-user.json +5 -10
  189. package/extend/dobo/model/team.json +15 -0
  190. package/extend/dobo/model/ticket-cat.json +3 -0
  191. package/extend/dobo/model/ticket-detail.json +7 -0
  192. package/extend/dobo/model/ticket.json +18 -0
  193. package/extend/dobo/{schema → model}/user.json +14 -11
  194. package/extend/masohiSocketIo/middleware/server/auth.js +0 -0
  195. package/extend/sumba/route/anonymous.json +0 -0
  196. package/extend/sumba/route/secure.json +0 -0
  197. package/extend/waibuBootstrap/theme/component/{factory → widget}/nav-dropdown-user.js +5 -5
  198. package/extend/waibuDb/schema/contact-form-cat.json +0 -0
  199. package/extend/waibuDb/schema/contact-form.json +0 -0
  200. package/extend/waibuDb/schema/download.js +1 -1
  201. package/extend/waibuDb/schema/site.json +2 -2
  202. package/extend/waibuDb/schema/team-user.js +2 -2
  203. package/extend/waibuDb/schema/team.json +0 -0
  204. package/extend/waibuDb/schema/ticket-cat.json +0 -0
  205. package/extend/waibuDb/schema/user.json +0 -0
  206. package/extend/waibuMpa/extend/waibuAdmin/route/contact-form/@action.js +0 -0
  207. package/extend/waibuMpa/extend/waibuAdmin/route/contact-form-cat/@action.js +0 -0
  208. package/extend/waibuMpa/extend/waibuAdmin/route/download/@action.js +0 -0
  209. package/extend/waibuMpa/extend/waibuAdmin/route/reset-user-password.js +3 -4
  210. package/extend/waibuMpa/extend/waibuAdmin/route/session/@action.js +0 -0
  211. package/extend/waibuMpa/extend/waibuAdmin/route/site.js +25 -0
  212. package/extend/waibuMpa/extend/waibuAdmin/route/team/@action.js +0 -0
  213. package/extend/waibuMpa/extend/waibuAdmin/route/team-user/@action.js +0 -0
  214. package/extend/waibuMpa/extend/waibuAdmin/route/ticket/@action.js +0 -0
  215. package/extend/waibuMpa/extend/waibuAdmin/route/ticket-cat/@action.js +0 -0
  216. package/extend/waibuMpa/extend/waibuAdmin/route/user/@action.js +0 -0
  217. package/extend/waibuMpa/route/access-token.js +1 -2
  218. package/extend/waibuMpa/route/help/contact-form.js +3 -3
  219. package/extend/waibuMpa/route/help/trouble-tickets/add.js +3 -3
  220. package/extend/waibuMpa/route/help/trouble-tickets/details/@id.js +4 -4
  221. package/extend/waibuMpa/route/help/trouble-tickets/list.js +2 -2
  222. package/extend/waibuMpa/route/info/@item.js +0 -0
  223. package/extend/waibuMpa/route/signin.js +0 -0
  224. package/extend/waibuMpa/route/signout.js +1 -14
  225. package/extend/waibuMpa/route/user/activation.js +3 -5
  226. package/extend/waibuMpa/route/user/forgot-password/@fpl.js +4 -5
  227. package/extend/waibuMpa/route/user/forgot-password.js +2 -4
  228. package/extend/waibuMpa/route/user/signup.js +3 -3
  229. package/extend/waibuMpa/route/your-stuff/change-password.js +3 -4
  230. package/extend/waibuMpa/route/your-stuff/download/@action.js +0 -0
  231. package/extend/waibuMpa/route/your-stuff/download/get.js +0 -0
  232. package/extend/waibuMpa/route/your-stuff/profile/edit.js +3 -3
  233. package/extend/waibuMpa/route/your-stuff/profile.js +2 -2
  234. package/extend/waibuMpa/route/your-stuff/reset-api-key.js +6 -7
  235. package/extend/waibuRestApi/route/info/get.js +2 -2
  236. package/extend/waibuRestApi/route/manage/team/model-builder.json +0 -0
  237. package/extend/waibuRestApi/route/manage/user/model-builder.json +0 -0
  238. package/extend/waibuRestApi/route/user/access-token/@type/create.js +0 -0
  239. package/extend/waibuRestApi/route/user/api-key/get.js +1 -2
  240. package/extend/waibuRestApi/route/your-stuff/api-key/get.js +1 -2
  241. package/extend/waibuRestApi/route/your-stuff/api-key/update.js +5 -6
  242. package/extend/waibuRestApi/route/your-stuff/change-password/update.js +2 -3
  243. package/extend/waibuRestApi/route/your-stuff/profile/get.js +2 -2
  244. package/extend/waibuRestApi/route/your-stuff/profile/update.js +2 -2
  245. package/extend/waibuSocketIo/middleware/server/auth.js +1 -2
  246. package/extend/waibuStatic/asset/user-profile.png +0 -0
  247. package/index.js +39 -30
  248. package/lib/check-iconset.js +3 -5
  249. package/lib/check-team.js +0 -0
  250. package/lib/check-theme.js +3 -6
  251. package/lib/check-user-id.js +1 -0
  252. package/lib/collect-redirects.js +0 -0
  253. package/lib/collect-routes.js +0 -0
  254. package/lib/collect-team.js +0 -0
  255. package/lib/lat-lng-hook.js +0 -0
  256. package/lib/password-rule.js +0 -0
  257. package/lib/reset-token.js +1 -1
  258. package/lib/token-schema.js +0 -0
  259. package/logo.png +0 -0
  260. package/package.json +6 -4
  261. package/wiki/CHANGES.md +10 -0
  262. package/wiki/CONFIG.md +0 -0
  263. package/wiki/CONTRIBUTING.md +0 -0
  264. package/wiki/DEV-GUIDE.md +0 -0
  265. package/wiki/ECOSYSTEM.md +0 -0
  266. package/wiki/GETTING-STARTED.md +0 -0
  267. package/wiki/USER-GUIDE.md +0 -0
  268. package/extend/bajo/hook/dobo@before-record-count.js +0 -8
  269. package/extend/bajo/hook/dobo@before-record-find-one.js +0 -8
  270. package/extend/bajo/hook/dobo@before-record-get.js +0 -23
  271. package/extend/bajo/hook/dobo@before-record-remove.js +0 -10
  272. package/extend/bajo/hook/dobo@before-record-update.js +0 -10
  273. package/extend/dobo/schema/contact-form-cat.json +0 -3
  274. package/extend/dobo/schema/contact-form.json +0 -20
  275. package/extend/dobo/schema/download.json +0 -24
  276. package/extend/dobo/schema/site-setting.json +0 -8
  277. package/extend/dobo/schema/team.json +0 -19
  278. package/extend/dobo/schema/ticket-cat.json +0 -3
  279. package/extend/dobo/schema/ticket-detail.json +0 -7
  280. package/extend/dobo/schema/ticket.json +0 -17
@@ -1,8 +1,8 @@
1
1
  async function navDropdownUser () {
2
- return class NavDropdownUser extends this.baseFactory {
2
+ return class NavDropdownUser extends this.app.baseClass.MpaWidget {
3
3
  build = async () => {
4
4
  const { has, omit, find, filter } = this.app.lib._
5
- const { routePath } = this.plugin.app.waibu
5
+ const { routePath } = this.app.waibu
6
6
  const { req } = this.component
7
7
  const icon = this.component.req.iconset ? await this.component.buildTag({ tag: 'icon', attr: { name: 'person' } }) : ''
8
8
  let text = ''
@@ -14,7 +14,7 @@ async function navDropdownUser () {
14
14
  } else text = req.t('guest')
15
15
  }
16
16
  const html = []
17
- const attr = omit(this.params.attr, ['text'])
17
+ const attr = omit(this.params.attr, ['text', 'noMenu'])
18
18
  attr.dropdown = true
19
19
  attr.content = `${icon} ${text}`
20
20
  if (this.params.attr.noMenu) {
@@ -22,7 +22,7 @@ async function navDropdownUser () {
22
22
  delete attr.dropdownMenu
23
23
  attr.href = routePath(this.component.req.user ? 'sumba:/your-stuff/profile' : 'sumba:/signin')
24
24
  } else {
25
- const menu = find(this.plugin.app.sumba.config.waibuMpa.menuHandler, { title: 'account' })
25
+ const menu = find(this.app.sumba.config.waibuMpa.menuHandler, { title: 'account' })
26
26
  if (menu) {
27
27
  const items = filter(menu.children, c => {
28
28
  if (!has(c, 'visible')) return true
@@ -53,7 +53,7 @@ async function navDropdownUser () {
53
53
  }
54
54
  }
55
55
  this.params.noTag = true
56
- this.params.html = await this.component.buildTag({ tag: 'navItem', attr, html: html.join('\n') })
56
+ this.params.html = await this.component.buildTag({ tag: 'navItem', attr, html: html.join('\n'), noEscape: true })
57
57
  }
58
58
  }
59
59
  }
File without changes
File without changes
@@ -8,7 +8,7 @@ async function download () {
8
8
  return await this.component.buildSentence(sentence)
9
9
  },
10
10
  size: function (val, rec) {
11
- const { formatByte } = this.plugin.app.bajoExtra
11
+ const { formatByte } = this.app.bajoExtra
12
12
  return formatByte(rec.size)
13
13
  }
14
14
  }
@@ -6,7 +6,7 @@
6
6
  { "name": "General", "fields": ["hostname", "alias", "title", "orgName", "email", "status:4-md 6-sm"] },
7
7
  { "name": "Person In Charge", "fields": ["picName:3-md 6-sm:Name", "picRole:3-md 6-sm:Role", "picPhone:3-md 6-sm:Phone", "picEmail:3-md 6-sm:Email"] },
8
8
  { "name": "Address", "fields": ["address1:12", "address2:12", "city:6-md 8-sm", "zipCode:2-md 4-sm", "provinceState:4-md", "country:6-md", "phone:6-md", "website:12"] },
9
- { "name": "Social Media", "fields": ["socX:3-md 6-sm", "socInstagram:3-md 6-sm", "socFacebook:3-md 6-sm", "linkedIn:3-md 6-sm"] }
9
+ { "name": "Social Media", "fields": ["socX:3-md 6-sm", "socInstagram:3-md 6-sm", "socFacebook:3-md 6-sm", "socLinkedIn:3-md 6-sm"] }
10
10
  ],
11
11
  "widget": {
12
12
  "country": {
@@ -28,7 +28,7 @@
28
28
  "noCloneBtn": true,
29
29
  "detailsHref": "waibuAdmin:/site/site"
30
30
  },
31
- "readonly": ["id", "createdAt", "updatedAt"]
31
+ "readonly": ["id", "createdAt", "updatedAt", "hostname"]
32
32
  }
33
33
  }
34
34
  }
@@ -11,10 +11,10 @@ async function teamUser () {
11
11
  ],
12
12
  valueFormatter: {
13
13
  user: (val, rec) => {
14
- return rec._rel.user.username
14
+ return rec._ref.user.username
15
15
  },
16
16
  team: (val, rec) => {
17
- return rec._rel.team.name
17
+ return rec._ref.team.name
18
18
  }
19
19
  },
20
20
  widget: {
File without changes
File without changes
File without changes
@@ -5,10 +5,9 @@ const resetUserPassword = {
5
5
  title: 'resetUserPassword',
6
6
  handler: async function (req, reply) {
7
7
  const { importPkg } = this.app.bajo
8
- const { recordFindOne, recordUpdate } = this.app.dobo
9
8
  const { defaultsDeep } = this.app.lib.aneka
10
9
  const Joi = await importPkg('dobo:joi')
11
- const model = 'SumbaUser'
10
+ const model = this.app.dobo.getModel('SumbaUser')
12
11
  const form = defaultsDeep(req.body, { username: req.query.username })
13
12
  let error
14
13
  if (req.method === 'POST') {
@@ -24,9 +23,9 @@ const resetUserPassword = {
24
23
  } catch (err) {
25
24
  throw this.error('validationError', { details: err.details, values: err.values, ns: this.ns, statusCode: 422, code: 'DB_VALIDATION' })
26
25
  }
27
- const rec = await recordFindOne(model, { query: { username: req.body.username } })
26
+ const rec = await model.findOneRecord({ query: { username: req.body.username } })
28
27
  if (!rec) throw this.error('unknownUser', { details: [{ field: 'username', error: 'unknownUser' }], statusCode: 400 })
29
- await recordUpdate(model, rec.id, { password: req.body.password }, { req, reply })
28
+ await model.updateRecord(rec.id, { password: req.body.password }, { req, reply })
30
29
  form.password = ''
31
30
  form.verifyPassword = ''
32
31
  } catch (err) {
@@ -9,7 +9,32 @@ const manageSite = {
9
9
  const template = `waibuDb.template:/crud/${req.query.edit ? 'edit' : 'details'}.html`
10
10
  const model = 'SumbaSite'
11
11
  req.params.id = req.site.id
12
+ req.query.id = req.site.id
12
13
  req.params.base = ''
14
+ /*
15
+ const options = {
16
+ schema: {
17
+ view: {
18
+ details: {
19
+ control: {
20
+ noBackBtn: true,
21
+ noCloneBtn: true,
22
+ noDeleteBtn: true,
23
+ editHref: '?edit=1'
24
+ }
25
+ },
26
+ edit: {
27
+ control: {
28
+ noDetailsBtn: true,
29
+ noCloneBtn: true,
30
+ noDeleteBtn: true,
31
+ backHref: '?details=1'
32
+ }
33
+ }
34
+ }
35
+ }
36
+ }
37
+ */
13
38
  return await action.call(this, { req, reply, model, template })
14
39
  }
15
40
  }
@@ -1,9 +1,8 @@
1
1
  const apiToken = {
2
2
  method: 'POST',
3
3
  handler: async function (req, reply) {
4
- const { recordGet } = this.app.dobo
5
4
  if (!req.user) return ''
6
- const rec = await recordGet('SumbaUser', req.user.id, { forceNoHidden: true, noCache: true })
5
+ const rec = await this.app.dobo.getModel('SumbaUser').getRecord(req.user.id, { forceNoHidden: true, noCache: true })
7
6
  return (await this.createJwtFromUserRecord(rec)).token
8
7
  }
9
8
  }
@@ -3,21 +3,21 @@ const contactForm = {
3
3
  handler: async function (req, reply) {
4
4
  const { defaultsDeep } = this.app.lib.aneka
5
5
  const { pick } = this.app.lib._
6
- const { recordCreate, recordFind } = this.app.waibuDb
6
+ const { createRecord, findRecord } = this.app.waibuDb
7
7
 
8
8
  const def = req.user ? pick(req.user, ['firstName', 'lastName', 'email']) : {}
9
9
  const form = defaultsDeep(req.body, def)
10
10
  let error
11
11
  if (req.method === 'POST') {
12
12
  try {
13
- const { data } = await recordCreate({ model: 'SumbaContactForm', req, reply, options: { noFlash: true } })
13
+ const { data } = await createRecord({ model: 'SumbaContactForm', req, reply, options: { noFlash: true } })
14
14
  req.flash('notify', req.t('contactFormSubmitted'))
15
15
  return await reply.view('sumba.template:/help/contact-form/success.html', { form: req.body, data })
16
16
  } catch (err) {
17
17
  error = err
18
18
  }
19
19
  }
20
- const cats = await recordFind({ model: 'SumbaContactFormCat', req, options: { sort: 'level:1+name:1', limit: -1, dataOnly: true } })
20
+ const cats = await findRecord({ model: 'SumbaContactFormCat', req, options: { sort: 'level:1+name:1', limit: -1, dataOnly: true } })
21
21
  return await reply.view('sumba.template:/help/contact-form/form.html', { form, error, cats })
22
22
  }
23
23
  }
@@ -4,19 +4,19 @@ const add = {
4
4
  method: ['GET', 'POST'],
5
5
  handler: async function (req, reply) {
6
6
  const { defaultsDeep } = this.app.lib.aneka
7
- const { recordCreate, recordFind } = this.app.waibuDb
7
+ const { createRecord, findRecord } = this.app.waibuDb
8
8
  const options = {}
9
9
  const form = defaultsDeep(req.body, {})
10
10
  let error
11
11
  if (req.method === 'POST') {
12
12
  try {
13
- await recordCreate({ model, req, reply, options })
13
+ await createRecord({ model, req, reply, options })
14
14
  return reply.redirectTo('sumba:/help/trouble-tickets/list')
15
15
  } catch (err) {
16
16
  error = err
17
17
  }
18
18
  }
19
- const cats = await recordFind({ model: 'SumbaTicketCat', req, options: { sort: 'level:1+name:1', limit: -1, dataOnly: true } })
19
+ const cats = await findRecord({ model: 'SumbaTicketCat', req, options: { sort: 'level:1+name:1', limit: -1, dataOnly: true } })
20
20
  return await reply.view('sumba.template:/help/trouble-tickets/add.html', { form, error, cats })
21
21
  }
22
22
  }
@@ -4,17 +4,17 @@ const id = {
4
4
  method: ['GET', 'POST'],
5
5
  handler: async function (req, reply) {
6
6
  const { cloneDeep } = this.app.lib._
7
- const { recordCreate, recordFind, getSchemaExt } = this.app.waibuDb
7
+ const { createRecord, findRecord, getSchemaExt } = this.app.waibuDb
8
8
  const { schema } = await getSchemaExt(model, 'list')
9
9
 
10
- const master = (await recordFind({ model: 'SumbaTicket', req, options: { dataOnly: true, query: { id: req.params.id }, limit: 1 } }))[0]
10
+ const master = (await findRecord({ model: 'SumbaTicket', req, options: { dataOnly: true, query: { id: req.params.id }, limit: 1 } }))[0]
11
11
  if (!master) throw this.error('_notFound')
12
12
  const form = cloneDeep(req.body)
13
13
  let error
14
14
  if (req.method === 'POST') {
15
15
  try {
16
16
  form.masterId = master.id + ''
17
- await recordCreate({ model: 'SumbaTicketDetail', req, body: form })
17
+ await createRecord({ model: 'SumbaTicketDetail', req, body: form })
18
18
  return reply.redirectTo('sumba:/help/trouble-tickets/list')
19
19
  } catch (err) {
20
20
  error = err
@@ -22,7 +22,7 @@ const id = {
22
22
  }
23
23
  const query = { masterId: req.params.id + '' }
24
24
  const options = { count: true, query }
25
- const list = await recordFind({ model, req, options })
25
+ const list = await findRecord({ model, req, options })
26
26
  schema.view.disabled = ['update', 'remove']
27
27
  schema.view.fields = ['createdAt']
28
28
  schema.view.label = { createdAt: 'conversation' }
@@ -3,11 +3,11 @@ const model = 'SumbaTicket'
3
3
  const list = {
4
4
  method: ['GET'],
5
5
  handler: async function (req, reply) {
6
- const { recordFind, getSchemaExt } = this.app.waibuDb
6
+ const { findRecord, getSchemaExt } = this.app.waibuDb
7
7
  const { getExcerpt } = this.app.bajoTemplate
8
8
  const { schema } = await getSchemaExt(model, 'list')
9
9
  const options = { count: true }
10
- const list = await recordFind({ model, req, options })
10
+ const list = await findRecord({ model, req, options })
11
11
  schema.view.disabled = ['update', 'remove']
12
12
  schema.view.fields = ['createdAt', 'subject', 'status']
13
13
  schema.view.label = { subject: 'Your Message' }
File without changes
File without changes
@@ -1,23 +1,10 @@
1
1
  const signout = {
2
2
  method: ['GET', 'POST'],
3
3
  handler: async function (req, reply) {
4
- const { runHook } = this.app.bajo
5
- // const { isEmpty } = this.app.lib._
6
- const { getSessionId } = this.app.waibuMpa
7
-
8
4
  let { referer } = req.body || {}
9
5
  if (req.session.ref) referer = req.session.ref
10
6
  req.session.ref = null
11
- if (req.method === 'POST') {
12
- const sid = await getSessionId(req.headers.cookie)
13
- req.session.userId = null
14
- await runHook(`${this.ns}:afterSignout`, sid, req)
15
- const { query, params } = req
16
- // const url = !isEmpty(referer) ? referer : this.config.redirect.home
17
- const url = this.config.redirect.afterSignout
18
- req.flash('notify', req.t('signoutSuccessfully'))
19
- return reply.redirectTo(url, { query, params })
20
- }
7
+ if (req.method === 'POST') return this.signout({ req, reply })
21
8
  return await reply.view('sumba.template:/signout.html', { form: { referer } })
22
9
  }
23
10
  }
@@ -1,18 +1,16 @@
1
- const model = 'SumbaUser'
2
-
3
1
  const userActivation = {
4
2
  method: ['GET', 'POST'],
5
3
  handler: async function (req, reply) {
6
4
  const { defaultsDeep } = this.app.lib.aneka
7
- const { recordFind, recordUpdate } = this.app.dobo
8
5
  const form = defaultsDeep(req.body, { key: req.query.key })
6
+ const model = this.app.dobo.getModel('SumbaUser')
9
7
  let error
10
8
  if (req.method === 'POST') {
11
9
  try {
12
10
  const query = { status: 'UNVERIFIED', token: req.body.key }
13
- const result = await recordFind(model, { query, limit: 1 })
11
+ const result = await model.findRecord({ query, limit: 1 })
14
12
  if (result.length === 0) throw this.error('validationError', { details: [{ field: 'key', error: 'invalidActivationKey' }] })
15
- await recordUpdate(model, result[0].id, { status: 'ACTIVE' }, { req, noValidation: true, noFlash: true })
13
+ await model.updateRecord(result[0].id, { status: 'ACTIVE' }, { req, noValidation: true, noFlash: true })
16
14
  req.flash('notify', req.t('userActivated'))
17
15
  return reply.redirectTo(this.config.redirect.signin, req)
18
16
  } catch (err) {
@@ -1,16 +1,15 @@
1
1
  import passwordRule from '../../../../../lib/password-rule.js'
2
- const model = 'SumbaUser'
3
2
 
4
3
  async function getUser (req, reply) {
5
4
  const { dayjs } = this.app.lib
6
- const { recordFind } = this.app.waibuDb
5
+ const { findRecord } = this.app.waibuDb
7
6
  const invalidFpl = 'sumba.template:/user/fpl-invalid.html'
8
7
  if (Buffer.from(req.params.fpl, 'base64').toString('base64') !== req.params.fpl) return invalidFpl
9
8
  const fpToken = Buffer.from(req.params.fpl, 'base64').toString()
10
9
  const [token, sec] = fpToken.split(':')
11
10
  if (dayjs().unix() > Number(sec)) return invalidFpl
12
11
  const query = { token, status: 'ACTIVE' }
13
- const users = await recordFind({ model, req, reply, options: { query, limit: 1, dataOnly: true, noHook: true } })
12
+ const users = await findRecord({ model: 'SumbaUser', req, options: { query, limit: 1, dataOnly: true, noHook: true } })
14
13
  if (users.length === 0) return invalidFpl
15
14
  return users[0]
16
15
  }
@@ -22,7 +21,7 @@ const forgotPasswordLink = {
22
21
  const { defaultsDeep } = this.app.lib.aneka
23
22
  const { importPkg } = this.app.bajo
24
23
  const { isString } = this.app.lib._
25
- const { recordUpdate } = this.app.dobo
24
+ const model = this.app.dobo.getModel('SumbaUser')
26
25
  const Joi = await importPkg('dobo:joi')
27
26
 
28
27
  const form = defaultsDeep(req.body, {})
@@ -42,7 +41,7 @@ const forgotPasswordLink = {
42
41
  } catch (err) {
43
42
  throw this.error('validationError', { details: err.details, values: err.values, ns: this.ns, statusCode: 422, code: 'DB_VALIDATION' })
44
43
  }
45
- await recordUpdate(model, user.id, { password: req.body.newPassword }, { noFlash: true })
44
+ await model.updateRecord(user.id, { password: req.body.newPassword }, { noFlash: true })
46
45
  const to = `${user.firstName} ${user.lastName} <${user.email}>`
47
46
  const subject = req.t('forgotPasswordChanged')
48
47
  const options = { req, reply, tpl: '' }
@@ -1,5 +1,3 @@
1
- const model = 'SumbaUser'
2
-
3
1
  const profile = {
4
2
  method: ['GET', 'POST'],
5
3
  handler: async function (req, reply) {
@@ -7,13 +5,13 @@ const profile = {
7
5
  const { sendMail } = this.app.waibu
8
6
  const { defaultsDeep } = this.app.lib.aneka
9
7
  const { dayjs } = this.app.lib
10
- const { recordFind } = this.app.dobo
8
+ const model = this.app.dobo.getModel('SumbaUser')
11
9
  const form = defaultsDeep(req.body, {})
12
10
  let error
13
11
  if (req.method === 'POST') {
14
12
  try {
15
13
  const query = { status: 'ACTIVE', $or: [{ username: req.body.usernameEmail }, { email: req.body.usernameEmail }] }
16
- const result = await recordFind(model, { query, limit: 1 }, { dataOnly: true, noHook: true, forceNoHidden: true })
14
+ const result = await model.findRecord({ query, limit: 1 }, { dataOnly: true, noHook: true, forceNoHidden: true })
17
15
  if (result.length === 0) throw this.error('validationError', { details: [{ field: 'usernameEmail', error: 'unknownUsernameEmailOrInactive' }] })
18
16
  const data = result[0]
19
17
  const to = `${data.firstName} ${data.lastName} <${data.email}>`
@@ -2,8 +2,8 @@ const signup = {
2
2
  method: ['GET', 'POST'],
3
3
  handler: async function (req, reply) {
4
4
  const { defaultsDeep } = this.app.lib.aneka
5
- const { generateId } = this.app.bajo
6
- const { recordCreate } = this.app.waibuDb
5
+ const { generateId } = this.app.lib.aneka
6
+ const { createRecord } = this.app.waibuDb
7
7
 
8
8
  const form = defaultsDeep(req.body, {})
9
9
  let error
@@ -24,7 +24,7 @@ const signup = {
24
24
  const validation = { ns: ['sumba', 'dobo'], fields, extFields }
25
25
  req.body.token = generateId()
26
26
  req.body.provider = 'local'
27
- const { data } = await recordCreate({ model: 'SumbaUser', req, reply, options: { validation, noFlash: true, forceNoHidden: true } })
27
+ const { data } = await createRecord({ model: 'SumbaUser', req, reply, options: { validation, noFlash: true, forceNoHidden: true } })
28
28
  req.flash('notify', req.t('userCreated'))
29
29
  return await reply.view('sumba.template:/user/signup/success.html', { form: req.body, data })
30
30
  } catch (err) {
@@ -5,10 +5,9 @@ const profile = {
5
5
  handler: async function (req, reply) {
6
6
  const { defaultsDeep } = this.app.lib.aneka
7
7
  const { importPkg } = this.app.bajo
8
- const { recordGet, recordUpdate } = this.app.dobo
9
8
  const bcrypt = await importPkg('bajoExtra:bcrypt')
10
9
  const Joi = await importPkg('dobo:joi')
11
- const model = 'SumbaUser'
10
+ const model = this.app.dobo.getModel('SumbaUser')
12
11
  const form = defaultsDeep(req.body, {})
13
12
  let error
14
13
  if (req.method === 'POST') {
@@ -24,10 +23,10 @@ const profile = {
24
23
  } catch (err) {
25
24
  throw this.error('validationError', { details: err.details, values: err.values, ns: this.ns, statusCode: 422, code: 'DB_VALIDATION' })
26
25
  }
27
- const rec = await recordGet(model, req.user.id, { forceNoHidden: true })
26
+ const rec = await model.getRecord(req.user.id, { forceNoHidden: true })
28
27
  const verified = await bcrypt.compare(req.body.currentPassword, rec.password)
29
28
  if (!verified) throw this.error('invalidCurrentPassword', { details: [{ field: 'currentPassword', error: 'invalidPassword' }], statusCode: 400 })
30
- await recordUpdate(model, req.user.id, { password: req.body.newPassword }, { req, reply, noFlash: true })
29
+ await model.updateRecord(req.user.id, { password: req.body.newPassword }, { req, reply, noFlash: true })
31
30
  // signout and redirect to signin
32
31
  req.session.userId = null
33
32
  req.flash('notify', req.t('passwordChangedReSignin'))
File without changes
@@ -3,10 +3,10 @@ const profile = {
3
3
  handler: async function (req, reply) {
4
4
  const { defaultsDeep } = this.app.lib.aneka
5
5
  // const { attachmentCopyUploaded } = this.app.dobo
6
- const { recordUpdate, recordGet } = this.app.waibuDb
6
+ const { updateRecord, getRecord } = this.app.waibuDb
7
7
  const { omit, pick } = this.app.lib._
8
8
  const { hash } = this.app.bajoExtra
9
- const resp = await recordGet({ model: 'SumbaUser', req, id: req.user.id, options: { forceNoHidden: true, noHook: true, noCache: true } })
9
+ const resp = await getRecord({ model: 'SumbaUser', req, id: req.user.id, options: { forceNoHidden: true, noHook: true, noCache: true } })
10
10
  let form = defaultsDeep(req.body, omit(resp.data, ['password']))
11
11
  form.token = await hash(form.token)
12
12
  let error
@@ -14,7 +14,7 @@ const profile = {
14
14
  try {
15
15
  const body = pick(form, ['firstName', 'lastName', 'address1', 'address2', 'city', 'zipCode', 'provinceState', 'country', 'phone', 'website'])
16
16
  const options = { noFlash: true, hidden: [], setField: 'profile', setFile: 'main.png' }
17
- const resp = await recordUpdate({ req, reply, model: 'SumbaUser', id: req.user.id, body, options })
17
+ const resp = await updateRecord({ req, reply, model: 'SumbaUser', id: req.user.id, body, options })
18
18
  form = resp.data
19
19
  req.flash('notify', req.t('profileUpdated'))
20
20
  return reply.redirectTo('sumba:/your-stuff/profile')
@@ -2,9 +2,9 @@ const profile = {
2
2
  method: ['GET'],
3
3
  handler: async function (req, reply) {
4
4
  const { hash } = this.app.bajoExtra
5
- const { recordGet } = this.app.waibuDb
5
+ const { getRecord } = this.app.waibuDb
6
6
  const options = { forceNoHidden: true, noHook: true, noCache: true, attachment: true, mimeType: true }
7
- const resp = await recordGet({ model: 'SumbaUser', req, id: req.user.id, options })
7
+ const resp = await getRecord({ model: 'SumbaUser', req, id: req.user.id, options })
8
8
  const form = resp.data
9
9
  form.token = await hash(form.salt)
10
10
  return await reply.view('sumba.template:/your-stuff/profile/view.html', { form })
@@ -1,16 +1,15 @@
1
- const model = 'SumbaUser'
2
-
3
1
  const resetApiKey = {
4
2
  method: ['GET', 'POST'],
5
3
  handler: async function (req, reply) {
6
4
  const { defaultsDeep } = this.app.lib.aneka
7
- const { importPkg, generateId } = this.app.bajo
8
- const { recordGet, recordUpdate } = this.app.dobo
5
+ const { importPkg } = this.app.bajo
6
+ const { generateId } = this.app.lib.aneka
9
7
  const { hash } = this.app.bajoExtra
10
8
  const delay = await importPkg('bajo:delay')
11
9
  const bcrypt = await importPkg('bajoExtra:bcrypt')
12
10
  const Joi = await importPkg('dobo:joi')
13
11
  const form = defaultsDeep(req.body, { apiKey: await hash(req.user.salt) })
12
+ const model = this.app.dobo.getModel('SumbaUser')
14
13
  let error
15
14
  if (req.method === 'POST') {
16
15
  try {
@@ -22,10 +21,10 @@ const resetApiKey = {
22
21
  } catch (err) {
23
22
  throw this.error('validationError', { details: err.details, values: err.values, ns: this.ns, statusCode: 422, code: 'DB_VALIDATION' })
24
23
  }
25
- const rec = await recordGet(model, req.user.id, { forceNoHidden: true })
26
- const verified = await bcrypt.compare(req.body.password, rec.password)
24
+ const rec = await model.getRecord(req.user.id, { forceNoHidden: true })
25
+ const verified = await bcrypt.compare(form.password, rec.password)
27
26
  if (!verified) throw this.error('validationError', { details: [{ field: 'password', error: 'invalidPassword' }], statusCode: 400 })
28
- await recordUpdate(model, req.user.id, { salt: generateId() }, { req, reply, noFlash: true, forceNoHidden: true })
27
+ await model.updateRecord(req.user.id, { salt: generateId() }, { req, reply, noFlash: true, forceNoHidden: true })
29
28
  await delay(2000) // ensure req.user cache is expired
30
29
  req.flash('notify', req.t('resetApiKeySuccessfull'))
31
30
  return reply.redirectTo('sumba:/your-stuff/profile')
@@ -2,13 +2,13 @@ const hidden = []
2
2
  const model = 'SumbaSite'
3
3
 
4
4
  async function get ({ ctx }) {
5
- const { recordGet } = this.app.waibuDb
5
+ const { getRecord } = this.app.waibuDb
6
6
  const { docSchemaModel } = this.app.waibuRestApi
7
7
 
8
8
  const schema = await docSchemaModel({ model, method: 'get', ctx, options: { hidden, noId: true } })
9
9
  const handler = async function (req, reply, options) {
10
10
  options.hidden = hidden
11
- return await recordGet({ model, req, reply, id: req.site.id, options })
11
+ return await getRecord({ model, req, reply, id: req.site.id, options })
12
12
  }
13
13
  return { schema, handler }
14
14
  }
@@ -12,10 +12,9 @@ async function get ({ ctx }) {
12
12
  }
13
13
 
14
14
  const handler = async function (req, reply, options) {
15
- const { recordGet } = this.app.dobo
16
15
  const { hash } = this.app.bajoExtra
17
16
 
18
- const profile = await recordGet('SumbaUser', req.user.id)
17
+ const profile = await this.app.dobo.getModel('SumbaUser').getRecord(req.user.id)
19
18
  return { data: { token: await hash(profile.password) } }
20
19
  }
21
20
  return { schema, handler }
@@ -2,10 +2,9 @@ import { response } from './update.js'
2
2
 
3
3
  async function get ({ ctx }) {
4
4
  const { hash } = this.app.bajoExtra
5
- const { recordGet } = this.app.dobo
6
5
  const schema = { response: await response.call(this) }
7
6
  const handler = async function get (req, reply) {
8
- const rec = await recordGet('SumbaUser', req.user.id, { forceNoHidden: true })
7
+ const rec = await this.app.dobo.getModel('SumbaUser').getRecord(req.user.id, { forceNoHidden: true })
9
8
  return { data: { token: await hash(rec.salt) } }
10
9
  }
11
10
  return { schema, handler }
@@ -19,22 +19,21 @@ export const body = {
19
19
  }
20
20
  }
21
21
 
22
- const model = 'SumbaUser'
23
-
24
22
  async function update ({ ctx }) {
25
- const { importPkg, generateId } = this.app.bajo
26
- const { recordGet, recordUpdate } = this.app.dobo
23
+ const { importPkg } = this.app.bajo
24
+ const { generateId } = this.app.lib.aneka
27
25
  const { hash } = this.app.bajoExtra
28
26
  const bcrypt = await importPkg('bajoExtra:bcrypt')
27
+ const model = this.app.dobo.getModel('SumbaUser')
29
28
 
30
29
  const schema = { body, response: await response.call(this) }
31
30
 
32
31
  const handler = async function get (req, reply, options) {
33
- const rec = await recordGet(model, req.user.id, { forceNoHidden: true })
32
+ const rec = await model.getRecord(req.user.id, { forceNoHidden: true })
34
33
  const verified = await bcrypt.compare(req.body.password, rec.password)
35
34
  if (!verified) throw this.error('invalidPassword', { details: [{ field: 'password', error: 'invalidPassword' }], statusCode: 400 })
36
35
  const input = { salt: generateId() }
37
- const resp = await recordUpdate(model, req.user.id, input, { forceNoHidden: true })
36
+ const resp = await model.updateRecord(req.user.id, input, { forceNoHidden: true })
38
37
  return { data: { token: await hash(resp.salt) } }
39
38
  }
40
39
 
@@ -25,7 +25,6 @@ const model = 'SumbaUser'
25
25
 
26
26
  async function update ({ ctx }) {
27
27
  const { importPkg } = this.app.bajo
28
- const { recordGet, recordUpdate } = this.app.dobo
29
28
  const bcrypt = await importPkg('bajoExtra:bcrypt')
30
29
 
31
30
  const schema = {
@@ -40,11 +39,11 @@ async function update ({ ctx }) {
40
39
  }
41
40
 
42
41
  const handler = async function get (req, reply, options) {
43
- const rec = await recordGet(model, req.user.id, { forceNoHidden: true })
42
+ const rec = await this.app.dobo.getModel(model).getRecord(req.user.id, { forceNoHidden: true })
44
43
  const verified = await bcrypt.compare(req.body.currentPassword, rec.password)
45
44
  if (!verified) throw this.error('invalidCurrentPassword', { details: [{ field: 'current', error: 'invalidPassword' }], statusCode: 400 })
46
45
  const input = { password: req.body.password }
47
- await recordUpdate(model, req.user.id, input)
46
+ await this.app.dobo.getModel(model).updateRecord(req.user.id, input)
48
47
  return {}
49
48
  }
50
49