@budibase/backend-core 2.8.31 → 2.8.32-alpha.0
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 +10 -4
- package/dist/jest.config.js.map +1 -1
- package/dist/package.json +14 -26
- package/dist/src/auth/auth.js.map +1 -1
- package/dist/src/cache/appMetadata.d.ts +7 -1
- package/dist/src/cache/appMetadata.js +5 -8
- 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 +1 -39
- package/dist/src/constants/db.js +8 -43
- package/dist/src/constants/db.js.map +1 -1
- package/dist/src/constants/misc.d.ts +2 -0
- package/dist/src/constants/misc.js +2 -0
- package/dist/src/constants/misc.js.map +1 -1
- package/dist/src/db/constants.d.ts +2 -0
- package/dist/src/db/constants.js +13 -0
- package/dist/src/db/constants.js.map +1 -0
- package/dist/src/db/couch/index.d.ts +1 -0
- package/dist/src/db/couch/index.js +1 -0
- 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 +7 -2
- package/dist/src/db/utils.js.map +1 -1
- package/dist/src/db/views.d.ts +0 -1
- package/dist/src/db/views.js +1 -12
- package/dist/src/db/views.js.map +1 -1
- package/dist/src/environment.d.ts +11 -4
- package/dist/src/environment.js +21 -70
- 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 +2 -3
- package/dist/src/logging/index.js.map +1 -1
- package/dist/src/logging/pino/logger.js +40 -24
- package/dist/src/logging/pino/logger.js.map +1 -1
- package/dist/src/logging/system.d.ts +9 -0
- package/dist/src/logging/system.js +101 -0
- package/dist/src/logging/system.js.map +1 -0
- 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 +16 -2
- package/dist/src/middleware/builderOnly.js.map +1 -1
- package/dist/src/middleware/builderOrAdmin.d.ts +2 -2
- package/dist/src/middleware/builderOrAdmin.js +17 -4
- package/dist/src/middleware/builderOrAdmin.js.map +1 -1
- package/dist/src/security/permissions.d.ts +31 -18
- package/dist/src/security/permissions.js +46 -57
- package/dist/src/security/permissions.js.map +1 -1
- package/dist/src/security/roles.js +7 -4
- package/dist/src/security/roles.js.map +1 -1
- package/dist/src/users/db.d.ts +38 -0
- package/dist/src/users/db.js +407 -0
- package/dist/src/users/db.js.map +1 -0
- package/dist/src/users/events.d.ts +5 -0
- package/dist/src/users/events.js +169 -0
- package/dist/src/users/events.js.map +1 -0
- package/dist/src/users/index.d.ts +4 -0
- package/dist/src/users/index.js +23 -0
- package/dist/src/users/index.js.map +1 -0
- package/dist/src/users/lookup.d.ts +13 -0
- package/dist/src/users/lookup.js +112 -0
- package/dist/src/users/lookup.js.map +1 -0
- package/dist/src/{users.d.ts → users/users.d.ts} +4 -2
- package/dist/src/{users.js → users/users.js} +24 -4
- package/dist/src/users/users.js.map +1 -0
- package/dist/src/users/utils.d.ts +14 -0
- package/dist/src/users/utils.js +92 -0
- package/dist/src/users/utils.js.map +1 -0
- package/dist/tests/core/utilities/jestUtils.d.ts +7 -0
- package/dist/tests/core/utilities/jestUtils.js +14 -1
- package/dist/tests/core/utilities/jestUtils.js.map +1 -1
- package/dist/tests/core/utilities/mocks/events.d.ts +0 -1
- package/dist/tests/core/utilities/mocks/events.js +0 -1
- package/dist/tests/core/utilities/mocks/events.js.map +1 -1
- package/dist/tests/core/utilities/mocks/licenses.d.ts +1 -0
- package/dist/tests/core/utilities/mocks/licenses.js +8 -4
- 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 +1 -5
- 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 +3 -1
- package/dist/tests/core/utilities/structures/users.js +13 -1
- package/dist/tests/core/utilities/structures/users.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/jest.config.ts +1 -2
- package/package.json +14 -26
- package/scripts/test.sh +2 -2
- package/src/auth/auth.ts +1 -1
- package/src/cache/appMetadata.ts +10 -8
- package/src/cache/tests/writethrough.spec.ts +7 -7
- package/src/cache/user.ts +1 -1
- package/src/constants/db.ts +4 -42
- package/src/constants/misc.ts +2 -0
- package/src/db/constants.ts +10 -0
- package/src/db/couch/index.ts +1 -0
- package/src/db/searchIndexes/searchIndexes.ts +1 -1
- package/src/db/utils.ts +9 -3
- package/src/db/views.ts +0 -11
- package/src/environment.ts +24 -4
- package/src/events/identification.ts +3 -2
- package/src/logging/index.ts +1 -3
- package/src/logging/pino/logger.ts +45 -24
- package/src/logging/system.ts +81 -0
- package/src/logging/tests/system.spec.ts +61 -0
- package/src/middleware/adminOnly.ts +4 -6
- package/src/middleware/builderOnly.ts +15 -6
- package/src/middleware/builderOrAdmin.ts +16 -8
- package/src/middleware/tests/builder.spec.ts +180 -0
- package/src/security/permissions.ts +5 -21
- package/src/security/roles.ts +1 -1
- package/src/security/tests/permissions.spec.ts +1 -1
- package/src/users/db.ts +460 -0
- package/src/users/events.ts +176 -0
- package/src/users/index.ts +4 -0
- package/src/users/lookup.ts +102 -0
- package/src/{users.ts → users/users.ts} +33 -7
- package/src/users/utils.ts +55 -0
- package/tests/core/utilities/jestUtils.ts +21 -0
- package/tests/core/utilities/mocks/events.ts +0 -2
- package/tests/core/utilities/mocks/licenses.ts +7 -3
- package/tests/core/utilities/structures/accounts.ts +3 -5
- package/tests/core/utilities/structures/scim.ts +4 -5
- package/tests/core/utilities/structures/sso.ts +2 -2
- package/tests/core/utilities/structures/users.ts +19 -0
- package/tsconfig.json +2 -2
- package/dist/src/users.js.map +0 -1
|
@@ -0,0 +1,407 @@
|
|
|
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.UserDB = void 0;
|
|
39
|
+
const environment_1 = __importDefault(require("../environment"));
|
|
40
|
+
const eventHelpers = __importStar(require("./events"));
|
|
41
|
+
const accounts = __importStar(require("../accounts"));
|
|
42
|
+
const cache = __importStar(require("../cache"));
|
|
43
|
+
const context_1 = require("../context");
|
|
44
|
+
const dbUtils = __importStar(require("../db"));
|
|
45
|
+
const errors_1 = require("../errors");
|
|
46
|
+
const platform = __importStar(require("../platform"));
|
|
47
|
+
const sessions = __importStar(require("../security/sessions"));
|
|
48
|
+
const usersCore = __importStar(require("./users"));
|
|
49
|
+
const types_1 = require("@budibase/types");
|
|
50
|
+
const accountSdk = __importStar(require("../accounts"));
|
|
51
|
+
const utils_1 = require("./utils");
|
|
52
|
+
const lookup_1 = require("./lookup");
|
|
53
|
+
const utils_2 = require("../utils");
|
|
54
|
+
const bulkDeleteProcessing = (dbUser) => __awaiter(void 0, void 0, void 0, function* () {
|
|
55
|
+
const userId = dbUser._id;
|
|
56
|
+
yield platform.users.removeUser(dbUser);
|
|
57
|
+
yield eventHelpers.handleDeleteEvents(dbUser);
|
|
58
|
+
yield cache.user.invalidateUser(userId);
|
|
59
|
+
yield sessions.invalidateSessions(userId, { reason: "bulk-deletion" });
|
|
60
|
+
});
|
|
61
|
+
class UserDB {
|
|
62
|
+
static init(quotaFns, groupFns, featureFns) {
|
|
63
|
+
UserDB.quotas = quotaFns;
|
|
64
|
+
UserDB.groups = groupFns;
|
|
65
|
+
UserDB.features = featureFns;
|
|
66
|
+
}
|
|
67
|
+
static isPreventPasswordActions(user, account) {
|
|
68
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
// when in maintenance mode we allow sso users with the admin role
|
|
70
|
+
// to perform any password action - this prevents lockout
|
|
71
|
+
if (environment_1.default.ENABLE_SSO_MAINTENANCE_MODE && (0, utils_1.isAdmin)(user)) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
// SSO is enforced for all users
|
|
75
|
+
if (yield UserDB.features.isSSOEnforced()) {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
// Check local sso
|
|
79
|
+
if ((0, types_1.isSSOUser)(user)) {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
// Check account sso
|
|
83
|
+
if (!account) {
|
|
84
|
+
account = yield accountSdk.getAccountByTenantId((0, context_1.getTenantId)());
|
|
85
|
+
}
|
|
86
|
+
return !!(account && account.email === user.email && (0, types_1.isSSOAccount)(account));
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
static buildUser(user, opts = {
|
|
90
|
+
hashPassword: true,
|
|
91
|
+
requirePassword: true,
|
|
92
|
+
}, tenantId, dbUser, account) {
|
|
93
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
94
|
+
let { password, _id } = user;
|
|
95
|
+
// don't require a password if the db user doesn't already have one
|
|
96
|
+
if (dbUser && !dbUser.password) {
|
|
97
|
+
opts.requirePassword = false;
|
|
98
|
+
}
|
|
99
|
+
let hashedPassword;
|
|
100
|
+
if (password) {
|
|
101
|
+
if (yield UserDB.isPreventPasswordActions(user, account)) {
|
|
102
|
+
throw new errors_1.HTTPError("Password change is disabled for this user", 400);
|
|
103
|
+
}
|
|
104
|
+
hashedPassword = opts.hashPassword ? yield (0, utils_2.hash)(password) : password;
|
|
105
|
+
}
|
|
106
|
+
else if (dbUser) {
|
|
107
|
+
hashedPassword = dbUser.password;
|
|
108
|
+
}
|
|
109
|
+
// passwords are never required if sso is enforced
|
|
110
|
+
const requirePasswords = opts.requirePassword && !(yield UserDB.features.isSSOEnforced());
|
|
111
|
+
if (!hashedPassword && requirePasswords) {
|
|
112
|
+
throw "Password must be specified.";
|
|
113
|
+
}
|
|
114
|
+
_id = _id || dbUtils.generateGlobalUserID();
|
|
115
|
+
const fullUser = Object.assign(Object.assign(Object.assign({ createdAt: Date.now() }, dbUser), user), { _id, password: hashedPassword, tenantId });
|
|
116
|
+
// make sure the roles object is always present
|
|
117
|
+
if (!fullUser.roles) {
|
|
118
|
+
fullUser.roles = {};
|
|
119
|
+
}
|
|
120
|
+
// add the active status to a user if its not provided
|
|
121
|
+
if (fullUser.status == null) {
|
|
122
|
+
fullUser.status = types_1.UserStatus.ACTIVE;
|
|
123
|
+
}
|
|
124
|
+
return fullUser;
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
static allUsers() {
|
|
128
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
129
|
+
const db = (0, context_1.getGlobalDB)();
|
|
130
|
+
const response = yield db.allDocs(dbUtils.getGlobalUserParams(null, {
|
|
131
|
+
include_docs: true,
|
|
132
|
+
}));
|
|
133
|
+
return response.rows.map((row) => row.doc);
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
static countUsersByApp(appId) {
|
|
137
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
138
|
+
let response = yield usersCore.searchGlobalUsersByApp(appId, {});
|
|
139
|
+
return {
|
|
140
|
+
userCount: response.length,
|
|
141
|
+
};
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
static getUsersByAppAccess(appId) {
|
|
145
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
146
|
+
const opts = {
|
|
147
|
+
include_docs: true,
|
|
148
|
+
limit: 50,
|
|
149
|
+
};
|
|
150
|
+
let response = yield usersCore.searchGlobalUsersByAppAccess(appId, opts);
|
|
151
|
+
return response;
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
static getUserByEmail(email) {
|
|
155
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
156
|
+
return usersCore.getGlobalUserByEmail(email);
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Gets a user by ID from the global database, based on the current tenancy.
|
|
161
|
+
*/
|
|
162
|
+
static getUser(userId) {
|
|
163
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
164
|
+
const user = yield usersCore.getById(userId);
|
|
165
|
+
if (user) {
|
|
166
|
+
delete user.password;
|
|
167
|
+
}
|
|
168
|
+
return user;
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
static save(user, opts = {}) {
|
|
172
|
+
var _a, _b;
|
|
173
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
174
|
+
// default booleans to true
|
|
175
|
+
if (opts.hashPassword == null) {
|
|
176
|
+
opts.hashPassword = true;
|
|
177
|
+
}
|
|
178
|
+
if (opts.requirePassword == null) {
|
|
179
|
+
opts.requirePassword = true;
|
|
180
|
+
}
|
|
181
|
+
const tenantId = (0, context_1.getTenantId)();
|
|
182
|
+
const db = (0, context_1.getGlobalDB)();
|
|
183
|
+
let { email, _id, userGroups = [], roles } = user;
|
|
184
|
+
if (!email && !_id) {
|
|
185
|
+
throw new Error("_id or email is required");
|
|
186
|
+
}
|
|
187
|
+
if (((_b = (_a = user.builder) === null || _a === void 0 ? void 0 : _a.apps) === null || _b === void 0 ? void 0 : _b.length) &&
|
|
188
|
+
!(yield UserDB.features.isAppBuildersEnabled())) {
|
|
189
|
+
throw new Error("Unable to update app builders, please check license");
|
|
190
|
+
}
|
|
191
|
+
let dbUser;
|
|
192
|
+
if (_id) {
|
|
193
|
+
// try to get existing user from db
|
|
194
|
+
try {
|
|
195
|
+
dbUser = (yield db.get(_id));
|
|
196
|
+
if (email && dbUser.email !== email) {
|
|
197
|
+
throw "Email address cannot be changed";
|
|
198
|
+
}
|
|
199
|
+
email = dbUser.email;
|
|
200
|
+
}
|
|
201
|
+
catch (e) {
|
|
202
|
+
if (e.status === 404) {
|
|
203
|
+
// do nothing, save this new user with the id specified - required for SSO auth
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
throw e;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
if (!dbUser && email) {
|
|
211
|
+
// no id was specified - load from email instead
|
|
212
|
+
dbUser = yield usersCore.getGlobalUserByEmail(email);
|
|
213
|
+
if (dbUser && dbUser._id !== _id) {
|
|
214
|
+
throw new errors_1.EmailUnavailableError(email);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
const change = dbUser ? 0 : 1; // no change if there is existing user
|
|
218
|
+
return UserDB.quotas.addUsers(change, () => __awaiter(this, void 0, void 0, function* () {
|
|
219
|
+
yield (0, utils_1.validateUniqueUser)(email, tenantId);
|
|
220
|
+
let builtUser = yield UserDB.buildUser(user, opts, tenantId, dbUser);
|
|
221
|
+
// don't allow a user to update its own roles/perms
|
|
222
|
+
if (opts.currentUserId && opts.currentUserId === (dbUser === null || dbUser === void 0 ? void 0 : dbUser._id)) {
|
|
223
|
+
builtUser = usersCore.cleanseUserObject(builtUser, dbUser);
|
|
224
|
+
}
|
|
225
|
+
if (!dbUser && (roles === null || roles === void 0 ? void 0 : roles.length)) {
|
|
226
|
+
builtUser.roles = Object.assign({}, roles);
|
|
227
|
+
}
|
|
228
|
+
// make sure we set the _id field for a new user
|
|
229
|
+
// Also if this is a new user, associate groups with them
|
|
230
|
+
let groupPromises = [];
|
|
231
|
+
if (!_id) {
|
|
232
|
+
_id = builtUser._id;
|
|
233
|
+
if (userGroups.length > 0) {
|
|
234
|
+
for (let groupId of userGroups) {
|
|
235
|
+
groupPromises.push(UserDB.groups.addUsers(groupId, [_id]));
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
try {
|
|
240
|
+
// save the user to db
|
|
241
|
+
let response = yield db.put(builtUser);
|
|
242
|
+
builtUser._rev = response.rev;
|
|
243
|
+
yield eventHelpers.handleSaveEvents(builtUser, dbUser);
|
|
244
|
+
yield platform.users.addUser(tenantId, builtUser._id, builtUser.email);
|
|
245
|
+
yield cache.user.invalidateUser(response.id);
|
|
246
|
+
yield Promise.all(groupPromises);
|
|
247
|
+
// finally returned the saved user from the db
|
|
248
|
+
return db.get(builtUser._id);
|
|
249
|
+
}
|
|
250
|
+
catch (err) {
|
|
251
|
+
if (err.status === 409) {
|
|
252
|
+
throw "User exists already";
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
throw err;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}));
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
static bulkCreate(newUsersRequested, groups) {
|
|
262
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
263
|
+
const tenantId = (0, context_1.getTenantId)();
|
|
264
|
+
let usersToSave = [];
|
|
265
|
+
let newUsers = [];
|
|
266
|
+
const emails = newUsersRequested.map((user) => user.email);
|
|
267
|
+
const existingEmails = yield (0, lookup_1.searchExistingEmails)(emails);
|
|
268
|
+
const unsuccessful = [];
|
|
269
|
+
for (const newUser of newUsersRequested) {
|
|
270
|
+
if (newUsers.find((x) => x.email.toLowerCase() === newUser.email.toLowerCase()) ||
|
|
271
|
+
existingEmails.includes(newUser.email.toLowerCase())) {
|
|
272
|
+
unsuccessful.push({
|
|
273
|
+
email: newUser.email,
|
|
274
|
+
reason: `Unavailable`,
|
|
275
|
+
});
|
|
276
|
+
continue;
|
|
277
|
+
}
|
|
278
|
+
newUser.userGroups = groups;
|
|
279
|
+
newUsers.push(newUser);
|
|
280
|
+
}
|
|
281
|
+
const account = yield accountSdk.getAccountByTenantId(tenantId);
|
|
282
|
+
return UserDB.quotas.addUsers(newUsers.length, () => __awaiter(this, void 0, void 0, function* () {
|
|
283
|
+
// create the promises array that will be called by bulkDocs
|
|
284
|
+
newUsers.forEach((user) => {
|
|
285
|
+
usersToSave.push(UserDB.buildUser(user, {
|
|
286
|
+
hashPassword: true,
|
|
287
|
+
requirePassword: user.requirePassword,
|
|
288
|
+
}, tenantId, undefined, // no dbUser
|
|
289
|
+
account));
|
|
290
|
+
});
|
|
291
|
+
const usersToBulkSave = yield Promise.all(usersToSave);
|
|
292
|
+
yield usersCore.bulkUpdateGlobalUsers(usersToBulkSave);
|
|
293
|
+
// Post-processing of bulk added users, e.g. events and cache operations
|
|
294
|
+
for (const user of usersToBulkSave) {
|
|
295
|
+
// TODO: Refactor to bulk insert users into the info db
|
|
296
|
+
// instead of relying on looping tenant creation
|
|
297
|
+
yield platform.users.addUser(tenantId, user._id, user.email);
|
|
298
|
+
yield eventHelpers.handleSaveEvents(user, undefined);
|
|
299
|
+
}
|
|
300
|
+
const saved = usersToBulkSave.map(user => {
|
|
301
|
+
return {
|
|
302
|
+
_id: user._id,
|
|
303
|
+
email: user.email,
|
|
304
|
+
};
|
|
305
|
+
});
|
|
306
|
+
// now update the groups
|
|
307
|
+
if (Array.isArray(saved) && groups) {
|
|
308
|
+
const groupPromises = [];
|
|
309
|
+
const createdUserIds = saved.map(user => user._id);
|
|
310
|
+
for (let groupId of groups) {
|
|
311
|
+
groupPromises.push(UserDB.groups.addUsers(groupId, createdUserIds));
|
|
312
|
+
}
|
|
313
|
+
yield Promise.all(groupPromises);
|
|
314
|
+
}
|
|
315
|
+
return {
|
|
316
|
+
successful: saved,
|
|
317
|
+
unsuccessful,
|
|
318
|
+
};
|
|
319
|
+
}));
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
static bulkDelete(userIds) {
|
|
323
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
324
|
+
const db = (0, context_1.getGlobalDB)();
|
|
325
|
+
const response = {
|
|
326
|
+
successful: [],
|
|
327
|
+
unsuccessful: [],
|
|
328
|
+
};
|
|
329
|
+
// remove the account holder from the delete request if present
|
|
330
|
+
const account = yield (0, utils_1.getAccountHolderFromUserIds)(userIds);
|
|
331
|
+
if (account) {
|
|
332
|
+
userIds = userIds.filter(u => u !== account.budibaseUserId);
|
|
333
|
+
// mark user as unsuccessful
|
|
334
|
+
response.unsuccessful.push({
|
|
335
|
+
_id: account.budibaseUserId,
|
|
336
|
+
email: account.email,
|
|
337
|
+
reason: "Account holder cannot be deleted",
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
// Get users and delete
|
|
341
|
+
const allDocsResponse = yield db.allDocs({
|
|
342
|
+
include_docs: true,
|
|
343
|
+
keys: userIds,
|
|
344
|
+
});
|
|
345
|
+
const usersToDelete = allDocsResponse.rows.map((user) => {
|
|
346
|
+
return user.doc;
|
|
347
|
+
});
|
|
348
|
+
// Delete from DB
|
|
349
|
+
const toDelete = usersToDelete.map(user => (Object.assign(Object.assign({}, user), { _deleted: true })));
|
|
350
|
+
const dbResponse = yield usersCore.bulkUpdateGlobalUsers(toDelete);
|
|
351
|
+
yield UserDB.quotas.removeUsers(toDelete.length);
|
|
352
|
+
for (let user of usersToDelete) {
|
|
353
|
+
yield bulkDeleteProcessing(user);
|
|
354
|
+
}
|
|
355
|
+
// Build Response
|
|
356
|
+
// index users by id
|
|
357
|
+
const userIndex = {};
|
|
358
|
+
usersToDelete.reduce((prev, current) => {
|
|
359
|
+
prev[current._id] = current;
|
|
360
|
+
return prev;
|
|
361
|
+
}, userIndex);
|
|
362
|
+
// add the successful and unsuccessful users to response
|
|
363
|
+
dbResponse.forEach(item => {
|
|
364
|
+
const email = userIndex[item.id].email;
|
|
365
|
+
if (item.ok) {
|
|
366
|
+
response.successful.push({ _id: item.id, email });
|
|
367
|
+
}
|
|
368
|
+
else {
|
|
369
|
+
response.unsuccessful.push({
|
|
370
|
+
_id: item.id,
|
|
371
|
+
email,
|
|
372
|
+
reason: "Database error",
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
});
|
|
376
|
+
return response;
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
static destroy(id) {
|
|
380
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
381
|
+
const db = (0, context_1.getGlobalDB)();
|
|
382
|
+
const dbUser = (yield db.get(id));
|
|
383
|
+
const userId = dbUser._id;
|
|
384
|
+
if (!environment_1.default.SELF_HOSTED && !environment_1.default.DISABLE_ACCOUNT_PORTAL) {
|
|
385
|
+
// root account holder can't be deleted from inside budibase
|
|
386
|
+
const email = dbUser.email;
|
|
387
|
+
const account = yield accounts.getAccount(email);
|
|
388
|
+
if (account) {
|
|
389
|
+
if (dbUser.userId === (0, context_1.getIdentity)()._id) {
|
|
390
|
+
throw new errors_1.HTTPError('Please visit "Account" to delete this user', 400);
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
throw new errors_1.HTTPError("Account holder cannot be deleted", 400);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
yield platform.users.removeUser(dbUser);
|
|
398
|
+
yield db.remove(userId, dbUser._rev);
|
|
399
|
+
yield UserDB.quotas.removeUsers(1);
|
|
400
|
+
yield eventHelpers.handleDeleteEvents(dbUser);
|
|
401
|
+
yield cache.user.invalidateUser(userId);
|
|
402
|
+
yield sessions.invalidateSessions(userId, { reason: "deletion" });
|
|
403
|
+
});
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
exports.UserDB = UserDB;
|
|
407
|
+
//# sourceMappingURL=db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../../src/users/db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { User } from "@budibase/types";
|
|
2
|
+
export declare const handleDeleteEvents: (user: any) => Promise<void>;
|
|
3
|
+
export declare const handleSaveEvents: (user: User, existingUser: User | undefined) => Promise<void>;
|
|
4
|
+
export declare const isAddingBuilder: (user: any, existingUser: any) => boolean;
|
|
5
|
+
export declare const isRemovingBuilder: (user: any, existingUser: any) => boolean;
|
|
@@ -0,0 +1,169 @@
|
|
|
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.isRemovingBuilder = exports.isAddingBuilder = exports.handleSaveEvents = exports.handleDeleteEvents = void 0;
|
|
39
|
+
const environment_1 = __importDefault(require("../environment"));
|
|
40
|
+
const events = __importStar(require("../events"));
|
|
41
|
+
const accounts = __importStar(require("../accounts"));
|
|
42
|
+
const context_1 = require("../context");
|
|
43
|
+
const utils_1 = require("./utils");
|
|
44
|
+
const handleDeleteEvents = (user) => __awaiter(void 0, void 0, void 0, function* () {
|
|
45
|
+
yield events.user.deleted(user);
|
|
46
|
+
if ((0, utils_1.hasBuilderPermissions)(user)) {
|
|
47
|
+
yield events.user.permissionBuilderRemoved(user);
|
|
48
|
+
}
|
|
49
|
+
if ((0, utils_1.hasAdminPermissions)(user)) {
|
|
50
|
+
yield events.user.permissionAdminRemoved(user);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
exports.handleDeleteEvents = handleDeleteEvents;
|
|
54
|
+
const assignAppRoleEvents = (user, roles, existingRoles) => __awaiter(void 0, void 0, void 0, function* () {
|
|
55
|
+
for (const [appId, role] of Object.entries(roles)) {
|
|
56
|
+
// app role in existing is not same as new
|
|
57
|
+
if (!existingRoles || existingRoles[appId] !== role) {
|
|
58
|
+
yield events.role.assigned(user, role);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
const unassignAppRoleEvents = (user, roles, existingRoles) => __awaiter(void 0, void 0, void 0, function* () {
|
|
63
|
+
if (!existingRoles) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
for (const [appId, role] of Object.entries(existingRoles)) {
|
|
67
|
+
// app role in new is not same as existing
|
|
68
|
+
if (!roles || roles[appId] !== role) {
|
|
69
|
+
yield events.role.unassigned(user, role);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
const handleAppRoleEvents = (user, existingUser) => __awaiter(void 0, void 0, void 0, function* () {
|
|
74
|
+
const roles = user.roles;
|
|
75
|
+
const existingRoles = existingUser === null || existingUser === void 0 ? void 0 : existingUser.roles;
|
|
76
|
+
yield assignAppRoleEvents(user, roles, existingRoles);
|
|
77
|
+
yield unassignAppRoleEvents(user, roles, existingRoles);
|
|
78
|
+
});
|
|
79
|
+
const handleSaveEvents = (user, existingUser) => __awaiter(void 0, void 0, void 0, function* () {
|
|
80
|
+
const tenantId = (0, context_1.getTenantId)();
|
|
81
|
+
let tenantAccount;
|
|
82
|
+
if (!environment_1.default.SELF_HOSTED && !environment_1.default.DISABLE_ACCOUNT_PORTAL) {
|
|
83
|
+
tenantAccount = yield accounts.getAccountByTenantId(tenantId);
|
|
84
|
+
}
|
|
85
|
+
yield events.identification.identifyUser(user, tenantAccount);
|
|
86
|
+
if (existingUser) {
|
|
87
|
+
yield events.user.updated(user);
|
|
88
|
+
if ((0, exports.isRemovingBuilder)(user, existingUser)) {
|
|
89
|
+
yield events.user.permissionBuilderRemoved(user);
|
|
90
|
+
}
|
|
91
|
+
if (isRemovingAdmin(user, existingUser)) {
|
|
92
|
+
yield events.user.permissionAdminRemoved(user);
|
|
93
|
+
}
|
|
94
|
+
if (isOnboardingComplete(user, existingUser)) {
|
|
95
|
+
yield events.user.onboardingComplete(user);
|
|
96
|
+
}
|
|
97
|
+
if (!existingUser.forceResetPassword &&
|
|
98
|
+
user.forceResetPassword &&
|
|
99
|
+
user.password) {
|
|
100
|
+
yield events.user.passwordForceReset(user);
|
|
101
|
+
}
|
|
102
|
+
if (user.password !== existingUser.password) {
|
|
103
|
+
yield events.user.passwordUpdated(user);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
yield events.user.created(user);
|
|
108
|
+
}
|
|
109
|
+
if ((0, exports.isAddingBuilder)(user, existingUser)) {
|
|
110
|
+
yield events.user.permissionBuilderAssigned(user);
|
|
111
|
+
}
|
|
112
|
+
if (isAddingAdmin(user, existingUser)) {
|
|
113
|
+
yield events.user.permissionAdminAssigned(user);
|
|
114
|
+
}
|
|
115
|
+
yield handleAppRoleEvents(user, existingUser);
|
|
116
|
+
});
|
|
117
|
+
exports.handleSaveEvents = handleSaveEvents;
|
|
118
|
+
const isAddingBuilder = (user, existingUser) => {
|
|
119
|
+
return isAddingPermission(user, existingUser, utils_1.hasBuilderPermissions);
|
|
120
|
+
};
|
|
121
|
+
exports.isAddingBuilder = isAddingBuilder;
|
|
122
|
+
const isRemovingBuilder = (user, existingUser) => {
|
|
123
|
+
return isRemovingPermission(user, existingUser, utils_1.hasBuilderPermissions);
|
|
124
|
+
};
|
|
125
|
+
exports.isRemovingBuilder = isRemovingBuilder;
|
|
126
|
+
const isAddingAdmin = (user, existingUser) => {
|
|
127
|
+
return isAddingPermission(user, existingUser, utils_1.hasAdminPermissions);
|
|
128
|
+
};
|
|
129
|
+
const isRemovingAdmin = (user, existingUser) => {
|
|
130
|
+
return isRemovingPermission(user, existingUser, utils_1.hasAdminPermissions);
|
|
131
|
+
};
|
|
132
|
+
const isOnboardingComplete = (user, existingUser) => {
|
|
133
|
+
return !(existingUser === null || existingUser === void 0 ? void 0 : existingUser.onboardedAt) && typeof user.onboardedAt === "string";
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* Check if a permission is being added to a new or existing user.
|
|
137
|
+
*/
|
|
138
|
+
const isAddingPermission = (user, existingUser, hasPermission) => {
|
|
139
|
+
// new user doesn't have the permission
|
|
140
|
+
if (!hasPermission(user)) {
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
// existing user has the permission
|
|
144
|
+
if (existingUser && hasPermission(existingUser)) {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
// permission is being added
|
|
148
|
+
return true;
|
|
149
|
+
};
|
|
150
|
+
/**
|
|
151
|
+
* Check if a permission is being removed from an existing user.
|
|
152
|
+
*/
|
|
153
|
+
const isRemovingPermission = (user, existingUser, hasPermission) => {
|
|
154
|
+
// new user has the permission
|
|
155
|
+
if (hasPermission(user)) {
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
// no existing user or existing user doesn't have the permission
|
|
159
|
+
if (!existingUser) {
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
// existing user doesn't have the permission
|
|
163
|
+
if (!hasPermission(existingUser)) {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
// permission is being removed
|
|
167
|
+
return true;
|
|
168
|
+
};
|
|
169
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/users/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.UserDB = void 0;
|
|
18
|
+
__exportStar(require("./users"), exports);
|
|
19
|
+
__exportStar(require("./utils"), exports);
|
|
20
|
+
__exportStar(require("./lookup"), exports);
|
|
21
|
+
var db_1 = require("./db");
|
|
22
|
+
Object.defineProperty(exports, "UserDB", { enumerable: true, get: function () { return db_1.UserDB; } });
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/users/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0CAAuB;AACvB,0CAAuB;AACvB,2CAAwB;AACxB,2BAA6B;AAApB,4FAAA,MAAM,OAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AccountMetadata, PlatformUser, PlatformUserByEmail, User } from "@budibase/types";
|
|
2
|
+
/**
|
|
3
|
+
* Apply a system-wide search on emails:
|
|
4
|
+
* - in tenant
|
|
5
|
+
* - cross tenant
|
|
6
|
+
* - accounts
|
|
7
|
+
* return an array of emails that match the supplied emails.
|
|
8
|
+
*/
|
|
9
|
+
export declare function searchExistingEmails(emails: string[]): Promise<string[]>;
|
|
10
|
+
export declare function getPlatformUser(identifier: string): Promise<PlatformUser | null>;
|
|
11
|
+
export declare function getExistingTenantUsers(emails: string[]): Promise<User[]>;
|
|
12
|
+
export declare function getExistingPlatformUsers(emails: string[]): Promise<PlatformUserByEmail[]>;
|
|
13
|
+
export declare function getExistingAccounts(emails: string[]): Promise<AccountMetadata[]>;
|