@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.
Files changed (208) hide show
  1. package/builder/assets/{index.305b7738.js → index.3c2af30f.js} +1 -1
  2. package/builder/index.html +1 -1
  3. package/coverage/clover.xml +107 -107
  4. package/coverage/coverage-final.json +12 -12
  5. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  6. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  7. package/coverage/lcov-report/api/controllers/application.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/auth.js.html +2 -2
  9. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/index.html +1 -1
  16. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  18. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  22. package/coverage/lcov-report/api/controllers/query/index.js.html +1 -1
  23. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/index.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/index.js.html +20 -20
  29. package/coverage/lcov-report/api/controllers/row/internal.js.html +29 -29
  30. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
  32. package/coverage/lcov-report/api/controllers/row/utils.js.html +1 -1
  33. package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
  34. package/coverage/lcov-report/api/controllers/script.js.html +1 -1
  35. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/table/external.js.html +4 -4
  37. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  38. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/table/internal.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/table/utils.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  44. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  46. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  47. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  48. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  49. package/coverage/lcov-report/api/index.html +15 -15
  50. package/coverage/lcov-report/api/index.js.html +15 -27
  51. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  62. package/coverage/lcov-report/api/routes/index.html +1 -1
  63. package/coverage/lcov-report/api/routes/index.js.html +1 -1
  64. package/coverage/lcov-report/api/routes/integration.js.html +1 -1
  65. package/coverage/lcov-report/api/routes/layout.js.html +1 -1
  66. package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
  67. package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/permission.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/static.js.html +3 -6
  76. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/utils/index.html +1 -1
  80. package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
  81. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  82. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  83. package/coverage/lcov-report/automations/actions.js.html +1 -1
  84. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  85. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  86. package/coverage/lcov-report/automations/index.html +1 -1
  87. package/coverage/lcov-report/automations/index.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  94. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/index.html +5 -5
  97. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  99. package/coverage/lcov-report/automations/steps/queryRows.js.html +4 -4
  100. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  101. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  102. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  103. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  104. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  105. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  106. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  107. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  108. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  109. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  110. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  111. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  112. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  113. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  114. package/coverage/lcov-report/automations/triggers.js.html +3 -3
  115. package/coverage/lcov-report/automations/utils.js.html +1 -1
  116. package/coverage/lcov-report/constants/index.html +1 -1
  117. package/coverage/lcov-report/constants/index.js.html +1 -1
  118. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  119. package/coverage/lcov-report/constants/screens.js.html +1 -1
  120. package/coverage/lcov-report/db/client.js.html +1 -1
  121. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  122. package/coverage/lcov-report/db/index.html +1 -1
  123. package/coverage/lcov-report/db/index.js.html +1 -1
  124. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  125. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  126. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  127. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  128. package/coverage/lcov-report/db/newid.js.html +2 -2
  129. package/coverage/lcov-report/db/utils.js.html +3 -3
  130. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  131. package/coverage/lcov-report/events/index.html +1 -1
  132. package/coverage/lcov-report/events/index.js.html +1 -1
  133. package/coverage/lcov-report/events/utils.js.html +1 -1
  134. package/coverage/lcov-report/index.html +23 -23
  135. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  136. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  137. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  138. package/coverage/lcov-report/middleware/authorized.js.html +1 -1
  139. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  140. package/coverage/lcov-report/middleware/currentapp.js.html +15 -12
  141. package/coverage/lcov-report/middleware/index.html +11 -11
  142. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  143. package/coverage/lcov-report/middleware/publicApi.js.html +3 -3
  144. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  145. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  146. package/coverage/lcov-report/middleware/usageQuota.js.html +1 -1
  147. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  148. package/coverage/lcov-report/threads/automation.js.html +1 -1
  149. package/coverage/lcov-report/threads/index.html +1 -1
  150. package/coverage/lcov-report/threads/index.js.html +1 -1
  151. package/coverage/lcov-report/threads/query.js.html +1 -1
  152. package/coverage/lcov-report/threads/utils.js.html +1 -1
  153. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  154. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  155. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  156. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  157. package/coverage/lcov-report/utilities/global.js.html +1 -1
  158. package/coverage/lcov-report/utilities/index.html +1 -1
  159. package/coverage/lcov-report/utilities/index.js.html +1 -1
  160. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  161. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  162. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  163. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  164. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  165. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +13 -13
  166. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  167. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  168. package/coverage/lcov-report/utilities/security.js.html +1 -1
  169. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  170. package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
  171. package/coverage/lcov-report/utilities/usageQuota/index.js.html +1 -1
  172. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
  173. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
  174. package/coverage/lcov-report/utilities/users.js.html +1 -1
  175. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  176. package/coverage/lcov.info +163 -164
  177. package/dist/api/controllers/auth.js +1 -1
  178. package/dist/api/controllers/public/rows.js +2 -2
  179. package/dist/api/controllers/static/index.js +2 -15
  180. package/dist/api/controllers/table/external.js +3 -3
  181. package/dist/api/index.js +3 -6
  182. package/dist/api/routes/static.js +1 -2
  183. package/dist/automations/steps/queryRows.js +1 -1
  184. package/dist/db/views/staticViews.js +2 -0
  185. package/dist/middleware/currentapp.js +7 -6
  186. package/dist/middleware/publicApi.js +2 -2
  187. package/dist/package.json +4 -8
  188. package/dist/tests/utilities/TestConfiguration.js +1 -1
  189. package/dist/tsconfig.tsbuildinfo +1 -1
  190. package/package.json +5 -9
  191. package/scripts/integrations/customer-categories/docker-compose.yml +2 -2
  192. package/scripts/integrations/oracle/docker-compose.yml +1 -1
  193. package/scripts/integrations/postgres/docker-compose.yml +2 -2
  194. package/scripts/integrations/service-vehicles/docker-compose.yml +2 -2
  195. package/src/api/controllers/auth.js +1 -1
  196. package/src/api/controllers/public/rows.ts +2 -4
  197. package/src/api/controllers/static/index.js +2 -18
  198. package/src/api/controllers/table/external.js +3 -3
  199. package/src/api/index.js +3 -7
  200. package/src/api/routes/static.js +1 -2
  201. package/src/automations/steps/queryRows.js +1 -1
  202. package/src/db/views/staticViews.js +2 -0
  203. package/src/middleware/currentapp.js +7 -6
  204. package/src/middleware/publicApi.js +2 -2
  205. package/src/middleware/tests/authorized.spec.js +1 -3
  206. package/src/middleware/tests/currentapp.spec.js +4 -4
  207. package/src/tests/utilities/TestConfiguration.js +1 -1
  208. 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.94",
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.94",
75
- "@budibase/client": "^1.0.94",
76
- "@budibase/string-templates": "^1.0.94",
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": "01c2b9e4968883f6fb29e8c8d5b1f82f0ecbf4bb"
174
+ "gitHead": "1eaadeda8739f51399fb1be132964e28f870958e"
179
175
  }
@@ -3,7 +3,7 @@ services:
3
3
  db:
4
4
  container_name: postgres
5
5
  image: postgres
6
- restart: always
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: always
20
+ restart: unless-stopped
21
21
  environment:
22
22
  PGADMIN_DEFAULT_EMAIL: root@root.com
23
23
  PGADMIN_DEFAULT_PASSWORD: root
@@ -4,7 +4,7 @@
4
4
  version: "3.8"
5
5
  services:
6
6
  db:
7
- restart: always
7
+ restart: unless-stopped
8
8
  platform: linux/x86_64
9
9
  image: container-registry.oracle.com/database/express:18.4.0-xe
10
10
  environment:
@@ -3,7 +3,7 @@ services:
3
3
  db:
4
4
  container_name: postgres
5
5
  image: postgres
6
- restart: always
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: always
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: always
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: always
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.tableId))
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, updateAppId } = require("@budibase/backend-core/context")
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 = primary
122
- column.throughTo = relatedPrimary
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.throughFrom
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())
@@ -44,8 +44,7 @@ router
44
44
  authorized(PermissionTypes.TABLE, PermissionLevels.WRITE),
45
45
  controller.uploadFile
46
46
  )
47
- // TODO: this likely needs to be secured in some way
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
- getAppId,
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 = getAppId(ctx)
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 noCookieSet = false
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
- noCookieSet = true
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
- !noCookieSet
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 { getAppId } = require("@budibase/backend-core/utils")
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 = getAppId(ctx)
6
+ const appId = await getAppIdFromCtx(ctx)
7
7
  if (requiresAppId && !appId) {
8
8
  ctx.throw(
9
9
  400,
@@ -35,9 +35,7 @@ class TestConfiguration {
35
35
  }
36
36
 
37
37
  executeMiddleware() {
38
- return doInAppContext(APP_ID, () => {
39
- return this.middleware(this.ctx, this.next)
40
- })
38
+ return this.middleware(this.ctx, this.next)
41
39
  }
42
40
 
43
41
  setUser(user) {
@@ -38,7 +38,7 @@ function mockAuthWithNoCookie() {
38
38
  },
39
39
  }))
40
40
  jest.mock("@budibase/backend-core/utils", () => ({
41
- getAppId: jest.fn(),
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
- getAppId: () => {
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
- getAppId: () => {
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
- getAppId: () => {
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
  })
package/.eslintrc DELETED
@@ -1,13 +0,0 @@
1
- {
2
- "globals": {
3
- "emit": true,
4
- "key": true
5
- },
6
- "parser": "@typescript-eslint/parser",
7
- "env": {
8
- "node": true
9
- },
10
- "extends": ["eslint:recommended"],
11
- "rules": {
12
- }
13
- }