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.
- package/.github/FUNDING.yml +0 -0
- package/.github/workflows/repo-lockdown.yml +0 -0
- package/.jsdoc.conf.json +0 -0
- package/LICENSE +0 -0
- package/README.md +0 -0
- package/docs/Sumba.html +0 -0
- package/docs/data/search.json +0 -0
- package/docs/fonts/Inconsolata-Regular.ttf +0 -0
- package/docs/fonts/OpenSans-Regular.ttf +0 -0
- package/docs/fonts/WorkSans-Bold.ttf +0 -0
- package/docs/global.html +0 -0
- package/docs/index.html +0 -0
- package/docs/index.js.html +40 -28
- package/docs/scripts/core.js +0 -0
- package/docs/scripts/core.min.js +0 -0
- package/docs/scripts/resize.js +0 -0
- package/docs/scripts/search.js +0 -0
- package/docs/scripts/search.min.js +0 -0
- package/docs/scripts/third-party/Apache-License-2.0.txt +0 -0
- package/docs/scripts/third-party/fuse.js +0 -0
- package/docs/scripts/third-party/hljs-line-num-original.js +0 -0
- package/docs/scripts/third-party/hljs-line-num.js +0 -0
- package/docs/scripts/third-party/hljs-original.js +0 -0
- package/docs/scripts/third-party/hljs.js +0 -0
- package/docs/scripts/third-party/popper.js +0 -0
- package/docs/scripts/third-party/tippy.js +0 -0
- package/docs/scripts/third-party/tocbot.js +0 -0
- package/docs/scripts/third-party/tocbot.min.js +0 -0
- package/docs/static/bitcoin.jpeg +0 -0
- package/docs/static/home.md +0 -0
- package/docs/static/logo-ecosystem.png +0 -0
- package/docs/static/logo.png +0 -0
- package/docs/styles/clean-jsdoc-theme-base.css +0 -0
- package/docs/styles/clean-jsdoc-theme-dark.css +0 -0
- package/docs/styles/clean-jsdoc-theme-light.css +0 -0
- package/docs/styles/clean-jsdoc-theme-scrollbar.css +0 -0
- package/docs/styles/clean-jsdoc-theme-without-scrollbar.min.css +0 -0
- package/docs/styles/clean-jsdoc-theme.min.css +0 -0
- package/extend/bajo/hook/{dobo.sumba-contact-form@after-record-create.js → dobo.sumba-contact-form@after-create-record.js} +2 -2
- package/extend/bajo/hook/{dobo.sumba-contact-form@before-record-create.js → dobo.sumba-contact-form@before-create-record.js} +2 -2
- package/extend/bajo/hook/{dobo.sumba-user@after-record-create.js → dobo.sumba-user@after-create-record.js} +2 -2
- package/extend/bajo/hook/dobo.sumba-user@after-record-validation.js +2 -2
- package/extend/bajo/hook/{dobo.sumba-user@after-record-update.js → dobo.sumba-user@after-update-record.js} +2 -2
- package/extend/bajo/hook/{dobo.sumba-user@before-record-create.js → dobo.sumba-user@before-create-record.js} +2 -2
- package/extend/bajo/hook/dobo.sumba-user@before-record-validation.js +2 -2
- package/extend/bajo/hook/{dobo.sumba-user@before-record-update.js → dobo.sumba-user@before-update-record.js} +2 -2
- package/extend/bajo/hook/dobo@before-count-record.js +8 -0
- package/extend/bajo/hook/{dobo@before-record-create.js → dobo@before-create-record.js} +5 -5
- package/extend/bajo/hook/dobo@before-find-one-record.js +8 -0
- package/extend/bajo/hook/{dobo@before-record-find.js → dobo@before-find-record.js} +9 -9
- package/extend/bajo/hook/dobo@before-get-record.js +23 -0
- package/extend/bajo/hook/dobo@before-remove-record.js +10 -0
- package/extend/bajo/hook/dobo@before-update-record.js +10 -0
- package/extend/bajo/hook/waibu-mpa.sumba@after-build-locals.js +0 -0
- package/extend/bajo/hook/waibu-mpa@pre-parsing.js +0 -0
- package/extend/bajo/hook/waibu-rest-api@pre-parsing.js +0 -0
- package/extend/bajo/hook/waibu-static@pre-parsing.js +0 -0
- package/extend/bajo/hook/waibu@after-app-boot.js +0 -0
- package/extend/bajo/hook/waibu@after-create-context.js +0 -0
- package/extend/bajo/hook/waibu@on-request.js +0 -0
- package/extend/bajo/intl/en-US.json +1 -0
- package/extend/bajo/intl/id.json +0 -0
- package/extend/bajoTemplate/layout/centered.html +0 -0
- package/extend/bajoTemplate/layout/default.html +0 -0
- package/extend/bajoTemplate/layout/error.html +0 -0
- package/extend/bajoTemplate/layout/info.html +0 -0
- package/extend/bajoTemplate/partial/403.html +0 -0
- package/extend/bajoTemplate/partial/_admin/reset-user-password.html +0 -0
- package/extend/bajoTemplate/partial/_mail/help-contact-form.html +0 -0
- package/extend/bajoTemplate/partial/_mail/help-contact-form.id.html +0 -0
- package/extend/bajoTemplate/partial/_mail/mystuff-change-password.html +0 -0
- package/extend/bajoTemplate/partial/_mail/mystuff-change-password.id.html +0 -0
- package/extend/bajoTemplate/partial/_mail/mystuff-reset-api-key.html +0 -0
- package/extend/bajoTemplate/partial/_mail/mystuff-reset-api-key.id.html +0 -0
- package/extend/bajoTemplate/partial/_mail/user-activation-success.html +0 -0
- package/extend/bajoTemplate/partial/_mail/user-activation-success.id.html +0 -0
- package/extend/bajoTemplate/partial/_mail/user-forgot-password-changed.html +0 -0
- package/extend/bajoTemplate/partial/_mail/user-forgot-password-changed.id.html +0 -0
- package/extend/bajoTemplate/partial/_mail/user-forgot-password-link.html +0 -0
- package/extend/bajoTemplate/partial/_mail/user-forgot-password-link.id.html +0 -0
- package/extend/bajoTemplate/partial/_mail/user-signup-success-active.html +0 -0
- package/extend/bajoTemplate/partial/_mail/user-signup-success-active.id.html +0 -0
- package/extend/bajoTemplate/partial/_mail/user-signup-success.html +0 -0
- package/extend/bajoTemplate/partial/_mail/user-signup-success.id.html +0 -0
- package/extend/bajoTemplate/partial/api-key-modal.html +0 -0
- package/extend/bajoTemplate/partial/app-launcher.html +0 -0
- package/extend/bajoTemplate/partial/help/contact-form/form.html +0 -0
- package/extend/bajoTemplate/partial/help/contact-form/success.html +0 -0
- package/extend/bajoTemplate/partial/help/trouble-tickets/add.html +0 -0
- package/extend/bajoTemplate/partial/help/trouble-tickets/details.html +0 -0
- package/extend/bajoTemplate/partial/help/trouble-tickets/list.html +0 -0
- package/extend/bajoTemplate/partial/layout/address.html +0 -0
- package/extend/bajoTemplate/partial/layout/breadcrumb.html +0 -0
- package/extend/bajoTemplate/partial/layout/footer.html +0 -0
- package/extend/bajoTemplate/partial/layout/more-info.html +0 -0
- package/extend/bajoTemplate/partial/layout/more-info.id.html +0 -0
- package/extend/bajoTemplate/partial/layout/navbar.html +0 -0
- package/extend/bajoTemplate/partial/layout/sidebar.html +0 -0
- package/extend/bajoTemplate/partial/layout/socmed.html +0 -0
- package/extend/bajoTemplate/partial/list-item/change-password.html +0 -0
- package/extend/bajoTemplate/partial/list-item/forgot-password.html +0 -0
- package/extend/bajoTemplate/partial/list-item/goto-home.html +0 -0
- package/extend/bajoTemplate/partial/list-item/member-links.html +0 -0
- package/extend/bajoTemplate/partial/list-item/oauth-signin.html +0 -0
- package/extend/bajoTemplate/partial/list-item/signin.html +0 -0
- package/extend/bajoTemplate/partial/list-item/signout.html +0 -0
- package/extend/bajoTemplate/partial/list-item/user-signup.html +0 -0
- package/extend/bajoTemplate/partial/list-item/your-profile.html +0 -0
- package/extend/bajoTemplate/partial/signin.html +0 -0
- package/extend/bajoTemplate/partial/signout.html +0 -0
- package/extend/bajoTemplate/partial/user/activation.html +0 -0
- package/extend/bajoTemplate/partial/user/forgot-password-nomail.id.md +0 -0
- package/extend/bajoTemplate/partial/user/forgot-password-nomail.md +0 -0
- package/extend/bajoTemplate/partial/user/forgot-password.html +0 -0
- package/extend/bajoTemplate/partial/user/fpl-invalid.html +0 -0
- package/extend/bajoTemplate/partial/user/fpl-invalid.id.md +0 -0
- package/extend/bajoTemplate/partial/user/fpl-invalid.md +0 -0
- package/extend/bajoTemplate/partial/user/fpl.html +0 -0
- package/extend/bajoTemplate/partial/user/signup/form.html +0 -0
- package/extend/bajoTemplate/partial/user/signup/success-mail.id.md +0 -0
- package/extend/bajoTemplate/partial/user/signup/success-mail.md +0 -0
- package/extend/bajoTemplate/partial/user/signup/success-nomail.id.md +0 -0
- package/extend/bajoTemplate/partial/user/signup/success-nomail.md +0 -0
- package/extend/bajoTemplate/partial/user/signup/success.html +0 -0
- package/extend/bajoTemplate/partial/your-stuff/change-password.html +0 -0
- package/extend/bajoTemplate/partial/your-stuff/profile/edit.html +0 -0
- package/extend/bajoTemplate/partial/your-stuff/profile/view.html +0 -0
- package/extend/bajoTemplate/partial/your-stuff/reset-api-key.html +0 -0
- package/extend/bajoTemplate/template/403.html +0 -0
- package/extend/bajoTemplate/template/_admin/reset-user-password.html +0 -0
- package/extend/bajoTemplate/template/_mail/help-contact-form.html +0 -0
- package/extend/bajoTemplate/template/_mail/mystuff-change-password.html +0 -0
- package/extend/bajoTemplate/template/_mail/mystuff-reset-api-key.html +0 -0
- package/extend/bajoTemplate/template/_mail/user-activation-success.html +0 -0
- package/extend/bajoTemplate/template/_mail/user-forgot-password-changed.html +0 -0
- package/extend/bajoTemplate/template/_mail/user-forgot-password-link.html +0 -0
- package/extend/bajoTemplate/template/_mail/user-signup-success-active.html +0 -0
- package/extend/bajoTemplate/template/_mail/user-signup-success.html +0 -0
- package/extend/bajoTemplate/template/help/contact-form/form.html +0 -0
- package/extend/bajoTemplate/template/help/contact-form/success.html +0 -0
- package/extend/bajoTemplate/template/help/trouble-tickets/add.html +0 -0
- package/extend/bajoTemplate/template/help/trouble-tickets/details.html +0 -0
- package/extend/bajoTemplate/template/help/trouble-tickets/list.html +0 -0
- package/extend/bajoTemplate/template/info/about-us.md +0 -0
- package/extend/bajoTemplate/template/info/cookie-policy.md +0 -0
- package/extend/bajoTemplate/template/info/privacy.md +0 -0
- package/extend/bajoTemplate/template/info/terms-conditions.md +0 -0
- package/extend/bajoTemplate/template/signin.html +0 -0
- package/extend/bajoTemplate/template/signout.html +0 -0
- package/extend/bajoTemplate/template/user/activation.html +0 -0
- package/extend/bajoTemplate/template/user/forgot-password.html +0 -0
- package/extend/bajoTemplate/template/user/fpl-invalid.html +0 -0
- package/extend/bajoTemplate/template/user/fpl.html +0 -0
- package/extend/bajoTemplate/template/user/signup/form.html +0 -0
- package/extend/bajoTemplate/template/user/signup/success.html +0 -0
- package/extend/bajoTemplate/template/your-stuff/change-password.html +0 -0
- package/extend/bajoTemplate/template/your-stuff/profile/edit.html +0 -0
- package/extend/bajoTemplate/template/your-stuff/profile/view.html +0 -0
- package/extend/bajoTemplate/template/your-stuff/reset-api-key.html +0 -0
- package/extend/dobo/feature/address.js +1 -1
- package/extend/dobo/feature/category.js +0 -0
- package/extend/dobo/feature/country.js +1 -1
- package/extend/dobo/feature/email.js +0 -0
- package/extend/dobo/feature/lat-lng.js +2 -2
- package/extend/dobo/feature/lat.js +2 -2
- package/extend/dobo/feature/lng.js +2 -2
- package/extend/dobo/feature/person-in-charge.js +0 -0
- package/extend/dobo/feature/phone.js +0 -0
- package/extend/dobo/feature/site-id.js +3 -3
- package/extend/dobo/feature/slug.js +5 -6
- package/extend/dobo/feature/social.js +0 -0
- package/extend/dobo/feature/status.js +1 -1
- package/extend/dobo/feature/team-id.js +3 -3
- package/extend/dobo/feature/ts.js +0 -0
- package/extend/dobo/feature/url.js +5 -5
- package/extend/dobo/feature/user-id.js +5 -5
- package/extend/dobo/fixture/contact-form-cat.json +0 -0
- package/extend/dobo/fixture/site.json +0 -4
- package/extend/dobo/fixture/team-user.json +0 -0
- package/extend/dobo/fixture/team.json +2 -1
- package/extend/dobo/fixture/ticket-cat.json +0 -0
- package/extend/dobo/fixture/user.json +0 -0
- package/extend/dobo/model/contact-form-cat.json +3 -0
- package/extend/dobo/model/contact-form.json +16 -0
- package/extend/dobo/model/download.json +19 -0
- package/extend/dobo/model/site-setting.json +8 -0
- package/extend/dobo/{schema → model}/site.json +4 -8
- package/extend/dobo/{schema → model}/team-user.json +5 -10
- package/extend/dobo/model/team.json +15 -0
- package/extend/dobo/model/ticket-cat.json +3 -0
- package/extend/dobo/model/ticket-detail.json +7 -0
- package/extend/dobo/model/ticket.json +18 -0
- package/extend/dobo/{schema → model}/user.json +14 -11
- package/extend/masohiSocketIo/middleware/server/auth.js +0 -0
- package/extend/sumba/route/anonymous.json +0 -0
- package/extend/sumba/route/secure.json +0 -0
- package/extend/waibuBootstrap/theme/component/{factory → widget}/nav-dropdown-user.js +5 -5
- package/extend/waibuDb/schema/contact-form-cat.json +0 -0
- package/extend/waibuDb/schema/contact-form.json +0 -0
- package/extend/waibuDb/schema/download.js +1 -1
- package/extend/waibuDb/schema/site.json +2 -2
- package/extend/waibuDb/schema/team-user.js +2 -2
- package/extend/waibuDb/schema/team.json +0 -0
- package/extend/waibuDb/schema/ticket-cat.json +0 -0
- package/extend/waibuDb/schema/user.json +0 -0
- package/extend/waibuMpa/extend/waibuAdmin/route/contact-form/@action.js +0 -0
- package/extend/waibuMpa/extend/waibuAdmin/route/contact-form-cat/@action.js +0 -0
- package/extend/waibuMpa/extend/waibuAdmin/route/download/@action.js +0 -0
- package/extend/waibuMpa/extend/waibuAdmin/route/reset-user-password.js +3 -4
- package/extend/waibuMpa/extend/waibuAdmin/route/session/@action.js +0 -0
- package/extend/waibuMpa/extend/waibuAdmin/route/site.js +25 -0
- package/extend/waibuMpa/extend/waibuAdmin/route/team/@action.js +0 -0
- package/extend/waibuMpa/extend/waibuAdmin/route/team-user/@action.js +0 -0
- package/extend/waibuMpa/extend/waibuAdmin/route/ticket/@action.js +0 -0
- package/extend/waibuMpa/extend/waibuAdmin/route/ticket-cat/@action.js +0 -0
- package/extend/waibuMpa/extend/waibuAdmin/route/user/@action.js +0 -0
- package/extend/waibuMpa/route/access-token.js +1 -2
- package/extend/waibuMpa/route/help/contact-form.js +3 -3
- package/extend/waibuMpa/route/help/trouble-tickets/add.js +3 -3
- package/extend/waibuMpa/route/help/trouble-tickets/details/@id.js +4 -4
- package/extend/waibuMpa/route/help/trouble-tickets/list.js +2 -2
- package/extend/waibuMpa/route/info/@item.js +0 -0
- package/extend/waibuMpa/route/signin.js +0 -0
- package/extend/waibuMpa/route/signout.js +1 -14
- package/extend/waibuMpa/route/user/activation.js +3 -5
- package/extend/waibuMpa/route/user/forgot-password/@fpl.js +4 -5
- package/extend/waibuMpa/route/user/forgot-password.js +2 -4
- package/extend/waibuMpa/route/user/signup.js +3 -3
- package/extend/waibuMpa/route/your-stuff/change-password.js +3 -4
- package/extend/waibuMpa/route/your-stuff/download/@action.js +0 -0
- package/extend/waibuMpa/route/your-stuff/download/get.js +0 -0
- package/extend/waibuMpa/route/your-stuff/profile/edit.js +3 -3
- package/extend/waibuMpa/route/your-stuff/profile.js +2 -2
- package/extend/waibuMpa/route/your-stuff/reset-api-key.js +6 -7
- package/extend/waibuRestApi/route/info/get.js +2 -2
- package/extend/waibuRestApi/route/manage/team/model-builder.json +0 -0
- package/extend/waibuRestApi/route/manage/user/model-builder.json +0 -0
- package/extend/waibuRestApi/route/user/access-token/@type/create.js +0 -0
- package/extend/waibuRestApi/route/user/api-key/get.js +1 -2
- package/extend/waibuRestApi/route/your-stuff/api-key/get.js +1 -2
- package/extend/waibuRestApi/route/your-stuff/api-key/update.js +5 -6
- package/extend/waibuRestApi/route/your-stuff/change-password/update.js +2 -3
- package/extend/waibuRestApi/route/your-stuff/profile/get.js +2 -2
- package/extend/waibuRestApi/route/your-stuff/profile/update.js +2 -2
- package/extend/waibuSocketIo/middleware/server/auth.js +1 -2
- package/extend/waibuStatic/asset/user-profile.png +0 -0
- package/index.js +39 -30
- package/lib/check-iconset.js +3 -5
- package/lib/check-team.js +0 -0
- package/lib/check-theme.js +3 -6
- package/lib/check-user-id.js +1 -0
- package/lib/collect-redirects.js +0 -0
- package/lib/collect-routes.js +0 -0
- package/lib/collect-team.js +0 -0
- package/lib/lat-lng-hook.js +0 -0
- package/lib/password-rule.js +0 -0
- package/lib/reset-token.js +1 -1
- package/lib/token-schema.js +0 -0
- package/logo.png +0 -0
- package/package.json +6 -4
- package/wiki/CHANGES.md +10 -0
- package/wiki/CONFIG.md +0 -0
- package/wiki/CONTRIBUTING.md +0 -0
- package/wiki/DEV-GUIDE.md +0 -0
- package/wiki/ECOSYSTEM.md +0 -0
- package/wiki/GETTING-STARTED.md +0 -0
- package/wiki/USER-GUIDE.md +0 -0
- package/extend/bajo/hook/dobo@before-record-count.js +0 -8
- package/extend/bajo/hook/dobo@before-record-find-one.js +0 -8
- package/extend/bajo/hook/dobo@before-record-get.js +0 -23
- package/extend/bajo/hook/dobo@before-record-remove.js +0 -10
- package/extend/bajo/hook/dobo@before-record-update.js +0 -10
- package/extend/dobo/schema/contact-form-cat.json +0 -3
- package/extend/dobo/schema/contact-form.json +0 -20
- package/extend/dobo/schema/download.json +0 -24
- package/extend/dobo/schema/site-setting.json +0 -8
- package/extend/dobo/schema/team.json +0 -19
- package/extend/dobo/schema/ticket-cat.json +0 -3
- package/extend/dobo/schema/ticket-detail.json +0 -7
- package/extend/dobo/schema/ticket.json +0 -17
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
async function navDropdownUser () {
|
|
2
|
-
return class NavDropdownUser extends this.
|
|
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.
|
|
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.
|
|
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
|
|
@@ -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", "
|
|
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.
|
|
14
|
+
return rec._ref.user.username
|
|
15
15
|
},
|
|
16
16
|
team: (val, rec) => {
|
|
17
|
-
return rec.
|
|
17
|
+
return rec._ref.team.name
|
|
18
18
|
}
|
|
19
19
|
},
|
|
20
20
|
widget: {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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
|
|
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
|
|
28
|
+
await model.updateRecord(rec.id, { password: req.body.password }, { req, reply })
|
|
30
29
|
form.password = ''
|
|
31
30
|
form.verifyPassword = ''
|
|
32
31
|
} catch (err) {
|
|
File without changes
|
|
@@ -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
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -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
|
|
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 {
|
|
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
|
|
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
|
|
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 {
|
|
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
|
|
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
|
|
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 {
|
|
7
|
+
const { createRecord, findRecord, getSchemaExt } = this.app.waibuDb
|
|
8
8
|
const { schema } = await getSchemaExt(model, 'list')
|
|
9
9
|
|
|
10
|
-
const master = (await
|
|
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
|
|
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
|
|
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 {
|
|
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
|
|
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
|
|
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
|
|
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 {
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
6
|
-
const {
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 {
|
|
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
|
|
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
|
|
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 {
|
|
5
|
+
const { getRecord } = this.app.waibuDb
|
|
6
6
|
const options = { forceNoHidden: true, noHook: true, noCache: true, attachment: true, mimeType: true }
|
|
7
|
-
const resp = await
|
|
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
|
|
8
|
-
const {
|
|
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
|
|
26
|
-
const verified = await bcrypt.compare(
|
|
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
|
|
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 {
|
|
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
|
|
11
|
+
return await getRecord({ model, req, reply, id: req.site.id, options })
|
|
12
12
|
}
|
|
13
13
|
return { schema, handler }
|
|
14
14
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -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
|
|
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
|
|
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
|
|
26
|
-
const {
|
|
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
|
|
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
|
|
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
|
|
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
|
|
46
|
+
await this.app.dobo.getModel(model).updateRecord(req.user.id, input)
|
|
48
47
|
return {}
|
|
49
48
|
}
|
|
50
49
|
|