@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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@budibase/server",
3
3
  "email": "hi@budibase.com",
4
- "version": "3.23.32",
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": "c4036828c6d04e94946d835c5fad5ec0620a93e1"
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({