@budibase/server 1.0.105-alpha.21 → 1.0.105-alpha.24

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 (292) hide show
  1. package/builder/assets/{index.8d922c8c.js → index.06b1c616.js} +150 -147
  2. package/builder/assets/{index.b7e0672d.css → index.e3fb1cb4.css} +2 -2
  3. package/builder/index.html +2 -2
  4. package/coverage/clover.xml +517 -1564
  5. package/coverage/coverage-final.json +27 -43
  6. package/coverage/lcov-report/api/controllers/analytics.js.html +8 -3
  7. package/coverage/lcov-report/api/controllers/apikeys.js.html +9 -4
  8. package/coverage/lcov-report/api/controllers/auth.js.html +8 -3
  9. package/coverage/lcov-report/api/controllers/automation.js.html +8 -3
  10. package/coverage/lcov-report/api/controllers/backup.js.html +8 -3
  11. package/coverage/lcov-report/api/controllers/cloud.js.html +8 -3
  12. package/coverage/lcov-report/api/controllers/component.js.html +8 -3
  13. package/coverage/lcov-report/api/controllers/datasource.js.html +11 -6
  14. package/coverage/lcov-report/api/controllers/dev.js.html +8 -3
  15. package/coverage/lcov-report/api/controllers/index.html +16 -26
  16. package/coverage/lcov-report/api/controllers/integration.js.html +8 -3
  17. package/coverage/lcov-report/api/controllers/layout.js.html +8 -3
  18. package/coverage/lcov-report/api/controllers/metadata.js.html +8 -3
  19. package/coverage/lcov-report/api/controllers/migrations.js.html +8 -3
  20. package/coverage/lcov-report/api/controllers/permission.js.html +8 -3
  21. package/coverage/lcov-report/api/controllers/query/index.html +16 -26
  22. package/coverage/lcov-report/api/controllers/query/validation.js.html +8 -3
  23. package/coverage/lcov-report/api/controllers/role.js.html +10 -5
  24. package/coverage/lcov-report/api/controllers/routing.js.html +9 -4
  25. package/coverage/lcov-report/api/controllers/row/external.js.html +8 -3
  26. package/coverage/lcov-report/api/controllers/row/index.html +23 -33
  27. package/coverage/lcov-report/api/controllers/row/internal.js.html +32 -24
  28. package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +21 -16
  29. package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +24 -19
  30. package/coverage/lcov-report/api/controllers/row/utils.js.html +20 -15
  31. package/coverage/lcov-report/api/controllers/screen.js.html +9 -4
  32. package/coverage/lcov-report/api/controllers/script.js.html +8 -3
  33. package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +52 -47
  34. package/coverage/lcov-report/api/controllers/table/external.js.html +8 -3
  35. package/coverage/lcov-report/api/controllers/table/index.html +17 -42
  36. package/coverage/lcov-report/api/controllers/table/index.js.html +20 -15
  37. package/coverage/lcov-report/api/controllers/templates.js.html +8 -3
  38. package/coverage/lcov-report/api/controllers/user.js.html +8 -3
  39. package/coverage/lcov-report/api/controllers/view/exporters.js.html +8 -3
  40. package/coverage/lcov-report/api/controllers/view/index.html +8 -3
  41. package/coverage/lcov-report/api/controllers/view/index.js.html +10 -5
  42. package/coverage/lcov-report/api/controllers/view/utils.js.html +8 -3
  43. package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +8 -3
  44. package/coverage/lcov-report/api/controllers/webhook.js.html +10 -5
  45. package/coverage/lcov-report/api/index.html +18 -13
  46. package/coverage/lcov-report/api/index.js.html +28 -8
  47. package/coverage/lcov-report/api/routes/analytics.js.html +8 -3
  48. package/coverage/lcov-report/api/routes/apikeys.js.html +8 -3
  49. package/coverage/lcov-report/api/routes/auth.js.html +8 -3
  50. package/coverage/lcov-report/api/routes/automation.js.html +8 -3
  51. package/coverage/lcov-report/api/routes/backup.js.html +8 -3
  52. package/coverage/lcov-report/api/routes/cloud.js.html +8 -3
  53. package/coverage/lcov-report/api/routes/component.js.html +8 -3
  54. package/coverage/lcov-report/api/routes/datasource.js.html +8 -3
  55. package/coverage/lcov-report/api/routes/deploy.js.html +8 -3
  56. package/coverage/lcov-report/api/routes/dev.js.html +9 -4
  57. package/coverage/lcov-report/api/routes/index.html +13 -68
  58. package/coverage/lcov-report/api/routes/integration.js.html +8 -3
  59. package/coverage/lcov-report/api/routes/layout.js.html +8 -3
  60. package/coverage/lcov-report/api/routes/metadata.js.html +8 -3
  61. package/coverage/lcov-report/api/routes/migrations.js.html +8 -3
  62. package/coverage/lcov-report/api/routes/permission.js.html +8 -3
  63. package/coverage/lcov-report/api/routes/query.js.html +8 -3
  64. package/coverage/lcov-report/api/routes/role.js.html +8 -3
  65. package/coverage/lcov-report/api/routes/routing.js.html +8 -3
  66. package/coverage/lcov-report/api/routes/screen.js.html +8 -3
  67. package/coverage/lcov-report/api/routes/script.js.html +8 -3
  68. package/coverage/lcov-report/api/routes/table.js.html +8 -3
  69. package/coverage/lcov-report/api/routes/templates.js.html +8 -3
  70. package/coverage/lcov-report/api/routes/user.js.html +8 -3
  71. package/coverage/lcov-report/api/routes/utils/index.html +8 -3
  72. package/coverage/lcov-report/api/routes/utils/validators.js.html +8 -3
  73. package/coverage/lcov-report/api/routes/view.js.html +8 -3
  74. package/coverage/lcov-report/api/routes/webhook.js.html +8 -3
  75. package/coverage/lcov-report/automations/actions.js.html +9 -4
  76. package/coverage/lcov-report/automations/automationUtils.js.html +20 -15
  77. package/coverage/lcov-report/automations/bullboard.js.html +8 -3
  78. package/coverage/lcov-report/automations/index.html +16 -26
  79. package/coverage/lcov-report/automations/index.js.html +8 -3
  80. package/coverage/lcov-report/automations/steps/bash.js.html +8 -3
  81. package/coverage/lcov-report/automations/steps/delay.js.html +8 -3
  82. package/coverage/lcov-report/automations/steps/discord.js.html +8 -3
  83. package/coverage/lcov-report/automations/steps/executeQuery.js.html +8 -3
  84. package/coverage/lcov-report/automations/steps/executeScript.js.html +8 -3
  85. package/coverage/lcov-report/automations/steps/filter.js.html +8 -3
  86. package/coverage/lcov-report/automations/steps/index.html +16 -41
  87. package/coverage/lcov-report/automations/steps/integromat.js.html +8 -3
  88. package/coverage/lcov-report/automations/steps/loop.js.html +8 -3
  89. package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +9 -4
  90. package/coverage/lcov-report/automations/steps/queryRows.js.html +9 -4
  91. package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +8 -3
  92. package/coverage/lcov-report/automations/steps/serverLog.js.html +8 -3
  93. package/coverage/lcov-report/automations/steps/slack.js.html +8 -3
  94. package/coverage/lcov-report/automations/steps/updateRow.js.html +8 -3
  95. package/coverage/lcov-report/automations/steps/utils.js.html +14 -9
  96. package/coverage/lcov-report/automations/steps/zapier.js.html +8 -3
  97. package/coverage/lcov-report/automations/triggerInfo/app.js.html +8 -3
  98. package/coverage/lcov-report/automations/triggerInfo/cron.js.html +8 -3
  99. package/coverage/lcov-report/automations/triggerInfo/index.html +8 -3
  100. package/coverage/lcov-report/automations/triggerInfo/index.js.html +8 -3
  101. package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +8 -3
  102. package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +8 -3
  103. package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +8 -3
  104. package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +8 -3
  105. package/coverage/lcov-report/automations/triggers.js.html +16 -11
  106. package/coverage/lcov-report/block-navigation.js +8 -0
  107. package/coverage/lcov-report/constants/index.html +8 -3
  108. package/coverage/lcov-report/constants/index.js.html +35 -30
  109. package/coverage/lcov-report/constants/layouts.js.html +8 -3
  110. package/coverage/lcov-report/constants/screens.js.html +8 -3
  111. package/coverage/lcov-report/db/client.js.html +26 -21
  112. package/coverage/lcov-report/db/inMemoryView.js.html +8 -3
  113. package/coverage/lcov-report/db/index.html +8 -3
  114. package/coverage/lcov-report/db/index.js.html +10 -5
  115. package/coverage/lcov-report/db/linkedRows/LinkController.js.html +20 -15
  116. package/coverage/lcov-report/db/linkedRows/index.html +8 -3
  117. package/coverage/lcov-report/db/linkedRows/index.js.html +22 -17
  118. package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +12 -7
  119. package/coverage/lcov-report/db/newid.js.html +11 -6
  120. package/coverage/lcov-report/db/utils.js.html +83 -78
  121. package/coverage/lcov-report/events/AutomationEmitter.js.html +14 -9
  122. package/coverage/lcov-report/events/index.html +8 -3
  123. package/coverage/lcov-report/events/index.js.html +9 -4
  124. package/coverage/lcov-report/events/utils.js.html +18 -13
  125. package/coverage/lcov-report/index.html +122 -117
  126. package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +8 -3
  127. package/coverage/lcov-report/integrations/tests/index.html +8 -3
  128. package/coverage/lcov-report/middleware/appInfo.js.html +8 -3
  129. package/coverage/lcov-report/middleware/builder.js.html +8 -3
  130. package/coverage/lcov-report/middleware/currentapp.js.html +11 -6
  131. package/coverage/lcov-report/middleware/index.html +16 -41
  132. package/coverage/lcov-report/middleware/joi-validator.js.html +9 -4
  133. package/coverage/lcov-report/middleware/publicApi.js.html +8 -3
  134. package/coverage/lcov-report/middleware/resourceId.js.html +8 -3
  135. package/coverage/lcov-report/middleware/selfhost.js.html +9 -4
  136. package/coverage/lcov-report/middleware/utils.js.html +8 -3
  137. package/coverage/lcov-report/sorter.js +26 -0
  138. package/coverage/lcov-report/threads/automation.js.html +55 -50
  139. package/coverage/lcov-report/threads/index.html +16 -26
  140. package/coverage/lcov-report/threads/query.js.html +10 -5
  141. package/coverage/lcov-report/threads/utils.js.html +11 -6
  142. package/coverage/lcov-report/utilities/bcrypt.js.html +8 -3
  143. package/coverage/lcov-report/utilities/budibaseDir.js.html +8 -3
  144. package/coverage/lcov-report/utilities/centralPath.js.html +8 -3
  145. package/coverage/lcov-report/utilities/csvParser.js.html +10 -5
  146. package/coverage/lcov-report/utilities/global.js.html +9 -4
  147. package/coverage/lcov-report/utilities/index.html +8 -3
  148. package/coverage/lcov-report/utilities/index.js.html +11 -6
  149. package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +32 -9
  150. package/coverage/lcov-report/utilities/queue/index.html +12 -7
  151. package/coverage/lcov-report/utilities/routing/index.html +8 -3
  152. package/coverage/lcov-report/utilities/routing/index.js.html +8 -3
  153. package/coverage/lcov-report/utilities/rowProcessor/index.html +8 -3
  154. package/coverage/lcov-report/utilities/rowProcessor/index.js.html +46 -41
  155. package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +18 -13
  156. package/coverage/lcov-report/utilities/scriptRunner.js.html +8 -3
  157. package/coverage/lcov-report/utilities/security.js.html +9 -4
  158. package/coverage/lcov-report/utilities/statusCodes.js.html +8 -3
  159. package/coverage/lcov-report/utilities/usageQuota/index.html +24 -34
  160. package/coverage/lcov-report/utilities/usageQuota/rows.js.html +45 -40
  161. package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +8 -3
  162. package/coverage/lcov-report/utilities/users.js.html +8 -3
  163. package/coverage/lcov-report/utilities/workerRequests.js.html +9 -4
  164. package/coverage/lcov.info +759 -2599
  165. package/dist/api/controllers/application.js +138 -70
  166. package/dist/api/controllers/deploy/index.js +64 -35
  167. package/dist/api/controllers/public/applications.js +29 -9
  168. package/dist/api/controllers/public/queries.js +27 -7
  169. package/dist/api/controllers/public/rows.js +32 -12
  170. package/dist/api/controllers/public/tables.js +2 -2
  171. package/dist/api/controllers/public/users.js +8 -8
  172. package/dist/api/controllers/public/utils.js +1 -1
  173. package/dist/api/controllers/query/import/index.js +3 -3
  174. package/dist/api/controllers/query/index.js +57 -44
  175. package/dist/api/controllers/row/ExternalRequest.js +27 -27
  176. package/dist/api/controllers/row/index.js +83 -60
  177. package/dist/api/controllers/row/internal.js +2 -1
  178. package/dist/api/controllers/table/internal.js +40 -34
  179. package/dist/api/controllers/table/utils.js +271 -229
  180. package/dist/api/index.js +5 -0
  181. package/dist/api/routes/application.js +39 -13
  182. package/dist/api/routes/index.js +61 -56
  183. package/dist/api/routes/public/index.js +6 -9
  184. package/dist/api/routes/public/queries.js +1 -1
  185. package/dist/api/routes/public/rows.js +1 -1
  186. package/dist/api/routes/public/tables.js +3 -3
  187. package/dist/api/routes/public/users.js +1 -1
  188. package/dist/api/routes/row.js +43 -17
  189. package/dist/api/routes/static.js +40 -13
  190. package/dist/api/routes/tests/utilities/TestFunctions.js +62 -26
  191. package/dist/app.js +11 -4
  192. package/dist/automations/steps/createRow.js +12 -12
  193. package/dist/automations/steps/deleteRow.js +13 -16
  194. package/dist/automations/tests/utilities/index.js +0 -2
  195. package/dist/automations/utils.js +187 -132
  196. package/dist/environment.js +0 -2
  197. package/dist/integrations/base/sql.js +2 -2
  198. package/dist/integrations/base/sqlTable.js +2 -2
  199. package/dist/integrations/googlesheets.js +1 -1
  200. package/dist/integrations/microsoftSqlServer.js +8 -8
  201. package/dist/integrations/mysql.js +9 -9
  202. package/dist/integrations/oracle.js +7 -7
  203. package/dist/integrations/postgres.js +7 -7
  204. package/dist/integrations/rest.js +1 -1
  205. package/dist/middleware/authorized.js +51 -51
  206. package/dist/migrations/functions/appUrls.js +1 -1
  207. package/dist/migrations/functions/developerQuota.js +49 -0
  208. package/dist/migrations/functions/publishedAppsQuota.js +47 -0
  209. package/dist/migrations/functions/quotas1.js +6 -2
  210. package/dist/migrations/functions/usageQuotas/index.js +0 -4
  211. package/dist/migrations/functions/usageQuotas/syncApps.js +4 -7
  212. package/dist/migrations/functions/usageQuotas/syncDevelopers.js +24 -0
  213. package/dist/migrations/functions/usageQuotas/syncPublishedApps.js +26 -0
  214. package/dist/migrations/functions/usageQuotas/syncRows.js +5 -8
  215. package/dist/migrations/index.js +17 -1
  216. package/dist/package.json +10 -8
  217. package/dist/threads/index.js +35 -8
  218. package/dist/tsconfig.build.tsbuildinfo +1 -0
  219. package/dist/utilities/queue/inMemoryQueue.js +6 -1
  220. package/nodemon.json +1 -1
  221. package/package.json +11 -9
  222. package/scripts/dev/manage.js +2 -0
  223. package/src/api/controllers/{application.js → application.ts} +103 -44
  224. package/src/api/controllers/deploy/{index.js → index.ts} +45 -28
  225. package/src/api/controllers/public/applications.ts +2 -2
  226. package/src/api/controllers/public/queries.ts +1 -1
  227. package/src/api/controllers/public/rows.ts +1 -1
  228. package/src/api/controllers/query/{index.js → index.ts} +51 -48
  229. package/src/api/controllers/row/ExternalRequest.ts +1 -1
  230. package/src/api/controllers/row/{index.js → index.ts} +24 -17
  231. package/src/api/controllers/row/internal.js +2 -1
  232. package/src/api/controllers/table/{internal.js → internal.ts} +27 -24
  233. package/src/api/controllers/table/{utils.js → utils.ts} +86 -69
  234. package/src/api/index.js +5 -0
  235. package/src/api/routes/{application.js → application.ts} +8 -14
  236. package/src/api/routes/index.ts +60 -0
  237. package/src/api/routes/public/index.ts +1 -4
  238. package/src/api/routes/{row.js → row.ts} +7 -15
  239. package/src/api/routes/{static.js → static.ts} +11 -11
  240. package/src/api/routes/tests/utilities/{TestFunctions.js → TestFunctions.ts} +42 -25
  241. package/src/app.ts +1 -2
  242. package/src/automations/steps/{createRow.js → createRow.ts} +9 -15
  243. package/src/automations/steps/{deleteRow.js → deleteRow.ts} +10 -16
  244. package/src/automations/tests/automation.spec.js +0 -1
  245. package/src/automations/tests/{createRow.spec.js → createRow.spec.ts} +4 -15
  246. package/src/automations/tests/{deleteRow.spec.js → deleteRow.spec.ts} +3 -5
  247. package/src/automations/tests/utilities/index.js +0 -2
  248. package/src/automations/{utils.js → utils.ts} +39 -27
  249. package/src/environment.js +0 -2
  250. package/src/middleware/{authorized.js → authorized.ts} +20 -14
  251. package/src/migrations/functions/developerQuota.ts +15 -0
  252. package/src/migrations/functions/publishedAppsQuota.ts +13 -0
  253. package/src/migrations/functions/tests/quotas1.spec.js +0 -2
  254. package/src/migrations/functions/usageQuotas/index.ts +0 -5
  255. package/src/migrations/functions/usageQuotas/syncApps.ts +3 -6
  256. package/src/migrations/functions/usageQuotas/syncDevelopers.ts +19 -0
  257. package/src/migrations/functions/usageQuotas/syncPublishedApps.ts +21 -0
  258. package/src/migrations/functions/usageQuotas/syncRows.ts +3 -6
  259. package/src/migrations/functions/usageQuotas/tests/syncApps.spec.ts +32 -0
  260. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +38 -0
  261. package/src/migrations/index.ts +13 -1
  262. package/src/module.d.ts +4 -0
  263. package/src/threads/{index.js → index.ts} +14 -12
  264. package/src/utilities/queue/inMemoryQueue.js +7 -1
  265. package/tsconfig.build.json +10 -0
  266. package/tsconfig.json +2 -2
  267. package/coverage/lcov-report/api/controllers/application.js.html +0 -1430
  268. package/coverage/lcov-report/api/controllers/query/index.js.html +0 -713
  269. package/coverage/lcov-report/api/controllers/row/index.js.html +0 -524
  270. package/coverage/lcov-report/api/controllers/table/internal.js.html +0 -548
  271. package/coverage/lcov-report/api/controllers/table/utils.js.html +0 -1331
  272. package/coverage/lcov-report/api/routes/application.js.html +0 -179
  273. package/coverage/lcov-report/api/routes/index.js.html +0 -266
  274. package/coverage/lcov-report/api/routes/row.js.html +0 -908
  275. package/coverage/lcov-report/api/routes/static.js.html +0 -245
  276. package/coverage/lcov-report/automations/steps/createRow.js.html +0 -380
  277. package/coverage/lcov-report/automations/steps/deleteRow.js.html +0 -347
  278. package/coverage/lcov-report/automations/utils.js.html +0 -662
  279. package/coverage/lcov-report/middleware/authorized.js.html +0 -458
  280. package/coverage/lcov-report/middleware/usageQuota.js.html +0 -572
  281. package/coverage/lcov-report/threads/index.js.html +0 -278
  282. package/coverage/lcov-report/utilities/usageQuota/index.js.html +0 -359
  283. package/dist/middleware/usageQuota.js +0 -154
  284. package/dist/tsconfig.tsbuildinfo +0 -1
  285. package/dist/utilities/usageQuota/index.js +0 -86
  286. package/src/api/routes/index.js +0 -62
  287. package/src/middleware/tests/usageQuota.spec.js +0 -134
  288. package/src/middleware/usageQuota.js +0 -164
  289. package/src/migrations/functions/usageQuotas/tests/syncApps.spec.js +0 -37
  290. package/src/migrations/functions/usageQuotas/tests/syncRows.spec.js +0 -43
  291. package/src/utilities/tests/usageQuota/usageQuota.spec.js +0 -72
  292. package/src/utilities/usageQuota/index.js +0 -93
@@ -1,458 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for middleware/authorized.js</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../prettify.css" />
9
- <link rel="stylesheet" href="../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../index.html">All files</a> / <a href="index.html">middleware</a> authorized.js</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">88% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>44/50</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">82.97% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>39/47</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">83.33% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>5/6</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">89.79% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>44/49</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- </div>
58
- <div class='status-line high'></div>
59
- <pre><table class="coverage">
60
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
61
- <a name='L2'></a><a href='#L2'>2</a>
62
- <a name='L3'></a><a href='#L3'>3</a>
63
- <a name='L4'></a><a href='#L4'>4</a>
64
- <a name='L5'></a><a href='#L5'>5</a>
65
- <a name='L6'></a><a href='#L6'>6</a>
66
- <a name='L7'></a><a href='#L7'>7</a>
67
- <a name='L8'></a><a href='#L8'>8</a>
68
- <a name='L9'></a><a href='#L9'>9</a>
69
- <a name='L10'></a><a href='#L10'>10</a>
70
- <a name='L11'></a><a href='#L11'>11</a>
71
- <a name='L12'></a><a href='#L12'>12</a>
72
- <a name='L13'></a><a href='#L13'>13</a>
73
- <a name='L14'></a><a href='#L14'>14</a>
74
- <a name='L15'></a><a href='#L15'>15</a>
75
- <a name='L16'></a><a href='#L16'>16</a>
76
- <a name='L17'></a><a href='#L17'>17</a>
77
- <a name='L18'></a><a href='#L18'>18</a>
78
- <a name='L19'></a><a href='#L19'>19</a>
79
- <a name='L20'></a><a href='#L20'>20</a>
80
- <a name='L21'></a><a href='#L21'>21</a>
81
- <a name='L22'></a><a href='#L22'>22</a>
82
- <a name='L23'></a><a href='#L23'>23</a>
83
- <a name='L24'></a><a href='#L24'>24</a>
84
- <a name='L25'></a><a href='#L25'>25</a>
85
- <a name='L26'></a><a href='#L26'>26</a>
86
- <a name='L27'></a><a href='#L27'>27</a>
87
- <a name='L28'></a><a href='#L28'>28</a>
88
- <a name='L29'></a><a href='#L29'>29</a>
89
- <a name='L30'></a><a href='#L30'>30</a>
90
- <a name='L31'></a><a href='#L31'>31</a>
91
- <a name='L32'></a><a href='#L32'>32</a>
92
- <a name='L33'></a><a href='#L33'>33</a>
93
- <a name='L34'></a><a href='#L34'>34</a>
94
- <a name='L35'></a><a href='#L35'>35</a>
95
- <a name='L36'></a><a href='#L36'>36</a>
96
- <a name='L37'></a><a href='#L37'>37</a>
97
- <a name='L38'></a><a href='#L38'>38</a>
98
- <a name='L39'></a><a href='#L39'>39</a>
99
- <a name='L40'></a><a href='#L40'>40</a>
100
- <a name='L41'></a><a href='#L41'>41</a>
101
- <a name='L42'></a><a href='#L42'>42</a>
102
- <a name='L43'></a><a href='#L43'>43</a>
103
- <a name='L44'></a><a href='#L44'>44</a>
104
- <a name='L45'></a><a href='#L45'>45</a>
105
- <a name='L46'></a><a href='#L46'>46</a>
106
- <a name='L47'></a><a href='#L47'>47</a>
107
- <a name='L48'></a><a href='#L48'>48</a>
108
- <a name='L49'></a><a href='#L49'>49</a>
109
- <a name='L50'></a><a href='#L50'>50</a>
110
- <a name='L51'></a><a href='#L51'>51</a>
111
- <a name='L52'></a><a href='#L52'>52</a>
112
- <a name='L53'></a><a href='#L53'>53</a>
113
- <a name='L54'></a><a href='#L54'>54</a>
114
- <a name='L55'></a><a href='#L55'>55</a>
115
- <a name='L56'></a><a href='#L56'>56</a>
116
- <a name='L57'></a><a href='#L57'>57</a>
117
- <a name='L58'></a><a href='#L58'>58</a>
118
- <a name='L59'></a><a href='#L59'>59</a>
119
- <a name='L60'></a><a href='#L60'>60</a>
120
- <a name='L61'></a><a href='#L61'>61</a>
121
- <a name='L62'></a><a href='#L62'>62</a>
122
- <a name='L63'></a><a href='#L63'>63</a>
123
- <a name='L64'></a><a href='#L64'>64</a>
124
- <a name='L65'></a><a href='#L65'>65</a>
125
- <a name='L66'></a><a href='#L66'>66</a>
126
- <a name='L67'></a><a href='#L67'>67</a>
127
- <a name='L68'></a><a href='#L68'>68</a>
128
- <a name='L69'></a><a href='#L69'>69</a>
129
- <a name='L70'></a><a href='#L70'>70</a>
130
- <a name='L71'></a><a href='#L71'>71</a>
131
- <a name='L72'></a><a href='#L72'>72</a>
132
- <a name='L73'></a><a href='#L73'>73</a>
133
- <a name='L74'></a><a href='#L74'>74</a>
134
- <a name='L75'></a><a href='#L75'>75</a>
135
- <a name='L76'></a><a href='#L76'>76</a>
136
- <a name='L77'></a><a href='#L77'>77</a>
137
- <a name='L78'></a><a href='#L78'>78</a>
138
- <a name='L79'></a><a href='#L79'>79</a>
139
- <a name='L80'></a><a href='#L80'>80</a>
140
- <a name='L81'></a><a href='#L81'>81</a>
141
- <a name='L82'></a><a href='#L82'>82</a>
142
- <a name='L83'></a><a href='#L83'>83</a>
143
- <a name='L84'></a><a href='#L84'>84</a>
144
- <a name='L85'></a><a href='#L85'>85</a>
145
- <a name='L86'></a><a href='#L86'>86</a>
146
- <a name='L87'></a><a href='#L87'>87</a>
147
- <a name='L88'></a><a href='#L88'>88</a>
148
- <a name='L89'></a><a href='#L89'>89</a>
149
- <a name='L90'></a><a href='#L90'>90</a>
150
- <a name='L91'></a><a href='#L91'>91</a>
151
- <a name='L92'></a><a href='#L92'>92</a>
152
- <a name='L93'></a><a href='#L93'>93</a>
153
- <a name='L94'></a><a href='#L94'>94</a>
154
- <a name='L95'></a><a href='#L95'>95</a>
155
- <a name='L96'></a><a href='#L96'>96</a>
156
- <a name='L97'></a><a href='#L97'>97</a>
157
- <a name='L98'></a><a href='#L98'>98</a>
158
- <a name='L99'></a><a href='#L99'>99</a>
159
- <a name='L100'></a><a href='#L100'>100</a>
160
- <a name='L101'></a><a href='#L101'>101</a>
161
- <a name='L102'></a><a href='#L102'>102</a>
162
- <a name='L103'></a><a href='#L103'>103</a>
163
- <a name='L104'></a><a href='#L104'>104</a>
164
- <a name='L105'></a><a href='#L105'>105</a>
165
- <a name='L106'></a><a href='#L106'>106</a>
166
- <a name='L107'></a><a href='#L107'>107</a>
167
- <a name='L108'></a><a href='#L108'>108</a>
168
- <a name='L109'></a><a href='#L109'>109</a>
169
- <a name='L110'></a><a href='#L110'>110</a>
170
- <a name='L111'></a><a href='#L111'>111</a>
171
- <a name='L112'></a><a href='#L112'>112</a>
172
- <a name='L113'></a><a href='#L113'>113</a>
173
- <a name='L114'></a><a href='#L114'>114</a>
174
- <a name='L115'></a><a href='#L115'>115</a>
175
- <a name='L116'></a><a href='#L116'>116</a>
176
- <a name='L117'></a><a href='#L117'>117</a>
177
- <a name='L118'></a><a href='#L118'>118</a>
178
- <a name='L119'></a><a href='#L119'>119</a>
179
- <a name='L120'></a><a href='#L120'>120</a>
180
- <a name='L121'></a><a href='#L121'>121</a>
181
- <a name='L122'></a><a href='#L122'>122</a>
182
- <a name='L123'></a><a href='#L123'>123</a>
183
- <a name='L124'></a><a href='#L124'>124</a>
184
- <a name='L125'></a><a href='#L125'>125</a>
185
- <a name='L126'></a><a href='#L126'>126</a>
186
- <a name='L127'></a><a href='#L127'>127</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
187
- <span class="cline-any cline-neutral">&nbsp;</span>
188
- <span class="cline-any cline-neutral">&nbsp;</span>
189
- <span class="cline-any cline-neutral">&nbsp;</span>
190
- <span class="cline-any cline-yes">25x</span>
191
- <span class="cline-any cline-neutral">&nbsp;</span>
192
- <span class="cline-any cline-neutral">&nbsp;</span>
193
- <span class="cline-any cline-neutral">&nbsp;</span>
194
- <span class="cline-any cline-neutral">&nbsp;</span>
195
- <span class="cline-any cline-yes">25x</span>
196
- <span class="cline-any cline-yes">25x</span>
197
- <span class="cline-any cline-yes">25x</span>
198
- <span class="cline-any cline-yes">25x</span>
199
- <span class="cline-any cline-yes">25x</span>
200
- <span class="cline-any cline-neutral">&nbsp;</span>
201
- <span class="cline-any cline-neutral">&nbsp;</span>
202
- <span class="cline-any cline-yes">176x</span>
203
- <span class="cline-any cline-neutral">&nbsp;</span>
204
- <span class="cline-any cline-neutral">&nbsp;</span>
205
- <span class="cline-any cline-yes">25x</span>
206
- <span class="cline-any cline-neutral">&nbsp;</span>
207
- <span class="cline-any cline-neutral">&nbsp;</span>
208
- <span class="cline-any cline-neutral">&nbsp;</span>
209
- <span class="cline-any cline-neutral">&nbsp;</span>
210
- <span class="cline-any cline-neutral">&nbsp;</span>
211
- <span class="cline-any cline-neutral">&nbsp;</span>
212
- <span class="cline-any cline-neutral">&nbsp;</span>
213
- <span class="cline-any cline-yes">25x</span>
214
- <span class="cline-any cline-neutral">&nbsp;</span>
215
- <span class="cline-any cline-yes">177x</span>
216
- <span class="cline-any cline-yes">177x</span>
217
- <span class="cline-any cline-yes">177x</span>
218
- <span class="cline-any cline-yes">28x</span>
219
- <span class="cline-any cline-neutral">&nbsp;</span>
220
- <span class="cline-any cline-neutral">&nbsp;</span>
221
- <span class="cline-any cline-neutral">&nbsp;</span>
222
- <span class="cline-any cline-yes">149x</span>
223
- <span class="cline-any cline-yes">3x</span>
224
- <span class="cline-any cline-neutral">&nbsp;</span>
225
- <span class="cline-any cline-neutral">&nbsp;</span>
226
- <span class="cline-any cline-neutral">&nbsp;</span>
227
- <span class="cline-any cline-yes">25x</span>
228
- <span class="cline-any cline-neutral">&nbsp;</span>
229
- <span class="cline-any cline-neutral">&nbsp;</span>
230
- <span class="cline-any cline-neutral">&nbsp;</span>
231
- <span class="cline-any cline-neutral">&nbsp;</span>
232
- <span class="cline-any cline-neutral">&nbsp;</span>
233
- <span class="cline-any cline-neutral">&nbsp;</span>
234
- <span class="cline-any cline-yes">3x</span>
235
- <span class="cline-any cline-yes">3x</span>
236
- <span class="cline-any cline-neutral">&nbsp;</span>
237
- <span class="cline-any cline-neutral">&nbsp;</span>
238
- <span class="cline-any cline-yes">3x</span>
239
- <span class="cline-any cline-neutral">&nbsp;</span>
240
- <span class="cline-any cline-yes">3x</span>
241
- <span class="cline-any cline-neutral">&nbsp;</span>
242
- <span class="cline-any cline-no">&nbsp;</span>
243
- <span class="cline-any cline-no">&nbsp;</span>
244
- <span class="cline-any cline-no">&nbsp;</span>
245
- <span class="cline-any cline-neutral">&nbsp;</span>
246
- <span class="cline-any cline-neutral">&nbsp;</span>
247
- <span class="cline-any cline-yes">3x</span>
248
- <span class="cline-any cline-yes">3x</span>
249
- <span class="cline-any cline-neutral">&nbsp;</span>
250
- <span class="cline-any cline-neutral">&nbsp;</span>
251
- <span class="cline-any cline-neutral">&nbsp;</span>
252
- <span class="cline-any cline-yes">25x</span>
253
- <span class="cline-any cline-neutral">&nbsp;</span>
254
- <span class="cline-any cline-yes">2703x</span>
255
- <span class="cline-any cline-neutral">&nbsp;</span>
256
- <span class="cline-any cline-neutral">&nbsp;</span>
257
- <span class="cline-any cline-yes">183x</span>
258
- <span class="cline-any cline-yes">1x</span>
259
- <span class="cline-any cline-neutral">&nbsp;</span>
260
- <span class="cline-any cline-neutral">&nbsp;</span>
261
- <span class="cline-any cline-yes">182x</span>
262
- <span class="cline-any cline-yes">1x</span>
263
- <span class="cline-any cline-neutral">&nbsp;</span>
264
- <span class="cline-any cline-neutral">&nbsp;</span>
265
- <span class="cline-any cline-neutral">&nbsp;</span>
266
- <span class="cline-any cline-neutral">&nbsp;</span>
267
- <span class="cline-any cline-yes">181x</span>
268
- <span class="cline-any cline-neutral">&nbsp;</span>
269
- <span class="cline-any cline-neutral">&nbsp;</span>
270
- <span class="cline-any cline-yes">181x</span>
271
- <span class="cline-any cline-neutral">&nbsp;</span>
272
- <span class="cline-any cline-neutral">&nbsp;</span>
273
- <span class="cline-any cline-yes">181x</span>
274
- <span class="cline-any cline-neutral">&nbsp;</span>
275
- <span class="cline-any cline-neutral">&nbsp;</span>
276
- <span class="cline-any cline-yes">181x</span>
277
- <span class="cline-any cline-yes">181x</span>
278
- <span class="cline-any cline-yes">69x</span>
279
- <span class="cline-any cline-yes">69x</span>
280
- <span class="cline-any cline-no">&nbsp;</span>
281
- <span class="cline-any cline-neutral">&nbsp;</span>
282
- <span class="cline-any cline-neutral">&nbsp;</span>
283
- <span class="cline-any cline-neutral">&nbsp;</span>
284
- <span class="cline-any cline-neutral">&nbsp;</span>
285
- <span class="cline-any cline-yes">181x</span>
286
- <span class="cline-any cline-neutral">&nbsp;</span>
287
- <span class="cline-any cline-neutral">&nbsp;</span>
288
- <span class="cline-any cline-neutral">&nbsp;</span>
289
- <span class="cline-any cline-yes">1x</span>
290
- <span class="cline-any cline-neutral">&nbsp;</span>
291
- <span class="cline-any cline-neutral">&nbsp;</span>
292
- <span class="cline-any cline-neutral">&nbsp;</span>
293
- <span class="cline-any cline-yes">180x</span>
294
- <span class="cline-any cline-yes">3x</span>
295
- <span class="cline-any cline-neutral">&nbsp;</span>
296
- <span class="cline-any cline-neutral">&nbsp;</span>
297
- <span class="cline-any cline-yes">177x</span>
298
- <span class="cline-any cline-neutral">&nbsp;</span>
299
- <span class="cline-any cline-yes">177x</span>
300
- <span class="cline-any cline-neutral">&nbsp;</span>
301
- <span class="cline-any cline-neutral">&nbsp;</span>
302
- <span class="cline-any cline-yes">27x</span>
303
- <span class="cline-any cline-no">&nbsp;</span>
304
- <span class="cline-any cline-neutral">&nbsp;</span>
305
- <span class="cline-any cline-yes">27x</span>
306
- <span class="cline-any cline-neutral">&nbsp;</span>
307
- <span class="cline-any cline-neutral">&nbsp;</span>
308
- <span class="cline-any cline-neutral">&nbsp;</span>
309
- <span class="cline-any cline-neutral">&nbsp;</span>
310
- <span class="cline-any cline-yes">150x</span>
311
- <span class="cline-any cline-neutral">&nbsp;</span>
312
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const {
313
- getUserRoleHierarchy,
314
- getRequiredResourceRole,
315
- BUILTIN_ROLE_IDS,
316
- } = require("@budibase/backend-core/roles")
317
- const {
318
- PermissionTypes,
319
- PermissionLevels,
320
- doesHaveBasePermission,
321
- } = require("@budibase/backend-core/permissions")
322
- const builderMiddleware = require("./builder")
323
- const { isWebhookEndpoint } = require("./utils")
324
- const { buildCsrfMiddleware } = require("@budibase/backend-core/auth")
325
- const { getAppId } = require("@budibase/backend-core/context")
326
- &nbsp;
327
- function hasResource(ctx) {
328
- return ctx.resourceId != null
329
- }
330
- &nbsp;
331
- const csrf = buildCsrfMiddleware()
332
- &nbsp;
333
- /**
334
- * Apply authorization to the requested resource:
335
- * - If this is a builder resource the user must be a builder.
336
- * - Builders can access all resources.
337
- * - Otherwise the user must have the required role.
338
- */
339
- const checkAuthorized = async (ctx, resourceRoles, permType, permLevel) =&gt; {
340
- // check if this is a builder api and the user is not a builder
341
- const isBuilder = ctx.user &amp;&amp; ctx.user.builder &amp;&amp; ctx.user.builder.global
342
- const isBuilderApi = permType === PermissionTypes.BUILDER
343
- if (isBuilderApi &amp;&amp; !isBuilder) {
344
- return ctx.throw(403, "Not Authorized")
345
- }
346
- &nbsp;
347
- // check for resource authorization
348
- if (!isBuilder) {
349
- await checkAuthorizedResource(ctx, resourceRoles, permType, permLevel)
350
- }
351
- }
352
- &nbsp;
353
- const checkAuthorizedResource = async (
354
- ctx,
355
- resourceRoles,
356
- permType,
357
- permLevel
358
- ) =&gt; {
359
- // get the user's roles
360
- const roleId = ctx.roleId || BUILTIN_ROLE_IDS.PUBLIC
361
- const userRoles = await getUserRoleHierarchy(roleId, {
362
- idOnly: false,
363
- })
364
- const permError = "User does not have permission"
365
- // check if the user has the required role
366
- <span class="missing-if-branch" title="if path not taken" >I</span>if (resourceRoles.length &gt; 0) {
367
- // deny access if the user doesn't have the required resource role
368
- const found = <span class="cstat-no" title="statement not covered" >userRoles.find(<span class="fstat-no" title="function not covered" >ro</span>le =&gt; <span class="cstat-no" title="statement not covered" >resourceRoles.indexOf(role._id) !== -1)</span></span>
369
- <span class="cstat-no" title="statement not covered" > if (!found) {</span>
370
- <span class="cstat-no" title="statement not covered" > ctx.throw(403, permError)</span>
371
- }
372
- // fallback to the base permissions when no resource roles are found
373
- } else if (!doesHaveBasePermission(permType, permLevel, userRoles)) {
374
- ctx.throw(403, permError)
375
- }
376
- }
377
- &nbsp;
378
- module.exports =
379
- (permType, permLevel = null, opts = { schema: false }) =&gt;
380
- async (ctx, next) =&gt; {
381
- // webhooks don't need authentication, each webhook unique
382
- // also internal requests (between services) don't need authorized
383
- if (isWebhookEndpoint(ctx) || ctx.internal) {
384
- return next()
385
- }
386
- &nbsp;
387
- if (!ctx.user) {
388
- return ctx.throw(403, "No user info found")
389
- }
390
- &nbsp;
391
- // check general builder stuff, this middleware is a good way
392
- // to find API endpoints which are builder focused
393
- await builderMiddleware(ctx, permType)
394
- &nbsp;
395
- // get the resource roles
396
- let resourceRoles = [],
397
- otherLevelRoles
398
- const otherLevel =
399
- permLevel === PermissionLevels.READ
400
- ? PermissionLevels.WRITE
401
- : PermissionLevels.READ
402
- const appId = getAppId()
403
- if (appId &amp;&amp; hasResource(ctx)) {
404
- resourceRoles = await getRequiredResourceRole(permLevel, ctx)
405
- <span class="missing-if-branch" title="if path not taken" >I</span>if (opts &amp;&amp; opts.schema) {
406
- <span class="cstat-no" title="statement not covered" > otherLevelRoles = await getRequiredResourceRole(otherLevel, ctx)</span>
407
- }
408
- }
409
- &nbsp;
410
- // if the resource is public, proceed
411
- if (
412
- resourceRoles.includes(BUILTIN_ROLE_IDS.PUBLIC) ||
413
- (otherLevelRoles &amp;&amp; <span class="branch-2 cbranch-no" title="branch not covered" >otherLevelRoles.includes(BUILTIN_ROLE_IDS.PUBLIC))</span>
414
- ) {
415
- return next()
416
- }
417
- &nbsp;
418
- // check authenticated
419
- if (!ctx.isAuthenticated) {
420
- return ctx.throw(403, "Session not authenticated")
421
- }
422
- &nbsp;
423
- try {
424
- // check authorized
425
- await checkAuthorized(ctx, resourceRoles, permType, permLevel)
426
- } catch (err) {
427
- // this is a schema, check if
428
- <span class="missing-if-branch" title="if path not taken" >I</span>if (opts &amp;&amp; opts.schema &amp;&amp; <span class="branch-2 cbranch-no" title="branch not covered" >permLevel)</span> {
429
- <span class="cstat-no" title="statement not covered" > await checkAuthorized(ctx, otherLevelRoles, permType, otherLevel)</span>
430
- } else {
431
- throw err
432
- }
433
- }
434
- &nbsp;
435
- // csrf protection
436
- return csrf(ctx, next)
437
- }
438
- &nbsp;</pre></td></tr></table></pre>
439
-
440
- <div class='push'></div><!-- for sticky footer -->
441
- </div><!-- /wrapper -->
442
- <div class='footer quiet pad2 space-top1 center small'>
443
- Code coverage generated by
444
- <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
445
- at Tue Apr 19 2022 12:05:25 GMT+0000 (Coordinated Universal Time)
446
- </div>
447
- </div>
448
- <script src="../prettify.js"></script>
449
- <script>
450
- window.onload = function () {
451
- prettyPrint();
452
- };
453
- </script>
454
- <script src="../sorter.js"></script>
455
- <script src="../block-navigation.js"></script>
456
- </body>
457
- </html>
458
-