@budibase/server 1.0.19-alpha.2 → 1.0.19-alpha.3

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 (178) hide show
  1. package/builder/assets/{index.2fc6da87.css → index.540a5506.css} +1 -1
  2. package/builder/assets/{index.86b28e1c.js → index.6de3403f.js} +206 -205
  3. package/builder/index.html +2 -2
  4. package/coverage/clover.xml +8 -8
  5. package/coverage/coverage-final.json +1 -1
  6. package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
  7. package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
  8. package/coverage/lcov-report/api/controllers/application.js.html +1 -1
  9. package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
  10. package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
  11. package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
  12. package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
  13. package/coverage/lcov-report/api/controllers/component.js.html +1 -1
  14. package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
  15. package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
  16. package/coverage/lcov-report/api/controllers/hosting.js.html +1 -1
  17. package/coverage/lcov-report/api/controllers/index.html +1 -1
  18. package/coverage/lcov-report/api/controllers/integration.js.html +1 -1
  19. package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
  20. package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
  21. package/coverage/lcov-report/api/controllers/permission.js.html +1 -1
  22. package/coverage/lcov-report/api/controllers/query/index.html +1 -1
  23. package/coverage/lcov-report/api/controllers/query/index.js.html +1 -1
  24. package/coverage/lcov-report/api/controllers/query/validation.js.html +1 -1
  25. package/coverage/lcov-report/api/controllers/role.js.html +1 -1
  26. package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
  27. package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
  28. package/coverage/lcov-report/api/controllers/row/index.html +1 -1
  29. package/coverage/lcov-report/api/controllers/row/index.js.html +1 -1
  30. package/coverage/lcov-report/api/controllers/row/internal.js.html +1 -1
  31. package/coverage/lcov-report/api/controllers/row/internalSearch.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/external.js.html +1 -1
  36. package/coverage/lcov-report/api/controllers/table/index.html +1 -1
  37. package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
  38. package/coverage/lcov-report/api/controllers/table/internal.js.html +1 -1
  39. package/coverage/lcov-report/api/controllers/table/utils.js.html +1 -1
  40. package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
  41. package/coverage/lcov-report/api/controllers/user.js.html +1 -1
  42. package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
  43. package/coverage/lcov-report/api/controllers/view/index.html +1 -1
  44. package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
  45. package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
  46. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
  47. package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
  48. package/coverage/lcov-report/api/index.html +1 -1
  49. package/coverage/lcov-report/api/index.js.html +1 -1
  50. package/coverage/lcov-report/api/routes/analytics.js.html +1 -1
  51. package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
  52. package/coverage/lcov-report/api/routes/application.js.html +1 -1
  53. package/coverage/lcov-report/api/routes/auth.js.html +1 -1
  54. package/coverage/lcov-report/api/routes/automation.js.html +1 -1
  55. package/coverage/lcov-report/api/routes/backup.js.html +1 -1
  56. package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
  57. package/coverage/lcov-report/api/routes/component.js.html +1 -1
  58. package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
  59. package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
  60. package/coverage/lcov-report/api/routes/dev.js.html +1 -1
  61. package/coverage/lcov-report/api/routes/hosting.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/permission.js.html +1 -1
  68. package/coverage/lcov-report/api/routes/query.js.html +1 -1
  69. package/coverage/lcov-report/api/routes/role.js.html +1 -1
  70. package/coverage/lcov-report/api/routes/routing.js.html +1 -1
  71. package/coverage/lcov-report/api/routes/row.js.html +1 -1
  72. package/coverage/lcov-report/api/routes/screen.js.html +1 -1
  73. package/coverage/lcov-report/api/routes/script.js.html +1 -1
  74. package/coverage/lcov-report/api/routes/static.js.html +1 -1
  75. package/coverage/lcov-report/api/routes/table.js.html +1 -1
  76. package/coverage/lcov-report/api/routes/templates.js.html +1 -1
  77. package/coverage/lcov-report/api/routes/user.js.html +1 -1
  78. package/coverage/lcov-report/api/routes/view.js.html +1 -1
  79. package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
  80. package/coverage/lcov-report/automations/actions.js.html +1 -1
  81. package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
  82. package/coverage/lcov-report/automations/bullboard.js.html +1 -1
  83. package/coverage/lcov-report/automations/index.html +1 -1
  84. package/coverage/lcov-report/automations/index.js.html +1 -1
  85. package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
  86. package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
  87. package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
  88. package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
  89. package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
  90. package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
  91. package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
  92. package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
  93. package/coverage/lcov-report/automations/steps/index.html +1 -1
  94. package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
  95. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
  96. package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
  97. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
  98. package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
  99. package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
  100. package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
  101. package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
  102. package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
  103. package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
  104. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
  105. package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
  106. package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
  107. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
  108. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
  109. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
  110. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
  111. package/coverage/lcov-report/automations/triggers.js.html +1 -1
  112. package/coverage/lcov-report/automations/utils.js.html +1 -1
  113. package/coverage/lcov-report/constants/index.html +1 -1
  114. package/coverage/lcov-report/constants/index.js.html +1 -1
  115. package/coverage/lcov-report/constants/layouts.js.html +1 -1
  116. package/coverage/lcov-report/constants/screens.js.html +1 -1
  117. package/coverage/lcov-report/db/client.js.html +1 -1
  118. package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
  119. package/coverage/lcov-report/db/index.html +1 -1
  120. package/coverage/lcov-report/db/index.js.html +1 -1
  121. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
  122. package/coverage/lcov-report/db/linkedRows/index.html +1 -1
  123. package/coverage/lcov-report/db/linkedRows/index.js.html +1 -1
  124. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +1 -1
  125. package/coverage/lcov-report/db/newid.js.html +1 -1
  126. package/coverage/lcov-report/db/utils.js.html +1 -1
  127. package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
  128. package/coverage/lcov-report/events/index.html +1 -1
  129. package/coverage/lcov-report/events/index.js.html +1 -1
  130. package/coverage/lcov-report/events/utils.js.html +1 -1
  131. package/coverage/lcov-report/index.html +1 -1
  132. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
  133. package/coverage/lcov-report/integrations/tests/index.html +1 -1
  134. package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
  135. package/coverage/lcov-report/middleware/authorized.js.html +1 -1
  136. package/coverage/lcov-report/middleware/builder.js.html +1 -1
  137. package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
  138. package/coverage/lcov-report/middleware/index.html +1 -1
  139. package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
  140. package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
  141. package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
  142. package/coverage/lcov-report/middleware/usageQuota.js.html +1 -1
  143. package/coverage/lcov-report/middleware/utils.js.html +1 -1
  144. package/coverage/lcov-report/threads/automation.js.html +1 -1
  145. package/coverage/lcov-report/threads/index.html +1 -1
  146. package/coverage/lcov-report/threads/index.js.html +1 -1
  147. package/coverage/lcov-report/threads/query.js.html +1 -1
  148. package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
  149. package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
  150. package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
  151. package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
  152. package/coverage/lcov-report/utilities/global.js.html +1 -1
  153. package/coverage/lcov-report/utilities/index.html +1 -1
  154. package/coverage/lcov-report/utilities/index.js.html +7 -7
  155. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
  156. package/coverage/lcov-report/utilities/queue/index.html +1 -1
  157. package/coverage/lcov-report/utilities/routing/index.html +1 -1
  158. package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
  159. package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
  160. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +1 -1
  161. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +1 -1
  162. package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
  163. package/coverage/lcov-report/utilities/security.js.html +1 -1
  164. package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
  165. package/coverage/lcov-report/utilities/users.js.html +1 -1
  166. package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
  167. package/coverage/lcov.info +13 -13
  168. package/dist/definitions/datasource.js +6 -1
  169. package/dist/integrations/rest.js +28 -3
  170. package/dist/package.json +4 -4
  171. package/dist/tsconfig.tsbuildinfo +1 -1
  172. package/package.json +5 -5
  173. package/src/api/controllers/query/import/index.ts +1 -1
  174. package/src/api/controllers/query/import/sources/curl.ts +1 -1
  175. package/src/definitions/datasource.ts +23 -0
  176. package/src/integrations/base/IntegrationBase.ts +4 -4
  177. package/src/integrations/rest.ts +39 -2
  178. package/src/integrations/tests/rest.spec.js +55 -0
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.19-alpha.2",
4
+ "version": "1.0.19-alpha.3",
5
5
  "description": "Budibase Web Server",
6
6
  "main": "src/index.ts",
7
7
  "repository": {
@@ -70,9 +70,9 @@
70
70
  "license": "GPL-3.0",
71
71
  "dependencies": {
72
72
  "@apidevtools/swagger-parser": "^10.0.3",
73
- "@budibase/auth": "^1.0.19-alpha.2",
74
- "@budibase/client": "^1.0.19-alpha.2",
75
- "@budibase/string-templates": "^1.0.19-alpha.2",
73
+ "@budibase/auth": "^1.0.19-alpha.3",
74
+ "@budibase/client": "^1.0.19-alpha.3",
75
+ "@budibase/string-templates": "^1.0.19-alpha.3",
76
76
  "@bull-board/api": "^3.7.0",
77
77
  "@bull-board/koa": "^3.7.0",
78
78
  "@elastic/elasticsearch": "7.10.0",
@@ -162,5 +162,5 @@
162
162
  "optionalDependencies": {
163
163
  "oracledb": "^5.3.0"
164
164
  },
165
- "gitHead": "13dd988c51c1fd2ebfddeac8476577f52e4516cf"
165
+ "gitHead": "c9f8ffdd5c30919e4d3e765b248953d754530915"
166
166
  }
@@ -3,7 +3,7 @@ import { queryValidation } from "../validation"
3
3
  import { generateQueryID } from "../../../../db/utils"
4
4
  import { ImportInfo, ImportSource } from "./sources/base"
5
5
  import { OpenAPI2 } from "./sources/openapi2"
6
- import { Query } from './../../../../definitions/common';
6
+ import { Query } from "./../../../../definitions/common"
7
7
  import { Curl } from "./sources/curl"
8
8
  interface ImportResult {
9
9
  errorQueries: Query[]
@@ -29,7 +29,7 @@ const parseBody = (curl: any) => {
29
29
  }
30
30
 
31
31
  const parseCookie = (curl: any) => {
32
- if (curl.cookies){
32
+ if (curl.cookies) {
33
33
  return Object.entries(curl.cookies).reduce((acc, entry) => {
34
34
  const [key, value] = entry
35
35
  return acc + `${key}=${value}; `
@@ -196,6 +196,27 @@ export interface Datasource extends Base {
196
196
  }
197
197
  }
198
198
 
199
+ export enum AuthType {
200
+ BASIC = "basic",
201
+ BEARER = "bearer",
202
+ }
203
+
204
+ interface AuthConfig {
205
+ _id: string
206
+ name: string
207
+ type: AuthType
208
+ config: BasicAuthConfig | BearerAuthConfig
209
+ }
210
+
211
+ export interface BasicAuthConfig {
212
+ username: string
213
+ password: string
214
+ }
215
+
216
+ export interface BearerAuthConfig {
217
+ token: string
218
+ }
219
+
199
220
  export interface QueryParameter {
200
221
  name: string
201
222
  default: string
@@ -210,6 +231,7 @@ export interface RestQueryFields {
210
231
  bodyType: string
211
232
  json: object
212
233
  method: string
234
+ authConfigId: string
213
235
  }
214
236
 
215
237
  export interface RestConfig {
@@ -217,6 +239,7 @@ export interface RestConfig {
217
239
  defaultHeaders: {
218
240
  [key: string]: any
219
241
  }
242
+ authConfigs: AuthConfig[]
220
243
  }
221
244
 
222
245
  export interface Query {
@@ -1,6 +1,6 @@
1
1
  export interface IntegrationBase {
2
- create?(query: any): Promise<any[]|any>
3
- read?(query: any): Promise<any[]|any>
4
- update?(query: any): Promise<any[]|any>
5
- delete?(query: any): Promise<any[]|any>
2
+ create?(query: any): Promise<any[] | any>
3
+ read?(query: any): Promise<any[] | any>
4
+ update?(query: any): Promise<any[] | any>
5
+ delete?(query: any): Promise<any[] | any>
6
6
  }
@@ -4,6 +4,9 @@ import {
4
4
  QueryTypes,
5
5
  RestConfig,
6
6
  RestQueryFields as RestQuery,
7
+ AuthType,
8
+ BasicAuthConfig,
9
+ BearerAuthConfig
7
10
  } from "../definitions/datasource"
8
11
  import { IntegrationBase } from "./base/IntegrationBase"
9
12
 
@@ -147,11 +150,43 @@ module RestModule {
147
150
  return complete
148
151
  }
149
152
 
153
+ getAuthHeaders(authConfigId: string): { [key: string]: any }{
154
+ let headers: any = {}
155
+
156
+ if (this.config.authConfigs && authConfigId) {
157
+ const authConfig = this.config.authConfigs.filter(
158
+ c => c._id === authConfigId
159
+ )[0]
160
+ // check the config still exists before proceeding
161
+ // if not - do nothing
162
+ if (authConfig) {
163
+ let config
164
+ switch (authConfig.type) {
165
+ case AuthType.BASIC:
166
+ config = authConfig.config as BasicAuthConfig
167
+ headers.Authorization = `Basic ${Buffer.from(
168
+ `${config.username}:${config.password}`
169
+ ).toString("base64")}`
170
+ break
171
+ case AuthType.BEARER:
172
+ config = authConfig.config as BearerAuthConfig
173
+ headers.Authorization = `Bearer ${config.token}`
174
+ break
175
+ }
176
+ }
177
+ }
178
+
179
+ return headers
180
+ }
181
+
150
182
  async _req(query: RestQuery) {
151
- const { path = "", queryString = "", headers = {}, method = "GET", disabledHeaders, bodyType, requestBody } = query
183
+ const { path = "", queryString = "", headers = {}, method = "GET", disabledHeaders, bodyType, requestBody, authConfigId } = query
184
+ const authHeaders = this.getAuthHeaders(authConfigId)
185
+
152
186
  this.headers = {
153
187
  ...this.config.defaultHeaders,
154
188
  ...headers,
189
+ ...authHeaders,
155
190
  }
156
191
 
157
192
  if (disabledHeaders) {
@@ -177,7 +212,8 @@ module RestModule {
177
212
  }
178
213
 
179
214
  this.startTimeMs = performance.now()
180
- const response = await fetch(this.getUrl(path, queryString), input)
215
+ const url = this.getUrl(path, queryString)
216
+ const response = await fetch(url, input)
181
217
  return await this.parseResponse(response)
182
218
  }
183
219
 
@@ -205,5 +241,6 @@ module RestModule {
205
241
  module.exports = {
206
242
  schema: SCHEMA,
207
243
  integration: RestIntegration,
244
+ AuthType,
208
245
  }
209
246
  }
@@ -12,6 +12,7 @@ jest.mock("node-fetch", () =>
12
12
  )
13
13
  const fetch = require("node-fetch")
14
14
  const RestIntegration = require("../rest")
15
+ const { AuthType } = require("../rest")
15
16
 
16
17
  class TestConfiguration {
17
18
  constructor(config = {}) {
@@ -112,4 +113,58 @@ describe("REST Integration", () => {
112
113
  body: '{"name":"test"}',
113
114
  })
114
115
  })
116
+
117
+ describe("authentication", () => {
118
+ const basicAuth = {
119
+ _id: "c59c14bd1898a43baa08da68959b24686",
120
+ name: "basic-1",
121
+ type : AuthType.BASIC,
122
+ config : {
123
+ username: "user",
124
+ password: "password"
125
+ }
126
+ }
127
+
128
+ const bearerAuth = {
129
+ _id: "0d91d732f34e4befabeff50b392a8ff3",
130
+ name: "bearer-1",
131
+ type : AuthType.BEARER,
132
+ config : {
133
+ "token": "mytoken"
134
+ }
135
+ }
136
+
137
+ beforeEach(() => {
138
+ config = new TestConfiguration({
139
+ url: BASE_URL,
140
+ authConfigs : [basicAuth, bearerAuth]
141
+ })
142
+ })
143
+
144
+ it("adds basic auth", async () => {
145
+ const query = {
146
+ authConfigId: "c59c14bd1898a43baa08da68959b24686"
147
+ }
148
+ await config.integration.read(query)
149
+ expect(fetch).toHaveBeenCalledWith(`${BASE_URL}/?`, {
150
+ method: "GET",
151
+ headers: {
152
+ Authorization: "Basic dXNlcjpwYXNzd29yZA=="
153
+ },
154
+ })
155
+ })
156
+
157
+ it("adds bearer auth", async () => {
158
+ const query = {
159
+ authConfigId: "0d91d732f34e4befabeff50b392a8ff3"
160
+ }
161
+ await config.integration.read(query)
162
+ expect(fetch).toHaveBeenCalledWith(`${BASE_URL}/?`, {
163
+ method: "GET",
164
+ headers: {
165
+ Authorization: "Bearer mytoken"
166
+ },
167
+ })
168
+ })
169
+ })
115
170
  })