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
|
@@ -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 {
|
|
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
|
|
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 {
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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
|
-
|
|
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')
|
|
214
|
-
|
|
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
|
|
221
|
-
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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 {
|
|
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
|
|
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
|
|
524
|
+
const resp = await this.app.dobo.getModel('SumbaUser').getRecord(id, options)
|
|
516
525
|
return await hash(resp.salt)
|
|
517
526
|
}
|
|
518
527
|
}
|
package/lib/check-iconset.js
CHANGED
|
@@ -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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
package/lib/check-theme.js
CHANGED
|
@@ -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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
package/lib/check-user-id.js
CHANGED
package/lib/collect-redirects.js
CHANGED
|
File without changes
|
package/lib/collect-routes.js
CHANGED
|
File without changes
|
package/lib/collect-team.js
CHANGED
|
File without changes
|
package/lib/lat-lng-hook.js
CHANGED
|
File without changes
|
package/lib/password-rule.js
CHANGED
|
File without changes
|
package/lib/reset-token.js
CHANGED
package/lib/token-schema.js
CHANGED
|
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.
|
|
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.
|
|
33
|
-
"slug": "^
|
|
34
|
+
"joi-password": "^4.3.0",
|
|
35
|
+
"slug": "^11.0.1"
|
|
34
36
|
},
|
|
35
37
|
"devDependencies": {
|
|
36
38
|
"clean-jsdoc-theme": "^4.3.0",
|
package/wiki/CHANGES.md
ADDED
package/wiki/CONFIG.md
CHANGED
|
File without changes
|
package/wiki/CONTRIBUTING.md
CHANGED
|
File without changes
|
package/wiki/DEV-GUIDE.md
CHANGED
|
File without changes
|
package/wiki/ECOSYSTEM.md
CHANGED
|
File without changes
|
package/wiki/GETTING-STARTED.md
CHANGED
|
File without changes
|
package/wiki/USER-GUIDE.md
CHANGED
|
File without changes
|
|
@@ -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,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,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,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
|
-
}
|