@budibase/server 1.0.98-alpha.8 → 1.0.100
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.10df5571.js +1291 -0
- package/builder/assets/{index.ea3718aa.css → index.7c8961b4.css} +2 -2
- package/builder/assets/{vendor.8e34a169.js → vendor.a7c6ad0a.js} +1 -1
- package/builder/index.html +3 -3
- package/coverage/clover.xml +342 -346
- package/coverage/coverage-final.json +15 -15
- package/coverage/lcov-report/api/controllers/analytics.js.html +1 -1
- package/coverage/lcov-report/api/controllers/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/controllers/application.js.html +1 -1
- package/coverage/lcov-report/api/controllers/auth.js.html +1 -1
- package/coverage/lcov-report/api/controllers/automation.js.html +1 -1
- package/coverage/lcov-report/api/controllers/backup.js.html +1 -1
- package/coverage/lcov-report/api/controllers/cloud.js.html +1 -1
- package/coverage/lcov-report/api/controllers/component.js.html +4 -4
- package/coverage/lcov-report/api/controllers/datasource.js.html +1 -1
- package/coverage/lcov-report/api/controllers/dev.js.html +1 -1
- package/coverage/lcov-report/api/controllers/index.html +18 -18
- package/coverage/lcov-report/api/controllers/integration.js.html +11 -59
- package/coverage/lcov-report/api/controllers/layout.js.html +1 -1
- package/coverage/lcov-report/api/controllers/metadata.js.html +1 -1
- package/coverage/lcov-report/api/controllers/migrations.js.html +1 -1
- package/coverage/lcov-report/api/controllers/permission.js.html +7 -7
- package/coverage/lcov-report/api/controllers/query/index.html +1 -1
- package/coverage/lcov-report/api/controllers/query/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/query/validation.js.html +2 -2
- package/coverage/lcov-report/api/controllers/role.js.html +1 -1
- package/coverage/lcov-report/api/controllers/routing.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/external.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/index.html +10 -10
- package/coverage/lcov-report/api/controllers/row/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/internal.js.html +7 -19
- package/coverage/lcov-report/api/controllers/row/internalSearch.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/staticFormula.js.html +1 -1
- package/coverage/lcov-report/api/controllers/row/utils.js.html +6 -6
- package/coverage/lcov-report/api/controllers/screen.js.html +1 -1
- package/coverage/lcov-report/api/controllers/script.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/bulkFormula.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/external.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/index.html +1 -1
- package/coverage/lcov-report/api/controllers/table/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/internal.js.html +1 -1
- package/coverage/lcov-report/api/controllers/table/utils.js.html +1 -1
- package/coverage/lcov-report/api/controllers/templates.js.html +1 -1
- package/coverage/lcov-report/api/controllers/user.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/exporters.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/index.html +1 -1
- package/coverage/lcov-report/api/controllers/view/index.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/utils.js.html +1 -1
- package/coverage/lcov-report/api/controllers/view/viewBuilder.js.html +1 -1
- package/coverage/lcov-report/api/controllers/webhook.js.html +1 -1
- package/coverage/lcov-report/api/index.html +1 -1
- package/coverage/lcov-report/api/index.js.html +1 -1
- package/coverage/lcov-report/api/routes/analytics.js.html +3 -3
- package/coverage/lcov-report/api/routes/apikeys.js.html +1 -1
- package/coverage/lcov-report/api/routes/application.js.html +1 -1
- package/coverage/lcov-report/api/routes/auth.js.html +1 -1
- package/coverage/lcov-report/api/routes/automation.js.html +1 -1
- package/coverage/lcov-report/api/routes/backup.js.html +1 -1
- package/coverage/lcov-report/api/routes/cloud.js.html +1 -1
- package/coverage/lcov-report/api/routes/component.js.html +1 -1
- package/coverage/lcov-report/api/routes/datasource.js.html +1 -1
- package/coverage/lcov-report/api/routes/deploy.js.html +1 -1
- package/coverage/lcov-report/api/routes/dev.js.html +1 -1
- package/coverage/lcov-report/api/routes/index.html +1 -1
- package/coverage/lcov-report/api/routes/index.js.html +1 -1
- package/coverage/lcov-report/api/routes/integration.js.html +1 -1
- package/coverage/lcov-report/api/routes/layout.js.html +1 -1
- package/coverage/lcov-report/api/routes/metadata.js.html +1 -1
- package/coverage/lcov-report/api/routes/migrations.js.html +1 -1
- package/coverage/lcov-report/api/routes/permission.js.html +1 -1
- package/coverage/lcov-report/api/routes/query.js.html +1 -1
- package/coverage/lcov-report/api/routes/role.js.html +1 -1
- package/coverage/lcov-report/api/routes/routing.js.html +1 -1
- package/coverage/lcov-report/api/routes/row.js.html +1 -1
- package/coverage/lcov-report/api/routes/screen.js.html +1 -1
- package/coverage/lcov-report/api/routes/script.js.html +1 -1
- package/coverage/lcov-report/api/routes/static.js.html +1 -1
- package/coverage/lcov-report/api/routes/table.js.html +2 -2
- package/coverage/lcov-report/api/routes/templates.js.html +1 -1
- package/coverage/lcov-report/api/routes/user.js.html +1 -1
- package/coverage/lcov-report/api/routes/utils/index.html +1 -1
- package/coverage/lcov-report/api/routes/utils/validators.js.html +1 -1
- package/coverage/lcov-report/api/routes/view.js.html +1 -1
- package/coverage/lcov-report/api/routes/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/actions.js.html +1 -1
- package/coverage/lcov-report/automations/automationUtils.js.html +1 -1
- package/coverage/lcov-report/automations/bullboard.js.html +1 -1
- package/coverage/lcov-report/automations/index.html +12 -12
- package/coverage/lcov-report/automations/index.js.html +1 -1
- package/coverage/lcov-report/automations/steps/bash.js.html +1 -1
- package/coverage/lcov-report/automations/steps/createRow.js.html +1 -1
- package/coverage/lcov-report/automations/steps/delay.js.html +1 -1
- package/coverage/lcov-report/automations/steps/deleteRow.js.html +1 -1
- package/coverage/lcov-report/automations/steps/discord.js.html +1 -1
- package/coverage/lcov-report/automations/steps/executeQuery.js.html +1 -1
- package/coverage/lcov-report/automations/steps/executeScript.js.html +1 -1
- package/coverage/lcov-report/automations/steps/filter.js.html +1 -1
- package/coverage/lcov-report/automations/steps/index.html +1 -1
- package/coverage/lcov-report/automations/steps/integromat.js.html +1 -1
- package/coverage/lcov-report/automations/steps/outgoingWebhook.js.html +1 -1
- package/coverage/lcov-report/automations/steps/queryRows.js.html +1 -1
- package/coverage/lcov-report/automations/steps/sendSmtpEmail.js.html +1 -1
- package/coverage/lcov-report/automations/steps/serverLog.js.html +1 -1
- package/coverage/lcov-report/automations/steps/slack.js.html +1 -1
- package/coverage/lcov-report/automations/steps/updateRow.js.html +1 -1
- package/coverage/lcov-report/automations/steps/utils.js.html +1 -1
- package/coverage/lcov-report/automations/steps/zapier.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/app.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/cron.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/index.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowDeleted.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowSaved.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/rowUpdated.js.html +1 -1
- package/coverage/lcov-report/automations/triggerInfo/webhook.js.html +1 -1
- package/coverage/lcov-report/automations/triggers.js.html +1 -1
- package/coverage/lcov-report/automations/utils.js.html +20 -8
- package/coverage/lcov-report/constants/index.html +1 -1
- package/coverage/lcov-report/constants/index.js.html +1 -1
- package/coverage/lcov-report/constants/layouts.js.html +1 -1
- package/coverage/lcov-report/constants/screens.js.html +1 -1
- package/coverage/lcov-report/db/client.js.html +1 -1
- package/coverage/lcov-report/db/inMemoryView.js.html +1 -1
- package/coverage/lcov-report/db/index.html +1 -1
- package/coverage/lcov-report/db/index.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/LinkController.js.html +1 -1
- package/coverage/lcov-report/db/linkedRows/index.html +1 -1
- package/coverage/lcov-report/db/linkedRows/index.js.html +10 -10
- package/coverage/lcov-report/db/linkedRows/linkUtils.js.html +7 -7
- package/coverage/lcov-report/db/newid.js.html +2 -2
- package/coverage/lcov-report/db/utils.js.html +2 -2
- package/coverage/lcov-report/events/AutomationEmitter.js.html +1 -1
- package/coverage/lcov-report/events/index.html +1 -1
- package/coverage/lcov-report/events/index.js.html +1 -1
- package/coverage/lcov-report/events/utils.js.html +1 -1
- package/coverage/lcov-report/index.html +29 -29
- package/coverage/lcov-report/integrations/tests/TestConfiguration.js.html +1 -1
- package/coverage/lcov-report/integrations/tests/index.html +1 -1
- package/coverage/lcov-report/middleware/appInfo.js.html +1 -1
- package/coverage/lcov-report/middleware/authorized.js.html +75 -15
- package/coverage/lcov-report/middleware/builder.js.html +1 -1
- package/coverage/lcov-report/middleware/currentapp.js.html +1 -1
- package/coverage/lcov-report/middleware/index.html +15 -15
- package/coverage/lcov-report/middleware/joi-validator.js.html +1 -1
- package/coverage/lcov-report/middleware/publicApi.js.html +1 -1
- package/coverage/lcov-report/middleware/resourceId.js.html +1 -1
- package/coverage/lcov-report/middleware/selfhost.js.html +1 -1
- package/coverage/lcov-report/middleware/usageQuota.js.html +1 -1
- package/coverage/lcov-report/middleware/utils.js.html +1 -1
- package/coverage/lcov-report/threads/automation.js.html +1 -1
- package/coverage/lcov-report/threads/index.html +1 -1
- package/coverage/lcov-report/threads/index.js.html +1 -1
- package/coverage/lcov-report/threads/query.js.html +1 -1
- package/coverage/lcov-report/threads/utils.js.html +1 -1
- package/coverage/lcov-report/utilities/bcrypt.js.html +1 -1
- package/coverage/lcov-report/utilities/budibaseDir.js.html +1 -1
- package/coverage/lcov-report/utilities/centralPath.js.html +1 -1
- package/coverage/lcov-report/utilities/csvParser.js.html +1 -1
- package/coverage/lcov-report/utilities/global.js.html +1 -1
- package/coverage/lcov-report/utilities/index.html +1 -1
- package/coverage/lcov-report/utilities/index.js.html +1 -1
- package/coverage/lcov-report/utilities/queue/inMemoryQueue.js.html +1 -1
- package/coverage/lcov-report/utilities/queue/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.html +1 -1
- package/coverage/lcov-report/utilities/routing/index.js.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/index.html +1 -1
- package/coverage/lcov-report/utilities/rowProcessor/index.js.html +12 -12
- package/coverage/lcov-report/utilities/rowProcessor/utils.js.html +8 -8
- package/coverage/lcov-report/utilities/scriptRunner.js.html +1 -1
- package/coverage/lcov-report/utilities/security.js.html +1 -1
- package/coverage/lcov-report/utilities/statusCodes.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/index.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/index.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/rows.js.html +1 -1
- package/coverage/lcov-report/utilities/usageQuota/usageQuoteReset.js.html +1 -1
- package/coverage/lcov-report/utilities/users.js.html +1 -1
- package/coverage/lcov-report/utilities/workerRequests.js.html +1 -1
- package/coverage/lcov.info +568 -562
- package/dist/api/controllers/integration.js +1 -15
- package/dist/api/controllers/permission.js +3 -4
- package/dist/api/controllers/query/import/index.js +1 -2
- package/dist/api/controllers/query/import/sources/base/index.js +1 -12
- package/dist/api/controllers/query/import/sources/curl.js +2 -2
- package/dist/api/controllers/row/internal.js +1 -2
- package/dist/api/routes/analytics.js +2 -2
- package/dist/api/routes/table.js +1 -1
- package/dist/automations/utils.js +3 -1
- package/dist/definitions/datasource.js +0 -1
- package/dist/environment.js +0 -2
- package/dist/integrations/base/sql.js +9 -16
- package/dist/integrations/dynamodb.js +1 -3
- package/dist/integrations/googlesheets.js +1 -17
- package/dist/integrations/index.js +1 -4
- package/dist/integrations/mysql.js +14 -1
- package/dist/integrations/rest.js +1 -2
- package/dist/middleware/authorized.js +24 -7
- package/dist/package.json +4 -7
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -8
- package/scripts/dev/manage.js +1 -2
- package/specs/openapi.json +23 -3
- package/specs/openapi.yaml +20 -4
- package/specs/resources/query.js +27 -5
- package/src/api/controllers/integration.js +1 -17
- package/src/api/controllers/permission.js +3 -3
- package/src/api/controllers/query/import/index.ts +1 -2
- package/src/api/controllers/query/import/sources/base/index.ts +2 -12
- package/src/api/controllers/query/import/sources/curl.ts +2 -2
- package/src/api/controllers/query/import/tests/index.spec.js +0 -43
- package/src/api/controllers/row/internal.js +1 -5
- package/src/api/routes/analytics.js +2 -2
- package/src/api/routes/table.js +1 -1
- package/src/api/routes/tests/misc.spec.js +2 -2
- package/src/automations/utils.js +5 -1
- package/src/definitions/datasource.ts +1 -6
- package/src/definitions/openapi.ts +483 -473
- package/src/environment.js +0 -2
- package/src/integrations/base/sql.ts +9 -14
- package/src/integrations/dynamodb.ts +1 -3
- package/src/integrations/googlesheets.ts +1 -16
- package/src/integrations/index.ts +1 -4
- package/src/integrations/mysql.ts +15 -1
- package/src/integrations/rest.ts +1 -2
- package/src/integrations/tests/sql.spec.js +0 -51
- package/src/middleware/authorized.js +26 -6
- package/builder/assets/index.f7a1491e.js +0 -1291
- package/dist/api/controllers/query/import/sources/openapi3.js +0 -174
- package/dist/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.json +0 -253
- package/dist/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.json +0 -1225
- package/dist/integrations/firebase.js +0 -192
- package/src/api/controllers/query/import/sources/openapi3.ts +0 -205
- package/src/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.json +0 -253
- package/src/api/controllers/query/import/sources/tests/openapi3/data/crud/crud.yaml +0 -153
- package/src/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.json +0 -1225
- package/src/api/controllers/query/import/sources/tests/openapi3/data/petstore/petstore.yaml +0 -804
- package/src/api/controllers/query/import/sources/tests/openapi3/openapi3.spec.js +0 -240
- package/src/integrations/firebase.ts +0 -205
|
@@ -8,25 +8,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
const { cloneDeep } = require("lodash");
|
|
12
11
|
const { definitions } = require("../../integrations");
|
|
13
|
-
const { getTenantId } = require("@budibase/backend-core/tenancy");
|
|
14
|
-
const { SourceNames } = require("../../definitions/datasource");
|
|
15
|
-
const googlesheets = require("../../integrations/googlesheets");
|
|
16
|
-
const env = require("../../environment");
|
|
17
12
|
exports.fetch = function (ctx) {
|
|
18
13
|
return __awaiter(this, void 0, void 0, function* () {
|
|
19
14
|
ctx.status = 200;
|
|
20
|
-
|
|
21
|
-
// for google sheets integration google verification
|
|
22
|
-
if (env.EXCLUDE_QUOTAS_TENANTS) {
|
|
23
|
-
const excludedTenants = env.EXCLUDE_QUOTAS_TENANTS.split(",");
|
|
24
|
-
const tenantId = getTenantId();
|
|
25
|
-
if (excludedTenants.includes(tenantId)) {
|
|
26
|
-
defs[SourceNames.GOOGLE_SHEETS] = googlesheets.schema;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
ctx.body = defs;
|
|
15
|
+
ctx.body = definitions;
|
|
30
16
|
});
|
|
31
17
|
};
|
|
32
18
|
exports.find = function (ctx) {
|
|
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
const { getBuiltinPermissions } = require("@budibase/backend-core/permissions");
|
|
12
|
-
const { isBuiltin, getDBRoleID, getExternalRoleID, getBuiltinRoles, } = require("@budibase/backend-core/roles");
|
|
12
|
+
const { isBuiltin, getDBRoleID, getExternalRoleID, getBuiltinRoles, checkForRoleResourceArray, } = require("@budibase/backend-core/roles");
|
|
13
13
|
const { getRoleParams } = require("../../db/utils");
|
|
14
14
|
const { CURRENTLY_SUPPORTED_LEVELS, getBasePermissions, } = require("../../utilities/security");
|
|
15
15
|
const { removeFromArray } = require("../../utilities");
|
|
@@ -130,11 +130,10 @@ exports.getResourcePerms = function (ctx) {
|
|
|
130
130
|
for (let level of SUPPORTED_LEVELS) {
|
|
131
131
|
// update the various roleIds in the resource permissions
|
|
132
132
|
for (let role of roles) {
|
|
133
|
-
const rolePerms = role.permissions;
|
|
133
|
+
const rolePerms = checkForRoleResourceArray(role.permissions, resourceId);
|
|
134
134
|
if (rolePerms &&
|
|
135
135
|
rolePerms[resourceId] &&
|
|
136
|
-
|
|
137
|
-
rolePerms[resourceId].indexOf(level) !== -1)) {
|
|
136
|
+
rolePerms[resourceId].indexOf(level) !== -1) {
|
|
138
137
|
permissions[level] = getExternalRoleID(role._id);
|
|
139
138
|
}
|
|
140
139
|
}
|
|
@@ -13,7 +13,6 @@ exports.RestImporter = void 0;
|
|
|
13
13
|
const validation_1 = require("../validation");
|
|
14
14
|
const utils_1 = require("../../../../db/utils");
|
|
15
15
|
const openapi2_1 = require("./sources/openapi2");
|
|
16
|
-
const openapi3_1 = require("./sources/openapi3");
|
|
17
16
|
const curl_1 = require("./sources/curl");
|
|
18
17
|
// @ts-ignore
|
|
19
18
|
const context_1 = require("@budibase/backend-core/context");
|
|
@@ -72,7 +71,7 @@ class RestImporter {
|
|
|
72
71
|
};
|
|
73
72
|
});
|
|
74
73
|
this.data = data;
|
|
75
|
-
this.sources = [new openapi2_1.OpenAPI2(), new
|
|
74
|
+
this.sources = [new openapi2_1.OpenAPI2(), new curl_1.Curl()];
|
|
76
75
|
}
|
|
77
76
|
}
|
|
78
77
|
exports.RestImporter = RestImporter;
|
|
@@ -17,18 +17,7 @@ class ImportSource {
|
|
|
17
17
|
const transformer = "return data";
|
|
18
18
|
const schema = {};
|
|
19
19
|
path = this.processPath(path);
|
|
20
|
-
|
|
21
|
-
if (typeof url === "string") {
|
|
22
|
-
path = `${url}/${path}`;
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
let href = url.href;
|
|
26
|
-
if (href.endsWith("/")) {
|
|
27
|
-
href = href.slice(0, -1);
|
|
28
|
-
}
|
|
29
|
-
path = `${href}/${path}`;
|
|
30
|
-
}
|
|
31
|
-
}
|
|
20
|
+
path = `${url.origin}/${path}`;
|
|
32
21
|
queryString = this.processQuery(queryString);
|
|
33
22
|
const requestBody = JSON.stringify(body, null, 2);
|
|
34
23
|
const query = {
|
|
@@ -79,7 +79,7 @@ class Curl extends base_1.ImportSource {
|
|
|
79
79
|
this.getQueries = (datasourceId) => __awaiter(this, void 0, void 0, function* () {
|
|
80
80
|
const url = this.getUrl();
|
|
81
81
|
const name = url.pathname;
|
|
82
|
-
const path = url.
|
|
82
|
+
const path = url.pathname;
|
|
83
83
|
const method = this.curl.method;
|
|
84
84
|
const queryString = url.search;
|
|
85
85
|
const headers = this.curl.headers;
|
|
@@ -88,7 +88,7 @@ class Curl extends base_1.ImportSource {
|
|
|
88
88
|
if (cookieHeader) {
|
|
89
89
|
headers["Cookie"] = cookieHeader;
|
|
90
90
|
}
|
|
91
|
-
const query = this.constructQuery(datasourceId, name, method, path,
|
|
91
|
+
const query = this.constructQuery(datasourceId, name, method, path, url, queryString, headers, [], requestBody);
|
|
92
92
|
return [query];
|
|
93
93
|
});
|
|
94
94
|
}
|
|
@@ -91,8 +91,7 @@ exports.patch = (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
91
91
|
const isUserTable = tableId === InternalTables.USER_METADATA;
|
|
92
92
|
let oldRow;
|
|
93
93
|
try {
|
|
94
|
-
|
|
95
|
-
oldRow = yield outputProcessing(dbTable, yield findRow(ctx, tableId, inputs._id));
|
|
94
|
+
oldRow = yield db.get(inputs._id);
|
|
96
95
|
}
|
|
97
96
|
catch (err) {
|
|
98
97
|
if (isUserTable) {
|
|
@@ -3,6 +3,6 @@ const Router = require("@koa/router");
|
|
|
3
3
|
const controller = require("../controllers/analytics");
|
|
4
4
|
const router = Router();
|
|
5
5
|
router
|
|
6
|
-
.get("/api/
|
|
7
|
-
.post("/api/
|
|
6
|
+
.get("/api/analytics", controller.isEnabled)
|
|
7
|
+
.post("/api/analytics/ping", controller.endUserPing);
|
|
8
8
|
module.exports = router;
|
package/dist/api/routes/table.js
CHANGED
|
@@ -32,7 +32,7 @@ router
|
|
|
32
32
|
*
|
|
33
33
|
* @apiSuccess {object[]} body The response body will be the table that was found.
|
|
34
34
|
*/
|
|
35
|
-
.get("/api/tables/:tableId", paramResource("tableId"), authorized(PermissionTypes.TABLE, PermissionLevels.READ), tableController.find)
|
|
35
|
+
.get("/api/tables/:tableId", paramResource("tableId"), authorized(PermissionTypes.TABLE, PermissionLevels.READ, { schema: true }), tableController.find)
|
|
36
36
|
/**
|
|
37
37
|
* @api {post} /api/tables Save a table
|
|
38
38
|
* @apiName Save a table
|
|
@@ -25,10 +25,12 @@ const Runner = new Thread(ThreadType.AUTOMATION);
|
|
|
25
25
|
exports.processEvent = (job) => __awaiter(void 0, void 0, void 0, function* () {
|
|
26
26
|
try {
|
|
27
27
|
// need to actually await these so that an error can be captured properly
|
|
28
|
+
console.log(`${job.data.automation.appId} automation ${job.data.automation._id} running`);
|
|
28
29
|
return yield Runner.run(job);
|
|
29
30
|
}
|
|
30
31
|
catch (err) {
|
|
31
|
-
|
|
32
|
+
const errJson = JSON.stringify(err);
|
|
33
|
+
console.error(`${job.data.automation.appId} automation ${job.data.automation._id} was unable to run - ${errJson}`);
|
|
32
34
|
console.trace(err);
|
|
33
35
|
return { err };
|
|
34
36
|
}
|
|
@@ -50,7 +50,6 @@ var SourceNames;
|
|
|
50
50
|
SourceNames["REST"] = "REST";
|
|
51
51
|
SourceNames["ORACLE"] = "ORACLE";
|
|
52
52
|
SourceNames["GOOGLE_SHEETS"] = "GOOGLE_SHEETS";
|
|
53
|
-
SourceNames["FIREBASE"] = "FIREBASE";
|
|
54
53
|
})(SourceNames = exports.SourceNames || (exports.SourceNames = {}));
|
|
55
54
|
var IncludeRelationships;
|
|
56
55
|
(function (IncludeRelationships) {
|
package/dist/environment.js
CHANGED
|
@@ -38,8 +38,6 @@ module.exports = {
|
|
|
38
38
|
MULTI_TENANCY: process.env.MULTI_TENANCY,
|
|
39
39
|
HTTP_MIGRATIONS: process.env.HTTP_MIGRATIONS,
|
|
40
40
|
API_REQ_LIMIT_PER_SEC: process.env.API_REQ_LIMIT_PER_SEC,
|
|
41
|
-
GOOGLE_CLIENT_ID: process.env.GOOGLE_CLIENT_ID,
|
|
42
|
-
GOOGLE_CLIENT_SECRET: process.env.GOOGLE_CLIENT_SECRET,
|
|
43
41
|
// environment
|
|
44
42
|
NODE_ENV: process.env.NODE_ENV,
|
|
45
43
|
JEST_WORKER_ID: process.env.JEST_WORKER_ID,
|
|
@@ -34,8 +34,11 @@ function parse(input) {
|
|
|
34
34
|
if (typeof input !== "string") {
|
|
35
35
|
return input;
|
|
36
36
|
}
|
|
37
|
-
if (input === MAX_ISO_DATE
|
|
38
|
-
return
|
|
37
|
+
if (input === MAX_ISO_DATE) {
|
|
38
|
+
return new Date(8640000000000000);
|
|
39
|
+
}
|
|
40
|
+
if (input === MIN_ISO_DATE) {
|
|
41
|
+
return new Date(-8640000000000000);
|
|
39
42
|
}
|
|
40
43
|
if (utils_1.isIsoDateString(input)) {
|
|
41
44
|
return new Date(input);
|
|
@@ -124,21 +127,11 @@ class InternalBuilder {
|
|
|
124
127
|
}
|
|
125
128
|
if (filters.range) {
|
|
126
129
|
iterate(filters.range, (key, value) => {
|
|
127
|
-
if (value.
|
|
128
|
-
|
|
129
|
-
const fnc = allOr ? "orWhereBetween" : "whereBetween";
|
|
130
|
-
query = query[fnc](key, [value.low, value.high]);
|
|
131
|
-
}
|
|
132
|
-
else if (value.low) {
|
|
133
|
-
// Use just a single greater than operator if we only have a low
|
|
134
|
-
const fnc = allOr ? "orWhere" : "where";
|
|
135
|
-
query = query[fnc](key, ">", value.low);
|
|
136
|
-
}
|
|
137
|
-
else if (value.high) {
|
|
138
|
-
// Use just a single less than operator if we only have a high
|
|
139
|
-
const fnc = allOr ? "orWhere" : "where";
|
|
140
|
-
query = query[fnc](key, "<", value.high);
|
|
130
|
+
if (!value.high || !value.low) {
|
|
131
|
+
return;
|
|
141
132
|
}
|
|
133
|
+
const fnc = allOr ? "orWhereBetween" : "whereBetween";
|
|
134
|
+
query = query[fnc](key, [value.low, value.high]);
|
|
142
135
|
});
|
|
143
136
|
}
|
|
144
137
|
if (filters.equal) {
|
|
@@ -124,9 +124,7 @@ var DynamoModule;
|
|
|
124
124
|
class DynamoDBIntegration {
|
|
125
125
|
constructor(config) {
|
|
126
126
|
this.config = config;
|
|
127
|
-
|
|
128
|
-
this.connect();
|
|
129
|
-
}
|
|
127
|
+
this.connect();
|
|
130
128
|
let options = {
|
|
131
129
|
correctClockSkew: true,
|
|
132
130
|
endpoint: config.endpoint ? config.endpoint : undefined,
|
|
@@ -8,16 +8,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
12
|
const datasource_1 = require("../definitions/datasource");
|
|
16
13
|
const google_auth_library_1 = require("google-auth-library");
|
|
17
14
|
const utils_1 = require("./utils");
|
|
18
15
|
const constants_1 = require("../constants");
|
|
19
16
|
const google_spreadsheet_1 = require("google-spreadsheet");
|
|
20
|
-
const environment_1 = __importDefault(require("../environment"));
|
|
21
17
|
var GoogleSheetsModule;
|
|
22
18
|
(function (GoogleSheetsModule) {
|
|
23
19
|
const { getGlobalDB } = require("@budibase/backend-core/tenancy");
|
|
@@ -124,25 +120,13 @@ var GoogleSheetsModule;
|
|
|
124
120
|
try {
|
|
125
121
|
// Initialise oAuth client
|
|
126
122
|
const db = getGlobalDB();
|
|
127
|
-
|
|
123
|
+
const googleConfig = yield getScopedConfig(db, {
|
|
128
124
|
type: Configs.GOOGLE,
|
|
129
125
|
});
|
|
130
|
-
if (!googleConfig) {
|
|
131
|
-
googleConfig = {
|
|
132
|
-
clientID: environment_1.default.GOOGLE_CLIENT_ID,
|
|
133
|
-
clientSecret: environment_1.default.GOOGLE_CLIENT_SECRET,
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
126
|
const oauthClient = new google_auth_library_1.OAuth2Client({
|
|
137
127
|
clientId: googleConfig.clientID,
|
|
138
128
|
clientSecret: googleConfig.clientSecret,
|
|
139
129
|
});
|
|
140
|
-
oauthClient.on("tokens", tokens => {
|
|
141
|
-
oauthClient.setCredentials({
|
|
142
|
-
refresh_token: googleConfig.refreshToken,
|
|
143
|
-
access_token: tokens.access_token,
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
130
|
oauthClient.credentials.access_token = this.config.auth.accessToken;
|
|
147
131
|
oauthClient.credentials.refresh_token = this.config.auth.refreshToken;
|
|
148
132
|
this.client.useOAuth2Client(oauthClient);
|
|
@@ -11,7 +11,6 @@ const mysql = require("./mysql");
|
|
|
11
11
|
const arangodb = require("./arangodb");
|
|
12
12
|
const rest = require("./rest");
|
|
13
13
|
const googlesheets = require("./googlesheets");
|
|
14
|
-
const firebase = require("./firebase");
|
|
15
14
|
const { SourceNames } = require("../definitions/datasource");
|
|
16
15
|
const environment = require("../environment");
|
|
17
16
|
const DEFINITIONS = {
|
|
@@ -26,7 +25,6 @@ const DEFINITIONS = {
|
|
|
26
25
|
[SourceNames.MYSQL]: mysql.schema,
|
|
27
26
|
[SourceNames.ARANGODB]: arangodb.schema,
|
|
28
27
|
[SourceNames.REST]: rest.schema,
|
|
29
|
-
[SourceNames.FIREBASE]: firebase.schema,
|
|
30
28
|
};
|
|
31
29
|
const INTEGRATIONS = {
|
|
32
30
|
[SourceNames.POSTGRES]: postgres.integration,
|
|
@@ -40,8 +38,6 @@ const INTEGRATIONS = {
|
|
|
40
38
|
[SourceNames.MYSQL]: mysql.integration,
|
|
41
39
|
[SourceNames.ARANGODB]: arangodb.integration,
|
|
42
40
|
[SourceNames.REST]: rest.integration,
|
|
43
|
-
[SourceNames.FIREBASE]: firebase.integration,
|
|
44
|
-
[SourceNames.GOOGLE_SHEETS]: googlesheets.integration,
|
|
45
41
|
};
|
|
46
42
|
// optionally add oracle integration if the oracle binary can be installed
|
|
47
43
|
if (!(process.arch === "arm64" && process.platform === "darwin")) {
|
|
@@ -51,6 +47,7 @@ if (!(process.arch === "arm64" && process.platform === "darwin")) {
|
|
|
51
47
|
}
|
|
52
48
|
if (environment.SELF_HOSTED) {
|
|
53
49
|
DEFINITIONS[SourceNames.GOOGLE_SHEETS] = googlesheets.schema;
|
|
50
|
+
INTEGRATIONS[SourceNames.GOOGLE_SHEETS] = googlesheets.integration;
|
|
54
51
|
}
|
|
55
52
|
module.exports = {
|
|
56
53
|
definitions: DEFINITIONS,
|
|
@@ -65,6 +65,19 @@ var MySQLModule;
|
|
|
65
65
|
},
|
|
66
66
|
},
|
|
67
67
|
};
|
|
68
|
+
function bindingTypeCoerce(bindings) {
|
|
69
|
+
for (let i = 0; i < bindings.length; i++) {
|
|
70
|
+
const binding = bindings[i];
|
|
71
|
+
if (typeof binding !== "string") {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
const matches = binding.match(/^\d*/g);
|
|
75
|
+
if (matches && matches[0] !== "" && !isNaN(Number(matches[0]))) {
|
|
76
|
+
bindings[i] = parseFloat(binding);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return bindings;
|
|
80
|
+
}
|
|
68
81
|
class MySQLIntegration extends Sql {
|
|
69
82
|
constructor(config) {
|
|
70
83
|
super(utils_1.SqlClients.MY_SQL);
|
|
@@ -99,7 +112,7 @@ var MySQLModule;
|
|
|
99
112
|
yield this.connect();
|
|
100
113
|
}
|
|
101
114
|
// Node MySQL is callback based, so we must wrap our call in a promise
|
|
102
|
-
const response = yield this.client.query(query.sql, query.bindings || []);
|
|
115
|
+
const response = yield this.client.query(query.sql, bindingTypeCoerce(query.bindings || []));
|
|
103
116
|
return response[0];
|
|
104
117
|
}
|
|
105
118
|
finally {
|
|
@@ -10,7 +10,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
const datasource_1 = require("../definitions/datasource");
|
|
13
|
-
const lodash_1 = require("lodash");
|
|
14
13
|
const BodyTypes = {
|
|
15
14
|
NONE: "none",
|
|
16
15
|
FORM_DATA: "form",
|
|
@@ -149,7 +148,7 @@ var RestModule;
|
|
|
149
148
|
// Check if a pagination cursor exists in the response
|
|
150
149
|
let nextCursor = null;
|
|
151
150
|
if (pagination === null || pagination === void 0 ? void 0 : pagination.responseParam) {
|
|
152
|
-
nextCursor =
|
|
151
|
+
nextCursor = data === null || data === void 0 ? void 0 : data[pagination.responseParam];
|
|
153
152
|
}
|
|
154
153
|
return {
|
|
155
154
|
data,
|
|
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
const { getUserRoleHierarchy, getRequiredResourceRole, BUILTIN_ROLE_IDS, } = require("@budibase/backend-core/roles");
|
|
12
|
-
const { PermissionTypes, doesHaveBasePermission, } = require("@budibase/backend-core/permissions");
|
|
12
|
+
const { PermissionTypes, PermissionLevels, doesHaveBasePermission, } = require("@budibase/backend-core/permissions");
|
|
13
13
|
const builderMiddleware = require("./builder");
|
|
14
14
|
const { isWebhookEndpoint } = require("./utils");
|
|
15
15
|
const { buildCsrfMiddleware } = require("@budibase/backend-core/auth");
|
|
@@ -57,7 +57,7 @@ const checkAuthorizedResource = (ctx, resourceRoles, permType, permLevel) => __a
|
|
|
57
57
|
}
|
|
58
58
|
});
|
|
59
59
|
module.exports =
|
|
60
|
-
(permType, permLevel = null) => (ctx, next) => __awaiter(void 0, void 0, void 0, function* () {
|
|
60
|
+
(permType, permLevel = null, opts = { schema: false }) => (ctx, next) => __awaiter(void 0, void 0, void 0, function* () {
|
|
61
61
|
// webhooks don't need authentication, each webhook unique
|
|
62
62
|
// also internal requests (between services) don't need authorized
|
|
63
63
|
if (isWebhookEndpoint(ctx) || ctx.internal) {
|
|
@@ -70,22 +70,39 @@ module.exports =
|
|
|
70
70
|
// to find API endpoints which are builder focused
|
|
71
71
|
yield builderMiddleware(ctx, permType);
|
|
72
72
|
// get the resource roles
|
|
73
|
-
let resourceRoles = [];
|
|
73
|
+
let resourceRoles = [], otherLevelRoles;
|
|
74
|
+
const otherLevel = permLevel === PermissionLevels.READ
|
|
75
|
+
? PermissionLevels.WRITE
|
|
76
|
+
: PermissionLevels.READ;
|
|
74
77
|
const appId = getAppId();
|
|
75
78
|
if (appId && hasResource(ctx)) {
|
|
76
79
|
resourceRoles = yield getRequiredResourceRole(permLevel, ctx);
|
|
80
|
+
if (opts && opts.schema) {
|
|
81
|
+
otherLevelRoles = yield getRequiredResourceRole(otherLevel, ctx);
|
|
82
|
+
}
|
|
77
83
|
}
|
|
78
84
|
// if the resource is public, proceed
|
|
79
|
-
|
|
80
|
-
|
|
85
|
+
if (resourceRoles.includes(BUILTIN_ROLE_IDS.PUBLIC) ||
|
|
86
|
+
(otherLevelRoles && otherLevelRoles.includes(BUILTIN_ROLE_IDS.PUBLIC))) {
|
|
81
87
|
return next();
|
|
82
88
|
}
|
|
83
89
|
// check authenticated
|
|
84
90
|
if (!ctx.isAuthenticated) {
|
|
85
91
|
return ctx.throw(403, "Session not authenticated");
|
|
86
92
|
}
|
|
87
|
-
|
|
88
|
-
|
|
93
|
+
try {
|
|
94
|
+
// check authorized
|
|
95
|
+
yield checkAuthorized(ctx, resourceRoles, permType, permLevel);
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
// this is a schema, check if
|
|
99
|
+
if (opts && opts.schema && permLevel) {
|
|
100
|
+
yield checkAuthorized(ctx, otherLevelRoles, permType, otherLevel);
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
throw err;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
89
106
|
// csrf protection
|
|
90
107
|
return csrf(ctx, next);
|
|
91
108
|
});
|
package/dist/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@budibase/server",
|
|
3
3
|
"email": "hi@budibase.com",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.99",
|
|
5
5
|
"description": "Budibase Web Server",
|
|
6
6
|
"main": "src/index.ts",
|
|
7
7
|
"repository": {
|
|
@@ -68,13 +68,12 @@
|
|
|
68
68
|
"license": "GPL-3.0",
|
|
69
69
|
"dependencies": {
|
|
70
70
|
"@apidevtools/swagger-parser": "^10.0.3",
|
|
71
|
-
"@budibase/backend-core": "^1.0.
|
|
72
|
-
"@budibase/client": "^1.0.
|
|
73
|
-
"@budibase/string-templates": "^1.0.
|
|
71
|
+
"@budibase/backend-core": "^1.0.99",
|
|
72
|
+
"@budibase/client": "^1.0.99",
|
|
73
|
+
"@budibase/string-templates": "^1.0.99",
|
|
74
74
|
"@bull-board/api": "^3.7.0",
|
|
75
75
|
"@bull-board/koa": "^3.7.0",
|
|
76
76
|
"@elastic/elasticsearch": "7.10.0",
|
|
77
|
-
"@google-cloud/firestore": "^5.0.2",
|
|
78
77
|
"@koa/router": "8.0.0",
|
|
79
78
|
"@sendgrid/mail": "7.1.1",
|
|
80
79
|
"@sentry/node": "^6.0.0",
|
|
@@ -146,7 +145,6 @@
|
|
|
146
145
|
"@types/jest": "^26.0.23",
|
|
147
146
|
"@types/koa": "^2.13.3",
|
|
148
147
|
"@types/koa-router": "^7.4.2",
|
|
149
|
-
"@types/lodash": "4.14.180",
|
|
150
148
|
"@types/node": "^15.12.4",
|
|
151
149
|
"@types/oracledb": "^5.2.1",
|
|
152
150
|
"@types/redis": "^4.0.11",
|
|
@@ -155,7 +153,6 @@
|
|
|
155
153
|
"copyfiles": "^2.4.1",
|
|
156
154
|
"docker-compose": "^0.23.6",
|
|
157
155
|
"eslint": "^6.8.0",
|
|
158
|
-
"is-wsl": "^2.2.0",
|
|
159
156
|
"jest": "^27.0.5",
|
|
160
157
|
"jest-openapi": "^0.14.2",
|
|
161
158
|
"nodemon": "^2.0.4",
|