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
@@ -2,12 +2,12 @@ const model = 'SumbaUser'
2
2
  const hidden = ['password', 'token', 'siteId', 'salt']
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
  const schema = await docSchemaModel({ model, method: 'get', ctx, options: { hidden, noId: true } })
8
8
  const handler = async function get (req, reply, options) {
9
9
  options.hidden = hidden
10
- return await recordGet({ model, req, reply, id: req.user.id, options })
10
+ return await getRecord({ model, req, reply, id: req.user.id, options })
11
11
  }
12
12
  return { schema, handler }
13
13
  }
@@ -2,7 +2,7 @@ const model = 'SumbaUser'
2
2
  const hidden = ['password', 'token', 'siteId']
3
3
 
4
4
  async function get ({ ctx }) {
5
- const { recordUpdate } = this.app.waibuDb
5
+ const { updateRecord } = this.app.waibuDb
6
6
  const { omit } = this.app.lib._
7
7
 
8
8
  const { docSchemaModel } = this.app.waibuRestApi
@@ -10,7 +10,7 @@ async function get ({ ctx }) {
10
10
  const handler = async function get (req, reply, options) {
11
11
  options.hidden = hidden
12
12
  const body = omit(req.body, ['username', 'status', ...hidden])
13
- return await recordUpdate({ model, req, reply, id: req.user.id, body, options })
13
+ return await updateRecord({ model, req, reply, id: req.user.id, body, options })
14
14
  }
15
15
  return { schema, handler }
16
16
  }
@@ -2,12 +2,11 @@ export default {
2
2
  level: 1,
3
3
  handler: async function (socket) {
4
4
  const { merge } = this.app.lib._
5
- const { recordGet } = this.app.dobo
6
5
  const { getSessionId } = this.app.waibuMpa
7
6
 
8
7
  if (socket.handshake) {
9
8
  const sessionId = await getSessionId(socket.request.headers.cookie)
10
- const resp = await recordGet('WbmpaSession', sessionId, { noHook: true, thrownNotFound: false })
9
+ const resp = await this.app.dobo.getModel('WbmpaSession').getRecord(sessionId, { noHook: true, thrownNotFound: false })
11
10
  if (resp) {
12
11
  const session = JSON.parse(resp.session) ?? {}
13
12
  socket.session = merge({}, session.user, { sessionId, authMethod: 'cookie' })
File without changes
package/index.js CHANGED
@@ -14,10 +14,7 @@ async function factory (pkgName) {
14
14
  *
15
15
  * @class
16
16
  */
17
- class Sumba extends this.app.pluginClass.base {
18
- static alias = 'sumba'
19
- static dependencies = ['bajo-extra', 'bajo-common-db', 'bajo-config']
20
-
17
+ class Sumba extends this.app.baseClass.Base {
21
18
  constructor () {
22
19
  super(pkgName, me.app)
23
20
  this.config = {
@@ -193,37 +190,41 @@ async function factory (pkgName) {
193
190
  }
194
191
 
195
192
  getUser = async (rec, safe = true) => {
196
- const { recordGet } = this.app.dobo
197
193
  const { omit, isPlainObject } = this.app.lib._
198
194
  let user
199
195
  if (isPlainObject(rec)) user = rec
200
- else user = await recordGet('SumbaUser', rec, { noHook: true })
196
+ else {
197
+ const mdl = this.app.dobo.getModel('SumbaUser')
198
+ user = await mdl.getRecord(rec, { noHook: true, throwNotFound: false })
199
+ }
200
+ if (!user) return null
201
201
  return safe ? omit(user, this.unsafeUserFields) : user
202
202
  }
203
203
 
204
204
  mergeTeam = async (user, site) => {
205
205
  if (!user) return
206
206
  const { map, pick } = this.app.lib._
207
- const { recordFindAll } = this.app.dobo
208
207
  user.teams = []
209
208
  const query = { userId: user.id, siteId: site.id }
210
- const userTeam = await recordFindAll('SumbaTeamUser', { query })
209
+ let mdl = this.app.dobo.getModel('SumbaTeamUser')
210
+ const userTeam = await mdl.findAllRecord({ query })
211
211
  if (userTeam.length === 0) return
212
212
  delete query.userId
213
- query.id = { $in: map(userTeam, 'id'), status: 'ENABLED' }
214
- const team = await recordFindAll('SumbaTeam', { query })
213
+ query.id = { $in: map(userTeam, 'id') }
214
+ query.status = 'ENABLED'
215
+ mdl = this.app.dobo.getModel('SumbaTeam')
216
+ const team = await mdl.findAllRecord({ query })
215
217
  if (team.length > 0) user.teams.push(...map(team, t => pick(t, ['id', 'alias'])))
216
218
  }
217
219
 
218
220
  getUserFromUsernamePassword = async (username = '', password = '', req) => {
219
221
  const { importPkg } = this.app.bajo
220
- const { recordFind, validate } = this.app.dobo
221
- const model = 'SumbaUser'
222
- await validate({ username, password }, model, { ns: ['sumba', 'dobo'], fields: ['username', 'password'] })
222
+ const model = this.app.dobo.getModel('SumbaUser')
223
+ await model.validate({ username, password }, null, { partial: true, ns: ['sumba', 'dobo'], fields: ['username', 'password'] })
223
224
  const bcrypt = await importPkg('bajoExtra:bcrypt')
224
225
 
225
226
  const query = { username, provider: 'local' }
226
- const rows = await recordFind(model, { query }, { req, forceNoHidden: true, noHook: true })
227
+ const rows = await model.findRecord({ query }, { req, forceNoHidden: true, noHook: true })
227
228
  if (rows.length === 0) throw this.error('validationError', { details: [{ field: 'username', error: 'Unknown username' }], statusCode: 401 })
228
229
  const rec = rows[0]
229
230
  if (rec.status !== 'ACTIVE') throw this.error('validationError', { details: ['User is inactive or temporarily disabled'], statusCode: 401 })
@@ -269,13 +270,12 @@ async function factory (pkgName) {
269
270
  const { merge } = this.app.lib._
270
271
  const { isMd5, hash } = this.app.bajoExtra
271
272
  const { getUser } = this
272
- const { recordFind } = this.app.dobo
273
273
 
274
274
  let token = await this._getToken('apiKey', req, source)
275
275
  if (!isMd5(token)) return false
276
276
  token = await hash(token)
277
277
  const query = { token }
278
- const rows = await recordFind('SumbaUser', { query }, { req, noHook: true })
278
+ const rows = await this.app.dobo.getModel('SumbaUser').findRecord({ query }, { req, noHook: true })
279
279
  if (rows.length === 0) throw this.error('invalidKey', merge({ statusCode: 401 }, payload))
280
280
  if (rows[0].status !== 'ACTIVE') throw this.error('userInactive', merge({ details: [{ field: 'status', error: 'inactive' }], statusCode: 401 }, payload))
281
281
  req.user = await getUser(rows[0])
@@ -326,7 +326,6 @@ async function factory (pkgName) {
326
326
 
327
327
  verifyJwt = async (req, reply, source, payload) => {
328
328
  const { importPkg } = this.app.bajo
329
- const { recordGet } = this.app.dobo
330
329
  const { getUser } = this
331
330
  const { isEmpty, merge } = this.app.lib._
332
331
 
@@ -342,7 +341,7 @@ async function factory (pkgName) {
342
341
  const decoded = await verifier(token)
343
342
  const id = decoded.payload.uid
344
343
  try {
345
- const rec = await recordGet('SumbaUser', id, { req, noHook: true })
344
+ const rec = await this.app.dobo.getModel('SumbaUser').getRecord(id, { req, noHook: true })
346
345
  if (!rec) throw this.error('invalidToken', { statusCode: 401 })
347
346
  if (rec.status !== 'ACTIVE') throw this.error('userInactive', { details: [{ field: 'status', error: 'inactive' }], statusCode: 401 })
348
347
  req.user = await getUser(rec)
@@ -397,14 +396,12 @@ async function factory (pkgName) {
397
396
 
398
397
  getSite = async (hostname, useId) => {
399
398
  const { omit } = this.app.lib._
400
- const { recordFind } = this.app.dobo
401
399
  const omitted = ['status']
402
400
 
403
401
  const mergeSetting = async (site) => {
404
402
  const { defaultsDeep } = this.app.lib.aneka
405
- const { parseObject } = this.app.bajo
403
+ const { parseObject } = this.app.lib
406
404
  const { trim, get, filter } = this.app.lib._
407
- const { recordFind, recordGet } = this.app.dobo
408
405
  const defSetting = {}
409
406
  const nsSetting = {}
410
407
  const names = this.app.getAllNs()
@@ -412,7 +409,7 @@ async function factory (pkgName) {
412
409
  ns: { $in: names },
413
410
  siteId: site.id
414
411
  }
415
- const all = await recordFind('SumbaSiteSetting', { query, limit: -1 })
412
+ const all = await this.app.dobo.getModel('SumbaSiteSetting').findRecord({ query, limit: -1 })
416
413
  for (const ns of names) {
417
414
  nsSetting[ns] = {}
418
415
  defSetting[ns] = get(this, `app.${ns}.config.siteSetting`, {})
@@ -427,14 +424,14 @@ async function factory (pkgName) {
427
424
  }
428
425
  site.setting = parseObject(defaultsDeep({}, nsSetting, defSetting))
429
426
  // additional fields
430
- const country = await recordGet('CdbCountry', site.country, { noHook: true })
427
+ const country = await this.app.dobo.getModel('CdbCountry').getRecord(site.country, { noHook: true })
431
428
  site.countryName = (country ?? {}).name ?? site.country
432
429
  }
433
430
 
434
431
  let site = {}
435
432
 
436
433
  if (!this.config.multiSite) {
437
- const resp = await recordFind('SumbaSite', { query: { alias: 'default' } }, { noHook: true })
434
+ const resp = await this.app.dobo.getModel('SumbaSite').findRecord({ query: { alias: 'default' } }, { noHook: true })
438
435
  site = omit(resp[0], omitted)
439
436
  await mergeSetting(site)
440
437
  return site
@@ -450,7 +447,7 @@ async function factory (pkgName) {
450
447
  }
451
448
  }
452
449
  const filter = { query, limit: 1 }
453
- const rows = await recordFind('SumbaSite', filter, { noHook: true })
450
+ const rows = await this.app.dobo.getModel('SumbaSite').findRecord(filter, { noHook: true })
454
451
  if (rows.length === 0) throw this.error('unknownSite')
455
452
  const row = omit(rows[0], omitted)
456
453
  if (row.status !== 'ACTIVE') throw this.error('siteInactiveInfo')
@@ -459,6 +456,19 @@ async function factory (pkgName) {
459
456
  return site
460
457
  }
461
458
 
459
+ signout = async ({ req, reply, reason }) => {
460
+ const { runHook } = this.app.bajo
461
+ const { getSessionId } = this.app.waibuMpa
462
+ const sid = await getSessionId(req.headers.cookie)
463
+ req.session.userId = null
464
+ await runHook(`${this.ns}:afterSignout`, sid, req)
465
+ const { query, params } = req
466
+ // const url = !isEmpty(referer) ? referer : this.config.redirect.home
467
+ const url = this.config.redirect.afterSignout
468
+ req.flash('notify', req.t(reason ?? 'signoutSuccessfully'))
469
+ return reply.redirectTo(url, { query, params })
470
+ }
471
+
462
472
  signin = async ({ user, req, reply }) => {
463
473
  const { getSessionId } = this.app.waibuMpa
464
474
  const { runHook } = this.app.bajo
@@ -477,7 +487,7 @@ async function factory (pkgName) {
477
487
  }
478
488
 
479
489
  generatePassword = (req) => {
480
- const { generateId } = this.app.bajo
490
+ const { generateId } = this.app.lib.aneka
481
491
  const cfg = req ? req.site.setting.sumba.userPassword : this.config.siteSetting.userPassword
482
492
  let passwd = generateId()
483
493
  if (cfg.minLowercase) passwd += generateId({ pattern: 'abcdefghijklmnopqrstuvwxyz', length: cfg.minLowercase })
@@ -489,7 +499,7 @@ async function factory (pkgName) {
489
499
 
490
500
  pushDownload = async ({ description, worker, data, source, req, file, type }) => {
491
501
  const { getPlugin } = this.app.bajo
492
- const { recordCreate } = getPlugin('waibuDb')
502
+ const { createRecord } = getPlugin('waibuDb')
493
503
  const { push } = getPlugin('bajoQueue')
494
504
  description = description ?? file
495
505
  const jobQueue = {
@@ -503,16 +513,15 @@ async function factory (pkgName) {
503
513
  if (!type) type = path.extname(file)
504
514
  if (type[0] === '.') type = type.slice(1)
505
515
  const body = { file, description, jobQueue, type }
506
- const rec = await recordCreate({ model: 'SumbaDownload', body, req, options: { noFlash: true } })
516
+ const rec = await createRecord({ model: 'SumbaDownload', body, req, options: { noFlash: true } })
507
517
  jobQueue.payload.data.download = { id: rec.data.id, file }
508
518
  await push(jobQueue)
509
519
  }
510
520
 
511
521
  getApiKeyFromUserId = async id => {
512
522
  const { hash } = this.app.bajoExtra
513
- const { recordGet } = this.app.dobo
514
523
  const options = { forceNoHidden: true, noHook: true, noCache: true, attachment: true, mimeType: true }
515
- const resp = await recordGet('SumbaUser', id, options)
524
+ const resp = await this.app.dobo.getModel('SumbaUser').getRecord(id, options)
516
525
  return await hash(resp.salt)
517
526
  }
518
527
  }
@@ -3,11 +3,9 @@ async function checkIconset (req, reply) {
3
3
  const mpa = this.app.waibuMpa
4
4
 
5
5
  if (!req.site) return
6
- if (mpa.iconsets.length === 1) req.iconset = mpa.iconsets[0].name
7
- else {
8
- const siteIconset = get(req, 'site.setting.waibuMpa.iconset')
9
- req.iconset = get(mpa, 'config.iconset.default', siteIconset)
10
- }
6
+ const siteIconset = get(req, 'site.setting.waibuMpa.iconset')
7
+ req.iconset = get(mpa, 'config.iconset.set', siteIconset)
8
+ req.iconset = req.iconset ?? 'default'
11
9
  }
12
10
 
13
11
  export default checkIconset
package/lib/check-team.js CHANGED
File without changes
@@ -3,12 +3,9 @@ async function checkTheme (req, reply) {
3
3
  const mpa = this.app.waibuMpa
4
4
 
5
5
  if (!req.site) return
6
- if (mpa.themes.length === 1) req.theme = mpa.themes[0].name
7
- else {
8
- const siteTheme = get(req, 'site.setting.waibuMpa.theme')
9
- req.theme = get(mpa, 'config.theme.set', siteTheme)
10
- req.theme = req.theme ?? mpa.themes[0].name
11
- }
6
+ const siteTheme = get(req, 'site.setting.waibuMpa.theme')
7
+ req.theme = get(mpa, 'config.theme.set', siteTheme)
8
+ req.theme = req.theme ?? 'default'
12
9
  }
13
10
 
14
11
  export default checkTheme
@@ -12,6 +12,7 @@ async function setUser (req) {
12
12
  if (user) req.user = user
13
13
  else req.session.userId = null
14
14
  } catch (err) {
15
+ console.log(err)
15
16
  req.session.userId = null
16
17
  }
17
18
  }
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,5 +1,5 @@
1
1
  async function resetToken (salt) {
2
- const { generateId } = this.app.bajo
2
+ const { generateId } = this.app.lib.aneka
3
3
  const { hash } = this.app.bajoExtra
4
4
  salt = salt ?? generateId()
5
5
  const token = await hash(await hash(salt))
File without changes
package/logo.png CHANGED
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sumba",
3
- "version": "2.0.1",
3
+ "version": "2.1.1",
4
4
  "description": "Biz Suite for Bajo Framework",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -9,7 +9,9 @@
9
9
  },
10
10
  "type": "module",
11
11
  "bajo": {
12
- "type": "plugin"
12
+ "type": "plugin",
13
+ "alias": "sumba",
14
+ "dependencies": ["bajo-extra", "bajo-common-db", "bajo-config", "bajo-markdown"]
13
15
  },
14
16
  "repository": {
15
17
  "type": "git",
@@ -29,8 +31,8 @@
29
31
  },
30
32
  "homepage": "https://github.com/ardhi/sumba#readme",
31
33
  "dependencies": {
32
- "joi-password": "^4.2.0",
33
- "slug": "^10.0.0"
34
+ "joi-password": "^4.3.0",
35
+ "slug": "^11.0.1"
34
36
  },
35
37
  "devDependencies": {
36
38
  "clean-jsdoc-theme": "^4.3.0",
@@ -0,0 +1,10 @@
1
+ # Changes
2
+
3
+ ## 2026-01-13
4
+
5
+ - [2.1.1] Bug fix on waibuMpa's widgeting system
6
+
7
+ ## 2026-01-01
8
+
9
+ - [2.1.0] Ported to match ```bajo@2.2.x``` & ```dobo@2.2.x``` specs
10
+ - [2.1.0] Upgrade to ```slug@11.0.1```
package/wiki/CONFIG.md CHANGED
File without changes
File without changes
package/wiki/DEV-GUIDE.md CHANGED
File without changes
package/wiki/ECOSYSTEM.md CHANGED
File without changes
File without changes
File without changes
@@ -1,8 +0,0 @@
1
- import { handler } from './dobo@before-record-find.js'
2
-
3
- const doboBeforeRecordCount = {
4
- level: 1000,
5
- handler
6
- }
7
-
8
- export default doboBeforeRecordCount
@@ -1,8 +0,0 @@
1
- import { handler } from './dobo@before-record-find.js'
2
-
3
- const doboBeforeRecordFindOne = {
4
- level: 1000,
5
- handler
6
- }
7
-
8
- export default doboBeforeRecordFindOne
@@ -1,23 +0,0 @@
1
- import { rebuildFilter } from './dobo@before-record-find.js'
2
-
3
- export async function checker (model, id, options = {}) {
4
- const { recordFind } = this.app.dobo
5
- const { req } = options
6
-
7
- if (options.noAutoFilter || !req) return
8
- const filter = await rebuildFilter.call(this, model, {}, req)
9
- if (filter.query.$and) filter.query.$and.push({ id })
10
- else filter.query.id = id
11
- filter.limit = 1
12
- const rows = await recordFind(model, filter, { noCount: true })
13
- if (rows.length === 0) throw this.error('recordNotFound%s%s', id, model, { statusCode: 404 })
14
- }
15
-
16
- const doboBeforeRecordGet = {
17
- level: 1000,
18
- handler: async function (model, id, options) {
19
- await checker.call(this, model, id, options)
20
- }
21
- }
22
-
23
- export default doboBeforeRecordGet
@@ -1,10 +0,0 @@
1
- import { checker } from './dobo@before-record-get.js'
2
-
3
- const doboBeforeRecordRemove = {
4
- level: 1000,
5
- handler: async function (model, id, options = {}) {
6
- await checker.call(this, model, id, options.req)
7
- }
8
- }
9
-
10
- export default doboBeforeRecordRemove
@@ -1,10 +0,0 @@
1
- import { checker } from './dobo@before-record-get.js'
2
-
3
- const doboBeforeRecordUpdate = {
4
- level: 1000,
5
- handler: async function (model, id, body, options = {}) {
6
- await checker.call(this, model, id, options)
7
- }
8
- }
9
-
10
- export default doboBeforeRecordUpdate
@@ -1,3 +0,0 @@
1
- {
2
- "feature": ["sumba.category", "sumba.siteId"]
3
- }
@@ -1,20 +0,0 @@
1
- {
2
- "properties": [
3
- "firstName::50:true:true",
4
- "lastName::50:true:true",
5
- "email::50:true:true",
6
- "cat::50:true",
7
- "subject::255::true",
8
- "message:text"
9
- ],
10
- "feature": {
11
- "sumba.status": {
12
- "default": "NEW",
13
- "values": ["NEW", "ACK"]
14
- },
15
- "sumba.userId": true,
16
- "sumba.siteId": true,
17
- "createdAt": true,
18
- "updatedAt": true
19
- }
20
- }
@@ -1,24 +0,0 @@
1
- {
2
- "properties": [
3
- "description::50:true",
4
- "file:text:::true",
5
- "type::20:true",
6
- "jobQueue:object",
7
- {
8
- "name": "size",
9
- "type": "integer",
10
- "default": 0,
11
- "index": true
12
- }
13
- ],
14
- "feature": {
15
- "sumba.siteId": true,
16
- "sumba.userId": true,
17
- "createdAt": true,
18
- "updatedAt": true,
19
- "sumba.status": {
20
- "default": "INQUEUE",
21
- "values": ["INQUEUE", "PROCESSING", "COMPLETE", "FAIL"]
22
- }
23
- }
24
- }
@@ -1,8 +0,0 @@
1
- {
2
- "properties": [
3
- "ns::50:true:true",
4
- "key::50:true:true",
5
- "value:text"
6
- ],
7
- "feature": ["sumba.siteId", "updatedAt"]
8
- }
@@ -1,19 +0,0 @@
1
- {
2
- "properties": [
3
- "alias::20::true",
4
- "name::50:true:true"
5
- ],
6
- "indexes": [{
7
- "fields": ["alias", "siteId"],
8
- "unique": true
9
- }],
10
- "feature": {
11
- "createdAt": true,
12
- "updatedAt": true,
13
- "sumba.siteId": true,
14
- "sumba.status": {
15
- "default": "ENABLED",
16
- "values": ["ENABLED", "DISABLED"]
17
- }
18
- }
19
- }
@@ -1,3 +0,0 @@
1
- {
2
- "feature": ["sumba.category", "sumba.siteId"]
3
- }
@@ -1,7 +0,0 @@
1
- {
2
- "properties": [
3
- "masterId::255:true:true",
4
- "message:text"
5
- ],
6
- "feature": ["createdAt", "sumba.userId", "sumba.siteId"]
7
- }
@@ -1,17 +0,0 @@
1
- {
2
- "properties": [
3
- "subject::255:true:true",
4
- "cat::50:true",
5
- "message:text:::true"
6
- ],
7
- "feature": {
8
- "createdAt": true,
9
- "updatedAt": true,
10
- "sumba.siteId": true,
11
- "sumba.userId": true,
12
- "sumba.status": {
13
- "default": "OPEN",
14
- "values": ["OPEN", "CLOSED"]
15
- }
16
- }
17
- }