@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.
Files changed (132) hide show
  1. package/dist/jest.config.js +4 -10
  2. package/dist/jest.config.js.map +1 -1
  3. package/dist/package.json +26 -14
  4. package/dist/src/auth/auth.js.map +1 -1
  5. package/dist/src/cache/appMetadata.d.ts +1 -7
  6. package/dist/src/cache/appMetadata.js +8 -5
  7. package/dist/src/cache/appMetadata.js.map +1 -1
  8. package/dist/src/cache/user.js.map +1 -1
  9. package/dist/src/constants/db.d.ts +39 -1
  10. package/dist/src/constants/db.js +43 -8
  11. package/dist/src/constants/db.js.map +1 -1
  12. package/dist/src/constants/misc.d.ts +0 -2
  13. package/dist/src/constants/misc.js +0 -2
  14. package/dist/src/constants/misc.js.map +1 -1
  15. package/dist/src/db/couch/index.d.ts +0 -1
  16. package/dist/src/db/couch/index.js +0 -1
  17. package/dist/src/db/couch/index.js.map +1 -1
  18. package/dist/src/db/searchIndexes/searchIndexes.js.map +1 -1
  19. package/dist/src/db/utils.js +2 -7
  20. package/dist/src/db/utils.js.map +1 -1
  21. package/dist/src/db/views.d.ts +1 -0
  22. package/dist/src/db/views.js +12 -1
  23. package/dist/src/db/views.js.map +1 -1
  24. package/dist/src/environment.d.ts +4 -11
  25. package/dist/src/environment.js +70 -21
  26. package/dist/src/environment.js.map +1 -1
  27. package/dist/src/events/identification.js +3 -3
  28. package/dist/src/events/identification.js.map +1 -1
  29. package/dist/src/logging/index.d.ts +1 -1
  30. package/dist/src/logging/index.js +3 -2
  31. package/dist/src/logging/index.js.map +1 -1
  32. package/dist/src/logging/pino/logger.js +24 -40
  33. package/dist/src/logging/pino/logger.js.map +1 -1
  34. package/dist/src/middleware/adminOnly.d.ts +2 -2
  35. package/dist/src/middleware/adminOnly.js +2 -2
  36. package/dist/src/middleware/adminOnly.js.map +1 -1
  37. package/dist/src/middleware/builderOnly.d.ts +2 -2
  38. package/dist/src/middleware/builderOnly.js +2 -16
  39. package/dist/src/middleware/builderOnly.js.map +1 -1
  40. package/dist/src/middleware/builderOrAdmin.d.ts +2 -2
  41. package/dist/src/middleware/builderOrAdmin.js +4 -17
  42. package/dist/src/middleware/builderOrAdmin.js.map +1 -1
  43. package/dist/src/security/permissions.d.ts +18 -31
  44. package/dist/src/security/permissions.js +57 -46
  45. package/dist/src/security/permissions.js.map +1 -1
  46. package/dist/src/security/roles.js +4 -7
  47. package/dist/src/security/roles.js.map +1 -1
  48. package/dist/src/{users/users.d.ts → users.d.ts} +2 -4
  49. package/dist/src/{users/users.js → users.js} +4 -24
  50. package/dist/src/users.js.map +1 -0
  51. package/dist/tests/core/utilities/jestUtils.d.ts +0 -7
  52. package/dist/tests/core/utilities/jestUtils.js +1 -14
  53. package/dist/tests/core/utilities/jestUtils.js.map +1 -1
  54. package/dist/tests/core/utilities/mocks/events.d.ts +1 -0
  55. package/dist/tests/core/utilities/mocks/events.js +1 -0
  56. package/dist/tests/core/utilities/mocks/events.js.map +1 -1
  57. package/dist/tests/core/utilities/mocks/licenses.d.ts +0 -1
  58. package/dist/tests/core/utilities/mocks/licenses.js +4 -8
  59. package/dist/tests/core/utilities/mocks/licenses.js.map +1 -1
  60. package/dist/tests/core/utilities/structures/accounts.js +3 -3
  61. package/dist/tests/core/utilities/structures/accounts.js.map +1 -1
  62. package/dist/tests/core/utilities/structures/scim.js +5 -1
  63. package/dist/tests/core/utilities/structures/scim.js.map +1 -1
  64. package/dist/tests/core/utilities/structures/sso.js +2 -2
  65. package/dist/tests/core/utilities/structures/sso.js.map +1 -1
  66. package/dist/tests/core/utilities/structures/users.d.ts +1 -3
  67. package/dist/tests/core/utilities/structures/users.js +1 -13
  68. package/dist/tests/core/utilities/structures/users.js.map +1 -1
  69. package/dist/tsconfig.build.tsbuildinfo +1 -1
  70. package/jest.config.ts +2 -1
  71. package/package.json +26 -14
  72. package/scripts/test.sh +2 -2
  73. package/src/auth/auth.ts +1 -1
  74. package/src/cache/appMetadata.ts +8 -10
  75. package/src/cache/tests/writethrough.spec.ts +7 -7
  76. package/src/cache/user.ts +1 -1
  77. package/src/constants/db.ts +42 -4
  78. package/src/constants/misc.ts +0 -2
  79. package/src/db/couch/index.ts +0 -1
  80. package/src/db/searchIndexes/searchIndexes.ts +1 -1
  81. package/src/db/utils.ts +3 -9
  82. package/src/db/views.ts +11 -0
  83. package/src/environment.ts +4 -24
  84. package/src/events/identification.ts +2 -3
  85. package/src/logging/index.ts +3 -1
  86. package/src/logging/pino/logger.ts +24 -45
  87. package/src/middleware/adminOnly.ts +6 -4
  88. package/src/middleware/builderOnly.ts +6 -15
  89. package/src/middleware/builderOrAdmin.ts +8 -16
  90. package/src/security/permissions.ts +21 -5
  91. package/src/security/roles.ts +1 -1
  92. package/src/security/tests/permissions.spec.ts +1 -1
  93. package/src/{users/users.ts → users.ts} +7 -33
  94. package/tests/core/utilities/jestUtils.ts +0 -21
  95. package/tests/core/utilities/mocks/events.ts +2 -0
  96. package/tests/core/utilities/mocks/licenses.ts +3 -7
  97. package/tests/core/utilities/structures/accounts.ts +5 -3
  98. package/tests/core/utilities/structures/scim.ts +5 -4
  99. package/tests/core/utilities/structures/sso.ts +2 -2
  100. package/tests/core/utilities/structures/users.ts +0 -19
  101. package/tsconfig.json +2 -2
  102. package/dist/src/db/constants.d.ts +0 -2
  103. package/dist/src/db/constants.js +0 -13
  104. package/dist/src/db/constants.js.map +0 -1
  105. package/dist/src/logging/system.d.ts +0 -9
  106. package/dist/src/logging/system.js +0 -101
  107. package/dist/src/logging/system.js.map +0 -1
  108. package/dist/src/users/db.d.ts +0 -38
  109. package/dist/src/users/db.js +0 -407
  110. package/dist/src/users/db.js.map +0 -1
  111. package/dist/src/users/events.d.ts +0 -5
  112. package/dist/src/users/events.js +0 -169
  113. package/dist/src/users/events.js.map +0 -1
  114. package/dist/src/users/index.d.ts +0 -4
  115. package/dist/src/users/index.js +0 -23
  116. package/dist/src/users/index.js.map +0 -1
  117. package/dist/src/users/lookup.d.ts +0 -13
  118. package/dist/src/users/lookup.js +0 -112
  119. package/dist/src/users/lookup.js.map +0 -1
  120. package/dist/src/users/users.js.map +0 -1
  121. package/dist/src/users/utils.d.ts +0 -14
  122. package/dist/src/users/utils.js +0 -92
  123. package/dist/src/users/utils.js.map +0 -1
  124. package/src/db/constants.ts +0 -10
  125. package/src/logging/system.ts +0 -81
  126. package/src/logging/tests/system.spec.ts +0 -61
  127. package/src/middleware/tests/builder.spec.ts +0 -180
  128. package/src/users/db.ts +0 -460
  129. package/src/users/events.ts +0 -176
  130. package/src/users/index.ts +0 -4
  131. package/src/users/lookup.ts +0 -102
  132. package/src/users/utils.ts +0 -55
@@ -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>;
@@ -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"}
@@ -1,10 +0,0 @@
1
- export const CONSTANT_INTERNAL_ROW_COLS = [
2
- "_id",
3
- "_rev",
4
- "type",
5
- "createdAt",
6
- "updatedAt",
7
- "tableId",
8
- ] as const
9
-
10
- export const CONSTANT_EXTERNAL_ROW_COLS = ["_id", "_rev", "tableId"] as const
@@ -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
- })