@budibase/server 1.0.94 → 1.0.97
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/builder/assets/{index.305b7738.js → index.3c2af30f.js} +1 -1
- package/builder/index.html +1 -1
- package/coverage/clover.xml +107 -107
- package/coverage/coverage-final.json +12 -12
- 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 +1 -1
- package/coverage/lcov-report/api/controllers/auth.js.html +2 -2
- package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
- package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
- package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
- package/coverage/lcov-report/api/controllers/component.js.html +1 -1
- package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
- package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
- package/coverage/lcov-report/api/controllers/index.html +1 -1
- package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
- package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
- package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
- package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
- package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
- package/coverage/lcov-report/api/controllers/query/index.html +1 -1
- package/coverage/lcov-report/api/controllers/query/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
- package/coverage/lcov-report/api/controllers/role.js.html +1 -1
- package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/index.html +1 -1
- package/coverage/lcov-report/api/controllers/row/index.js.html +20 -20
- package/coverage/lcov-report/api/controllers/row/internal.js.html +29 -29
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
- package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
- package/coverage/lcov-report/api/controllers/script.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/external.js.html +4 -4
- package/coverage/lcov-report/api/controllers/table/index.html +1 -1
- package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/internal.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/utils.js.html +1 -1
- package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
- package/coverage/lcov-report/api/controllers/user.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/index.html +1 -1
- package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
- package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
- package/coverage/lcov-report/api/index.html +15 -15
- package/coverage/lcov-report/api/index.js.html +15 -27
- 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 +1 -1
- package/coverage/lcov-report/api/routes/index.js.html +1 -1
- 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/api/routes/migrations.js.html +1 -1
- 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 +3 -6
- 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/utils/index.html +1 -1
- package/coverage/lcov-report/api/routes/utils/validators.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 +1 -1
- package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
- package/coverage/lcov-report/automations/bullboard.js.html +1 -1
- package/coverage/lcov-report/automations/index.html +1 -1
- package/coverage/lcov-report/automations/index.js.html +1 -1
- package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
- package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
- package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
- package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
- package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
- package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
- package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
- package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
- package/coverage/lcov-report/automations/steps/index.html +5 -5
- package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
- package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
- package/coverage/lcov-report/automations/steps/queryRows.js.html +4 -4
- package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
- package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
- package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
- package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
- package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
- package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/triggers.js.html +3 -3
- package/coverage/lcov-report/automations/utils.js.html +1 -1
- package/coverage/lcov-report/constants/index.html +1 -1
- package/coverage/lcov-report/constants/index.js.html +1 -1
- package/coverage/lcov-report/constants/layouts.js.html +1 -1
- package/coverage/lcov-report/constants/screens.js.html +1 -1
- package/coverage/lcov-report/db/client.js.html +1 -1
- package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
- package/coverage/lcov-report/db/index.html +1 -1
- package/coverage/lcov-report/db/index.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/index.html +1 -1
- package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
- package/coverage/lcov-report/db/newid.js.html +2 -2
- package/coverage/lcov-report/db/utils.js.html +3 -3
- 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 +1 -1
- package/coverage/lcov-report/events/utils.js.html +1 -1
- package/coverage/lcov-report/index.html +23 -23
- 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 +1 -1
- package/coverage/lcov-report/middleware/builder.js.html +1 -1
- package/coverage/lcov-report/middleware/currentapp.js.html +15 -12
- package/coverage/lcov-report/middleware/index.html +11 -11
- package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
- package/coverage/lcov-report/middleware/publicApi.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 +1 -1
- package/coverage/lcov-report/middleware/utils.js.html +1 -1
- package/coverage/lcov-report/threads/automation.js.html +1 -1
- package/coverage/lcov-report/threads/index.html +1 -1
- package/coverage/lcov-report/threads/index.js.html +1 -1
- package/coverage/lcov-report/threads/query.js.html +1 -1
- package/coverage/lcov-report/threads/utils.js.html +1 -1
- package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
- package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
- package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
- package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
- package/coverage/lcov-report/utilities/global.js.html +1 -1
- package/coverage/lcov-report/utilities/index.html +1 -1
- package/coverage/lcov-report/utilities/index.js.html +1 -1
- package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/index.js.html +13 -13
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
- package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
- package/coverage/lcov-report/utilities/security.js.html +1 -1
- 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 +1 -1
- package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
- package/coverage/lcov-report/utilities/users.js.html +1 -1
- package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
- package/coverage/lcov.info +163 -164
- package/dist/api/controllers/auth.js +1 -1
- package/dist/api/controllers/public/rows.js +2 -2
- package/dist/api/controllers/static/index.js +2 -15
- package/dist/api/controllers/table/external.js +3 -3
- package/dist/api/index.js +3 -6
- package/dist/api/routes/static.js +1 -2
- package/dist/automations/steps/queryRows.js +1 -1
- package/dist/db/views/staticViews.js +2 -0
- package/dist/middleware/currentapp.js +7 -6
- package/dist/middleware/publicApi.js +2 -2
- package/dist/package.json +4 -8
- package/dist/tests/utilities/TestConfiguration.js +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -9
- package/scripts/integrations/customer-categories/docker-compose.yml +2 -2
- package/scripts/integrations/oracle/docker-compose.yml +1 -1
- package/scripts/integrations/postgres/docker-compose.yml +2 -2
- package/scripts/integrations/service-vehicles/docker-compose.yml +2 -2
- package/src/api/controllers/auth.js +1 -1
- package/src/api/controllers/public/rows.ts +2 -4
- package/src/api/controllers/static/index.js +2 -18
- package/src/api/controllers/table/external.js +3 -3
- package/src/api/index.js +3 -7
- package/src/api/routes/static.js +1 -2
- package/src/automations/steps/queryRows.js +1 -1
- package/src/db/views/staticViews.js +2 -0
- package/src/middleware/currentapp.js +7 -6
- package/src/middleware/publicApi.js +2 -2
- package/src/middleware/tests/authorized.spec.js +1 -3
- package/src/middleware/tests/currentapp.spec.js +4 -4
- package/src/tests/utilities/TestConfiguration.js +1 -1
- package/.eslintrc +0 -13
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@budibase/server",
|
|
3
3
|
"email": "hi@budibase.com",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.97",
|
|
5
5
|
"description": "Budibase Web Server",
|
|
6
6
|
"main": "src/index.ts",
|
|
7
7
|
"repository": {
|
|
@@ -21,10 +21,7 @@
|
|
|
21
21
|
"dev:stack:down": "node scripts/dev/manage.js down",
|
|
22
22
|
"dev:stack:nuke": "node scripts/dev/manage.js nuke",
|
|
23
23
|
"dev:builder": "yarn run dev:stack:up && nodemon",
|
|
24
|
-
"format": "prettier --config ../../.prettierrc.json 'src/**/*.ts' --write",
|
|
25
24
|
"specs": "node specs/generate.js && openapi-typescript specs/openapi.yaml --output src/definitions/openapi.ts",
|
|
26
|
-
"lint": "eslint --fix src/",
|
|
27
|
-
"lint:fix": "yarn run format && yarn run lint",
|
|
28
25
|
"initialise": "node scripts/initialise.js",
|
|
29
26
|
"env:multi:enable": "node scripts/multiTenancy.js enable",
|
|
30
27
|
"env:multi:disable": "node scripts/multiTenancy.js disable",
|
|
@@ -71,9 +68,9 @@
|
|
|
71
68
|
"license": "GPL-3.0",
|
|
72
69
|
"dependencies": {
|
|
73
70
|
"@apidevtools/swagger-parser": "^10.0.3",
|
|
74
|
-
"@budibase/backend-core": "^1.0.
|
|
75
|
-
"@budibase/client": "^1.0.
|
|
76
|
-
"@budibase/string-templates": "^1.0.
|
|
71
|
+
"@budibase/backend-core": "^1.0.97",
|
|
72
|
+
"@budibase/client": "^1.0.97",
|
|
73
|
+
"@budibase/string-templates": "^1.0.97",
|
|
77
74
|
"@bull-board/api": "^3.7.0",
|
|
78
75
|
"@bull-board/koa": "^3.7.0",
|
|
79
76
|
"@elastic/elasticsearch": "7.10.0",
|
|
@@ -151,7 +148,6 @@
|
|
|
151
148
|
"@types/node": "^15.12.4",
|
|
152
149
|
"@types/oracledb": "^5.2.1",
|
|
153
150
|
"@types/redis": "^4.0.11",
|
|
154
|
-
"@typescript-eslint/parser": "4.28.0",
|
|
155
151
|
"apidoc": "^0.50.2",
|
|
156
152
|
"babel-jest": "^27.0.2",
|
|
157
153
|
"copyfiles": "^2.4.1",
|
|
@@ -175,5 +171,5 @@
|
|
|
175
171
|
"optionalDependencies": {
|
|
176
172
|
"oracledb": "^5.3.0"
|
|
177
173
|
},
|
|
178
|
-
"gitHead": "
|
|
174
|
+
"gitHead": "1eaadeda8739f51399fb1be132964e28f870958e"
|
|
179
175
|
}
|
|
@@ -3,7 +3,7 @@ services:
|
|
|
3
3
|
db:
|
|
4
4
|
container_name: postgres
|
|
5
5
|
image: postgres
|
|
6
|
-
restart:
|
|
6
|
+
restart: unless-stopped
|
|
7
7
|
environment:
|
|
8
8
|
POSTGRES_USER: root
|
|
9
9
|
POSTGRES_PASSWORD: root
|
|
@@ -17,7 +17,7 @@ services:
|
|
|
17
17
|
pgadmin:
|
|
18
18
|
container_name: pgadmin-pg
|
|
19
19
|
image: dpage/pgadmin4
|
|
20
|
-
restart:
|
|
20
|
+
restart: unless-stopped
|
|
21
21
|
environment:
|
|
22
22
|
PGADMIN_DEFAULT_EMAIL: root@root.com
|
|
23
23
|
PGADMIN_DEFAULT_PASSWORD: root
|
|
@@ -3,7 +3,7 @@ services:
|
|
|
3
3
|
db:
|
|
4
4
|
container_name: postgres
|
|
5
5
|
image: postgres
|
|
6
|
-
restart:
|
|
6
|
+
restart: unless-stopped
|
|
7
7
|
environment:
|
|
8
8
|
POSTGRES_USER: root
|
|
9
9
|
POSTGRES_PASSWORD: root
|
|
@@ -17,7 +17,7 @@ services:
|
|
|
17
17
|
pgadmin:
|
|
18
18
|
container_name: pgadmin-pg
|
|
19
19
|
image: dpage/pgadmin4
|
|
20
|
-
restart:
|
|
20
|
+
restart: unless-stopped
|
|
21
21
|
environment:
|
|
22
22
|
PGADMIN_DEFAULT_EMAIL: root@root.com
|
|
23
23
|
PGADMIN_DEFAULT_PASSWORD: root
|
|
@@ -3,7 +3,7 @@ services:
|
|
|
3
3
|
db:
|
|
4
4
|
container_name: postgres-vehicle
|
|
5
5
|
image: postgres
|
|
6
|
-
restart:
|
|
6
|
+
restart: unless-stopped
|
|
7
7
|
environment:
|
|
8
8
|
POSTGRES_USER: root
|
|
9
9
|
POSTGRES_PASSWORD: root
|
|
@@ -17,7 +17,7 @@ services:
|
|
|
17
17
|
pgadmin:
|
|
18
18
|
container_name: pgadmin
|
|
19
19
|
image: dpage/pgadmin4
|
|
20
|
-
restart:
|
|
20
|
+
restart: unless-stopped
|
|
21
21
|
environment:
|
|
22
22
|
PGADMIN_DEFAULT_EMAIL: root@root.com
|
|
23
23
|
PGADMIN_DEFAULT_PASSWORD: root
|
|
@@ -7,7 +7,7 @@ const { getAppDB, getAppId } = require("@budibase/backend-core/context")
|
|
|
7
7
|
exports.fetchSelf = async ctx => {
|
|
8
8
|
let userId = ctx.user.userId || ctx.user._id
|
|
9
9
|
/* istanbul ignore next */
|
|
10
|
-
if (!userId) {
|
|
10
|
+
if (!userId || !ctx.isAuthenticated) {
|
|
11
11
|
ctx.body = {}
|
|
12
12
|
return
|
|
13
13
|
}
|
|
@@ -52,16 +52,14 @@ export async function read(ctx: any, next: any) {
|
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
export async function update(ctx: any, next: any) {
|
|
55
|
-
ctx.request.body = await addRev(fixRow(ctx.request.body, ctx.params
|
|
55
|
+
ctx.request.body = await addRev(fixRow(ctx.request.body, ctx.params))
|
|
56
56
|
await rowController.save(ctx)
|
|
57
57
|
await next()
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
export async function destroy(ctx: any, next: any) {
|
|
61
61
|
// set the body as expected, with the _id and _rev fields
|
|
62
|
-
ctx.request.body = await addRev(
|
|
63
|
-
fixRow({ _id: ctx.params.rowId }, ctx.params.tableId)
|
|
64
|
-
)
|
|
62
|
+
ctx.request.body = await addRev(fixRow({ _id: ctx.params.rowId }, ctx.params))
|
|
65
63
|
await rowController.destroy(ctx)
|
|
66
64
|
// destroy controller doesn't currently return the row as the body, need to adjust this
|
|
67
65
|
// in the public API to be correct
|
|
@@ -5,7 +5,6 @@ const { resolve, join } = require("../../../utilities/centralPath")
|
|
|
5
5
|
const uuid = require("uuid")
|
|
6
6
|
const { ObjectStoreBuckets } = require("../../../constants")
|
|
7
7
|
const { processString } = require("@budibase/string-templates")
|
|
8
|
-
const { getAllApps } = require("@budibase/backend-core/db")
|
|
9
8
|
const {
|
|
10
9
|
loadHandlebarsFile,
|
|
11
10
|
NODE_MODULES_PATH,
|
|
@@ -16,7 +15,7 @@ const { clientLibraryPath } = require("../../../utilities")
|
|
|
16
15
|
const { upload } = require("../../../utilities/fileSystem")
|
|
17
16
|
const { attachmentsRelativeURL } = require("../../../utilities")
|
|
18
17
|
const { DocumentTypes } = require("../../../db/utils")
|
|
19
|
-
const { getAppDB,
|
|
18
|
+
const { getAppDB, getAppId } = require("@budibase/backend-core/context")
|
|
20
19
|
const AWS = require("aws-sdk")
|
|
21
20
|
const AWS_REGION = env.AWS_REGION ? env.AWS_REGION : "eu-west-1"
|
|
22
21
|
|
|
@@ -39,21 +38,6 @@ async function prepareUpload({ s3Key, bucket, metadata, file }) {
|
|
|
39
38
|
}
|
|
40
39
|
}
|
|
41
40
|
|
|
42
|
-
async function getAppIdFromUrl(ctx) {
|
|
43
|
-
// the "appId" component of the URL can be the id or the custom url
|
|
44
|
-
let possibleAppUrl = `/${encodeURI(ctx.params.appId).toLowerCase()}`
|
|
45
|
-
|
|
46
|
-
// search prod apps for a url that matches, exclude dev where id is always used
|
|
47
|
-
const apps = await getAllApps({ dev: false })
|
|
48
|
-
const app = apps.filter(
|
|
49
|
-
a => a.url && a.url.toLowerCase() === possibleAppUrl
|
|
50
|
-
)[0]
|
|
51
|
-
|
|
52
|
-
const appId = app && app.appId ? app.appId : ctx.params.appId
|
|
53
|
-
updateAppId(appId)
|
|
54
|
-
return appId
|
|
55
|
-
}
|
|
56
|
-
|
|
57
41
|
exports.serveBuilder = async function (ctx) {
|
|
58
42
|
let builderPath = resolve(TOP_LEVEL_PATH, "builder")
|
|
59
43
|
await send(ctx, ctx.file, { root: builderPath })
|
|
@@ -81,10 +65,10 @@ exports.uploadFile = async function (ctx) {
|
|
|
81
65
|
}
|
|
82
66
|
|
|
83
67
|
exports.serveApp = async function (ctx) {
|
|
84
|
-
let appId = await getAppIdFromUrl(ctx)
|
|
85
68
|
const App = require("./templates/BudibaseApp.svelte").default
|
|
86
69
|
const db = getAppDB({ skip_setup: true })
|
|
87
70
|
const appInfo = await db.get(DocumentTypes.APP_METADATA)
|
|
71
|
+
let appId = getAppId()
|
|
88
72
|
|
|
89
73
|
const { head, html, css } = App.render({
|
|
90
74
|
title: appInfo.name,
|
|
@@ -118,8 +118,8 @@ function generateManyLinkSchema(datasource, column, table, relatedTable) {
|
|
|
118
118
|
},
|
|
119
119
|
}
|
|
120
120
|
column.through = junctionTable._id
|
|
121
|
-
column.throughFrom =
|
|
122
|
-
column.throughTo =
|
|
121
|
+
column.throughFrom = relatedPrimary
|
|
122
|
+
column.throughTo = primary
|
|
123
123
|
column.fieldName = relatedPrimary
|
|
124
124
|
return junctionTable
|
|
125
125
|
}
|
|
@@ -146,7 +146,7 @@ function generateRelatedSchema(linkColumn, table, relatedTable, columnName) {
|
|
|
146
146
|
// is many to many
|
|
147
147
|
else {
|
|
148
148
|
// don't need to copy through, already got it
|
|
149
|
-
relatedSchema.fieldName = linkColumn.
|
|
149
|
+
relatedSchema.fieldName = linkColumn.throughTo
|
|
150
150
|
relatedSchema.throughTo = linkColumn.throughFrom
|
|
151
151
|
relatedSchema.throughFrom = linkColumn.throughTo
|
|
152
152
|
}
|
package/src/api/index.js
CHANGED
|
@@ -3,7 +3,6 @@ const {
|
|
|
3
3
|
buildAuthMiddleware,
|
|
4
4
|
auditLog,
|
|
5
5
|
buildTenancyMiddleware,
|
|
6
|
-
buildAppTenancyMiddleware,
|
|
7
6
|
} = require("@budibase/backend-core/auth")
|
|
8
7
|
const currentApp = require("../middleware/currentapp")
|
|
9
8
|
const compress = require("koa-compress")
|
|
@@ -14,6 +13,9 @@ const env = require("../environment")
|
|
|
14
13
|
|
|
15
14
|
const router = new Router()
|
|
16
15
|
|
|
16
|
+
router.get("/health", ctx => (ctx.status = 200))
|
|
17
|
+
router.get("/version", ctx => (ctx.body = pkg.version))
|
|
18
|
+
|
|
17
19
|
router
|
|
18
20
|
.use(
|
|
19
21
|
compress({
|
|
@@ -34,8 +36,6 @@ router
|
|
|
34
36
|
}
|
|
35
37
|
await next()
|
|
36
38
|
})
|
|
37
|
-
.use("/health", ctx => (ctx.status = 200))
|
|
38
|
-
.use("/version", ctx => (ctx.body = pkg.version))
|
|
39
39
|
// re-direct before any middlewares occur
|
|
40
40
|
.redirect("/", "/builder")
|
|
41
41
|
.use(
|
|
@@ -52,8 +52,6 @@ router
|
|
|
52
52
|
})
|
|
53
53
|
)
|
|
54
54
|
.use(currentApp)
|
|
55
|
-
// this middleware will try to use the app ID to determine the tenancy
|
|
56
|
-
.use(buildAppTenancyMiddleware())
|
|
57
55
|
.use(auditLog)
|
|
58
56
|
|
|
59
57
|
// error handling middleware
|
|
@@ -74,8 +72,6 @@ router.use(async (ctx, next) => {
|
|
|
74
72
|
}
|
|
75
73
|
})
|
|
76
74
|
|
|
77
|
-
router.get("/health", ctx => (ctx.status = 200))
|
|
78
|
-
|
|
79
75
|
// authenticated routes
|
|
80
76
|
for (let route of mainRoutes) {
|
|
81
77
|
router.use(route.routes())
|
package/src/api/routes/static.js
CHANGED
|
@@ -44,8 +44,7 @@ router
|
|
|
44
44
|
authorized(PermissionTypes.TABLE, PermissionLevels.WRITE),
|
|
45
45
|
controller.uploadFile
|
|
46
46
|
)
|
|
47
|
-
|
|
48
|
-
.get("/:appId/:path*", controller.serveApp)
|
|
47
|
+
.get("/app/:appUrl/:path*", controller.serveApp)
|
|
49
48
|
.post(
|
|
50
49
|
"/api/attachments/:datasourceId/url",
|
|
51
50
|
authorized(PermissionTypes.TABLE, PermissionLevels.READ),
|
|
@@ -85,7 +85,7 @@ exports.run = async function ({ inputs, appId }) {
|
|
|
85
85
|
const { tableId, filters, sortColumn, sortOrder, limit } = inputs
|
|
86
86
|
const table = await getTable(appId, tableId)
|
|
87
87
|
let sortType = FieldTypes.STRING
|
|
88
|
-
if (table && table.schema && sortColumn) {
|
|
88
|
+
if (table && table.schema && table.schema[sortColumn] && sortColumn) {
|
|
89
89
|
const fieldType = table.schema[sortColumn].type
|
|
90
90
|
sortType =
|
|
91
91
|
fieldType === FieldTypes.NUMBER ? FieldTypes.NUMBER : FieldTypes.STRING
|
|
@@ -33,6 +33,7 @@ exports.createLinkView = async () => {
|
|
|
33
33
|
if (doc.type === "link") {
|
|
34
34
|
let doc1 = doc.doc1
|
|
35
35
|
let doc2 = doc.doc2
|
|
36
|
+
// eslint-disable-next-line no-undef
|
|
36
37
|
emit([doc1.tableId, doc1.rowId], {
|
|
37
38
|
id: doc2.rowId,
|
|
38
39
|
thisId: doc1.rowId,
|
|
@@ -40,6 +41,7 @@ exports.createLinkView = async () => {
|
|
|
40
41
|
})
|
|
41
42
|
// if linking to same table can't emit twice
|
|
42
43
|
if (doc1.tableId !== doc2.tableId) {
|
|
44
|
+
// eslint-disable-next-line no-undef
|
|
43
45
|
emit([doc2.tableId, doc2.rowId], {
|
|
44
46
|
id: doc1.rowId,
|
|
45
47
|
thisId: doc2.rowId,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const {
|
|
2
|
-
|
|
2
|
+
getAppIdFromCtx,
|
|
3
3
|
setCookie,
|
|
4
4
|
getCookie,
|
|
5
5
|
clearCookie,
|
|
@@ -17,7 +17,7 @@ const { doInAppContext } = require("@budibase/backend-core/context")
|
|
|
17
17
|
|
|
18
18
|
module.exports = async (ctx, next) => {
|
|
19
19
|
// try to get the appID from the request
|
|
20
|
-
let requestAppId =
|
|
20
|
+
let requestAppId = await getAppIdFromCtx(ctx)
|
|
21
21
|
// get app cookie if it exists
|
|
22
22
|
let appCookie = null
|
|
23
23
|
try {
|
|
@@ -71,21 +71,22 @@ module.exports = async (ctx, next) => {
|
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
return doInAppContext(appId, async () => {
|
|
74
|
-
let
|
|
74
|
+
let skipCookie = false
|
|
75
75
|
// if the user not in the right tenant then make sure they have no permissions
|
|
76
76
|
// need to judge this only based on the request app ID,
|
|
77
77
|
if (
|
|
78
78
|
env.MULTI_TENANCY &&
|
|
79
79
|
ctx.user &&
|
|
80
80
|
requestAppId &&
|
|
81
|
-
!isUserInAppTenant(requestAppId)
|
|
81
|
+
!isUserInAppTenant(requestAppId, ctx.user)
|
|
82
82
|
) {
|
|
83
83
|
// don't error, simply remove the users rights (they are a public user)
|
|
84
84
|
delete ctx.user.builder
|
|
85
85
|
delete ctx.user.admin
|
|
86
86
|
delete ctx.user.roles
|
|
87
|
+
ctx.isAuthenticated = false
|
|
87
88
|
roleId = BUILTIN_ROLE_IDS.PUBLIC
|
|
88
|
-
|
|
89
|
+
skipCookie = true
|
|
89
90
|
}
|
|
90
91
|
|
|
91
92
|
ctx.appId = appId
|
|
@@ -105,7 +106,7 @@ module.exports = async (ctx, next) => {
|
|
|
105
106
|
(requestAppId !== appId ||
|
|
106
107
|
appCookie == null ||
|
|
107
108
|
appCookie.appId !== requestAppId) &&
|
|
108
|
-
!
|
|
109
|
+
!skipCookie
|
|
109
110
|
) {
|
|
110
111
|
setCookie(ctx, { appId }, Cookies.CurrentApp)
|
|
111
112
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
const { Headers } = require("@budibase/backend-core/constants")
|
|
2
|
-
const {
|
|
2
|
+
const { getAppIdFromCtx } = require("@budibase/backend-core/utils")
|
|
3
3
|
|
|
4
4
|
module.exports = function ({ requiresAppId } = {}) {
|
|
5
5
|
return async (ctx, next) => {
|
|
6
|
-
const appId =
|
|
6
|
+
const appId = await getAppIdFromCtx(ctx)
|
|
7
7
|
if (requiresAppId && !appId) {
|
|
8
8
|
ctx.throw(
|
|
9
9
|
400,
|
|
@@ -38,7 +38,7 @@ function mockAuthWithNoCookie() {
|
|
|
38
38
|
},
|
|
39
39
|
}))
|
|
40
40
|
jest.mock("@budibase/backend-core/utils", () => ({
|
|
41
|
-
|
|
41
|
+
getAppIdFromCtx: jest.fn(),
|
|
42
42
|
setCookie: jest.fn(),
|
|
43
43
|
getCookie: jest.fn(),
|
|
44
44
|
}))
|
|
@@ -51,7 +51,7 @@ function mockAuthWithCookie() {
|
|
|
51
51
|
jest.resetModules()
|
|
52
52
|
mockWorker()
|
|
53
53
|
jest.mock("@budibase/backend-core/utils", () => ({
|
|
54
|
-
|
|
54
|
+
getAppIdFromCtx: () => {
|
|
55
55
|
return "app_test"
|
|
56
56
|
},
|
|
57
57
|
setCookie: jest.fn(),
|
|
@@ -143,7 +143,7 @@ describe("Current app middleware", () => {
|
|
|
143
143
|
it("should perform correct when no cookie exists", async () => {
|
|
144
144
|
mockReset()
|
|
145
145
|
jest.mock("@budibase/backend-core/utils", () => ({
|
|
146
|
-
|
|
146
|
+
getAppIdFromCtx: () => {
|
|
147
147
|
return "app_test"
|
|
148
148
|
},
|
|
149
149
|
setCookie: jest.fn(),
|
|
@@ -158,7 +158,7 @@ describe("Current app middleware", () => {
|
|
|
158
158
|
it("lastly check what occurs when cookie doesn't need updated", async () => {
|
|
159
159
|
mockReset()
|
|
160
160
|
jest.mock("@budibase/backend-core/utils", () => ({
|
|
161
|
-
|
|
161
|
+
getAppIdFromCtx: () => {
|
|
162
162
|
return "app_test"
|
|
163
163
|
},
|
|
164
164
|
setCookie: jest.fn(),
|
|
@@ -80,7 +80,7 @@ class TestConfiguration {
|
|
|
80
80
|
return request.body
|
|
81
81
|
}
|
|
82
82
|
// check if already in a context
|
|
83
|
-
if (context.getAppId() == null) {
|
|
83
|
+
if (context.getAppId() == null && this.appId !== null) {
|
|
84
84
|
return context.doInAppContext(this.appId, async () => {
|
|
85
85
|
return run()
|
|
86
86
|
})
|