@budibase/backend-core 2.8.31-alpha.0 → 2.8.31
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/dist/jest.config.js +4 -10
- package/dist/jest.config.js.map +1 -1
- package/dist/package.json +26 -14
- package/dist/src/auth/auth.js.map +1 -1
- package/dist/src/cache/appMetadata.d.ts +1 -7
- package/dist/src/cache/appMetadata.js +8 -5
- package/dist/src/cache/appMetadata.js.map +1 -1
- package/dist/src/cache/user.js.map +1 -1
- package/dist/src/constants/db.d.ts +39 -1
- package/dist/src/constants/db.js +43 -8
- package/dist/src/constants/db.js.map +1 -1
- package/dist/src/constants/misc.d.ts +0 -2
- package/dist/src/constants/misc.js +0 -2
- package/dist/src/constants/misc.js.map +1 -1
- package/dist/src/db/couch/index.d.ts +0 -1
- package/dist/src/db/couch/index.js +0 -1
- package/dist/src/db/couch/index.js.map +1 -1
- package/dist/src/db/searchIndexes/searchIndexes.js.map +1 -1
- package/dist/src/db/utils.js +2 -7
- package/dist/src/db/utils.js.map +1 -1
- package/dist/src/db/views.d.ts +1 -0
- package/dist/src/db/views.js +12 -1
- package/dist/src/db/views.js.map +1 -1
- package/dist/src/environment.d.ts +4 -11
- package/dist/src/environment.js +70 -21
- package/dist/src/environment.js.map +1 -1
- package/dist/src/events/identification.js +3 -3
- package/dist/src/events/identification.js.map +1 -1
- package/dist/src/logging/index.d.ts +1 -1
- package/dist/src/logging/index.js +3 -2
- package/dist/src/logging/index.js.map +1 -1
- package/dist/src/logging/pino/logger.js +24 -40
- package/dist/src/logging/pino/logger.js.map +1 -1
- package/dist/src/middleware/adminOnly.d.ts +2 -2
- package/dist/src/middleware/adminOnly.js +2 -2
- package/dist/src/middleware/adminOnly.js.map +1 -1
- package/dist/src/middleware/builderOnly.d.ts +2 -2
- package/dist/src/middleware/builderOnly.js +2 -16
- package/dist/src/middleware/builderOnly.js.map +1 -1
- package/dist/src/middleware/builderOrAdmin.d.ts +2 -2
- package/dist/src/middleware/builderOrAdmin.js +4 -17
- package/dist/src/middleware/builderOrAdmin.js.map +1 -1
- package/dist/src/security/permissions.d.ts +18 -31
- package/dist/src/security/permissions.js +57 -46
- package/dist/src/security/permissions.js.map +1 -1
- package/dist/src/security/roles.js +4 -7
- package/dist/src/security/roles.js.map +1 -1
- package/dist/src/{users/users.d.ts → users.d.ts} +2 -4
- package/dist/src/{users/users.js → users.js} +4 -24
- package/dist/src/users.js.map +1 -0
- package/dist/tests/core/utilities/jestUtils.d.ts +0 -7
- package/dist/tests/core/utilities/jestUtils.js +1 -14
- package/dist/tests/core/utilities/jestUtils.js.map +1 -1
- package/dist/tests/core/utilities/mocks/events.d.ts +1 -0
- package/dist/tests/core/utilities/mocks/events.js +1 -0
- package/dist/tests/core/utilities/mocks/events.js.map +1 -1
- package/dist/tests/core/utilities/mocks/licenses.d.ts +0 -1
- package/dist/tests/core/utilities/mocks/licenses.js +4 -8
- package/dist/tests/core/utilities/mocks/licenses.js.map +1 -1
- package/dist/tests/core/utilities/structures/accounts.js +3 -3
- package/dist/tests/core/utilities/structures/accounts.js.map +1 -1
- package/dist/tests/core/utilities/structures/scim.js +5 -1
- package/dist/tests/core/utilities/structures/scim.js.map +1 -1
- package/dist/tests/core/utilities/structures/sso.js +2 -2
- package/dist/tests/core/utilities/structures/sso.js.map +1 -1
- package/dist/tests/core/utilities/structures/users.d.ts +1 -3
- package/dist/tests/core/utilities/structures/users.js +1 -13
- package/dist/tests/core/utilities/structures/users.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/jest.config.ts +2 -1
- package/package.json +26 -14
- package/scripts/test.sh +2 -2
- package/src/auth/auth.ts +1 -1
- package/src/cache/appMetadata.ts +8 -10
- package/src/cache/tests/writethrough.spec.ts +7 -7
- package/src/cache/user.ts +1 -1
- package/src/constants/db.ts +42 -4
- package/src/constants/misc.ts +0 -2
- package/src/db/couch/index.ts +0 -1
- package/src/db/searchIndexes/searchIndexes.ts +1 -1
- package/src/db/utils.ts +3 -9
- package/src/db/views.ts +11 -0
- package/src/environment.ts +4 -24
- package/src/events/identification.ts +2 -3
- package/src/logging/index.ts +3 -1
- package/src/logging/pino/logger.ts +24 -45
- package/src/middleware/adminOnly.ts +6 -4
- package/src/middleware/builderOnly.ts +6 -15
- package/src/middleware/builderOrAdmin.ts +8 -16
- package/src/security/permissions.ts +21 -5
- package/src/security/roles.ts +1 -1
- package/src/security/tests/permissions.spec.ts +1 -1
- package/src/{users/users.ts → users.ts} +7 -33
- package/tests/core/utilities/jestUtils.ts +0 -21
- package/tests/core/utilities/mocks/events.ts +2 -0
- package/tests/core/utilities/mocks/licenses.ts +3 -7
- package/tests/core/utilities/structures/accounts.ts +5 -3
- package/tests/core/utilities/structures/scim.ts +5 -4
- package/tests/core/utilities/structures/sso.ts +2 -2
- package/tests/core/utilities/structures/users.ts +0 -19
- package/tsconfig.json +2 -2
- package/dist/src/db/constants.d.ts +0 -2
- package/dist/src/db/constants.js +0 -13
- package/dist/src/db/constants.js.map +0 -1
- package/dist/src/logging/system.d.ts +0 -9
- package/dist/src/logging/system.js +0 -101
- package/dist/src/logging/system.js.map +0 -1
- package/dist/src/users/db.d.ts +0 -38
- package/dist/src/users/db.js +0 -407
- package/dist/src/users/db.js.map +0 -1
- package/dist/src/users/events.d.ts +0 -5
- package/dist/src/users/events.js +0 -169
- package/dist/src/users/events.js.map +0 -1
- package/dist/src/users/index.d.ts +0 -4
- package/dist/src/users/index.js +0 -23
- package/dist/src/users/index.js.map +0 -1
- package/dist/src/users/lookup.d.ts +0 -13
- package/dist/src/users/lookup.js +0 -112
- package/dist/src/users/lookup.js.map +0 -1
- package/dist/src/users/users.js.map +0 -1
- package/dist/src/users/utils.d.ts +0 -14
- package/dist/src/users/utils.js +0 -92
- package/dist/src/users/utils.js.map +0 -1
- package/src/db/constants.ts +0 -10
- package/src/logging/system.ts +0 -81
- package/src/logging/tests/system.spec.ts +0 -61
- package/src/middleware/tests/builder.spec.ts +0 -180
- package/src/users/db.ts +0 -460
- package/src/users/events.ts +0 -176
- package/src/users/index.ts +0 -4
- package/src/users/lookup.ts +0 -102
- package/src/users/utils.ts +0 -55
package/dist/src/users/lookup.js
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
-
});
|
|
33
|
-
};
|
|
34
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
-
exports.getExistingAccounts = exports.getExistingPlatformUsers = exports.getExistingTenantUsers = exports.getPlatformUser = exports.searchExistingEmails = void 0;
|
|
36
|
-
const dbUtils = __importStar(require("../db"));
|
|
37
|
-
const constants_1 = require("../constants");
|
|
38
|
-
/**
|
|
39
|
-
* Apply a system-wide search on emails:
|
|
40
|
-
* - in tenant
|
|
41
|
-
* - cross tenant
|
|
42
|
-
* - accounts
|
|
43
|
-
* return an array of emails that match the supplied emails.
|
|
44
|
-
*/
|
|
45
|
-
function searchExistingEmails(emails) {
|
|
46
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
47
|
-
let matchedEmails = [];
|
|
48
|
-
const existingTenantUsers = yield getExistingTenantUsers(emails);
|
|
49
|
-
matchedEmails.push(...existingTenantUsers.map(user => user.email));
|
|
50
|
-
const existingPlatformUsers = yield getExistingPlatformUsers(emails);
|
|
51
|
-
matchedEmails.push(...existingPlatformUsers.map(user => user._id));
|
|
52
|
-
const existingAccounts = yield getExistingAccounts(emails);
|
|
53
|
-
matchedEmails.push(...existingAccounts.map(account => account.email));
|
|
54
|
-
return [...new Set(matchedEmails.map(email => email.toLowerCase()))];
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
exports.searchExistingEmails = searchExistingEmails;
|
|
58
|
-
// lookup, could be email or userId, either will return a doc
|
|
59
|
-
function getPlatformUser(identifier) {
|
|
60
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
61
|
-
// use the view here and allow to find anyone regardless of casing
|
|
62
|
-
// Use lowercase to ensure email login is case insensitive
|
|
63
|
-
return (yield dbUtils.queryPlatformView(constants_1.ViewName.PLATFORM_USERS_LOWERCASE, {
|
|
64
|
-
keys: [identifier.toLowerCase()],
|
|
65
|
-
include_docs: true,
|
|
66
|
-
}));
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
exports.getPlatformUser = getPlatformUser;
|
|
70
|
-
function getExistingTenantUsers(emails) {
|
|
71
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
72
|
-
const lcEmails = emails.map(email => email.toLowerCase());
|
|
73
|
-
const params = {
|
|
74
|
-
keys: lcEmails,
|
|
75
|
-
include_docs: true,
|
|
76
|
-
};
|
|
77
|
-
const opts = {
|
|
78
|
-
arrayResponse: true,
|
|
79
|
-
};
|
|
80
|
-
return (yield dbUtils.queryGlobalView(constants_1.ViewName.USER_BY_EMAIL, params, undefined, opts));
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
exports.getExistingTenantUsers = getExistingTenantUsers;
|
|
84
|
-
function getExistingPlatformUsers(emails) {
|
|
85
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
86
|
-
const lcEmails = emails.map(email => email.toLowerCase());
|
|
87
|
-
const params = {
|
|
88
|
-
keys: lcEmails,
|
|
89
|
-
include_docs: true,
|
|
90
|
-
};
|
|
91
|
-
const opts = {
|
|
92
|
-
arrayResponse: true,
|
|
93
|
-
};
|
|
94
|
-
return (yield dbUtils.queryPlatformView(constants_1.ViewName.PLATFORM_USERS_LOWERCASE, params, opts));
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
exports.getExistingPlatformUsers = getExistingPlatformUsers;
|
|
98
|
-
function getExistingAccounts(emails) {
|
|
99
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
100
|
-
const lcEmails = emails.map(email => email.toLowerCase());
|
|
101
|
-
const params = {
|
|
102
|
-
keys: lcEmails,
|
|
103
|
-
include_docs: true,
|
|
104
|
-
};
|
|
105
|
-
const opts = {
|
|
106
|
-
arrayResponse: true,
|
|
107
|
-
};
|
|
108
|
-
return (yield dbUtils.queryPlatformView(constants_1.ViewName.ACCOUNT_BY_EMAIL, params, opts));
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
exports.getExistingAccounts = getExistingAccounts;
|
|
112
|
-
//# sourceMappingURL=lookup.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lookup.js","sourceRoot":"","sources":["../../../src/users/lookup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../../src/users/users.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { CloudAccount } from "@budibase/types";
|
|
2
|
-
import { sdk } from "@budibase/shared-core";
|
|
3
|
-
export declare const isBuilder: typeof sdk.users.isBuilder;
|
|
4
|
-
export declare const isAdmin: typeof sdk.users.isAdmin;
|
|
5
|
-
export declare const isGlobalBuilder: typeof sdk.users.isGlobalBuilder;
|
|
6
|
-
export declare const isAdminOrBuilder: typeof sdk.users.isAdminOrBuilder;
|
|
7
|
-
export declare const hasAdminPermissions: typeof sdk.users.hasAdminPermissions;
|
|
8
|
-
export declare const hasBuilderPermissions: typeof sdk.users.hasBuilderPermissions;
|
|
9
|
-
export declare const hasAppBuilderPermissions: typeof sdk.users.hasAppBuilderPermissions;
|
|
10
|
-
export declare function validateUniqueUser(email: string, tenantId: string): Promise<void>;
|
|
11
|
-
/**
|
|
12
|
-
* For the given user id's, return the account holder if it is in the ids.
|
|
13
|
-
*/
|
|
14
|
-
export declare function getAccountHolderFromUserIds(userIds: string[]): Promise<CloudAccount | undefined>;
|
package/dist/src/users/utils.js
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
-
});
|
|
33
|
-
};
|
|
34
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
-
};
|
|
37
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.getAccountHolderFromUserIds = exports.validateUniqueUser = exports.hasAppBuilderPermissions = exports.hasBuilderPermissions = exports.hasAdminPermissions = exports.isAdminOrBuilder = exports.isGlobalBuilder = exports.isAdmin = exports.isBuilder = void 0;
|
|
39
|
-
const accountSdk = __importStar(require("../accounts"));
|
|
40
|
-
const environment_1 = __importDefault(require("../environment"));
|
|
41
|
-
const lookup_1 = require("./lookup");
|
|
42
|
-
const errors_1 = require("../errors");
|
|
43
|
-
const context_1 = require("../context");
|
|
44
|
-
const shared_core_1 = require("@budibase/shared-core");
|
|
45
|
-
const accounts_1 = require("../accounts");
|
|
46
|
-
// extract from shared-core to make easily accessible from backend-core
|
|
47
|
-
exports.isBuilder = shared_core_1.sdk.users.isBuilder;
|
|
48
|
-
exports.isAdmin = shared_core_1.sdk.users.isAdmin;
|
|
49
|
-
exports.isGlobalBuilder = shared_core_1.sdk.users.isGlobalBuilder;
|
|
50
|
-
exports.isAdminOrBuilder = shared_core_1.sdk.users.isAdminOrBuilder;
|
|
51
|
-
exports.hasAdminPermissions = shared_core_1.sdk.users.hasAdminPermissions;
|
|
52
|
-
exports.hasBuilderPermissions = shared_core_1.sdk.users.hasBuilderPermissions;
|
|
53
|
-
exports.hasAppBuilderPermissions = shared_core_1.sdk.users.hasAppBuilderPermissions;
|
|
54
|
-
function validateUniqueUser(email, tenantId) {
|
|
55
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
56
|
-
// check budibase users in other tenants
|
|
57
|
-
if (environment_1.default.MULTI_TENANCY) {
|
|
58
|
-
const tenantUser = yield (0, lookup_1.getPlatformUser)(email);
|
|
59
|
-
if (tenantUser != null && tenantUser.tenantId !== tenantId) {
|
|
60
|
-
throw new errors_1.EmailUnavailableError(email);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
// check root account users in account portal
|
|
64
|
-
if (!environment_1.default.SELF_HOSTED && !environment_1.default.DISABLE_ACCOUNT_PORTAL) {
|
|
65
|
-
const account = yield accountSdk.getAccount(email);
|
|
66
|
-
if (account && account.verified && account.tenantId !== tenantId) {
|
|
67
|
-
throw new errors_1.EmailUnavailableError(email);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
exports.validateUniqueUser = validateUniqueUser;
|
|
73
|
-
/**
|
|
74
|
-
* For the given user id's, return the account holder if it is in the ids.
|
|
75
|
-
*/
|
|
76
|
-
function getAccountHolderFromUserIds(userIds) {
|
|
77
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
78
|
-
if (!environment_1.default.SELF_HOSTED && !environment_1.default.DISABLE_ACCOUNT_PORTAL) {
|
|
79
|
-
const tenantId = (0, context_1.getTenantId)();
|
|
80
|
-
const account = yield (0, accounts_1.getAccountByTenantId)(tenantId);
|
|
81
|
-
if (!account) {
|
|
82
|
-
throw new Error(`Account not found for tenantId=${tenantId}`);
|
|
83
|
-
}
|
|
84
|
-
const budibaseUserId = account.budibaseUserId;
|
|
85
|
-
if (userIds.includes(budibaseUserId)) {
|
|
86
|
-
return account;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
exports.getAccountHolderFromUserIds = getAccountHolderFromUserIds;
|
|
92
|
-
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/users/utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,wDAAyC;AACzC,iEAAgC;AAChC,qCAA0C;AAC1C,sCAAiD;AACjD,wCAAwC;AACxC,uDAA2C;AAC3C,0CAAkD;AAElD,uEAAuE;AAC1D,QAAA,SAAS,GAAG,iBAAG,CAAC,KAAK,CAAC,SAAS,CAAA;AAC/B,QAAA,OAAO,GAAG,iBAAG,CAAC,KAAK,CAAC,OAAO,CAAA;AAC3B,QAAA,eAAe,GAAG,iBAAG,CAAC,KAAK,CAAC,eAAe,CAAA;AAC3C,QAAA,gBAAgB,GAAG,iBAAG,CAAC,KAAK,CAAC,gBAAgB,CAAA;AAC7C,QAAA,mBAAmB,GAAG,iBAAG,CAAC,KAAK,CAAC,mBAAmB,CAAA;AACnD,QAAA,qBAAqB,GAAG,iBAAG,CAAC,KAAK,CAAC,qBAAqB,CAAA;AACvD,QAAA,wBAAwB,GAAG,iBAAG,CAAC,KAAK,CAAC,wBAAwB,CAAA;AAE1E,SAAsB,kBAAkB,CAAC,KAAa,EAAE,QAAgB;;QACtE,wCAAwC;QACxC,IAAI,qBAAG,CAAC,aAAa,EAAE;YACrB,MAAM,UAAU,GAAG,MAAM,IAAA,wBAAe,EAAC,KAAK,CAAC,CAAA;YAC/C,IAAI,UAAU,IAAI,IAAI,IAAI,UAAU,CAAC,QAAQ,KAAK,QAAQ,EAAE;gBAC1D,MAAM,IAAI,8BAAqB,CAAC,KAAK,CAAC,CAAA;aACvC;SACF;QAED,6CAA6C;QAC7C,IAAI,CAAC,qBAAG,CAAC,WAAW,IAAI,CAAC,qBAAG,CAAC,sBAAsB,EAAE;YACnD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;YAClD,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE;gBAChE,MAAM,IAAI,8BAAqB,CAAC,KAAK,CAAC,CAAA;aACvC;SACF;IACH,CAAC;CAAA;AAhBD,gDAgBC;AAED;;GAEG;AACH,SAAsB,2BAA2B,CAC/C,OAAiB;;QAEjB,IAAI,CAAC,qBAAG,CAAC,WAAW,IAAI,CAAC,qBAAG,CAAC,sBAAsB,EAAE;YACnD,MAAM,QAAQ,GAAG,IAAA,qBAAW,GAAE,CAAA;YAC9B,MAAM,OAAO,GAAG,MAAM,IAAA,+BAAoB,EAAC,QAAQ,CAAC,CAAA;YACpD,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,EAAE,CAAC,CAAA;aAC9D;YAED,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAA;YAC7C,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE;gBACpC,OAAO,OAAO,CAAA;aACf;SACF;IACH,CAAC;CAAA;AAfD,kEAeC"}
|
package/src/db/constants.ts
DELETED
package/src/logging/system.ts
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import fs from "fs"
|
|
2
|
-
import path from "path"
|
|
3
|
-
import * as rfs from "rotating-file-stream"
|
|
4
|
-
|
|
5
|
-
import env from "../environment"
|
|
6
|
-
import { budibaseTempDir } from "../objectStore"
|
|
7
|
-
|
|
8
|
-
const logsFileName = `budibase.log`
|
|
9
|
-
const budibaseLogsHistoryFileName = "budibase-logs-history.txt"
|
|
10
|
-
|
|
11
|
-
const logsPath = path.join(budibaseTempDir(), "systemlogs")
|
|
12
|
-
|
|
13
|
-
function getFullPath(fileName: string) {
|
|
14
|
-
return path.join(logsPath, fileName)
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export function getSingleFileMaxSizeInfo(totalMaxSize: string) {
|
|
18
|
-
const regex = /(\d+)([A-Za-z])/
|
|
19
|
-
const match = totalMaxSize?.match(regex)
|
|
20
|
-
if (!match) {
|
|
21
|
-
console.warn(`totalMaxSize does not have a valid value`, {
|
|
22
|
-
totalMaxSize,
|
|
23
|
-
})
|
|
24
|
-
return undefined
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const size = +match[1]
|
|
28
|
-
const unit = match[2]
|
|
29
|
-
if (size === 1) {
|
|
30
|
-
switch (unit) {
|
|
31
|
-
case "B":
|
|
32
|
-
return { size: `${size}B`, totalHistoryFiles: 1 }
|
|
33
|
-
case "K":
|
|
34
|
-
return { size: `${(size * 1000) / 2}B`, totalHistoryFiles: 1 }
|
|
35
|
-
case "M":
|
|
36
|
-
return { size: `${(size * 1000) / 2}K`, totalHistoryFiles: 1 }
|
|
37
|
-
case "G":
|
|
38
|
-
return { size: `${(size * 1000) / 2}M`, totalHistoryFiles: 1 }
|
|
39
|
-
default:
|
|
40
|
-
return undefined
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
if (size % 2 === 0) {
|
|
45
|
-
return { size: `${size / 2}${unit}`, totalHistoryFiles: 1 }
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
return { size: `1${unit}`, totalHistoryFiles: size - 1 }
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
export function localFileDestination() {
|
|
52
|
-
const fileInfo = getSingleFileMaxSizeInfo(env.ROLLING_LOG_MAX_SIZE)
|
|
53
|
-
const outFile = rfs.createStream(logsFileName, {
|
|
54
|
-
// As we have a rolling size, we want to half the max size
|
|
55
|
-
size: fileInfo?.size,
|
|
56
|
-
path: logsPath,
|
|
57
|
-
maxFiles: fileInfo?.totalHistoryFiles || 1,
|
|
58
|
-
immutable: true,
|
|
59
|
-
history: budibaseLogsHistoryFileName,
|
|
60
|
-
initialRotation: false,
|
|
61
|
-
})
|
|
62
|
-
|
|
63
|
-
return outFile
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
export function getLogReadStream() {
|
|
67
|
-
const streams = []
|
|
68
|
-
const historyFile = getFullPath(budibaseLogsHistoryFileName)
|
|
69
|
-
if (fs.existsSync(historyFile)) {
|
|
70
|
-
const fileContent = fs.readFileSync(historyFile, "utf-8")
|
|
71
|
-
const historyFiles = fileContent.split("\n")
|
|
72
|
-
for (const historyFile of historyFiles.filter(x => x)) {
|
|
73
|
-
streams.push(fs.readFileSync(historyFile))
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
streams.push(fs.readFileSync(getFullPath(logsFileName)))
|
|
78
|
-
|
|
79
|
-
const combinedContent = Buffer.concat(streams)
|
|
80
|
-
return combinedContent
|
|
81
|
-
}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { getSingleFileMaxSizeInfo } from "../system"
|
|
2
|
-
|
|
3
|
-
describe("system", () => {
|
|
4
|
-
describe("getSingleFileMaxSizeInfo", () => {
|
|
5
|
-
it.each([
|
|
6
|
-
["100B", "50B"],
|
|
7
|
-
["200K", "100K"],
|
|
8
|
-
["20M", "10M"],
|
|
9
|
-
["4G", "2G"],
|
|
10
|
-
])(
|
|
11
|
-
"Halving even number (%s) returns halved size and 1 history file (%s)",
|
|
12
|
-
(totalValue, expectedMaxSize) => {
|
|
13
|
-
const result = getSingleFileMaxSizeInfo(totalValue)
|
|
14
|
-
expect(result).toEqual({
|
|
15
|
-
size: expectedMaxSize,
|
|
16
|
-
totalHistoryFiles: 1,
|
|
17
|
-
})
|
|
18
|
-
}
|
|
19
|
-
)
|
|
20
|
-
|
|
21
|
-
it.each([
|
|
22
|
-
["5B", "1B", 4],
|
|
23
|
-
["17K", "1K", 16],
|
|
24
|
-
["21M", "1M", 20],
|
|
25
|
-
["3G", "1G", 2],
|
|
26
|
-
])(
|
|
27
|
-
"Halving an odd number (%s) returns as many files as size (-1) (%s)",
|
|
28
|
-
(totalValue, expectedMaxSize, totalHistoryFiles) => {
|
|
29
|
-
const result = getSingleFileMaxSizeInfo(totalValue)
|
|
30
|
-
expect(result).toEqual({
|
|
31
|
-
size: expectedMaxSize,
|
|
32
|
-
totalHistoryFiles,
|
|
33
|
-
})
|
|
34
|
-
}
|
|
35
|
-
)
|
|
36
|
-
|
|
37
|
-
it.each([
|
|
38
|
-
["1B", "1B"],
|
|
39
|
-
["1K", "500B"],
|
|
40
|
-
["1M", "500K"],
|
|
41
|
-
["1G", "500M"],
|
|
42
|
-
])(
|
|
43
|
-
"Halving '%s' returns halved unit (%s)",
|
|
44
|
-
(totalValue, expectedMaxSize) => {
|
|
45
|
-
const result = getSingleFileMaxSizeInfo(totalValue)
|
|
46
|
-
expect(result).toEqual({
|
|
47
|
-
size: expectedMaxSize,
|
|
48
|
-
totalHistoryFiles: 1,
|
|
49
|
-
})
|
|
50
|
-
}
|
|
51
|
-
)
|
|
52
|
-
|
|
53
|
-
it.each([[undefined], [""], ["50"], ["wrongvalue"]])(
|
|
54
|
-
"Halving wrongly formatted value ('%s') returns undefined",
|
|
55
|
-
totalValue => {
|
|
56
|
-
const result = getSingleFileMaxSizeInfo(totalValue!)
|
|
57
|
-
expect(result).toBeUndefined()
|
|
58
|
-
}
|
|
59
|
-
)
|
|
60
|
-
})
|
|
61
|
-
})
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
import adminOnly from "../adminOnly"
|
|
2
|
-
import builderOnly from "../builderOnly"
|
|
3
|
-
import builderOrAdmin from "../builderOrAdmin"
|
|
4
|
-
import { structures } from "../../../tests"
|
|
5
|
-
import { ContextUser, ServiceType } from "@budibase/types"
|
|
6
|
-
import { doInAppContext } from "../../context"
|
|
7
|
-
import env from "../../environment"
|
|
8
|
-
env._set("SERVICE_TYPE", ServiceType.APPS)
|
|
9
|
-
|
|
10
|
-
const appId = "app_aaa"
|
|
11
|
-
const basicUser = structures.users.user()
|
|
12
|
-
const adminUser = structures.users.adminUser()
|
|
13
|
-
const adminOnlyUser = structures.users.adminOnlyUser()
|
|
14
|
-
const builderUser = structures.users.builderUser()
|
|
15
|
-
const appBuilderUser = structures.users.appBuilderUser(appId)
|
|
16
|
-
|
|
17
|
-
function buildUserCtx(user: ContextUser) {
|
|
18
|
-
return {
|
|
19
|
-
internal: false,
|
|
20
|
-
user,
|
|
21
|
-
throw: jest.fn(),
|
|
22
|
-
} as any
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function passed(throwFn: jest.Func, nextFn: jest.Func) {
|
|
26
|
-
expect(throwFn).not.toBeCalled()
|
|
27
|
-
expect(nextFn).toBeCalled()
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
function threw(throwFn: jest.Func) {
|
|
31
|
-
// cant check next, the throw function doesn't actually throw - so it still continues
|
|
32
|
-
expect(throwFn).toBeCalled()
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
describe("adminOnly middleware", () => {
|
|
36
|
-
it("should allow admin user", () => {
|
|
37
|
-
const ctx = buildUserCtx(adminUser),
|
|
38
|
-
next = jest.fn()
|
|
39
|
-
adminOnly(ctx, next)
|
|
40
|
-
passed(ctx.throw, next)
|
|
41
|
-
})
|
|
42
|
-
|
|
43
|
-
it("should not allow basic user", () => {
|
|
44
|
-
const ctx = buildUserCtx(basicUser),
|
|
45
|
-
next = jest.fn()
|
|
46
|
-
adminOnly(ctx, next)
|
|
47
|
-
threw(ctx.throw)
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
it("should not allow builder user", () => {
|
|
51
|
-
const ctx = buildUserCtx(builderUser),
|
|
52
|
-
next = jest.fn()
|
|
53
|
-
adminOnly(ctx, next)
|
|
54
|
-
threw(ctx.throw)
|
|
55
|
-
})
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
describe("builderOnly middleware", () => {
|
|
59
|
-
it("should allow builder user", () => {
|
|
60
|
-
const ctx = buildUserCtx(builderUser),
|
|
61
|
-
next = jest.fn()
|
|
62
|
-
builderOnly(ctx, next)
|
|
63
|
-
passed(ctx.throw, next)
|
|
64
|
-
})
|
|
65
|
-
|
|
66
|
-
it("should allow app builder user", () => {
|
|
67
|
-
const ctx = buildUserCtx(appBuilderUser),
|
|
68
|
-
next = jest.fn()
|
|
69
|
-
doInAppContext(appId, () => {
|
|
70
|
-
builderOnly(ctx, next)
|
|
71
|
-
})
|
|
72
|
-
passed(ctx.throw, next)
|
|
73
|
-
})
|
|
74
|
-
|
|
75
|
-
it("should allow admin and builder user", () => {
|
|
76
|
-
const ctx = buildUserCtx(adminUser),
|
|
77
|
-
next = jest.fn()
|
|
78
|
-
builderOnly(ctx, next)
|
|
79
|
-
passed(ctx.throw, next)
|
|
80
|
-
})
|
|
81
|
-
|
|
82
|
-
it("should not allow admin user", () => {
|
|
83
|
-
const ctx = buildUserCtx(adminOnlyUser),
|
|
84
|
-
next = jest.fn()
|
|
85
|
-
builderOnly(ctx, next)
|
|
86
|
-
threw(ctx.throw)
|
|
87
|
-
})
|
|
88
|
-
|
|
89
|
-
it("should not allow app builder user to different app", () => {
|
|
90
|
-
const ctx = buildUserCtx(appBuilderUser),
|
|
91
|
-
next = jest.fn()
|
|
92
|
-
doInAppContext("app_bbb", () => {
|
|
93
|
-
builderOnly(ctx, next)
|
|
94
|
-
})
|
|
95
|
-
threw(ctx.throw)
|
|
96
|
-
})
|
|
97
|
-
|
|
98
|
-
it("should not allow basic user", () => {
|
|
99
|
-
const ctx = buildUserCtx(basicUser),
|
|
100
|
-
next = jest.fn()
|
|
101
|
-
builderOnly(ctx, next)
|
|
102
|
-
threw(ctx.throw)
|
|
103
|
-
})
|
|
104
|
-
})
|
|
105
|
-
|
|
106
|
-
describe("builderOrAdmin middleware", () => {
|
|
107
|
-
it("should allow builder user", () => {
|
|
108
|
-
const ctx = buildUserCtx(builderUser),
|
|
109
|
-
next = jest.fn()
|
|
110
|
-
builderOrAdmin(ctx, next)
|
|
111
|
-
passed(ctx.throw, next)
|
|
112
|
-
})
|
|
113
|
-
|
|
114
|
-
it("should allow builder and admin user", () => {
|
|
115
|
-
const ctx = buildUserCtx(adminUser),
|
|
116
|
-
next = jest.fn()
|
|
117
|
-
builderOrAdmin(ctx, next)
|
|
118
|
-
passed(ctx.throw, next)
|
|
119
|
-
})
|
|
120
|
-
|
|
121
|
-
it("should allow admin user", () => {
|
|
122
|
-
const ctx = buildUserCtx(adminOnlyUser),
|
|
123
|
-
next = jest.fn()
|
|
124
|
-
builderOrAdmin(ctx, next)
|
|
125
|
-
passed(ctx.throw, next)
|
|
126
|
-
})
|
|
127
|
-
|
|
128
|
-
it("should allow app builder user", () => {
|
|
129
|
-
const ctx = buildUserCtx(appBuilderUser),
|
|
130
|
-
next = jest.fn()
|
|
131
|
-
doInAppContext(appId, () => {
|
|
132
|
-
builderOrAdmin(ctx, next)
|
|
133
|
-
})
|
|
134
|
-
passed(ctx.throw, next)
|
|
135
|
-
})
|
|
136
|
-
|
|
137
|
-
it("should not allow basic user", () => {
|
|
138
|
-
const ctx = buildUserCtx(basicUser),
|
|
139
|
-
next = jest.fn()
|
|
140
|
-
builderOrAdmin(ctx, next)
|
|
141
|
-
threw(ctx.throw)
|
|
142
|
-
})
|
|
143
|
-
})
|
|
144
|
-
|
|
145
|
-
describe("check service difference", () => {
|
|
146
|
-
it("should not allow without app ID in apps", () => {
|
|
147
|
-
env._set("SERVICE_TYPE", ServiceType.APPS)
|
|
148
|
-
const appId = "app_a"
|
|
149
|
-
const ctx = buildUserCtx({
|
|
150
|
-
...basicUser,
|
|
151
|
-
builder: {
|
|
152
|
-
apps: [appId],
|
|
153
|
-
},
|
|
154
|
-
})
|
|
155
|
-
const next = jest.fn()
|
|
156
|
-
doInAppContext(appId, () => {
|
|
157
|
-
builderOnly(ctx, next)
|
|
158
|
-
})
|
|
159
|
-
passed(ctx.throw, next)
|
|
160
|
-
doInAppContext("app_b", () => {
|
|
161
|
-
builderOnly(ctx, next)
|
|
162
|
-
})
|
|
163
|
-
threw(ctx.throw)
|
|
164
|
-
})
|
|
165
|
-
|
|
166
|
-
it("should allow without app ID in worker", () => {
|
|
167
|
-
env._set("SERVICE_TYPE", ServiceType.WORKER)
|
|
168
|
-
const ctx = buildUserCtx({
|
|
169
|
-
...basicUser,
|
|
170
|
-
builder: {
|
|
171
|
-
apps: ["app_a"],
|
|
172
|
-
},
|
|
173
|
-
})
|
|
174
|
-
const next = jest.fn()
|
|
175
|
-
doInAppContext("app_b", () => {
|
|
176
|
-
builderOnly(ctx, next)
|
|
177
|
-
})
|
|
178
|
-
passed(ctx.throw, next)
|
|
179
|
-
})
|
|
180
|
-
})
|