@budibase/server 3.23.32 → 3.23.33
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/dist/index.js +190 -190
- package/dist/index.js.map +2 -2
- package/package.json +2 -2
- package/src/api/controllers/workspace.ts +53 -0
- package/src/api/routes/tests/workspace.spec.ts +15 -0
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@budibase/server",
|
|
3
3
|
"email": "hi@budibase.com",
|
|
4
|
-
"version": "3.23.
|
|
4
|
+
"version": "3.23.33",
|
|
5
5
|
"description": "Budibase Web Server",
|
|
6
6
|
"main": "src/index.ts",
|
|
7
7
|
"repository": {
|
|
@@ -224,5 +224,5 @@
|
|
|
224
224
|
}
|
|
225
225
|
}
|
|
226
226
|
},
|
|
227
|
-
"gitHead": "
|
|
227
|
+
"gitHead": "55fe087a49347cd0633bffefafeb91fe421c6506"
|
|
228
228
|
}
|
|
@@ -55,6 +55,9 @@ import { createOnboardingWelcomeScreen } from "../../constants/screens"
|
|
|
55
55
|
import { buildDefaultDocs } from "../../db/defaultData/datasource_bb_default"
|
|
56
56
|
import {
|
|
57
57
|
DocumentType,
|
|
58
|
+
InternalTables,
|
|
59
|
+
USER_METDATA_PREFIX,
|
|
60
|
+
generateUserMetadataID,
|
|
58
61
|
generateWorkspaceID,
|
|
59
62
|
getDevWorkspaceID,
|
|
60
63
|
getLayoutParams,
|
|
@@ -81,6 +84,7 @@ import { removeWorkspaceFromUserRoles } from "../../utilities/workerRequests"
|
|
|
81
84
|
import { builderSocket } from "../../websockets"
|
|
82
85
|
import * as workspaceMigrations from "../../workspaceMigrations"
|
|
83
86
|
import { processMigrations } from "../../workspaceMigrations/migrationsProcessor"
|
|
87
|
+
import { getGlobalUser } from "../../utilities/global"
|
|
84
88
|
|
|
85
89
|
const DEFAULT_WORKSPACE_NAME = "Default workspace"
|
|
86
90
|
|
|
@@ -175,6 +179,53 @@ async function createInstance(appId: string, template: AppTemplate) {
|
|
|
175
179
|
return { _id: appId }
|
|
176
180
|
}
|
|
177
181
|
|
|
182
|
+
function getCreatorMetadataId(ctx: UserCtx) {
|
|
183
|
+
const userId = ctx.user?._id
|
|
184
|
+
if (!userId) {
|
|
185
|
+
return
|
|
186
|
+
}
|
|
187
|
+
if (userId.startsWith(USER_METDATA_PREFIX)) {
|
|
188
|
+
return userId
|
|
189
|
+
}
|
|
190
|
+
return generateUserMetadataID(userId)
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
async function addCreatorToUsersTable(ctx: UserCtx) {
|
|
194
|
+
const metadataId = getCreatorMetadataId(ctx)
|
|
195
|
+
if (!metadataId) {
|
|
196
|
+
return
|
|
197
|
+
}
|
|
198
|
+
const db = context.getWorkspaceDB()
|
|
199
|
+
try {
|
|
200
|
+
await db.get(metadataId)
|
|
201
|
+
return
|
|
202
|
+
} catch (err: any) {
|
|
203
|
+
if (err.status && err.status !== 404) {
|
|
204
|
+
throw err
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
let creator
|
|
209
|
+
try {
|
|
210
|
+
creator = await getGlobalUser(metadataId)
|
|
211
|
+
} catch (err) {
|
|
212
|
+
return
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
if (!creator.roleId || creator.roleId === roles.BUILTIN_ROLE_IDS.PUBLIC) {
|
|
216
|
+
creator.roleId = roles.BUILTIN_ROLE_IDS.ADMIN
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
const metadata = sdk.users.combineMetadataAndUser(creator, [])
|
|
220
|
+
if (!metadata) {
|
|
221
|
+
return
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
metadata.tableId = InternalTables.USER_METADATA
|
|
225
|
+
metadata._id = metadataId
|
|
226
|
+
await db.put(metadata)
|
|
227
|
+
}
|
|
228
|
+
|
|
178
229
|
async function addSampleDataDocs() {
|
|
179
230
|
const db = context.getWorkspaceDB()
|
|
180
231
|
try {
|
|
@@ -399,6 +450,8 @@ async function performWorkspaceCreate(
|
|
|
399
450
|
const db = context.getWorkspaceDB()
|
|
400
451
|
const isImport = !!instanceConfig.file
|
|
401
452
|
|
|
453
|
+
await addCreatorToUsersTable(ctx)
|
|
454
|
+
|
|
402
455
|
if (instanceConfig.useTemplate && !instanceConfig.file) {
|
|
403
456
|
await updateUserColumns(workspaceId, db, ctx.user._id!)
|
|
404
457
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { DEFAULT_TABLES } from "../../../db/defaultData/datasource_bb_default"
|
|
2
|
+
import { USERS_TABLE_SCHEMA } from "../../../constants"
|
|
2
3
|
import { setEnv, withEnv } from "../../../environment"
|
|
3
4
|
|
|
4
5
|
import { Header, context, db, events, roles } from "@budibase/backend-core"
|
|
@@ -172,6 +173,20 @@ describe("/applications", () => {
|
|
|
172
173
|
await checkTableCount(1) // users table
|
|
173
174
|
})
|
|
174
175
|
|
|
176
|
+
it("adds the workspace creator to the dev users table", async () => {
|
|
177
|
+
const creator = config.getUser()
|
|
178
|
+
const newWorkspace = await config.api.workspace.create({
|
|
179
|
+
name: generateAppName(),
|
|
180
|
+
})
|
|
181
|
+
|
|
182
|
+
await config.withApp(newWorkspace, async () => {
|
|
183
|
+
const rows = await config.api.row.fetch(USERS_TABLE_SCHEMA._id!)
|
|
184
|
+
const userRow = rows.find(row => row.email === creator.email)
|
|
185
|
+
expect(userRow).toBeDefined()
|
|
186
|
+
expect(userRow?.roleId).toEqual(roles.BUILTIN_ROLE_IDS.ADMIN)
|
|
187
|
+
})
|
|
188
|
+
})
|
|
189
|
+
|
|
175
190
|
it("creates app with sample data when onboarding", async () => {
|
|
176
191
|
const name = "Welcome app"
|
|
177
192
|
const newWorkspace = await config.api.workspace.create({
|