@budibase/worker 2.1.43-alpha.1 → 2.1.43
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/package.json +24 -14
- package/{src/tests/jestSetup.ts → scripts/jestSetup.js} +3 -12
- package/scripts/localdomain.js +7 -33
- package/src/api/controllers/global/auth.ts +43 -51
- package/src/api/controllers/global/{configs.ts → configs.js} +114 -119
- package/src/api/controllers/global/{email.ts → email.js} +5 -6
- package/src/api/controllers/global/roles.js +68 -0
- package/src/api/controllers/global/self.ts +2 -2
- package/src/api/controllers/global/users.ts +2 -4
- package/src/api/controllers/global/{workspaces.ts → workspaces.js} +18 -15
- package/src/api/controllers/system/{environment.ts → environment.js} +2 -3
- package/src/api/controllers/system/restore.ts +1 -1
- package/src/api/controllers/system/{status.ts → status.js} +3 -4
- package/src/api/controllers/system/tenants.ts +51 -8
- package/src/api/index.ts +8 -31
- package/src/api/routes/global/{auth.ts → auth.js} +48 -31
- package/src/api/routes/global/{configs.ts → configs.js} +23 -22
- package/src/api/routes/global/{email.ts → email.js} +10 -9
- package/src/api/routes/global/license.ts +1 -1
- package/src/api/routes/global/roles.js +12 -0
- package/src/api/routes/global/self.ts +2 -2
- package/src/api/routes/global/templates.ts +4 -4
- package/src/api/routes/global/tests/auth.spec.ts +64 -134
- package/src/api/routes/global/tests/configs.spec.ts +35 -34
- package/src/api/routes/global/tests/email.spec.ts +3 -4
- package/src/api/routes/global/tests/realEmail.spec.ts +3 -2
- package/src/api/routes/global/tests/self.spec.ts +4 -3
- package/src/api/routes/global/tests/users.spec.ts +45 -61
- package/src/api/routes/global/{users.ts → users.js} +26 -28
- package/src/api/routes/global/{workspaces.ts → workspaces.js} +10 -9
- package/src/api/routes/index.ts +1 -2
- package/src/api/routes/system/accounts.ts +1 -1
- package/src/api/routes/system/environment.js +8 -0
- package/src/api/routes/system/migrations.ts +1 -1
- package/src/api/routes/system/restore.ts +1 -1
- package/src/api/routes/system/status.js +8 -0
- package/src/api/routes/system/tenants.js +12 -0
- package/src/api/routes/system/tests/accounts.spec.ts +6 -5
- package/src/api/routes/validation/users.ts +3 -3
- package/src/constants/{index.ts → index.js} +64 -57
- package/src/constants/templates/{index.ts → index.js} +19 -23
- package/src/db/index.js +11 -0
- package/src/environment.ts +7 -9
- package/src/index.ts +16 -15
- package/src/middleware/{cloudRestricted.ts → cloudRestricted.js} +4 -5
- package/src/tests/TestConfiguration.ts +50 -99
- package/src/tests/api/accounts.ts +8 -5
- package/src/tests/api/auth.ts +6 -3
- package/src/tests/api/configs.ts +8 -15
- package/src/tests/api/email.ts +6 -3
- package/src/tests/api/index.ts +0 -15
- package/src/tests/api/self.ts +6 -11
- package/src/tests/api/users.ts +6 -38
- package/src/tests/controllers.js +7 -0
- package/src/tests/index.ts +1 -5
- package/src/tests/structures/accounts.ts +24 -0
- package/src/tests/structures/{configs.ts → configs.js} +11 -11
- package/src/tests/structures/index.ts +3 -5
- package/src/tests/structures/users.ts +0 -1
- package/src/utilities/appService.js +33 -0
- package/src/utilities/{email.ts → email.js} +45 -78
- package/src/utilities/fileSystem.js +5 -0
- package/src/utilities/{index.ts → index.js} +1 -1
- package/src/utilities/{redis.ts → redis.js} +24 -29
- package/src/utilities/templates.js +49 -0
- package/src/utilities/users.js +17 -0
- package/tsconfig.build.json +3 -2
- package/tsconfig.json +1 -3
- package/__mocks__/aws-sdk.ts +0 -15
- package/__mocks__/oauth.ts +0 -57
- package/coverage/clover.xml +0 -2157
- package/coverage/coverage-final.json +0 -78
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +0 -431
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -196
- package/coverage/lcov-report/src/api/controllers/global/auth.ts.html +0 -925
- package/coverage/lcov-report/src/api/controllers/global/configs.ts.html +0 -1405
- package/coverage/lcov-report/src/api/controllers/global/email.ts.html +0 -196
- package/coverage/lcov-report/src/api/controllers/global/index.html +0 -236
- package/coverage/lcov-report/src/api/controllers/global/license.ts.html +0 -187
- package/coverage/lcov-report/src/api/controllers/global/roles.ts.html +0 -283
- package/coverage/lcov-report/src/api/controllers/global/self.ts.html +0 -577
- package/coverage/lcov-report/src/api/controllers/global/templates.ts.html +0 -316
- package/coverage/lcov-report/src/api/controllers/global/users.ts.html +0 -796
- package/coverage/lcov-report/src/api/controllers/global/workspaces.ts.html +0 -244
- package/coverage/lcov-report/src/api/controllers/system/accounts.ts.html +0 -148
- package/coverage/lcov-report/src/api/controllers/system/environment.ts.html +0 -124
- package/coverage/lcov-report/src/api/controllers/system/index.html +0 -191
- package/coverage/lcov-report/src/api/controllers/system/migrations.ts.html +0 -124
- package/coverage/lcov-report/src/api/controllers/system/restore.ts.html +0 -124
- package/coverage/lcov-report/src/api/controllers/system/status.ts.html +0 -133
- package/coverage/lcov-report/src/api/controllers/system/tenants.ts.html +0 -154
- package/coverage/lcov-report/src/api/index.html +0 -116
- package/coverage/lcov-report/src/api/index.ts.html +0 -583
- package/coverage/lcov-report/src/api/routes/global/auth.ts.html +0 -349
- package/coverage/lcov-report/src/api/routes/global/configs.ts.html +0 -457
- package/coverage/lcov-report/src/api/routes/global/email.ts.html +0 -193
- package/coverage/lcov-report/src/api/routes/global/index.html +0 -236
- package/coverage/lcov-report/src/api/routes/global/license.ts.html +0 -124
- package/coverage/lcov-report/src/api/routes/global/roles.ts.html +0 -133
- package/coverage/lcov-report/src/api/routes/global/self.ts.html +0 -139
- package/coverage/lcov-report/src/api/routes/global/templates.ts.html +0 -196
- package/coverage/lcov-report/src/api/routes/global/users.ts.html +0 -433
- package/coverage/lcov-report/src/api/routes/global/workspaces.ts.html +0 -196
- package/coverage/lcov-report/src/api/routes/index.html +0 -116
- package/coverage/lcov-report/src/api/routes/index.ts.html +0 -196
- package/coverage/lcov-report/src/api/routes/system/accounts.ts.html +0 -142
- package/coverage/lcov-report/src/api/routes/system/environment.ts.html +0 -109
- package/coverage/lcov-report/src/api/routes/system/index.html +0 -191
- package/coverage/lcov-report/src/api/routes/system/migrations.ts.html +0 -142
- package/coverage/lcov-report/src/api/routes/system/restore.ts.html +0 -109
- package/coverage/lcov-report/src/api/routes/system/status.ts.html +0 -109
- package/coverage/lcov-report/src/api/routes/system/tenants.ts.html +0 -124
- package/coverage/lcov-report/src/api/routes/validation/index.html +0 -131
- package/coverage/lcov-report/src/api/routes/validation/index.ts.html +0 -88
- package/coverage/lcov-report/src/api/routes/validation/users.ts.html +0 -235
- package/coverage/lcov-report/src/constants/index.html +0 -116
- package/coverage/lcov-report/src/constants/index.ts.html +0 -613
- package/coverage/lcov-report/src/constants/templates/index.html +0 -116
- package/coverage/lcov-report/src/constants/templates/index.ts.html +0 -316
- package/coverage/lcov-report/src/db/index.html +0 -116
- package/coverage/lcov-report/src/db/index.ts.html +0 -115
- package/coverage/lcov-report/src/environment.ts.html +0 -373
- package/coverage/lcov-report/src/index.html +0 -131
- package/coverage/lcov-report/src/index.ts.html +0 -394
- package/coverage/lcov-report/src/middleware/cloudRestricted.ts.html +0 -139
- package/coverage/lcov-report/src/middleware/index.html +0 -116
- package/coverage/lcov-report/src/migrations/functions/globalInfoSyncUsers.ts.html +0 -145
- package/coverage/lcov-report/src/migrations/functions/index.html +0 -116
- package/coverage/lcov-report/src/migrations/index.html +0 -116
- package/coverage/lcov-report/src/migrations/index.ts.html +0 -271
- package/coverage/lcov-report/src/sdk/accounts/accounts.ts.html +0 -262
- package/coverage/lcov-report/src/sdk/accounts/index.html +0 -131
- package/coverage/lcov-report/src/sdk/accounts/index.ts.html +0 -88
- package/coverage/lcov-report/src/sdk/index.html +0 -116
- package/coverage/lcov-report/src/sdk/index.ts.html +0 -106
- package/coverage/lcov-report/src/sdk/users/events.ts.html +0 -577
- package/coverage/lcov-report/src/sdk/users/index.html +0 -146
- package/coverage/lcov-report/src/sdk/users/index.ts.html +0 -88
- package/coverage/lcov-report/src/sdk/users/users.ts.html +0 -1903
- package/coverage/lcov-report/src/tests/TestConfiguration.ts.html +0 -1051
- package/coverage/lcov-report/src/tests/api/accounts.ts.html +0 -160
- package/coverage/lcov-report/src/tests/api/auth.ts.html +0 -220
- package/coverage/lcov-report/src/tests/api/base.ts.html +0 -133
- package/coverage/lcov-report/src/tests/api/configs.ts.html +0 -226
- package/coverage/lcov-report/src/tests/api/email.ts.html +0 -148
- package/coverage/lcov-report/src/tests/api/environment.ts.html +0 -130
- package/coverage/lcov-report/src/tests/api/index.html +0 -296
- package/coverage/lcov-report/src/tests/api/index.ts.html +0 -205
- package/coverage/lcov-report/src/tests/api/migrations.ts.html +0 -151
- package/coverage/lcov-report/src/tests/api/restore.ts.html +0 -127
- package/coverage/lcov-report/src/tests/api/self.ts.html +0 -163
- package/coverage/lcov-report/src/tests/api/status.ts.html +0 -121
- package/coverage/lcov-report/src/tests/api/tenants.ts.html +0 -130
- package/coverage/lcov-report/src/tests/api/users.ts.html +0 -511
- package/coverage/lcov-report/src/tests/controllers.ts.html +0 -100
- package/coverage/lcov-report/src/tests/index.html +0 -146
- package/coverage/lcov-report/src/tests/index.ts.html +0 -139
- package/coverage/lcov-report/src/tests/mocks/email.js.html +0 -115
- package/coverage/lcov-report/src/tests/mocks/index.html +0 -131
- package/coverage/lcov-report/src/tests/mocks/index.ts.html +0 -106
- package/coverage/lcov-report/src/tests/structures/configs.ts.html +0 -313
- package/coverage/lcov-report/src/tests/structures/groups.ts.html +0 -118
- package/coverage/lcov-report/src/tests/structures/index.html +0 -161
- package/coverage/lcov-report/src/tests/structures/index.ts.html +0 -151
- package/coverage/lcov-report/src/tests/structures/users.ts.html +0 -196
- package/coverage/lcov-report/src/utilities/appService.ts.html +0 -181
- package/coverage/lcov-report/src/utilities/email.ts.html +0 -850
- package/coverage/lcov-report/src/utilities/fileSystem.ts.html +0 -100
- package/coverage/lcov-report/src/utilities/index.html +0 -206
- package/coverage/lcov-report/src/utilities/index.ts.html +0 -112
- package/coverage/lcov-report/src/utilities/redis.ts.html +0 -424
- package/coverage/lcov-report/src/utilities/templates.ts.html +0 -232
- package/coverage/lcov-report/src/utilities/users.ts.html +0 -133
- package/coverage/lcov.info +0 -3970
- package/jest.config.ts +0 -29
- package/src/api/controllers/global/roles.ts +0 -66
- package/src/api/routes/global/roles.ts +0 -16
- package/src/api/routes/global/tests/license.spec.ts +0 -31
- package/src/api/routes/global/tests/roles.spec.ts +0 -27
- package/src/api/routes/global/tests/templates.spec.ts +0 -35
- package/src/api/routes/global/tests/workspaces.spec.ts +0 -29
- package/src/api/routes/system/environment.ts +0 -8
- package/src/api/routes/system/status.ts +0 -8
- package/src/api/routes/system/tenants.ts +0 -13
- package/src/api/routes/system/tests/environment.spec.ts +0 -29
- package/src/api/routes/system/tests/migrations.spec.ts +0 -63
- package/src/api/routes/system/tests/restore.spec.ts +0 -36
- package/src/api/routes/system/tests/status.spec.ts +0 -48
- package/src/api/routes/system/tests/tenants.spec.ts +0 -61
- package/src/db/index.ts +0 -10
- package/src/middleware/tests/tenancy.spec.ts +0 -73
- package/src/tests/api/base.ts +0 -16
- package/src/tests/api/environment.ts +0 -15
- package/src/tests/api/migrations.ts +0 -22
- package/src/tests/api/restore.ts +0 -14
- package/src/tests/api/status.ts +0 -12
- package/src/tests/api/tenants.ts +0 -15
- package/src/tests/controllers.ts +0 -5
- package/src/utilities/appService.ts +0 -32
- package/src/utilities/fileSystem.ts +0 -5
- package/src/utilities/templates.ts +0 -49
- package/src/utilities/users.ts +0 -16
|
@@ -6,7 +6,7 @@ export async function systemRestored(ctx: BBContext) {
|
|
|
6
6
|
if (!env.SELF_HOSTED) {
|
|
7
7
|
ctx.throw(405, "This operation is not allowed in cloud.")
|
|
8
8
|
}
|
|
9
|
-
await cache.bustCache(cache.
|
|
9
|
+
await cache.bustCache(cache.CacheKeys.CHECKLIST)
|
|
10
10
|
ctx.body = {
|
|
11
11
|
message: "System prepared after restore.",
|
|
12
12
|
}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { BBContext } from "@budibase/types"
|
|
1
|
+
const accounts = require("@budibase/backend-core/accounts")
|
|
2
|
+
const env = require("../../../environment")
|
|
4
3
|
|
|
5
|
-
|
|
4
|
+
exports.fetch = async ctx => {
|
|
6
5
|
if (!env.SELF_HOSTED && !env.DISABLE_ACCOUNT_PORTAL) {
|
|
7
6
|
const status = await accounts.getStatus()
|
|
8
7
|
ctx.body = status
|
|
@@ -1,18 +1,61 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
const { StaticDatabases, doWithDB } = require("@budibase/backend-core/db")
|
|
2
|
+
const { getTenantId } = require("@budibase/backend-core/tenancy")
|
|
3
|
+
const { deleteTenant } = require("@budibase/backend-core/deprovision")
|
|
3
4
|
import { quotas } from "@budibase/pro"
|
|
4
5
|
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
|
|
6
|
+
export const exists = async (ctx: any) => {
|
|
7
|
+
const tenantId = ctx.request.params
|
|
8
|
+
ctx.body = {
|
|
9
|
+
exists: await doWithDB(
|
|
10
|
+
StaticDatabases.PLATFORM_INFO.name,
|
|
11
|
+
async (db: any) => {
|
|
12
|
+
let exists = false
|
|
13
|
+
try {
|
|
14
|
+
const tenantsDoc = await db.get(
|
|
15
|
+
StaticDatabases.PLATFORM_INFO.docs.tenants
|
|
16
|
+
)
|
|
17
|
+
if (tenantsDoc) {
|
|
18
|
+
exists = tenantsDoc.tenantIds.indexOf(tenantId) !== -1
|
|
19
|
+
}
|
|
20
|
+
} catch (err) {
|
|
21
|
+
// if error it doesn't exist
|
|
22
|
+
}
|
|
23
|
+
return exists
|
|
24
|
+
}
|
|
25
|
+
),
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export const fetch = async (ctx: any) => {
|
|
30
|
+
ctx.body = await doWithDB(
|
|
31
|
+
StaticDatabases.PLATFORM_INFO.name,
|
|
32
|
+
async (db: any) => {
|
|
33
|
+
let tenants = []
|
|
34
|
+
try {
|
|
35
|
+
const tenantsDoc = await db.get(
|
|
36
|
+
StaticDatabases.PLATFORM_INFO.docs.tenants
|
|
37
|
+
)
|
|
38
|
+
if (tenantsDoc) {
|
|
39
|
+
tenants = tenantsDoc.tenantIds
|
|
40
|
+
}
|
|
41
|
+
} catch (err) {
|
|
42
|
+
// if error it doesn't exist
|
|
43
|
+
}
|
|
44
|
+
return tenants
|
|
45
|
+
}
|
|
46
|
+
)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const _delete = async (ctx: any) => {
|
|
50
|
+
const tenantId = getTenantId()
|
|
8
51
|
|
|
9
|
-
if (tenantId !==
|
|
10
|
-
ctx.throw(403, "
|
|
52
|
+
if (ctx.params.tenantId !== tenantId) {
|
|
53
|
+
ctx.throw(403, "Unauthorized")
|
|
11
54
|
}
|
|
12
55
|
|
|
13
56
|
try {
|
|
57
|
+
await deleteTenant(tenantId)
|
|
14
58
|
await quotas.bustCache()
|
|
15
|
-
await deprovisioning.deleteTenant(tenantId)
|
|
16
59
|
ctx.status = 204
|
|
17
60
|
} catch (err) {
|
|
18
61
|
ctx.log.error(err)
|
package/src/api/index.ts
CHANGED
|
@@ -7,12 +7,11 @@ import { errors, auth, middleware } from "@budibase/backend-core"
|
|
|
7
7
|
import { APIError } from "@budibase/types"
|
|
8
8
|
|
|
9
9
|
const PUBLIC_ENDPOINTS = [
|
|
10
|
-
// deprecated
|
|
10
|
+
// old deprecated endpoints kept for backwards compat
|
|
11
11
|
{
|
|
12
12
|
route: "/api/admin/auth/google/callback",
|
|
13
13
|
method: "GET",
|
|
14
14
|
},
|
|
15
|
-
// deprecated single tenant sso callback
|
|
16
15
|
{
|
|
17
16
|
route: "/api/admin/auth/oidc/callback",
|
|
18
17
|
method: "GET",
|
|
@@ -45,19 +44,17 @@ const PUBLIC_ENDPOINTS = [
|
|
|
45
44
|
method: "POST",
|
|
46
45
|
},
|
|
47
46
|
{
|
|
48
|
-
route: "
|
|
47
|
+
route: "api/system/environment",
|
|
49
48
|
method: "GET",
|
|
50
49
|
},
|
|
51
50
|
{
|
|
52
|
-
route: "
|
|
51
|
+
route: "api/system/status",
|
|
53
52
|
method: "GET",
|
|
54
53
|
},
|
|
55
|
-
// TODO: This should be an internal api
|
|
56
54
|
{
|
|
57
55
|
route: "/api/global/users/tenant/:id",
|
|
58
56
|
method: "GET",
|
|
59
57
|
},
|
|
60
|
-
// TODO: This should be an internal api
|
|
61
58
|
{
|
|
62
59
|
route: "/api/system/restored",
|
|
63
60
|
method: "POST",
|
|
@@ -65,37 +62,17 @@ const PUBLIC_ENDPOINTS = [
|
|
|
65
62
|
]
|
|
66
63
|
|
|
67
64
|
const NO_TENANCY_ENDPOINTS = [
|
|
68
|
-
|
|
65
|
+
...PUBLIC_ENDPOINTS,
|
|
69
66
|
{
|
|
70
67
|
route: "/api/system",
|
|
71
68
|
method: "ALL",
|
|
72
69
|
},
|
|
73
|
-
// tenant is determined in request body
|
|
74
|
-
// used for creating the tenant
|
|
75
70
|
{
|
|
76
|
-
route: "/api/global/users/
|
|
77
|
-
method: "POST",
|
|
78
|
-
},
|
|
79
|
-
// deprecated single tenant sso callback
|
|
80
|
-
{
|
|
81
|
-
route: "/api/admin/auth/google/callback",
|
|
82
|
-
method: "GET",
|
|
83
|
-
},
|
|
84
|
-
// deprecated single tenant sso callback
|
|
85
|
-
{
|
|
86
|
-
route: "/api/admin/auth/oidc/callback",
|
|
71
|
+
route: "/api/global/users/self",
|
|
87
72
|
method: "GET",
|
|
88
73
|
},
|
|
89
|
-
// tenant is determined from code in redis
|
|
90
74
|
{
|
|
91
|
-
route: "/api/global/
|
|
92
|
-
method: "POST",
|
|
93
|
-
},
|
|
94
|
-
// global user search - no tenancy
|
|
95
|
-
// :id is user id
|
|
96
|
-
// TODO: this should really be `/api/system/users/:id`
|
|
97
|
-
{
|
|
98
|
-
route: "/api/global/users/tenant/:id",
|
|
75
|
+
route: "/api/global/self",
|
|
99
76
|
method: "GET",
|
|
100
77
|
},
|
|
101
78
|
]
|
|
@@ -104,7 +81,7 @@ const NO_TENANCY_ENDPOINTS = [
|
|
|
104
81
|
// add them all to be safe
|
|
105
82
|
const NO_CSRF_ENDPOINTS = [...PUBLIC_ENDPOINTS]
|
|
106
83
|
|
|
107
|
-
const router
|
|
84
|
+
const router = new Router()
|
|
108
85
|
router
|
|
109
86
|
.use(
|
|
110
87
|
compress({
|
|
@@ -163,4 +140,4 @@ for (let route of routes) {
|
|
|
163
140
|
router.use(route.allowedMethods())
|
|
164
141
|
}
|
|
165
142
|
|
|
166
|
-
|
|
143
|
+
module.exports = router
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
const Router = require("@koa/router")
|
|
2
|
+
const authController = require("../../controllers/global/auth")
|
|
3
|
+
const { joiValidator } = require("@budibase/backend-core/auth")
|
|
4
|
+
const Joi = require("joi")
|
|
5
|
+
const { updateTenantId } = require("@budibase/backend-core/tenancy")
|
|
5
6
|
|
|
6
|
-
const router
|
|
7
|
+
const router = new Router()
|
|
7
8
|
|
|
8
9
|
function buildAuthValidation() {
|
|
9
10
|
// prettier-ignore
|
|
10
|
-
return
|
|
11
|
+
return joiValidator.body(Joi.object({
|
|
11
12
|
username: Joi.string().required(),
|
|
12
13
|
password: Joi.string().required(),
|
|
13
14
|
}).required().unknown(false))
|
|
@@ -15,74 +16,90 @@ function buildAuthValidation() {
|
|
|
15
16
|
|
|
16
17
|
function buildResetValidation() {
|
|
17
18
|
// prettier-ignore
|
|
18
|
-
return
|
|
19
|
+
return joiValidator.body(Joi.object({
|
|
19
20
|
email: Joi.string().required(),
|
|
20
21
|
}).required().unknown(false))
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
function buildResetUpdateValidation() {
|
|
24
25
|
// prettier-ignore
|
|
25
|
-
return
|
|
26
|
+
return joiValidator.body(Joi.object({
|
|
26
27
|
resetCode: Joi.string().required(),
|
|
27
28
|
password: Joi.string().required(),
|
|
28
29
|
}).required().unknown(false))
|
|
29
30
|
}
|
|
30
31
|
|
|
32
|
+
function updateTenant(ctx, next) {
|
|
33
|
+
if (ctx.params) {
|
|
34
|
+
updateTenantId(ctx.params.tenantId)
|
|
35
|
+
}
|
|
36
|
+
return next()
|
|
37
|
+
}
|
|
38
|
+
|
|
31
39
|
router
|
|
32
|
-
// PASSWORD
|
|
33
40
|
.post(
|
|
34
41
|
"/api/global/auth/:tenantId/login",
|
|
35
42
|
buildAuthValidation(),
|
|
43
|
+
updateTenant,
|
|
36
44
|
authController.authenticate
|
|
37
45
|
)
|
|
38
|
-
.post("/api/global/auth/logout", authController.logout)
|
|
39
46
|
.post(
|
|
40
47
|
"/api/global/auth/:tenantId/reset",
|
|
41
48
|
buildResetValidation(),
|
|
49
|
+
updateTenant,
|
|
42
50
|
authController.reset
|
|
43
51
|
)
|
|
44
52
|
.post(
|
|
45
53
|
"/api/global/auth/:tenantId/reset/update",
|
|
46
54
|
buildResetUpdateValidation(),
|
|
55
|
+
updateTenant,
|
|
47
56
|
authController.resetUpdate
|
|
48
57
|
)
|
|
49
|
-
|
|
58
|
+
.post("/api/global/auth/logout", authController.logout)
|
|
50
59
|
.post("/api/global/auth/init", authController.setInitInfo)
|
|
51
60
|
.get("/api/global/auth/init", authController.getInitInfo)
|
|
52
|
-
|
|
53
|
-
|
|
61
|
+
.get(
|
|
62
|
+
"/api/global/auth/:tenantId/google",
|
|
63
|
+
updateTenant,
|
|
64
|
+
authController.googlePreAuth
|
|
65
|
+
)
|
|
54
66
|
.get(
|
|
55
67
|
"/api/global/auth/:tenantId/datasource/:provider",
|
|
68
|
+
updateTenant,
|
|
56
69
|
authController.datasourcePreAuth
|
|
57
70
|
)
|
|
71
|
+
// single tenancy endpoint
|
|
72
|
+
.get("/api/global/auth/google/callback", authController.googleAuth)
|
|
58
73
|
.get(
|
|
59
|
-
"/api/global/auth
|
|
74
|
+
"/api/global/auth/datasource/:provider/callback",
|
|
60
75
|
authController.datasourceAuth
|
|
61
76
|
)
|
|
62
|
-
|
|
63
|
-
// DATASOURCE - SINGLE TENANT - DEPRECATED
|
|
77
|
+
// multi-tenancy endpoint
|
|
64
78
|
.get(
|
|
65
|
-
"/api/global/auth
|
|
79
|
+
"/api/global/auth/:tenantId/google/callback",
|
|
80
|
+
updateTenant,
|
|
81
|
+
authController.googleAuth
|
|
82
|
+
)
|
|
83
|
+
.get(
|
|
84
|
+
"/api/global/auth/:tenantId/datasource/:provider/callback",
|
|
85
|
+
updateTenant,
|
|
66
86
|
authController.datasourceAuth
|
|
67
87
|
)
|
|
68
|
-
|
|
69
|
-
// GOOGLE - MULTI TENANT
|
|
70
|
-
.get("/api/global/auth/:tenantId/google", authController.googlePreAuth)
|
|
71
|
-
.get("/api/global/auth/:tenantId/google/callback", authController.googleAuth)
|
|
72
|
-
|
|
73
|
-
// GOOGLE - SINGLE TENANT - DEPRECATED
|
|
74
|
-
.get("/api/global/auth/google/callback", authController.googleAuth)
|
|
75
|
-
.get("/api/admin/auth/google/callback", authController.googleAuth)
|
|
76
|
-
|
|
77
|
-
// OIDC - MULTI TENANT
|
|
78
88
|
.get(
|
|
79
89
|
"/api/global/auth/:tenantId/oidc/configs/:configId",
|
|
90
|
+
updateTenant,
|
|
80
91
|
authController.oidcPreAuth
|
|
81
92
|
)
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
// OIDC - SINGLE TENANT - DEPRECATED
|
|
93
|
+
// single tenancy endpoint
|
|
85
94
|
.get("/api/global/auth/oidc/callback", authController.oidcAuth)
|
|
95
|
+
// multi-tenancy endpoint
|
|
96
|
+
.get(
|
|
97
|
+
"/api/global/auth/:tenantId/oidc/callback",
|
|
98
|
+
updateTenant,
|
|
99
|
+
authController.oidcAuth
|
|
100
|
+
)
|
|
101
|
+
// deprecated - used by the default system before tenancy
|
|
102
|
+
.get("/api/admin/auth/google/callback", authController.googleAuth)
|
|
86
103
|
.get("/api/admin/auth/oidc/callback", authController.oidcAuth)
|
|
87
104
|
|
|
88
|
-
|
|
105
|
+
module.exports = router
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
const Router = require("@koa/router")
|
|
2
|
+
const controller = require("../../controllers/global/configs")
|
|
3
|
+
const { joiValidator } = require("@budibase/backend-core/auth")
|
|
4
|
+
const { adminOnly } = require("@budibase/backend-core/auth")
|
|
5
|
+
const Joi = require("joi")
|
|
6
|
+
const { Configs } = require("../../../constants")
|
|
6
7
|
|
|
7
|
-
const router
|
|
8
|
+
const router = new Router()
|
|
8
9
|
|
|
9
10
|
function smtpValidation() {
|
|
10
11
|
// prettier-ignore
|
|
@@ -54,27 +55,27 @@ function oidcValidation() {
|
|
|
54
55
|
activated: Joi.boolean().required(),
|
|
55
56
|
scopes: Joi.array().optional()
|
|
56
57
|
})
|
|
57
|
-
).required()
|
|
58
|
+
).required(true)
|
|
58
59
|
}).unknown(true)
|
|
59
60
|
}
|
|
60
61
|
|
|
61
62
|
function buildConfigSaveValidation() {
|
|
62
63
|
// prettier-ignore
|
|
63
|
-
return
|
|
64
|
+
return joiValidator.body(Joi.object({
|
|
64
65
|
_id: Joi.string().optional(),
|
|
65
66
|
_rev: Joi.string().optional(),
|
|
66
67
|
workspace: Joi.string().optional(),
|
|
67
|
-
type: Joi.string().valid(...Object.values(
|
|
68
|
+
type: Joi.string().valid(...Object.values(Configs)).required(),
|
|
68
69
|
createdAt: Joi.string().optional(),
|
|
69
70
|
updatedAt: Joi.string().optional(),
|
|
70
71
|
config: Joi.alternatives()
|
|
71
72
|
.conditional("type", {
|
|
72
73
|
switch: [
|
|
73
|
-
{ is:
|
|
74
|
-
{ is:
|
|
75
|
-
{ is:
|
|
76
|
-
{ is:
|
|
77
|
-
{ is:
|
|
74
|
+
{ is: Configs.SMTP, then: smtpValidation() },
|
|
75
|
+
{ is: Configs.SETTINGS, then: settingValidation() },
|
|
76
|
+
{ is: Configs.ACCOUNT, then: Joi.object().unknown(true) },
|
|
77
|
+
{ is: Configs.GOOGLE, then: googleValidation() },
|
|
78
|
+
{ is: Configs.OIDC, then: oidcValidation() }
|
|
78
79
|
],
|
|
79
80
|
}),
|
|
80
81
|
}).required().unknown(true),
|
|
@@ -83,27 +84,27 @@ function buildConfigSaveValidation() {
|
|
|
83
84
|
|
|
84
85
|
function buildUploadValidation() {
|
|
85
86
|
// prettier-ignore
|
|
86
|
-
return
|
|
87
|
-
type: Joi.string().valid(...Object.values(
|
|
87
|
+
return joiValidator.params(Joi.object({
|
|
88
|
+
type: Joi.string().valid(...Object.values(Configs)).required(),
|
|
88
89
|
name: Joi.string().required(),
|
|
89
90
|
}).required().unknown(true))
|
|
90
91
|
}
|
|
91
92
|
|
|
92
93
|
function buildConfigGetValidation() {
|
|
93
94
|
// prettier-ignore
|
|
94
|
-
return
|
|
95
|
-
type: Joi.string().valid(...Object.values(
|
|
95
|
+
return joiValidator.params(Joi.object({
|
|
96
|
+
type: Joi.string().valid(...Object.values(Configs)).required()
|
|
96
97
|
}).required().unknown(true))
|
|
97
98
|
}
|
|
98
99
|
|
|
99
100
|
router
|
|
100
101
|
.post(
|
|
101
102
|
"/api/global/configs",
|
|
102
|
-
|
|
103
|
+
adminOnly,
|
|
103
104
|
buildConfigSaveValidation(),
|
|
104
105
|
controller.save
|
|
105
106
|
)
|
|
106
|
-
.delete("/api/global/configs/:id/:rev",
|
|
107
|
+
.delete("/api/global/configs/:id/:rev", adminOnly, controller.destroy)
|
|
107
108
|
.get("/api/global/configs", controller.fetch)
|
|
108
109
|
.get("/api/global/configs/checklist", controller.configChecklist)
|
|
109
110
|
.get(
|
|
@@ -116,9 +117,9 @@ router
|
|
|
116
117
|
.get("/api/global/configs/:type", buildConfigGetValidation(), controller.find)
|
|
117
118
|
.post(
|
|
118
119
|
"/api/global/configs/upload/:type/:name",
|
|
119
|
-
|
|
120
|
+
adminOnly,
|
|
120
121
|
buildUploadValidation(),
|
|
121
122
|
controller.upload
|
|
122
123
|
)
|
|
123
124
|
|
|
124
|
-
|
|
125
|
+
module.exports = router
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
const Router = require("@koa/router")
|
|
2
|
+
const controller = require("../../controllers/global/email")
|
|
3
|
+
const { EmailTemplatePurpose } = require("../../../constants")
|
|
4
|
+
const { joiValidator } = require("@budibase/backend-core/auth")
|
|
5
|
+
const { adminOnly } = require("@budibase/backend-core/auth")
|
|
6
|
+
const Joi = require("joi")
|
|
6
7
|
|
|
7
|
-
const router
|
|
8
|
+
const router = new Router()
|
|
8
9
|
|
|
9
10
|
function buildEmailSendValidation() {
|
|
10
11
|
// prettier-ignore
|
|
11
|
-
return
|
|
12
|
+
return joiValidator.body(Joi.object({
|
|
12
13
|
email: Joi.string().email({
|
|
13
14
|
multiple: true,
|
|
14
15
|
}),
|
|
@@ -29,8 +30,8 @@ function buildEmailSendValidation() {
|
|
|
29
30
|
router.post(
|
|
30
31
|
"/api/global/email/send",
|
|
31
32
|
buildEmailSendValidation(),
|
|
32
|
-
|
|
33
|
+
adminOnly,
|
|
33
34
|
controller.sendEmail
|
|
34
35
|
)
|
|
35
36
|
|
|
36
|
-
|
|
37
|
+
module.exports = router
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
const Router = require("@koa/router")
|
|
2
|
+
const controller = require("../../controllers/global/roles")
|
|
3
|
+
const { builderOrAdmin } = require("@budibase/backend-core/auth")
|
|
4
|
+
|
|
5
|
+
const router = new Router()
|
|
6
|
+
|
|
7
|
+
router
|
|
8
|
+
.get("/api/global/roles", builderOrAdmin, controller.fetch)
|
|
9
|
+
.get("/api/global/roles/:appId", builderOrAdmin, controller.find)
|
|
10
|
+
.delete("/api/global/roles/:appId", builderOrAdmin, controller.removeAppRole)
|
|
11
|
+
|
|
12
|
+
module.exports = router
|
|
@@ -3,7 +3,7 @@ import * as controller from "../../controllers/global/self"
|
|
|
3
3
|
import { auth } from "@budibase/backend-core"
|
|
4
4
|
import { users } from "../validation"
|
|
5
5
|
|
|
6
|
-
const router
|
|
6
|
+
const router = new Router()
|
|
7
7
|
|
|
8
8
|
router
|
|
9
9
|
.post("/api/global/self/api_key", auth.builderOnly, controller.generateAPIKey)
|
|
@@ -15,4 +15,4 @@ router
|
|
|
15
15
|
controller.updateSelf
|
|
16
16
|
)
|
|
17
17
|
|
|
18
|
-
export
|
|
18
|
+
export default router as any
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import Router from "@koa/router"
|
|
2
2
|
import * as controller from "../../controllers/global/templates"
|
|
3
|
-
import { TemplatePurpose,
|
|
3
|
+
import { TemplatePurpose, TemplateTypes } from "../../../constants"
|
|
4
4
|
import { auth as authCore } from "@budibase/backend-core"
|
|
5
5
|
import Joi from "joi"
|
|
6
6
|
const { adminOnly, joiValidator } = authCore
|
|
7
7
|
|
|
8
|
-
const router
|
|
8
|
+
const router = new Router()
|
|
9
9
|
|
|
10
10
|
function buildTemplateSaveValidation() {
|
|
11
11
|
// prettier-ignore
|
|
@@ -16,7 +16,7 @@ function buildTemplateSaveValidation() {
|
|
|
16
16
|
name: Joi.string().allow(null, ""),
|
|
17
17
|
contents: Joi.string().required(),
|
|
18
18
|
purpose: Joi.string().required().valid(...Object.values(TemplatePurpose)),
|
|
19
|
-
type: Joi.string().required().valid(...Object.values(
|
|
19
|
+
type: Joi.string().required().valid(...Object.values(TemplateTypes)),
|
|
20
20
|
}).required().unknown(true).optional())
|
|
21
21
|
}
|
|
22
22
|
|
|
@@ -34,4 +34,4 @@ router
|
|
|
34
34
|
.get("/api/global/template/:id", controller.find)
|
|
35
35
|
.delete("/api/global/template/:id/:rev", adminOnly, controller.destroy)
|
|
36
36
|
|
|
37
|
-
export
|
|
37
|
+
export default router
|