@budibase/server 1.0.49-alpha.1 → 1.0.49-alpha.13
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__/arangojs.ts +1 -1
- package/__mocks__/aws-sdk.ts +4 -4
- package/__mocks__/mongodb.ts +4 -5
- package/__mocks__/mssql.ts +3 -3
- package/__mocks__/node-fetch.ts +2 -1
- package/__mocks__/pg.ts +3 -5
- package/builder/assets/{index.ba78c49d.css → index.83c0944f.css} +1 -1
- package/builder/assets/{index.ed1cf508.js → index.f686d3cd.js} +184 -184
- package/builder/index.html +2 -2
- package/coverage/clover.xml +2656 -2712
- package/coverage/coverage-final.json +104 -105
- package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
- package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/controllers/application.js.html +157 -136
- package/coverage/lcov-report/api/controllers/auth.js.html +11 -14
- package/coverage/lcov-report/api/controllers/automation.js.html +39 -69
- package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
- package/coverage/lcov-report/api/controllers/cloud.js.html +8 -11
- package/coverage/lcov-report/api/controllers/component.js.html +10 -13
- package/coverage/lcov-report/api/controllers/datasource.js.html +31 -37
- package/coverage/lcov-report/api/controllers/dev.js.html +6 -6
- package/coverage/lcov-report/api/controllers/index.html +69 -54
- package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
- package/coverage/lcov-report/api/controllers/layout.js.html +9 -9
- package/coverage/lcov-report/api/controllers/metadata.js.html +6 -21
- package/coverage/lcov-report/{migrations/usageQuotas/syncApps.js.html → api/controllers/migrations.js.html} +30 -45
- package/coverage/lcov-report/api/controllers/permission.js.html +19 -19
- package/coverage/lcov-report/api/controllers/query/index.html +10 -10
- package/coverage/lcov-report/api/controllers/query/index.js.html +38 -35
- package/coverage/lcov-report/api/controllers/query/validation.js.html +6 -6
- package/coverage/lcov-report/api/controllers/role.js.html +16 -16
- package/coverage/lcov-report/api/controllers/routing.js.html +7 -10
- package/coverage/lcov-report/api/controllers/row/external.js.html +48 -141
- package/coverage/lcov-report/api/controllers/row/index.html +28 -28
- package/coverage/lcov-report/api/controllers/row/index.js.html +13 -13
- package/coverage/lcov-report/api/controllers/row/internal.js.html +60 -105
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +25 -31
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +21 -24
- package/coverage/lcov-report/api/controllers/row/utils.js.html +27 -24
- package/coverage/lcov-report/api/controllers/screen.js.html +15 -21
- package/coverage/lcov-report/api/controllers/script.js.html +4 -4
- package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +27 -57
- package/coverage/lcov-report/api/controllers/table/external.js.html +25 -34
- package/coverage/lcov-report/api/controllers/table/index.html +37 -37
- package/coverage/lcov-report/api/controllers/table/index.js.html +20 -20
- package/coverage/lcov-report/api/controllers/table/internal.js.html +45 -54
- package/coverage/lcov-report/api/controllers/table/utils.js.html +67 -103
- package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
- package/coverage/lcov-report/api/controllers/user.js.html +43 -52
- package/coverage/lcov-report/api/controllers/view/exporters.js.html +4 -4
- package/coverage/lcov-report/api/controllers/view/index.html +16 -16
- package/coverage/lcov-report/api/controllers/view/index.js.html +27 -33
- package/coverage/lcov-report/api/controllers/view/utils.js.html +35 -20
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +7 -7
- package/coverage/lcov-report/api/controllers/webhook.js.html +34 -28
- package/coverage/lcov-report/api/index.html +1 -1
- package/coverage/lcov-report/api/index.js.html +3 -3
- package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
- package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/routes/application.js.html +1 -1
- package/coverage/lcov-report/api/routes/auth.js.html +1 -1
- package/coverage/lcov-report/api/routes/automation.js.html +1 -1
- package/coverage/lcov-report/api/routes/backup.js.html +1 -1
- package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
- package/coverage/lcov-report/api/routes/component.js.html +1 -1
- package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
- package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
- package/coverage/lcov-report/api/routes/dev.js.html +1 -1
- package/coverage/lcov-report/api/routes/index.html +22 -7
- package/coverage/lcov-report/api/routes/index.js.html +10 -4
- package/coverage/lcov-report/api/routes/integration.js.html +1 -1
- package/coverage/lcov-report/api/routes/layout.js.html +1 -1
- package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
- package/coverage/lcov-report/{migrations/usageQuotas/index.js.html → api/routes/migrations.js.html} +25 -55
- package/coverage/lcov-report/api/routes/permission.js.html +1 -1
- package/coverage/lcov-report/api/routes/query.js.html +1 -1
- package/coverage/lcov-report/api/routes/role.js.html +1 -1
- package/coverage/lcov-report/api/routes/routing.js.html +1 -1
- package/coverage/lcov-report/api/routes/row.js.html +1 -1
- package/coverage/lcov-report/api/routes/screen.js.html +1 -1
- package/coverage/lcov-report/api/routes/script.js.html +1 -1
- package/coverage/lcov-report/api/routes/static.js.html +1 -1
- package/coverage/lcov-report/api/routes/table.js.html +1 -1
- package/coverage/lcov-report/api/routes/templates.js.html +1 -1
- package/coverage/lcov-report/api/routes/user.js.html +1 -1
- package/coverage/lcov-report/api/routes/view.js.html +1 -1
- package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/actions.js.html +24 -24
- package/coverage/lcov-report/automations/automationUtils.js.html +7 -10
- package/coverage/lcov-report/automations/bullboard.js.html +16 -16
- package/coverage/lcov-report/automations/index.html +18 -18
- package/coverage/lcov-report/automations/index.js.html +1 -1
- package/coverage/lcov-report/automations/steps/bash.js.html +6 -6
- package/coverage/lcov-report/automations/steps/createRow.js.html +7 -10
- package/coverage/lcov-report/automations/steps/delay.js.html +4 -4
- package/coverage/lcov-report/automations/steps/deleteRow.js.html +7 -7
- package/coverage/lcov-report/automations/steps/discord.js.html +7 -7
- package/coverage/lcov-report/automations/steps/executeQuery.js.html +6 -6
- package/coverage/lcov-report/automations/steps/executeScript.js.html +6 -6
- package/coverage/lcov-report/automations/steps/filter.js.html +7 -7
- package/coverage/lcov-report/automations/steps/index.html +1 -1
- package/coverage/lcov-report/automations/steps/integromat.js.html +5 -5
- package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +8 -8
- package/coverage/lcov-report/automations/steps/queryRows.js.html +10 -10
- package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +5 -5
- package/coverage/lcov-report/automations/steps/serverLog.js.html +3 -3
- package/coverage/lcov-report/automations/steps/slack.js.html +5 -5
- package/coverage/lcov-report/automations/steps/updateRow.js.html +7 -7
- package/coverage/lcov-report/automations/steps/utils.js.html +3 -3
- package/coverage/lcov-report/automations/steps/zapier.js.html +5 -5
- package/coverage/lcov-report/automations/triggerInfo/app.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/cron.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -8
- package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +2 -2
- package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +2 -2
- package/coverage/lcov-report/automations/triggers.js.html +61 -55
- package/coverage/lcov-report/automations/utils.js.html +54 -42
- package/coverage/lcov-report/constants/index.html +1 -1
- package/coverage/lcov-report/constants/index.js.html +26 -26
- package/coverage/lcov-report/constants/layouts.js.html +5 -5
- package/coverage/lcov-report/constants/screens.js.html +4 -4
- package/coverage/lcov-report/db/client.js.html +18 -18
- package/coverage/lcov-report/db/inMemoryView.js.html +7 -7
- package/coverage/lcov-report/db/index.html +1 -1
- package/coverage/lcov-report/db/index.js.html +3 -3
- package/coverage/lcov-report/db/linkedRows/LinkController.js.html +15 -27
- package/coverage/lcov-report/db/linkedRows/index.html +27 -27
- package/coverage/lcov-report/db/linkedRows/index.js.html +40 -82
- package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +40 -40
- package/coverage/lcov-report/db/newid.js.html +4 -4
- package/coverage/lcov-report/db/utils.js.html +74 -74
- package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
- package/coverage/lcov-report/events/index.html +1 -1
- package/coverage/lcov-report/events/index.js.html +5 -5
- package/coverage/lcov-report/events/utils.js.html +3 -3
- package/coverage/lcov-report/index.html +97 -112
- package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
- package/coverage/lcov-report/integrations/tests/index.html +1 -1
- package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
- package/coverage/lcov-report/middleware/authorized.js.html +21 -15
- package/coverage/lcov-report/middleware/builder.js.html +3 -3
- package/coverage/lcov-report/middleware/currentapp.js.html +72 -60
- package/coverage/lcov-report/middleware/index.html +28 -28
- package/coverage/lcov-report/middleware/joi-validator.js.html +3 -3
- package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
- package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
- package/coverage/lcov-report/middleware/usageQuota.js.html +29 -35
- package/coverage/lcov-report/middleware/utils.js.html +2 -2
- package/coverage/lcov-report/threads/automation.js.html +30 -24
- package/coverage/lcov-report/threads/index.html +25 -25
- package/coverage/lcov-report/threads/index.js.html +10 -10
- package/coverage/lcov-report/threads/query.js.html +26 -47
- package/coverage/lcov-report/threads/utils.js.html +14 -14
- package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
- package/coverage/lcov-report/utilities/budibaseDir.js.html +7 -7
- package/coverage/lcov-report/utilities/centralPath.js.html +4 -4
- package/coverage/lcov-report/utilities/csvParser.js.html +6 -6
- package/coverage/lcov-report/utilities/global.js.html +57 -48
- package/coverage/lcov-report/utilities/index.html +27 -27
- package/coverage/lcov-report/utilities/index.js.html +42 -72
- package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +8 -8
- package/coverage/lcov-report/utilities/queue/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.js.html +7 -7
- package/coverage/lcov-report/utilities/rowProcessor/index.html +11 -11
- package/coverage/lcov-report/utilities/rowProcessor/index.js.html +32 -74
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +4 -4
- package/coverage/lcov-report/utilities/scriptRunner.js.html +5 -5
- package/coverage/lcov-report/utilities/security.js.html +8 -8
- package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/index.js.html +13 -10
- package/coverage/lcov-report/utilities/usageQuota/rows.js.html +5 -2
- package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
- package/coverage/lcov-report/utilities/users.js.html +9 -9
- package/coverage/lcov-report/utilities/workerRequests.js.html +16 -16
- package/coverage/lcov.info +4018 -4092
- package/dist/api/controllers/application.js +49 -48
- package/dist/api/controllers/auth.js +4 -5
- package/dist/api/controllers/automation.js +14 -19
- package/dist/api/controllers/cloud.js +2 -3
- package/dist/api/controllers/component.js +3 -4
- package/dist/api/controllers/datasource.js +9 -10
- package/dist/api/controllers/deploy/Deployment.js +3 -6
- package/dist/api/controllers/deploy/index.js +12 -13
- package/dist/api/controllers/dev.js +5 -5
- package/dist/api/controllers/layout.js +3 -3
- package/dist/api/controllers/metadata.js +4 -4
- package/dist/api/controllers/migrations.js +21 -0
- package/dist/api/controllers/permission.js +4 -4
- package/dist/api/controllers/query/import/index.js +4 -6
- package/dist/api/controllers/query/index.js +11 -10
- package/dist/api/controllers/role.js +5 -5
- package/dist/api/controllers/routing.js +5 -6
- package/dist/api/controllers/row/ExternalRequest.js +90 -67
- package/dist/api/controllers/row/external.js +14 -22
- package/dist/api/controllers/row/internal.js +29 -44
- package/dist/api/controllers/row/internalSearch.js +11 -13
- package/dist/api/controllers/row/staticFormula.js +11 -11
- package/dist/api/controllers/row/utils.js +7 -6
- package/dist/api/controllers/screen.js +5 -7
- package/dist/api/controllers/static/index.js +4 -4
- package/dist/api/controllers/table/bulkFormula.js +14 -15
- package/dist/api/controllers/table/external.js +7 -10
- package/dist/api/controllers/table/index.js +5 -5
- package/dist/api/controllers/table/internal.js +16 -19
- package/dist/api/controllers/table/utils.js +29 -31
- package/dist/api/controllers/user.js +16 -20
- package/dist/api/controllers/view/index.js +8 -10
- package/dist/api/controllers/view/utils.js +9 -4
- package/dist/api/controllers/webhook.js +10 -8
- package/dist/api/routes/index.js +2 -0
- package/dist/api/routes/migrations.js +9 -0
- package/dist/api/routes/tests/utilities/TestFunctions.js +37 -17
- package/dist/app.js +35 -5
- package/dist/automations/automationUtils.js +2 -3
- package/dist/automations/steps/createRow.js +1 -1
- package/dist/automations/steps/updateRow.js +1 -1
- package/dist/automations/triggers.js +27 -25
- package/dist/automations/utils.js +10 -5
- package/dist/db/linkedRows/LinkController.js +3 -7
- package/dist/db/linkedRows/index.js +16 -26
- package/dist/db/linkedRows/linkUtils.js +6 -6
- package/dist/db/views/staticViews.js +9 -10
- package/dist/environment.js +3 -1
- package/dist/integrations/base/sql.js +49 -15
- package/dist/integrations/utils.js +3 -0
- package/dist/middleware/authorized.js +5 -3
- package/dist/middleware/builder.js +2 -2
- package/dist/middleware/currentapp.js +41 -37
- package/dist/middleware/usageQuota.js +2 -4
- package/dist/migrations/functions/appUrls.js +46 -0
- package/dist/migrations/functions/quotas1.js +50 -0
- package/dist/migrations/{usageQuotas → functions/usageQuotas}/index.js +6 -10
- package/dist/migrations/{usageQuotas → functions/usageQuotas}/syncApps.js +12 -9
- package/dist/migrations/{usageQuotas → functions/usageQuotas}/syncRows.js +16 -12
- package/dist/migrations/functions/userEmailViewCasing.js +24 -0
- package/dist/migrations/index.js +62 -0
- package/dist/package.json +4 -4
- package/dist/tests/utilities/TestConfiguration.js +70 -44
- package/dist/threads/automation.js +13 -11
- package/dist/threads/query.js +13 -19
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utilities/fileSystem/index.js +4 -3
- package/dist/utilities/global.js +15 -12
- package/dist/utilities/index.js +7 -17
- package/dist/utilities/routing/index.js +5 -5
- package/dist/utilities/rowProcessor/index.js +9 -10
- package/dist/utilities/usageQuota/index.js +1 -0
- package/dist/utilities/usageQuota/rows.js +1 -0
- package/dist/utilities/users.js +3 -3
- package/dist/utilities/workerRequests.js +4 -4
- package/package.json +5 -5
- package/scripts/integrations/mssql/data/Dockerfile +1 -1
- package/scripts/integrations/mssql/data/setup.sql +17 -4
- package/scripts/integrations/postgres/init.sql +11 -6
- package/scripts/likeCypress.ts +1 -1
- package/src/api/controllers/application.js +38 -31
- package/src/api/controllers/auth.js +4 -5
- package/src/api/controllers/automation.js +13 -23
- package/src/api/controllers/cloud.js +2 -3
- package/src/api/controllers/component.js +3 -4
- package/src/api/controllers/datasource.js +9 -11
- package/src/api/controllers/deploy/Deployment.js +3 -7
- package/src/api/controllers/deploy/index.js +20 -13
- package/src/api/controllers/dev.js +5 -5
- package/src/api/controllers/layout.js +3 -3
- package/src/api/controllers/metadata.js +4 -9
- package/src/api/controllers/migrations.js +13 -0
- package/src/api/controllers/permission.js +4 -4
- package/src/api/controllers/query/import/index.ts +4 -6
- package/src/api/controllers/query/import/tests/index.spec.js +2 -1
- package/src/api/controllers/query/index.js +11 -10
- package/src/api/controllers/role.js +5 -5
- package/src/api/controllers/routing.js +5 -6
- package/src/api/controllers/row/ExternalRequest.ts +67 -43
- package/src/api/controllers/row/external.js +27 -58
- package/src/api/controllers/row/internal.js +29 -44
- package/src/api/controllers/row/internalSearch.js +11 -13
- package/src/api/controllers/row/staticFormula.js +10 -11
- package/src/api/controllers/row/utils.js +7 -6
- package/src/api/controllers/screen.js +5 -7
- package/src/api/controllers/static/index.js +4 -4
- package/src/api/controllers/table/bulkFormula.js +13 -23
- package/src/api/controllers/table/external.js +7 -10
- package/src/api/controllers/table/index.js +5 -5
- package/src/api/controllers/table/internal.js +18 -21
- package/src/api/controllers/table/utils.js +29 -41
- package/src/api/controllers/user.js +17 -20
- package/src/api/controllers/view/index.js +8 -10
- package/src/api/controllers/view/utils.js +9 -4
- package/src/api/controllers/webhook.js +10 -8
- package/src/api/routes/index.js +2 -0
- package/src/api/routes/migrations.js +14 -0
- package/src/api/routes/tests/automation.spec.js +1 -0
- package/src/api/routes/tests/misc.spec.js +0 -1
- package/src/api/routes/tests/routing.spec.js +21 -12
- package/src/api/routes/tests/row.spec.js +7 -4
- package/src/api/routes/tests/utilities/TestFunctions.js +39 -17
- package/src/app.ts +18 -5
- package/src/automations/automationUtils.js +2 -3
- package/src/automations/steps/createRow.js +0 -1
- package/src/automations/steps/updateRow.js +1 -1
- package/src/automations/triggers.js +33 -31
- package/src/automations/utils.js +9 -5
- package/src/db/linkedRows/LinkController.js +3 -7
- package/src/db/linkedRows/index.js +16 -30
- package/src/db/linkedRows/linkUtils.js +6 -6
- package/src/db/tests/linkController.spec.js +0 -1
- package/src/db/tests/linkTests.spec.js +5 -6
- package/src/db/views/staticViews.js +8 -10
- package/src/environment.js +3 -1
- package/src/integrations/base/sql.ts +61 -22
- package/src/integrations/utils.ts +4 -1
- package/src/middleware/authorized.js +5 -3
- package/src/middleware/builder.js +2 -2
- package/src/middleware/currentapp.js +50 -46
- package/src/middleware/tests/authorized.spec.js +7 -2
- package/src/middleware/tests/currentapp.spec.js +6 -0
- package/src/middleware/usageQuota.js +2 -4
- package/src/migrations/functions/appUrls.ts +34 -0
- package/src/migrations/functions/quotas1.ts +20 -0
- package/src/migrations/functions/tests/appUrls.spec.js +29 -0
- package/src/migrations/{tests/usageQuotas/index.spec.js → functions/tests/quotas1.spec.js} +5 -5
- package/src/migrations/functions/tests/userEmailViewCasing.spec.js +25 -0
- package/src/migrations/functions/usageQuotas/index.ts +8 -0
- package/src/migrations/{usageQuotas/syncApps.js → functions/usageQuotas/syncApps.ts} +6 -6
- package/src/migrations/functions/usageQuotas/syncRows.ts +22 -0
- package/src/migrations/{tests/usageQuotas → functions/usageQuotas/tests}/syncApps.spec.js +4 -4
- package/src/migrations/{tests/usageQuotas → functions/usageQuotas/tests}/syncRows.spec.js +4 -4
- package/src/migrations/functions/userEmailViewCasing.ts +13 -0
- package/src/migrations/index.ts +56 -0
- package/src/module.d.ts +3 -0
- package/src/tests/utilities/TestConfiguration.js +73 -50
- package/src/threads/automation.js +17 -15
- package/src/threads/query.js +14 -21
- package/src/utilities/fileSystem/index.js +4 -3
- package/src/utilities/global.js +15 -12
- package/src/utilities/index.js +7 -17
- package/src/utilities/routing/index.js +5 -5
- package/src/utilities/rowProcessor/index.js +9 -23
- package/src/utilities/usageQuota/index.js +1 -0
- package/src/utilities/usageQuota/rows.js +1 -0
- package/src/utilities/users.js +3 -3
- package/src/utilities/workerRequests.js +4 -4
- package/tsconfig.json +2 -1
- package/coverage/lcov-report/migrations/usageQuotas/index.html +0 -141
- package/coverage/lcov-report/migrations/usageQuotas/syncRows.js.html +0 -143
- package/src/migrations/usageQuotas/index.js +0 -24
- package/src/migrations/usageQuotas/syncRows.js +0 -21
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
const TestConfig = require("../../../tests/utilities/TestConfiguration")
|
|
2
|
+
const { getGlobalDB } = require("@budibase/backend-core/tenancy")
|
|
3
|
+
|
|
4
|
+
// mock email view creation
|
|
5
|
+
const coreDb = require("@budibase/backend-core/db")
|
|
6
|
+
const createUserEmailView = jest.fn()
|
|
7
|
+
coreDb.createUserEmailView = createUserEmailView
|
|
8
|
+
|
|
9
|
+
const migration = require("../userEmailViewCasing")
|
|
10
|
+
|
|
11
|
+
describe("run", () => {
|
|
12
|
+
let config = new TestConfig(false)
|
|
13
|
+
const globalDb = getGlobalDB()
|
|
14
|
+
|
|
15
|
+
beforeEach(async () => {
|
|
16
|
+
await config.init()
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
afterAll(config.end)
|
|
20
|
+
|
|
21
|
+
it("runs successfully", async () => {
|
|
22
|
+
await migration.run(globalDb)
|
|
23
|
+
expect(createUserEmailView).toHaveBeenCalledTimes(1)
|
|
24
|
+
})
|
|
25
|
+
})
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const { getUsageQuotaDoc } = require("../../utilities/usageQuota")
|
|
1
|
+
import { getGlobalDB, getTenantId } from "@budibase/backend-core/tenancy"
|
|
2
|
+
import { getAllApps } from "@budibase/backend-core/db"
|
|
3
|
+
import { getUsageQuotaDoc } from "../../../utilities/usageQuota"
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
export const run = async () => {
|
|
7
6
|
const db = getGlobalDB()
|
|
8
7
|
// get app count
|
|
9
|
-
|
|
8
|
+
// @ts-ignore
|
|
9
|
+
const devApps = await getAllApps({ dev: true })
|
|
10
10
|
const appCount = devApps ? devApps.length : 0
|
|
11
11
|
|
|
12
12
|
// sync app count
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { getGlobalDB, getTenantId } from "@budibase/backend-core/tenancy"
|
|
2
|
+
import { getAllApps } from "@budibase/backend-core/db"
|
|
3
|
+
import { getUsageQuotaDoc } from "../../../utilities/usageQuota"
|
|
4
|
+
import { getUniqueRows } from "../../../utilities/usageQuota/rows"
|
|
5
|
+
|
|
6
|
+
export const run = async () => {
|
|
7
|
+
const db = getGlobalDB()
|
|
8
|
+
// get all rows in all apps
|
|
9
|
+
// @ts-ignore
|
|
10
|
+
const allApps = await getAllApps({ all: true })
|
|
11
|
+
// @ts-ignore
|
|
12
|
+
const appIds = allApps ? allApps.map((app: { appId: any }) => app.appId) : []
|
|
13
|
+
const rows = await getUniqueRows(appIds)
|
|
14
|
+
const rowCount = rows ? rows.length : 0
|
|
15
|
+
|
|
16
|
+
// sync row count
|
|
17
|
+
const tenantId = getTenantId()
|
|
18
|
+
console.log(`[Tenant: ${tenantId}] Syncing row count: ${rowCount}`)
|
|
19
|
+
const usageDoc = await getUsageQuotaDoc(db)
|
|
20
|
+
usageDoc.usageQuota.rows = rowCount
|
|
21
|
+
await db.put(usageDoc)
|
|
22
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
const { getGlobalDB } = require("@budibase/backend-core/tenancy")
|
|
2
|
-
const TestConfig = require("
|
|
3
|
-
const { getUsageQuotaDoc, update, Properties } = require("
|
|
4
|
-
const syncApps = require("
|
|
5
|
-
const env = require("
|
|
2
|
+
const TestConfig = require("../../../../tests/utilities/TestConfiguration")
|
|
3
|
+
const { getUsageQuotaDoc, update, Properties } = require("../../../../utilities/usageQuota")
|
|
4
|
+
const syncApps = require("../syncApps")
|
|
5
|
+
const env = require("../../../../environment")
|
|
6
6
|
|
|
7
7
|
describe("syncApps", () => {
|
|
8
8
|
let config = new TestConfig(false)
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
const { getGlobalDB } = require("@budibase/backend-core/tenancy")
|
|
2
|
-
const TestConfig = require("
|
|
3
|
-
const { getUsageQuotaDoc, update, Properties } = require("
|
|
4
|
-
const syncRows = require("
|
|
5
|
-
const env = require("
|
|
2
|
+
const TestConfig = require("../../../../tests/utilities/TestConfiguration")
|
|
3
|
+
const { getUsageQuotaDoc, update, Properties } = require("../../../../utilities/usageQuota")
|
|
4
|
+
const syncRows = require("../syncRows")
|
|
5
|
+
const env = require("../../../../environment")
|
|
6
6
|
|
|
7
7
|
describe("syncRows", () => {
|
|
8
8
|
let config = new TestConfig(false)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const { createUserEmailView } = require("@budibase/backend-core/db")
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Date:
|
|
5
|
+
* October 2021
|
|
6
|
+
*
|
|
7
|
+
* Description:
|
|
8
|
+
* Recreate the user email view to include latest changes i.e. lower casing the email address
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export const run = async (db: any) => {
|
|
12
|
+
await createUserEmailView(db)
|
|
13
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import CouchDB from "../db"
|
|
2
|
+
const {
|
|
3
|
+
MIGRATION_TYPES,
|
|
4
|
+
runMigrations,
|
|
5
|
+
} = require("@budibase/backend-core/migrations")
|
|
6
|
+
|
|
7
|
+
// migration functions
|
|
8
|
+
import * as userEmailViewCasing from "./functions/userEmailViewCasing"
|
|
9
|
+
import * as quota1 from "./functions/quotas1"
|
|
10
|
+
import * as appUrls from "./functions/appUrls"
|
|
11
|
+
|
|
12
|
+
export interface Migration {
|
|
13
|
+
type: string
|
|
14
|
+
name: string
|
|
15
|
+
opts?: object
|
|
16
|
+
fn: Function
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* e.g.
|
|
21
|
+
* {
|
|
22
|
+
* tenantIds: ['bb'],
|
|
23
|
+
* force: {
|
|
24
|
+
* global: ['quota_1']
|
|
25
|
+
* }
|
|
26
|
+
* }
|
|
27
|
+
*/
|
|
28
|
+
export interface MigrationOptions {
|
|
29
|
+
tenantIds?: string[]
|
|
30
|
+
forced?: {
|
|
31
|
+
[type: string]: string[]
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export const MIGRATIONS: Migration[] = [
|
|
36
|
+
{
|
|
37
|
+
type: MIGRATION_TYPES.GLOBAL,
|
|
38
|
+
name: "user_email_view_casing",
|
|
39
|
+
fn: userEmailViewCasing.run,
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
type: MIGRATION_TYPES.GLOBAL,
|
|
43
|
+
name: "quotas_1",
|
|
44
|
+
fn: quota1.run,
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
type: MIGRATION_TYPES.APP,
|
|
48
|
+
name: "app_urls",
|
|
49
|
+
opts: { all: true },
|
|
50
|
+
fn: appUrls.run,
|
|
51
|
+
},
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
export const migrate = async (options?: MigrationOptions) => {
|
|
55
|
+
await runMigrations(CouchDB, MIGRATIONS, options)
|
|
56
|
+
}
|
package/src/module.d.ts
ADDED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
const core = require("@budibase/backend-core")
|
|
2
|
+
const CouchDB = require("../../db")
|
|
3
|
+
core.init(CouchDB)
|
|
1
4
|
const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
|
|
2
5
|
const env = require("../../environment")
|
|
3
6
|
const {
|
|
@@ -17,13 +20,11 @@ const supertest = require("supertest")
|
|
|
17
20
|
const { cleanup } = require("../../utilities/fileSystem")
|
|
18
21
|
const { Cookies, Headers } = require("@budibase/backend-core/constants")
|
|
19
22
|
const { jwt } = require("@budibase/backend-core/auth")
|
|
20
|
-
const core = require("@budibase/backend-core")
|
|
21
23
|
const { getGlobalDB } = require("@budibase/backend-core/tenancy")
|
|
22
24
|
const { createASession } = require("@budibase/backend-core/sessions")
|
|
23
25
|
const { user: userCache } = require("@budibase/backend-core/cache")
|
|
24
|
-
const CouchDB = require("../../db")
|
|
25
26
|
const newid = require("../../db/newid")
|
|
26
|
-
core
|
|
27
|
+
const context = require("@budibase/backend-core/context")
|
|
27
28
|
|
|
28
29
|
const GLOBAL_USER_ID = "us_uuid1"
|
|
29
30
|
const EMAIL = "babs@babs.com"
|
|
@@ -50,6 +51,10 @@ class TestConfiguration {
|
|
|
50
51
|
return this.appId
|
|
51
52
|
}
|
|
52
53
|
|
|
54
|
+
getCouch() {
|
|
55
|
+
return CouchDB
|
|
56
|
+
}
|
|
57
|
+
|
|
53
58
|
async _req(config, params, controlFunc) {
|
|
54
59
|
const request = {}
|
|
55
60
|
// fake cookies, we don't need them
|
|
@@ -61,11 +66,21 @@ class TestConfiguration {
|
|
|
61
66
|
request.request = {
|
|
62
67
|
body: config,
|
|
63
68
|
}
|
|
64
|
-
|
|
65
|
-
|
|
69
|
+
async function run() {
|
|
70
|
+
if (params) {
|
|
71
|
+
request.params = params
|
|
72
|
+
}
|
|
73
|
+
await controlFunc(request)
|
|
74
|
+
return request.body
|
|
75
|
+
}
|
|
76
|
+
// check if already in a context
|
|
77
|
+
if (context.getAppId() == null) {
|
|
78
|
+
return context.doInAppContext(this.appId, async () => {
|
|
79
|
+
return run()
|
|
80
|
+
})
|
|
81
|
+
} else {
|
|
82
|
+
return run()
|
|
66
83
|
}
|
|
67
|
-
await controlFunc(request)
|
|
68
|
-
return request.body
|
|
69
84
|
}
|
|
70
85
|
|
|
71
86
|
async globalUser({
|
|
@@ -171,6 +186,7 @@ class TestConfiguration {
|
|
|
171
186
|
// create dev app
|
|
172
187
|
this.app = await this._req({ name: appName }, null, controllers.app.create)
|
|
173
188
|
this.appId = this.app.appId
|
|
189
|
+
context.updateAppId(this.appId)
|
|
174
190
|
|
|
175
191
|
// create production app
|
|
176
192
|
this.prodApp = await this.deploy()
|
|
@@ -183,14 +199,16 @@ class TestConfiguration {
|
|
|
183
199
|
}
|
|
184
200
|
|
|
185
201
|
async deploy() {
|
|
186
|
-
|
|
187
|
-
const prodAppId =
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
202
|
+
await this._req(null, null, controllers.deploy.deployApp)
|
|
203
|
+
const prodAppId = this.getAppId().replace("_dev", "")
|
|
204
|
+
return context.doInAppContext(prodAppId, async () => {
|
|
205
|
+
const appPackage = await this._req(
|
|
206
|
+
null,
|
|
207
|
+
{ appId: prodAppId },
|
|
208
|
+
controllers.app.fetchAppPackage
|
|
209
|
+
)
|
|
210
|
+
return appPackage.application
|
|
211
|
+
})
|
|
194
212
|
}
|
|
195
213
|
|
|
196
214
|
async updateTable(config = null) {
|
|
@@ -419,42 +437,47 @@ class TestConfiguration {
|
|
|
419
437
|
|
|
420
438
|
async login({ roleId, userId, builder, prodApp = false } = {}) {
|
|
421
439
|
const appId = prodApp ? this.prodAppId : this.appId
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
440
|
+
return context.doInAppContext(appId, async () => {
|
|
441
|
+
userId = !userId ? `us_uuid1` : userId
|
|
442
|
+
if (!this.request) {
|
|
443
|
+
throw "Server has not been opened, cannot login."
|
|
444
|
+
}
|
|
445
|
+
// make sure the user exists in the global DB
|
|
446
|
+
if (roleId !== BUILTIN_ROLE_IDS.PUBLIC) {
|
|
447
|
+
await this.globalUser({
|
|
448
|
+
id: userId,
|
|
449
|
+
builder,
|
|
450
|
+
roles: { [this.prodAppId]: roleId },
|
|
451
|
+
})
|
|
452
|
+
}
|
|
453
|
+
await createASession(userId, {
|
|
454
|
+
sessionId: "sessionid",
|
|
455
|
+
tenantId: TENANT_ID,
|
|
433
456
|
})
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
}
|
|
457
|
+
// have to fake this
|
|
458
|
+
const auth = {
|
|
459
|
+
userId,
|
|
460
|
+
sessionId: "sessionid",
|
|
461
|
+
tenantId: TENANT_ID,
|
|
462
|
+
}
|
|
463
|
+
const app = {
|
|
464
|
+
roleId: roleId,
|
|
465
|
+
appId,
|
|
466
|
+
}
|
|
467
|
+
const authToken = jwt.sign(auth, env.JWT_SECRET)
|
|
468
|
+
const appToken = jwt.sign(app, env.JWT_SECRET)
|
|
469
|
+
|
|
470
|
+
// returning necessary request headers
|
|
471
|
+
await userCache.invalidateUser(userId)
|
|
472
|
+
return {
|
|
473
|
+
Accept: "application/json",
|
|
474
|
+
Cookie: [
|
|
475
|
+
`${Cookies.Auth}=${authToken}`,
|
|
476
|
+
`${Cookies.CurrentApp}=${appToken}`,
|
|
477
|
+
],
|
|
478
|
+
[Headers.APP_ID]: appId,
|
|
479
|
+
}
|
|
480
|
+
})
|
|
458
481
|
}
|
|
459
482
|
}
|
|
460
483
|
|
|
@@ -5,11 +5,11 @@ const automationUtils = require("../automations/automationUtils")
|
|
|
5
5
|
const AutomationEmitter = require("../events/AutomationEmitter")
|
|
6
6
|
const { processObject } = require("@budibase/string-templates")
|
|
7
7
|
const { DEFAULT_TENANT_ID } = require("@budibase/backend-core/constants")
|
|
8
|
-
const CouchDB = require("../db")
|
|
9
8
|
const { DocumentTypes, isDevAppID } = require("../db/utils")
|
|
10
9
|
const { doInTenant } = require("@budibase/backend-core/tenancy")
|
|
11
10
|
const usage = require("../utilities/usageQuota")
|
|
12
11
|
const { definitions: triggerDefs } = require("../automations/triggerInfo")
|
|
12
|
+
const { doInAppContext, getAppDB } = require("@budibase/backend-core/context")
|
|
13
13
|
|
|
14
14
|
const FILTER_STEP_ID = actions.ACTION_DEFINITIONS.FILTER.stepId
|
|
15
15
|
const CRON_STEP_ID = triggerDefs.CRON.stepId
|
|
@@ -59,11 +59,10 @@ class Orchestrator {
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
async getApp() {
|
|
62
|
-
const appId = this._appId
|
|
63
62
|
if (this._app) {
|
|
64
63
|
return this._app
|
|
65
64
|
}
|
|
66
|
-
const db =
|
|
65
|
+
const db = getAppDB()
|
|
67
66
|
this._app = await db.get(DocumentTypes.APP_METADATA)
|
|
68
67
|
return this._app
|
|
69
68
|
}
|
|
@@ -131,16 +130,19 @@ class Orchestrator {
|
|
|
131
130
|
}
|
|
132
131
|
|
|
133
132
|
module.exports = (input, callback) => {
|
|
134
|
-
const
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
133
|
+
const appId = input.data.event.appId
|
|
134
|
+
doInAppContext(appId, () => {
|
|
135
|
+
const automationOrchestrator = new Orchestrator(
|
|
136
|
+
input.data.automation,
|
|
137
|
+
input.data.event
|
|
138
|
+
)
|
|
139
|
+
automationOrchestrator
|
|
140
|
+
.execute()
|
|
141
|
+
.then(response => {
|
|
142
|
+
callback(null, response)
|
|
143
|
+
})
|
|
144
|
+
.catch(err => {
|
|
145
|
+
callback(err)
|
|
146
|
+
})
|
|
147
|
+
})
|
|
146
148
|
}
|
package/src/threads/query.js
CHANGED
|
@@ -3,14 +3,10 @@ threadUtils.threadSetup()
|
|
|
3
3
|
const ScriptRunner = require("../utilities/scriptRunner")
|
|
4
4
|
const { integrations } = require("../integrations")
|
|
5
5
|
const { processStringSync } = require("@budibase/string-templates")
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
const IS_TRIPLE_BRACE = new RegExp(/^{{3}.*}{3}$/)
|
|
9
|
-
const IS_HANDLEBARS = new RegExp(/^{{2}.*}{2}$/)
|
|
6
|
+
const { doInAppContext, getAppDB } = require("@budibase/backend-core/context")
|
|
10
7
|
|
|
11
8
|
class QueryRunner {
|
|
12
9
|
constructor(input, flags = { noRecursiveQuery: false }) {
|
|
13
|
-
this.appId = input.appId
|
|
14
10
|
this.datasource = input.datasource
|
|
15
11
|
this.queryVerb = input.queryVerb
|
|
16
12
|
this.fields = input.fields
|
|
@@ -104,12 +100,11 @@ class QueryRunner {
|
|
|
104
100
|
}
|
|
105
101
|
|
|
106
102
|
async runAnotherQuery(queryId, parameters) {
|
|
107
|
-
const db =
|
|
103
|
+
const db = getAppDB()
|
|
108
104
|
const query = await db.get(queryId)
|
|
109
105
|
const datasource = await db.get(query.datasourceId)
|
|
110
106
|
return new QueryRunner(
|
|
111
107
|
{
|
|
112
|
-
appId: this.appId,
|
|
113
108
|
datasource,
|
|
114
109
|
queryVerb: query.queryVerb,
|
|
115
110
|
fields: query.fields,
|
|
@@ -190,12 +185,8 @@ class QueryRunner {
|
|
|
190
185
|
enrichedQuery[key] = this.enrichQueryFields(fields[key], parameters)
|
|
191
186
|
} else if (typeof fields[key] === "string") {
|
|
192
187
|
// enrich string value as normal
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
if (IS_HANDLEBARS.test(value) && !IS_TRIPLE_BRACE.test(value)) {
|
|
196
|
-
value = `{${value}}`
|
|
197
|
-
}
|
|
198
|
-
enrichedQuery[key] = processStringSync(value, parameters, {
|
|
188
|
+
enrichedQuery[key] = processStringSync(fields[key], parameters, {
|
|
189
|
+
noEscaping: true,
|
|
199
190
|
noHelpers: true,
|
|
200
191
|
})
|
|
201
192
|
} else {
|
|
@@ -223,12 +214,14 @@ class QueryRunner {
|
|
|
223
214
|
}
|
|
224
215
|
|
|
225
216
|
module.exports = (input, callback) => {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
.
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
217
|
+
doInAppContext(input.appId, () => {
|
|
218
|
+
const Runner = new QueryRunner(input)
|
|
219
|
+
Runner.execute()
|
|
220
|
+
.then(response => {
|
|
221
|
+
callback(null, response)
|
|
222
|
+
})
|
|
223
|
+
.catch(err => {
|
|
224
|
+
callback(err)
|
|
225
|
+
})
|
|
226
|
+
})
|
|
234
227
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
const { budibaseTempDir } = require("../budibaseDir")
|
|
2
|
-
const { isDev } = require("../index")
|
|
3
2
|
const fs = require("fs")
|
|
4
3
|
const { join } = require("path")
|
|
5
4
|
const uuid = require("uuid/v4")
|
|
@@ -20,6 +19,7 @@ const {
|
|
|
20
19
|
LINK_USER_METADATA_PREFIX,
|
|
21
20
|
} = require("../../db/utils")
|
|
22
21
|
const MemoryStream = require("memorystream")
|
|
22
|
+
const { getAppId } = require("@budibase/backend-core/context")
|
|
23
23
|
|
|
24
24
|
const TOP_LEVEL_PATH = join(__dirname, "..", "..", "..")
|
|
25
25
|
const NODE_MODULES_PATH = join(TOP_LEVEL_PATH, "node_modules")
|
|
@@ -51,7 +51,7 @@ exports.init = () => {
|
|
|
51
51
|
* everything required to function is ready.
|
|
52
52
|
*/
|
|
53
53
|
exports.checkDevelopmentEnvironment = () => {
|
|
54
|
-
if (!isDev()) {
|
|
54
|
+
if (!env.isDev() || env.isTest()) {
|
|
55
55
|
return
|
|
56
56
|
}
|
|
57
57
|
if (!fs.existsSync(budibaseTempDir())) {
|
|
@@ -251,7 +251,8 @@ exports.downloadTemplate = async (type, name) => {
|
|
|
251
251
|
/**
|
|
252
252
|
* Retrieves component libraries from object store (or tmp symlink if in local)
|
|
253
253
|
*/
|
|
254
|
-
exports.getComponentLibraryManifest = async
|
|
254
|
+
exports.getComponentLibraryManifest = async library => {
|
|
255
|
+
const appId = getAppId()
|
|
255
256
|
const filename = "manifest.json"
|
|
256
257
|
/* istanbul ignore next */
|
|
257
258
|
// when testing in cypress and so on we need to get the package
|
package/src/utilities/global.js
CHANGED
|
@@ -3,7 +3,7 @@ const {
|
|
|
3
3
|
getGlobalIDFromUserMetadataID,
|
|
4
4
|
} = require("../db/utils")
|
|
5
5
|
const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
|
|
6
|
-
const {
|
|
6
|
+
const { getProdAppID } = require("@budibase/backend-core/db")
|
|
7
7
|
const { getGlobalUserParams } = require("@budibase/backend-core/db")
|
|
8
8
|
const { user: userCache } = require("@budibase/backend-core/cache")
|
|
9
9
|
const {
|
|
@@ -11,8 +11,10 @@ const {
|
|
|
11
11
|
isUserInAppTenant,
|
|
12
12
|
} = require("@budibase/backend-core/tenancy")
|
|
13
13
|
const env = require("../environment")
|
|
14
|
+
const { getAppId } = require("@budibase/backend-core/context")
|
|
14
15
|
|
|
15
|
-
exports.updateAppRole = (
|
|
16
|
+
exports.updateAppRole = (user, { appId } = {}) => {
|
|
17
|
+
appId = appId || getAppId()
|
|
16
18
|
if (!user || !user.roles) {
|
|
17
19
|
return user
|
|
18
20
|
}
|
|
@@ -24,7 +26,7 @@ exports.updateAppRole = (appId, user) => {
|
|
|
24
26
|
return user
|
|
25
27
|
}
|
|
26
28
|
// always use the deployed app
|
|
27
|
-
user.roleId = user.roles[
|
|
29
|
+
user.roleId = user.roles[getProdAppID(appId)]
|
|
28
30
|
// if a role wasn't found then either set as admin (builder) or public (everyone else)
|
|
29
31
|
if (!user.roleId && user.builder && user.builder.global) {
|
|
30
32
|
user.roleId = BUILTIN_ROLE_IDS.ADMIN
|
|
@@ -35,18 +37,18 @@ exports.updateAppRole = (appId, user) => {
|
|
|
35
37
|
return user
|
|
36
38
|
}
|
|
37
39
|
|
|
38
|
-
function processUser(
|
|
40
|
+
function processUser(user, { appId } = {}) {
|
|
39
41
|
if (user) {
|
|
40
42
|
delete user.password
|
|
41
43
|
}
|
|
42
|
-
return exports.updateAppRole(
|
|
44
|
+
return exports.updateAppRole(user, { appId })
|
|
43
45
|
}
|
|
44
46
|
|
|
45
47
|
exports.getCachedSelf = async (ctx, appId) => {
|
|
46
48
|
// this has to be tenant aware, can't depend on the context to find it out
|
|
47
49
|
// running some middlewares before the tenancy causes context to break
|
|
48
50
|
const user = await userCache.getUser(ctx.user._id)
|
|
49
|
-
return processUser(
|
|
51
|
+
return processUser(user, { appId })
|
|
50
52
|
}
|
|
51
53
|
|
|
52
54
|
exports.getRawGlobalUser = async userId => {
|
|
@@ -54,12 +56,13 @@ exports.getRawGlobalUser = async userId => {
|
|
|
54
56
|
return db.get(getGlobalIDFromUserMetadataID(userId))
|
|
55
57
|
}
|
|
56
58
|
|
|
57
|
-
exports.getGlobalUser = async
|
|
59
|
+
exports.getGlobalUser = async userId => {
|
|
58
60
|
let user = await exports.getRawGlobalUser(userId)
|
|
59
|
-
return processUser(
|
|
61
|
+
return processUser(user)
|
|
60
62
|
}
|
|
61
63
|
|
|
62
|
-
exports.getGlobalUsers = async (
|
|
64
|
+
exports.getGlobalUsers = async (users = null) => {
|
|
65
|
+
const appId = getAppId()
|
|
63
66
|
const db = getGlobalDB()
|
|
64
67
|
let globalUsers
|
|
65
68
|
if (users) {
|
|
@@ -86,11 +89,11 @@ exports.getGlobalUsers = async (appId = null, users = null) => {
|
|
|
86
89
|
if (!appId) {
|
|
87
90
|
return globalUsers
|
|
88
91
|
}
|
|
89
|
-
return globalUsers.map(user => exports.updateAppRole(
|
|
92
|
+
return globalUsers.map(user => exports.updateAppRole(user))
|
|
90
93
|
}
|
|
91
94
|
|
|
92
|
-
exports.getGlobalUsersFromMetadata = async
|
|
93
|
-
const globalUsers = await exports.getGlobalUsers(
|
|
95
|
+
exports.getGlobalUsersFromMetadata = async users => {
|
|
96
|
+
const globalUsers = await exports.getGlobalUsers(users)
|
|
94
97
|
return users.map(user => {
|
|
95
98
|
const globalUser = globalUsers.find(
|
|
96
99
|
globalUser => globalUser && user._id.includes(globalUser._id)
|
package/src/utilities/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
const env = require("../environment")
|
|
2
2
|
const { OBJ_STORE_DIRECTORY } = require("../constants")
|
|
3
3
|
const { sanitizeKey } = require("@budibase/backend-core/objectStore")
|
|
4
|
-
const CouchDB = require("../db")
|
|
5
4
|
const { generateMetadataID } = require("../db/utils")
|
|
6
5
|
const Readable = require("stream").Readable
|
|
6
|
+
const { getAppDB } = require("@budibase/backend-core/context")
|
|
7
7
|
|
|
8
8
|
const BB_CDN = "https://cdn.budi.live"
|
|
9
9
|
|
|
@@ -73,8 +73,8 @@ exports.attachmentsRelativeURL = attachmentKey => {
|
|
|
73
73
|
)
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
exports.updateEntityMetadata = async (
|
|
77
|
-
const db =
|
|
76
|
+
exports.updateEntityMetadata = async (type, entityId, updateFn) => {
|
|
77
|
+
const db = getAppDB()
|
|
78
78
|
const id = generateMetadataID(type, entityId)
|
|
79
79
|
// read it to see if it exists, we'll overwrite it no matter what
|
|
80
80
|
let rev,
|
|
@@ -99,14 +99,14 @@ exports.updateEntityMetadata = async (appId, type, entityId, updateFn) => {
|
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
|
|
102
|
-
exports.saveEntityMetadata = async (
|
|
103
|
-
return exports.updateEntityMetadata(
|
|
102
|
+
exports.saveEntityMetadata = async (type, entityId, metadata) => {
|
|
103
|
+
return exports.updateEntityMetadata(type, entityId, () => {
|
|
104
104
|
return metadata
|
|
105
105
|
})
|
|
106
106
|
}
|
|
107
107
|
|
|
108
|
-
exports.deleteEntityMetadata = async (
|
|
109
|
-
const db =
|
|
108
|
+
exports.deleteEntityMetadata = async (type, entityId) => {
|
|
109
|
+
const db = getAppDB()
|
|
110
110
|
const id = generateMetadataID(type, entityId)
|
|
111
111
|
let rev
|
|
112
112
|
try {
|
|
@@ -141,16 +141,6 @@ exports.stringToReadStream = string => {
|
|
|
141
141
|
})
|
|
142
142
|
}
|
|
143
143
|
|
|
144
|
-
exports.doesDatabaseExist = async dbName => {
|
|
145
|
-
try {
|
|
146
|
-
const db = new CouchDB(dbName, { skip_setup: true })
|
|
147
|
-
const info = await db.info()
|
|
148
|
-
return info && !info.error
|
|
149
|
-
} catch (err) {
|
|
150
|
-
return false
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
|
|
154
144
|
exports.formatBytes = bytes => {
|
|
155
145
|
const units = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]
|
|
156
146
|
const byteIncrements = 1024
|