@budibase/server 1.0.123-alpha.0 → 1.0.123
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.68a7f4e3.css +6 -0
- package/builder/assets/index.8d4a5b33.js +1291 -0
- package/builder/assets/{vendor.5240f480.js → vendor.8e34a169.js} +1 -1
- package/builder/index.html +3 -3
- package/coverage/clover.xml +1763 -758
- package/coverage/coverage-final.json +43 -28
- package/coverage/lcov-report/api/controllers/analytics.js.html +3 -8
- package/coverage/lcov-report/api/controllers/apikeys.js.html +4 -9
- package/coverage/lcov-report/api/controllers/application.js.html +1436 -0
- package/coverage/lcov-report/api/controllers/auth.js.html +3 -8
- package/coverage/lcov-report/api/controllers/automation.js.html +3 -8
- package/coverage/lcov-report/api/controllers/backup.js.html +3 -8
- package/coverage/lcov-report/api/controllers/cloud.js.html +3 -8
- package/coverage/lcov-report/api/controllers/component.js.html +3 -8
- package/coverage/lcov-report/api/controllers/datasource.js.html +6 -11
- package/coverage/lcov-report/api/controllers/dev.js.html +3 -8
- package/coverage/lcov-report/api/controllers/index.html +26 -16
- package/coverage/lcov-report/api/controllers/integration.js.html +3 -8
- package/coverage/lcov-report/api/controllers/layout.js.html +3 -8
- package/coverage/lcov-report/api/controllers/metadata.js.html +3 -8
- package/coverage/lcov-report/api/controllers/migrations.js.html +3 -8
- package/coverage/lcov-report/api/controllers/permission.js.html +3 -8
- package/coverage/lcov-report/api/controllers/query/index.html +26 -16
- package/coverage/lcov-report/api/controllers/query/index.js.html +713 -0
- package/coverage/lcov-report/api/controllers/query/validation.js.html +3 -8
- package/coverage/lcov-report/api/controllers/role.js.html +5 -10
- package/coverage/lcov-report/api/controllers/routing.js.html +4 -9
- package/coverage/lcov-report/api/controllers/row/external.js.html +3 -8
- package/coverage/lcov-report/api/controllers/row/index.html +35 -25
- package/coverage/lcov-report/api/controllers/row/index.js.html +524 -0
- package/coverage/lcov-report/api/controllers/row/internal.js.html +24 -32
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +16 -21
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +19 -24
- package/coverage/lcov-report/api/controllers/row/utils.js.html +19 -33
- package/coverage/lcov-report/api/controllers/screen.js.html +4 -9
- package/coverage/lcov-report/api/controllers/script.js.html +3 -8
- package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +50 -55
- package/coverage/lcov-report/api/controllers/table/external.js.html +3 -8
- package/coverage/lcov-report/api/controllers/table/index.html +44 -19
- package/coverage/lcov-report/api/controllers/table/index.js.html +15 -20
- package/coverage/lcov-report/api/controllers/table/internal.js.html +620 -0
- package/coverage/lcov-report/api/controllers/table/utils.js.html +1331 -0
- package/coverage/lcov-report/api/controllers/templates.js.html +3 -8
- package/coverage/lcov-report/api/controllers/user.js.html +3 -8
- package/coverage/lcov-report/api/controllers/view/exporters.js.html +3 -8
- package/coverage/lcov-report/api/controllers/view/index.html +3 -8
- package/coverage/lcov-report/api/controllers/view/index.js.html +5 -10
- package/coverage/lcov-report/api/controllers/view/utils.js.html +3 -8
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +3 -8
- package/coverage/lcov-report/api/controllers/webhook.js.html +5 -10
- package/coverage/lcov-report/api/index.html +13 -18
- package/coverage/lcov-report/api/index.js.html +8 -28
- package/coverage/lcov-report/api/routes/analytics.js.html +3 -8
- package/coverage/lcov-report/api/routes/apikeys.js.html +3 -8
- package/coverage/lcov-report/api/routes/application.js.html +179 -0
- package/coverage/lcov-report/api/routes/auth.js.html +3 -8
- package/coverage/lcov-report/api/routes/automation.js.html +3 -8
- package/coverage/lcov-report/api/routes/backup.js.html +3 -8
- package/coverage/lcov-report/api/routes/cloud.js.html +3 -8
- package/coverage/lcov-report/api/routes/component.js.html +3 -8
- package/coverage/lcov-report/api/routes/datasource.js.html +3 -8
- package/coverage/lcov-report/api/routes/deploy.js.html +3 -8
- package/coverage/lcov-report/api/routes/dev.js.html +4 -9
- package/coverage/lcov-report/api/routes/index.html +68 -13
- package/coverage/lcov-report/api/routes/index.js.html +266 -0
- package/coverage/lcov-report/api/routes/integration.js.html +3 -8
- package/coverage/lcov-report/api/routes/layout.js.html +3 -8
- package/coverage/lcov-report/api/routes/metadata.js.html +3 -8
- package/coverage/lcov-report/api/routes/migrations.js.html +3 -8
- package/coverage/lcov-report/api/routes/permission.js.html +3 -8
- package/coverage/lcov-report/api/routes/query.js.html +3 -8
- package/coverage/lcov-report/api/routes/role.js.html +3 -8
- package/coverage/lcov-report/api/routes/routing.js.html +3 -8
- package/coverage/lcov-report/api/routes/row.js.html +908 -0
- package/coverage/lcov-report/api/routes/screen.js.html +3 -8
- package/coverage/lcov-report/api/routes/script.js.html +3 -8
- package/coverage/lcov-report/{automations/steps/loop.js.html → api/routes/static.js.html} +80 -70
- package/coverage/lcov-report/api/routes/table.js.html +3 -8
- package/coverage/lcov-report/api/routes/templates.js.html +3 -8
- package/coverage/lcov-report/api/routes/user.js.html +3 -8
- package/coverage/lcov-report/api/routes/utils/index.html +3 -8
- package/coverage/lcov-report/api/routes/utils/validators.js.html +3 -8
- package/coverage/lcov-report/api/routes/view.js.html +3 -8
- package/coverage/lcov-report/api/routes/webhook.js.html +3 -8
- package/coverage/lcov-report/automations/actions.js.html +7 -21
- package/coverage/lcov-report/automations/automationUtils.js.html +23 -64
- package/coverage/lcov-report/automations/bullboard.js.html +3 -8
- package/coverage/lcov-report/automations/index.html +37 -27
- package/coverage/lcov-report/automations/index.js.html +3 -8
- package/coverage/lcov-report/automations/steps/bash.js.html +3 -8
- package/coverage/lcov-report/automations/steps/createRow.js.html +380 -0
- package/coverage/lcov-report/automations/steps/delay.js.html +3 -8
- package/coverage/lcov-report/automations/steps/deleteRow.js.html +347 -0
- package/coverage/lcov-report/automations/steps/discord.js.html +3 -8
- package/coverage/lcov-report/automations/steps/executeQuery.js.html +3 -8
- package/coverage/lcov-report/automations/steps/executeScript.js.html +3 -8
- package/coverage/lcov-report/automations/steps/filter.js.html +3 -8
- package/coverage/lcov-report/automations/steps/index.html +41 -31
- package/coverage/lcov-report/automations/steps/integromat.js.html +3 -8
- package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +4 -9
- package/coverage/lcov-report/automations/steps/queryRows.js.html +4 -9
- package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +3 -8
- package/coverage/lcov-report/automations/steps/serverLog.js.html +3 -8
- package/coverage/lcov-report/automations/steps/slack.js.html +3 -8
- package/coverage/lcov-report/automations/steps/updateRow.js.html +3 -8
- package/coverage/lcov-report/automations/steps/utils.js.html +9 -14
- package/coverage/lcov-report/automations/steps/zapier.js.html +3 -8
- package/coverage/lcov-report/automations/triggerInfo/app.js.html +3 -8
- package/coverage/lcov-report/automations/triggerInfo/cron.js.html +3 -8
- package/coverage/lcov-report/automations/triggerInfo/index.html +3 -8
- package/coverage/lcov-report/automations/triggerInfo/index.js.html +3 -8
- package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +3 -8
- package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +3 -8
- package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +3 -8
- package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +3 -8
- package/coverage/lcov-report/automations/triggers.js.html +11 -16
- package/coverage/lcov-report/automations/utils.js.html +665 -0
- package/coverage/lcov-report/block-navigation.js +0 -8
- package/coverage/lcov-report/constants/index.html +3 -8
- package/coverage/lcov-report/constants/index.js.html +42 -41
- package/coverage/lcov-report/constants/layouts.js.html +3 -8
- package/coverage/lcov-report/constants/screens.js.html +3 -8
- package/coverage/lcov-report/db/inMemoryView.js.html +3 -8
- package/coverage/lcov-report/db/index.html +3 -8
- package/coverage/lcov-report/db/index.js.html +4 -9
- package/coverage/lcov-report/db/linkedRows/LinkController.js.html +23 -25
- package/coverage/lcov-report/db/linkedRows/index.html +12 -17
- package/coverage/lcov-report/db/linkedRows/index.js.html +17 -22
- package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +7 -12
- package/coverage/lcov-report/db/newid.js.html +6 -11
- package/coverage/lcov-report/db/utils.js.html +79 -84
- package/coverage/lcov-report/events/AutomationEmitter.js.html +9 -14
- package/coverage/lcov-report/events/index.html +3 -8
- package/coverage/lcov-report/events/index.js.html +4 -9
- package/coverage/lcov-report/events/utils.js.html +13 -18
- package/coverage/lcov-report/index.html +132 -137
- package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +3 -8
- package/coverage/lcov-report/integrations/tests/index.html +3 -8
- package/coverage/lcov-report/middleware/appInfo.js.html +3 -8
- package/coverage/lcov-report/middleware/authorized.js.html +458 -0
- package/coverage/lcov-report/middleware/builder.js.html +3 -8
- package/coverage/lcov-report/middleware/currentapp.js.html +15 -65
- package/coverage/lcov-report/middleware/index.html +50 -25
- package/coverage/lcov-report/middleware/joi-validator.js.html +4 -9
- package/coverage/lcov-report/middleware/publicApi.js.html +3 -8
- package/coverage/lcov-report/middleware/resourceId.js.html +3 -8
- package/coverage/lcov-report/middleware/selfhost.js.html +4 -9
- package/coverage/lcov-report/middleware/usageQuota.js.html +572 -0
- package/coverage/lcov-report/middleware/utils.js.html +3 -8
- package/coverage/lcov-report/sorter.js +0 -26
- package/coverage/lcov-report/threads/automation.js.html +90 -581
- package/coverage/lcov-report/threads/index.html +40 -30
- package/coverage/lcov-report/threads/index.js.html +296 -0
- package/coverage/lcov-report/threads/query.js.html +4 -9
- package/coverage/lcov-report/threads/utils.js.html +9 -17
- package/coverage/lcov-report/utilities/bcrypt.js.html +3 -8
- package/coverage/lcov-report/utilities/budibaseDir.js.html +3 -8
- package/coverage/lcov-report/utilities/centralPath.js.html +3 -8
- package/coverage/lcov-report/utilities/csvParser.js.html +5 -10
- package/coverage/lcov-report/utilities/global.js.html +4 -9
- package/coverage/lcov-report/utilities/index.html +3 -8
- package/coverage/lcov-report/utilities/index.js.html +6 -11
- package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +9 -32
- package/coverage/lcov-report/utilities/queue/index.html +7 -12
- package/coverage/lcov-report/utilities/routing/index.html +3 -8
- package/coverage/lcov-report/utilities/routing/index.js.html +3 -8
- package/coverage/lcov-report/utilities/rowProcessor/index.html +27 -32
- package/coverage/lcov-report/utilities/rowProcessor/index.js.html +71 -67
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +106 -27
- package/coverage/lcov-report/utilities/scriptRunner.js.html +3 -8
- package/coverage/lcov-report/utilities/security.js.html +4 -9
- package/coverage/lcov-report/utilities/statusCodes.js.html +3 -8
- package/coverage/lcov-report/utilities/usageQuota/index.html +34 -24
- package/coverage/lcov-report/utilities/usageQuota/index.js.html +359 -0
- package/coverage/lcov-report/utilities/usageQuota/rows.js.html +39 -44
- package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +3 -8
- package/coverage/lcov-report/utilities/users.js.html +3 -8
- package/coverage/lcov-report/utilities/workerRequests.js.html +4 -9
- package/coverage/lcov.info +3061 -1290
- package/dist/api/controllers/application.js +73 -145
- package/dist/api/controllers/deploy/index.js +36 -68
- package/dist/api/controllers/public/applications.js +9 -29
- package/dist/api/controllers/public/queries.js +7 -27
- package/dist/api/controllers/public/rows.js +12 -32
- package/dist/api/controllers/public/tables.js +2 -2
- package/dist/api/controllers/public/users.js +8 -8
- package/dist/api/controllers/public/utils.js +1 -1
- package/dist/api/controllers/query/import/index.js +3 -3
- package/dist/api/controllers/query/index.js +44 -57
- package/dist/api/controllers/row/ExternalRequest.js +27 -27
- package/dist/api/controllers/row/index.js +60 -83
- package/dist/api/controllers/row/internal.js +1 -2
- package/dist/api/controllers/row/utils.js +1 -2
- package/dist/api/controllers/static/templates/BudibaseApp.svelte +0 -3
- package/dist/api/controllers/table/bulkFormula.js +1 -2
- package/dist/api/controllers/table/internal.js +55 -40
- package/dist/api/controllers/table/utils.js +229 -271
- package/dist/api/index.js +0 -5
- package/dist/api/routes/application.js +13 -39
- package/dist/api/routes/index.js +56 -61
- package/dist/api/routes/public/index.js +9 -6
- package/dist/api/routes/public/queries.js +1 -1
- package/dist/api/routes/public/rows.js +1 -1
- package/dist/api/routes/public/tables.js +3 -3
- package/dist/api/routes/public/users.js +1 -1
- package/dist/api/routes/row.js +17 -43
- package/dist/api/routes/static.js +13 -40
- package/dist/api/routes/tests/utilities/TestFunctions.js +33 -75
- package/dist/app.js +4 -8
- package/dist/automations/actions.js +0 -3
- package/dist/automations/automationUtils.js +0 -10
- package/dist/automations/steps/createRow.js +12 -12
- package/dist/automations/steps/deleteRow.js +16 -13
- package/dist/automations/tests/utilities/index.js +11 -13
- package/dist/automations/utils.js +133 -187
- package/dist/constants/index.js +7 -5
- package/dist/db/linkedRows/LinkController.js +1 -0
- package/dist/definitions/datasource.js +0 -1
- package/dist/environment.js +3 -2
- package/dist/index.js +0 -4
- package/dist/integrations/base/sql.js +2 -2
- package/dist/integrations/base/sqlTable.js +2 -2
- package/dist/integrations/googlesheets.js +1 -1
- package/dist/integrations/index.js +0 -4
- package/dist/integrations/microsoftSqlServer.js +8 -8
- package/dist/integrations/mysql.js +9 -9
- package/dist/integrations/oracle.js +7 -7
- package/dist/integrations/postgres.js +7 -7
- package/dist/integrations/queries/sql.js +2 -2
- package/dist/integrations/rest.js +1 -1
- package/dist/middleware/authorized.js +51 -51
- package/dist/middleware/currentapp.js +1 -15
- package/dist/middleware/usageQuota.js +154 -0
- package/dist/migrations/functions/appUrls.js +1 -1
- package/dist/migrations/functions/quotas1.js +2 -6
- package/dist/migrations/functions/usageQuotas/index.js +4 -0
- package/dist/migrations/functions/usageQuotas/syncApps.js +7 -4
- package/dist/migrations/functions/usageQuotas/syncRows.js +8 -5
- package/dist/migrations/index.js +1 -17
- package/dist/package.json +4 -10
- package/dist/threads/automation.js +27 -149
- package/dist/threads/index.js +10 -36
- package/dist/threads/utils.js +0 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/utilities/queue/inMemoryQueue.js +1 -6
- package/dist/utilities/rowProcessor/index.js +11 -6
- package/dist/utilities/rowProcessor/utils.js +27 -1
- package/dist/utilities/usageQuota/index.js +86 -0
- package/nodemon.json +1 -1
- package/package.json +9 -15
- package/scripts/dev/manage.js +0 -2
- package/src/api/controllers/{application.ts → application.js} +51 -118
- package/src/api/controllers/deploy/{index.ts → index.js} +29 -53
- package/src/api/controllers/public/applications.ts +2 -2
- package/src/api/controllers/public/queries.ts +1 -1
- package/src/api/controllers/public/rows.ts +1 -1
- package/src/api/controllers/query/{index.ts → index.js} +48 -51
- package/src/api/controllers/row/ExternalRequest.ts +1 -1
- package/src/api/controllers/row/{index.ts → index.js} +17 -24
- package/src/api/controllers/row/internal.js +1 -2
- package/src/api/controllers/row/utils.js +1 -4
- package/src/api/controllers/static/templates/BudibaseApp.svelte +0 -3
- package/src/api/controllers/table/bulkFormula.js +1 -1
- package/src/api/controllers/table/{internal.ts → internal.js} +48 -27
- package/src/api/controllers/table/{utils.ts → utils.js} +69 -86
- package/src/api/index.js +0 -5
- package/src/api/routes/{application.ts → application.js} +14 -8
- package/src/api/routes/index.js +62 -0
- package/src/api/routes/public/index.ts +4 -1
- package/src/api/routes/{row.ts → row.js} +15 -7
- package/src/api/routes/{static.ts → static.js} +11 -11
- package/src/api/routes/tests/misc.spec.js +37 -39
- package/src/api/routes/tests/routing.spec.js +0 -1
- package/src/api/routes/tests/utilities/{TestFunctions.ts → TestFunctions.js} +33 -57
- package/src/app.ts +2 -1
- package/src/automations/actions.js +0 -3
- package/src/automations/automationUtils.js +0 -12
- package/src/automations/steps/{createRow.ts → createRow.js} +15 -9
- package/src/automations/steps/{deleteRow.ts → deleteRow.js} +16 -10
- package/src/automations/tests/automation.spec.js +1 -0
- package/src/automations/tests/{createRow.spec.ts → createRow.spec.js} +15 -4
- package/src/automations/tests/{deleteRow.spec.ts → deleteRow.spec.js} +5 -3
- package/src/automations/tests/utilities/index.js +10 -12
- package/src/automations/{utils.ts → utils.js} +28 -39
- package/src/constants/index.js +8 -6
- package/src/db/linkedRows/LinkController.js +1 -0
- package/src/definitions/datasource.ts +0 -1
- package/src/environment.js +3 -2
- package/src/index.ts +0 -3
- package/src/integrations/index.ts +0 -4
- package/src/middleware/{authorized.ts → authorized.js} +14 -20
- package/src/middleware/currentapp.js +1 -16
- package/src/middleware/tests/usageQuota.spec.js +120 -0
- package/src/middleware/usageQuota.js +164 -0
- package/src/migrations/functions/tests/quotas1.spec.js +2 -0
- package/src/migrations/functions/usageQuotas/index.ts +5 -0
- package/src/migrations/functions/usageQuotas/syncApps.ts +6 -3
- package/src/migrations/functions/usageQuotas/syncRows.ts +6 -3
- package/src/migrations/functions/usageQuotas/tests/syncApps.spec.js +41 -0
- package/src/migrations/functions/usageQuotas/tests/syncRows.spec.js +45 -0
- package/src/migrations/index.ts +1 -13
- package/src/threads/automation.js +34 -196
- package/src/threads/{index.ts → index.js} +14 -18
- package/src/threads/utils.js +0 -1
- package/src/utilities/queue/inMemoryQueue.js +1 -7
- package/src/utilities/rowProcessor/index.js +12 -9
- package/src/utilities/rowProcessor/utils.js +29 -1
- package/src/utilities/tests/usageQuota/usageQuota.spec.js +72 -0
- package/src/utilities/usageQuota/index.js +93 -0
- package/tsconfig.json +2 -2
- package/builder/assets/index.89795487.css +0 -6
- package/builder/assets/index.be9a1b80.js +0 -1299
- package/dist/automations/steps/loop.js +0 -51
- package/dist/integrations/redis.js +0 -158
- package/dist/migrations/functions/developerQuota.js +0 -49
- package/dist/migrations/functions/publishedAppsQuota.js +0 -47
- package/dist/migrations/functions/usageQuotas/syncDevelopers.js +0 -24
- package/dist/migrations/functions/usageQuotas/syncPublishedApps.js +0 -26
- package/dist/tsconfig.build.tsbuildinfo +0 -1
- package/src/api/routes/index.ts +0 -60
- package/src/automations/steps/loop.js +0 -50
- package/src/integrations/redis.ts +0 -152
- package/src/integrations/tests/redis.spec.js +0 -60
- package/src/migrations/functions/developerQuota.ts +0 -15
- package/src/migrations/functions/publishedAppsQuota.ts +0 -13
- package/src/migrations/functions/usageQuotas/syncDevelopers.ts +0 -19
- package/src/migrations/functions/usageQuotas/syncPublishedApps.ts +0 -21
- package/src/migrations/functions/usageQuotas/tests/syncApps.spec.ts +0 -34
- package/src/migrations/functions/usageQuotas/tests/syncRows.spec.ts +0 -40
- package/tsconfig.build.json +0 -10
|
@@ -0,0 +1,458 @@
|
|
|
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"> </span>
|
|
187
|
+
<span class="cline-any cline-neutral"> </span>
|
|
188
|
+
<span class="cline-any cline-neutral"> </span>
|
|
189
|
+
<span class="cline-any cline-neutral"> </span>
|
|
190
|
+
<span class="cline-any cline-yes">25x</span>
|
|
191
|
+
<span class="cline-any cline-neutral"> </span>
|
|
192
|
+
<span class="cline-any cline-neutral"> </span>
|
|
193
|
+
<span class="cline-any cline-neutral"> </span>
|
|
194
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
201
|
+
<span class="cline-any cline-neutral"> </span>
|
|
202
|
+
<span class="cline-any cline-yes">176x</span>
|
|
203
|
+
<span class="cline-any cline-neutral"> </span>
|
|
204
|
+
<span class="cline-any cline-neutral"> </span>
|
|
205
|
+
<span class="cline-any cline-yes">25x</span>
|
|
206
|
+
<span class="cline-any cline-neutral"> </span>
|
|
207
|
+
<span class="cline-any cline-neutral"> </span>
|
|
208
|
+
<span class="cline-any cline-neutral"> </span>
|
|
209
|
+
<span class="cline-any cline-neutral"> </span>
|
|
210
|
+
<span class="cline-any cline-neutral"> </span>
|
|
211
|
+
<span class="cline-any cline-neutral"> </span>
|
|
212
|
+
<span class="cline-any cline-neutral"> </span>
|
|
213
|
+
<span class="cline-any cline-yes">25x</span>
|
|
214
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
220
|
+
<span class="cline-any cline-neutral"> </span>
|
|
221
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
225
|
+
<span class="cline-any cline-neutral"> </span>
|
|
226
|
+
<span class="cline-any cline-neutral"> </span>
|
|
227
|
+
<span class="cline-any cline-yes">25x</span>
|
|
228
|
+
<span class="cline-any cline-neutral"> </span>
|
|
229
|
+
<span class="cline-any cline-neutral"> </span>
|
|
230
|
+
<span class="cline-any cline-neutral"> </span>
|
|
231
|
+
<span class="cline-any cline-neutral"> </span>
|
|
232
|
+
<span class="cline-any cline-neutral"> </span>
|
|
233
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
237
|
+
<span class="cline-any cline-neutral"> </span>
|
|
238
|
+
<span class="cline-any cline-yes">3x</span>
|
|
239
|
+
<span class="cline-any cline-neutral"> </span>
|
|
240
|
+
<span class="cline-any cline-yes">3x</span>
|
|
241
|
+
<span class="cline-any cline-neutral"> </span>
|
|
242
|
+
<span class="cline-any cline-no"> </span>
|
|
243
|
+
<span class="cline-any cline-no"> </span>
|
|
244
|
+
<span class="cline-any cline-no"> </span>
|
|
245
|
+
<span class="cline-any cline-neutral"> </span>
|
|
246
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
250
|
+
<span class="cline-any cline-neutral"> </span>
|
|
251
|
+
<span class="cline-any cline-neutral"> </span>
|
|
252
|
+
<span class="cline-any cline-yes">25x</span>
|
|
253
|
+
<span class="cline-any cline-neutral"> </span>
|
|
254
|
+
<span class="cline-any cline-yes">2703x</span>
|
|
255
|
+
<span class="cline-any cline-neutral"> </span>
|
|
256
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
260
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
264
|
+
<span class="cline-any cline-neutral"> </span>
|
|
265
|
+
<span class="cline-any cline-neutral"> </span>
|
|
266
|
+
<span class="cline-any cline-neutral"> </span>
|
|
267
|
+
<span class="cline-any cline-yes">181x</span>
|
|
268
|
+
<span class="cline-any cline-neutral"> </span>
|
|
269
|
+
<span class="cline-any cline-neutral"> </span>
|
|
270
|
+
<span class="cline-any cline-yes">181x</span>
|
|
271
|
+
<span class="cline-any cline-neutral"> </span>
|
|
272
|
+
<span class="cline-any cline-neutral"> </span>
|
|
273
|
+
<span class="cline-any cline-yes">181x</span>
|
|
274
|
+
<span class="cline-any cline-neutral"> </span>
|
|
275
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
281
|
+
<span class="cline-any cline-neutral"> </span>
|
|
282
|
+
<span class="cline-any cline-neutral"> </span>
|
|
283
|
+
<span class="cline-any cline-neutral"> </span>
|
|
284
|
+
<span class="cline-any cline-neutral"> </span>
|
|
285
|
+
<span class="cline-any cline-yes">181x</span>
|
|
286
|
+
<span class="cline-any cline-neutral"> </span>
|
|
287
|
+
<span class="cline-any cline-neutral"> </span>
|
|
288
|
+
<span class="cline-any cline-neutral"> </span>
|
|
289
|
+
<span class="cline-any cline-yes">1x</span>
|
|
290
|
+
<span class="cline-any cline-neutral"> </span>
|
|
291
|
+
<span class="cline-any cline-neutral"> </span>
|
|
292
|
+
<span class="cline-any cline-neutral"> </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"> </span>
|
|
296
|
+
<span class="cline-any cline-neutral"> </span>
|
|
297
|
+
<span class="cline-any cline-yes">177x</span>
|
|
298
|
+
<span class="cline-any cline-neutral"> </span>
|
|
299
|
+
<span class="cline-any cline-yes">177x</span>
|
|
300
|
+
<span class="cline-any cline-neutral"> </span>
|
|
301
|
+
<span class="cline-any cline-neutral"> </span>
|
|
302
|
+
<span class="cline-any cline-yes">27x</span>
|
|
303
|
+
<span class="cline-any cline-no"> </span>
|
|
304
|
+
<span class="cline-any cline-neutral"> </span>
|
|
305
|
+
<span class="cline-any cline-yes">27x</span>
|
|
306
|
+
<span class="cline-any cline-neutral"> </span>
|
|
307
|
+
<span class="cline-any cline-neutral"> </span>
|
|
308
|
+
<span class="cline-any cline-neutral"> </span>
|
|
309
|
+
<span class="cline-any cline-neutral"> </span>
|
|
310
|
+
<span class="cline-any cline-yes">150x</span>
|
|
311
|
+
<span class="cline-any cline-neutral"> </span>
|
|
312
|
+
<span class="cline-any cline-neutral"> </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
|
+
|
|
327
|
+
function hasResource(ctx) {
|
|
328
|
+
return ctx.resourceId != null
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
const csrf = buildCsrfMiddleware()
|
|
332
|
+
|
|
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) => {
|
|
340
|
+
// check if this is a builder api and the user is not a builder
|
|
341
|
+
const isBuilder = ctx.user && ctx.user.builder && ctx.user.builder.global
|
|
342
|
+
const isBuilderApi = permType === PermissionTypes.BUILDER
|
|
343
|
+
if (isBuilderApi && !isBuilder) {
|
|
344
|
+
return ctx.throw(403, "Not Authorized")
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
// check for resource authorization
|
|
348
|
+
if (!isBuilder) {
|
|
349
|
+
await checkAuthorizedResource(ctx, resourceRoles, permType, permLevel)
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
const checkAuthorizedResource = async (
|
|
354
|
+
ctx,
|
|
355
|
+
resourceRoles,
|
|
356
|
+
permType,
|
|
357
|
+
permLevel
|
|
358
|
+
) => {
|
|
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 > 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 => <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
|
+
|
|
378
|
+
module.exports =
|
|
379
|
+
(permType, permLevel = null, opts = { schema: false }) =>
|
|
380
|
+
async (ctx, next) => {
|
|
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
|
+
|
|
387
|
+
if (!ctx.user) {
|
|
388
|
+
return ctx.throw(403, "No user info found")
|
|
389
|
+
}
|
|
390
|
+
|
|
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
|
+
|
|
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 && hasResource(ctx)) {
|
|
404
|
+
resourceRoles = await getRequiredResourceRole(permLevel, ctx)
|
|
405
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (opts && opts.schema) {
|
|
406
|
+
<span class="cstat-no" title="statement not covered" > otherLevelRoles = await getRequiredResourceRole(otherLevel, ctx)</span>
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
// if the resource is public, proceed
|
|
411
|
+
if (
|
|
412
|
+
resourceRoles.includes(BUILTIN_ROLE_IDS.PUBLIC) ||
|
|
413
|
+
(otherLevelRoles && <span class="branch-2 cbranch-no" title="branch not covered" >otherLevelRoles.includes(BUILTIN_ROLE_IDS.PUBLIC))</span>
|
|
414
|
+
) {
|
|
415
|
+
return next()
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
// check authenticated
|
|
419
|
+
if (!ctx.isAuthenticated) {
|
|
420
|
+
return ctx.throw(403, "Session not authenticated")
|
|
421
|
+
}
|
|
422
|
+
|
|
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 && opts.schema && <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
|
+
|
|
435
|
+
// csrf protection
|
|
436
|
+
return csrf(ctx, next)
|
|
437
|
+
}
|
|
438
|
+
</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 26 2022 17:11:02 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
|
+
|
|
@@ -54,12 +54,6 @@
|
|
|
54
54
|
<p class="quiet">
|
|
55
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
56
|
</p>
|
|
57
|
-
<template id="filterTemplate">
|
|
58
|
-
<div class="quiet">
|
|
59
|
-
Filter:
|
|
60
|
-
<input oninput="onInput()" type="search" id="fileSearch">
|
|
61
|
-
</div>
|
|
62
|
-
</template>
|
|
63
57
|
</div>
|
|
64
58
|
<div class='status-line high'></div>
|
|
65
59
|
<pre><table class="coverage">
|
|
@@ -306,9 +300,10 @@ module.exports = async (ctx, permType) => {
|
|
|
306
300
|
</div><!-- /wrapper -->
|
|
307
301
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
308
302
|
Code coverage generated by
|
|
309
|
-
<a href="https://istanbul.js.org/" target="_blank"
|
|
310
|
-
at Tue Apr 26 2022
|
|
303
|
+
<a href="https://istanbul.js.org/" target="_blank">istanbul</a>
|
|
304
|
+
at Tue Apr 26 2022 17:11:02 GMT+0000 (Coordinated Universal Time)
|
|
311
305
|
</div>
|
|
306
|
+
</div>
|
|
312
307
|
<script src="../prettify.js"></script>
|
|
313
308
|
<script>
|
|
314
309
|
window.onload = function () {
|
|
@@ -23,16 +23,16 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">82.14% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>46/56</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">76.74% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>33/43</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
@@ -44,9 +44,9 @@
|
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">82.14% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>46/56</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -54,14 +54,8 @@
|
|
|
54
54
|
<p class="quiet">
|
|
55
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
56
|
</p>
|
|
57
|
-
<template id="filterTemplate">
|
|
58
|
-
<div class="quiet">
|
|
59
|
-
Filter:
|
|
60
|
-
<input oninput="onInput()" type="search" id="fileSearch">
|
|
61
|
-
</div>
|
|
62
|
-
</template>
|
|
63
57
|
</div>
|
|
64
|
-
<div class='status-line
|
|
58
|
+
<div class='status-line high'></div>
|
|
65
59
|
<pre><table class="coverage">
|
|
66
60
|
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
61
|
<a name='L2'></a><a href='#L2'>2</a>
|
|
@@ -179,22 +173,7 @@
|
|
|
179
173
|
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
174
|
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
175
|
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
-
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
-
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
-
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
-
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
-
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
-
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
|
-
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
-
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
-
<a name='L125'></a><a href='#L125'>125</a>
|
|
191
|
-
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
|
-
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
|
-
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
-
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
-
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
-
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
-
<a name='L132'></a><a href='#L132'>132</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
176
|
+
<a name='L117'></a><a href='#L117'>117</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
198
177
|
<span class="cline-any cline-neutral"> </span>
|
|
199
178
|
<span class="cline-any cline-neutral"> </span>
|
|
200
179
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -262,21 +241,6 @@
|
|
|
262
241
|
<span class="cline-any cline-neutral"> </span>
|
|
263
242
|
<span class="cline-any cline-neutral"> </span>
|
|
264
243
|
<span class="cline-any cline-neutral"> </span>
|
|
265
|
-
<span class="cline-any cline-yes">185x</span>
|
|
266
|
-
<span class="cline-any cline-yes">185x</span>
|
|
267
|
-
<span class="cline-any cline-yes">185x</span>
|
|
268
|
-
<span class="cline-any cline-yes">185x</span>
|
|
269
|
-
<span class="cline-any cline-neutral"> </span>
|
|
270
|
-
<span class="cline-any cline-no"> </span>
|
|
271
|
-
<span class="cline-any cline-no"> </span>
|
|
272
|
-
<span class="cline-any cline-no"> </span>
|
|
273
|
-
<span class="cline-any cline-neutral"> </span>
|
|
274
|
-
<span class="cline-any cline-neutral"> </span>
|
|
275
|
-
<span class="cline-any cline-neutral"> </span>
|
|
276
|
-
<span class="cline-any cline-neutral"> </span>
|
|
277
|
-
<span class="cline-any cline-neutral"> </span>
|
|
278
|
-
<span class="cline-any cline-neutral"> </span>
|
|
279
|
-
<span class="cline-any cline-neutral"> </span>
|
|
280
244
|
<span class="cline-any cline-yes">190x</span>
|
|
281
245
|
<span class="cline-any cline-no"> </span>
|
|
282
246
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -331,7 +295,7 @@
|
|
|
331
295
|
getCookie,
|
|
332
296
|
clearCookie,
|
|
333
297
|
} = require("@budibase/backend-core/utils")
|
|
334
|
-
const { Cookies
|
|
298
|
+
const { Cookies } = require("@budibase/backend-core/constants")
|
|
335
299
|
const { getRole } = require("@budibase/backend-core/roles")
|
|
336
300
|
const { BUILTIN_ROLE_IDS } = require("@budibase/backend-core/roles")
|
|
337
301
|
const { generateUserMetadataID, isDevAppID } = require("../db/utils")
|
|
@@ -369,7 +333,7 @@ module.exports = async (ctx, next) => {
|
|
|
369
333
|
|
|
370
334
|
// deny access to application preview
|
|
371
335
|
if (!env.isTest()) {
|
|
372
|
-
|
|
336
|
+
if (
|
|
373
337
|
isDevAppID(requestAppId) &&
|
|
374
338
|
!isWebhookEndpoint(ctx) &&
|
|
375
339
|
(!ctx.user || !ctx.user.builder || !ctx.user.builder.global)
|
|
@@ -384,27 +348,12 @@ module.exports = async (ctx, next) => {
|
|
|
384
348
|
if (!ctx.user) {
|
|
385
349
|
// not logged in, try to set a cookie for public apps
|
|
386
350
|
appId = requestAppId
|
|
387
|
-
} else
|
|
351
|
+
} else if (requestAppId != null) {
|
|
388
352
|
// Different App ID means cookie needs reset, or if the same public user has logged in
|
|
389
353
|
const globalUser = await getCachedSelf(ctx, requestAppId)
|
|
390
354
|
appId = requestAppId
|
|
391
355
|
// retrieving global user gets the right role
|
|
392
356
|
roleId = globalUser.roleId || roleId
|
|
393
|
-
|
|
394
|
-
// Allow builders to specify their role via a header
|
|
395
|
-
const isBuilder =
|
|
396
|
-
globalUser && globalUser.builder && globalUser.builder.global
|
|
397
|
-
const isDevApp = appId && isDevAppID(appId)
|
|
398
|
-
const roleHeader = ctx.request && ctx.request.headers[Headers.PREVIEW_ROLE]
|
|
399
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (isBuilder && isDevApp && roleHeader) {
|
|
400
|
-
// Ensure the role is valid by ensuring a definition exists
|
|
401
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
402
|
-
<span class="cstat-no" title="statement not covered" > await getRole(roleHeader)</span>
|
|
403
|
-
<span class="cstat-no" title="statement not covered" > roleId = roleHeader</span>
|
|
404
|
-
} catch (error) {
|
|
405
|
-
// Swallow error and do nothing
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
357
|
}
|
|
409
358
|
|
|
410
359
|
// nothing more to do
|
|
@@ -432,7 +381,7 @@ module.exports = async (ctx, next) => {
|
|
|
432
381
|
}
|
|
433
382
|
|
|
434
383
|
ctx.appId = appId
|
|
435
|
-
|
|
384
|
+
if (roleId) {
|
|
436
385
|
ctx.roleId = roleId
|
|
437
386
|
const userId = ctx.user ? generateUserMetadataID(ctx.user._id) : null
|
|
438
387
|
ctx.user = {
|
|
@@ -462,9 +411,10 @@ module.exports = async (ctx, next) => {
|
|
|
462
411
|
</div><!-- /wrapper -->
|
|
463
412
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
464
413
|
Code coverage generated by
|
|
465
|
-
<a href="https://istanbul.js.org/" target="_blank"
|
|
466
|
-
at Tue Apr 26 2022
|
|
414
|
+
<a href="https://istanbul.js.org/" target="_blank">istanbul</a>
|
|
415
|
+
at Tue Apr 26 2022 17:11:02 GMT+0000 (Coordinated Universal Time)
|
|
467
416
|
</div>
|
|
417
|
+
</div>
|
|
468
418
|
<script src="../prettify.js"></script>
|
|
469
419
|
<script>
|
|
470
420
|
window.onload = function () {
|