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