@iobroker/db-objects-redis 7.2.3 → 8.0.0-alpha.1-20260921-e5941ca8a

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 (57) hide show
  1. package/build/cjs/index.d.ts +1 -1
  2. package/build/cjs/index.js +5 -3
  3. package/build/cjs/index.js.map +2 -2
  4. package/build/cjs/lib/objects/constants.js.map +2 -2
  5. package/build/cjs/lib/objects/interview.js +2 -0
  6. package/build/cjs/lib/objects/interview.js.map +1 -1
  7. package/build/cjs/lib/objects/lua-v3/custom.lua +23 -1
  8. package/build/cjs/lib/objects/lua-v3/filter.lua +23 -1
  9. package/build/cjs/lib/objects/lua-v3/programs.lua +23 -1
  10. package/build/cjs/lib/objects/lua-v3/script.lua +23 -1
  11. package/build/cjs/lib/objects/lua-v3/variables.lua +23 -1
  12. package/build/cjs/lib/objects/lua-v4/custom.lua +23 -1
  13. package/build/cjs/lib/objects/lua-v4/filter.lua +23 -1
  14. package/build/cjs/lib/objects/lua-v4/programs.lua +23 -1
  15. package/build/cjs/lib/objects/lua-v4/script.lua +23 -1
  16. package/build/cjs/lib/objects/lua-v4/variables.lua +23 -1
  17. package/build/cjs/lib/objects/lua-v4-no-sets/custom.lua +23 -1
  18. package/build/cjs/lib/objects/lua-v4-no-sets/filter.lua +23 -1
  19. package/build/cjs/lib/objects/lua-v4-no-sets/programs.lua +23 -1
  20. package/build/cjs/lib/objects/lua-v4-no-sets/script.lua +23 -1
  21. package/build/cjs/lib/objects/lua-v4-no-sets/variables.lua +23 -1
  22. package/build/cjs/lib/objects/objectsInRedisClient.d.ts +961 -125
  23. package/build/cjs/lib/objects/objectsInRedisClient.js +1092 -776
  24. package/build/cjs/lib/objects/objectsInRedisClient.js.map +3 -3
  25. package/build/cjs/lib/objects/objectsUtils.d.ts +139 -17
  26. package/build/cjs/lib/objects/objectsUtils.js +212 -192
  27. package/build/cjs/lib/objects/objectsUtils.js.map +3 -3
  28. package/build/esm/index.d.ts +1 -1
  29. package/build/esm/index.d.ts.map +1 -1
  30. package/build/esm/index.js.map +1 -1
  31. package/build/esm/lib/objects/constants.d.ts.map +1 -1
  32. package/build/esm/lib/objects/constants.js.map +1 -1
  33. package/build/esm/lib/objects/lua-v3/custom.lua +23 -1
  34. package/build/esm/lib/objects/lua-v3/filter.lua +23 -1
  35. package/build/esm/lib/objects/lua-v3/programs.lua +23 -1
  36. package/build/esm/lib/objects/lua-v3/script.lua +23 -1
  37. package/build/esm/lib/objects/lua-v3/variables.lua +23 -1
  38. package/build/esm/lib/objects/lua-v4/custom.lua +23 -1
  39. package/build/esm/lib/objects/lua-v4/filter.lua +23 -1
  40. package/build/esm/lib/objects/lua-v4/programs.lua +23 -1
  41. package/build/esm/lib/objects/lua-v4/script.lua +23 -1
  42. package/build/esm/lib/objects/lua-v4/variables.lua +23 -1
  43. package/build/esm/lib/objects/lua-v4-no-sets/custom.lua +23 -1
  44. package/build/esm/lib/objects/lua-v4-no-sets/filter.lua +23 -1
  45. package/build/esm/lib/objects/lua-v4-no-sets/programs.lua +23 -1
  46. package/build/esm/lib/objects/lua-v4-no-sets/script.lua +23 -1
  47. package/build/esm/lib/objects/lua-v4-no-sets/variables.lua +23 -1
  48. package/build/esm/lib/objects/objectsInRedisClient.d.ts +961 -125
  49. package/build/esm/lib/objects/objectsInRedisClient.d.ts.map +1 -1
  50. package/build/esm/lib/objects/objectsInRedisClient.js +880 -571
  51. package/build/esm/lib/objects/objectsInRedisClient.js.map +1 -1
  52. package/build/esm/lib/objects/objectsUtils.d.ts +139 -17
  53. package/build/esm/lib/objects/objectsUtils.d.ts.map +1 -1
  54. package/build/esm/lib/objects/objectsUtils.js +273 -221
  55. package/build/esm/lib/objects/objectsUtils.js.map +1 -1
  56. package/build/tsconfig.build.tsbuildinfo +1 -1
  57. package/package.json +9 -9
@@ -5,6 +5,7 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
8
9
  var __export = (target, all) => {
9
10
  for (var name in all)
10
11
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -32,19 +33,22 @@ __export(objectsUtils_exports, {
32
33
  ERRORS: () => ERRORS,
33
34
  REG_CHECK_ID: () => REG_CHECK_ID,
34
35
  checkFile: () => checkFile,
35
- checkFileRights: () => checkFileRights,
36
+ checkFileRightsAsync: () => checkFileRightsAsync,
36
37
  checkObject: () => checkObject,
37
38
  checkObjectRights: () => checkObjectRights,
39
+ checkObjectRightsAsync: () => checkObjectRightsAsync,
38
40
  getMimeType: () => getMimeType,
39
41
  getUserGroup: () => getUserGroup,
42
+ getUserGroupAsync: () => getUserGroupAsync,
40
43
  sanitizePath: () => sanitizePath
41
44
  });
42
45
  module.exports = __toCommonJS(objectsUtils_exports);
43
46
  var import_node_path = __toESM(require("node:path"), 1);
44
47
  var import_deep_clone = __toESM(require("deep-clone"), 1);
48
+ var import_mime_types = __toESM(require("mime-types"), 1);
45
49
  var import_db_base = require("@iobroker/db-base");
46
50
  var CONSTS = __toESM(require("../../lib/objects/constants.js"), 1);
47
- var import_mime_types = __toESM(require("mime-types"), 1);
51
+ var import_constants = require("../../lib/objects/constants.js");
48
52
  var CONSTS2 = __toESM(require("../../lib/objects/constants.js"), 1);
49
53
  const ERRORS = CONSTS.ERRORS;
50
54
  const REG_CHECK_ID = CONSTS.REG_CHECK_ID;
@@ -61,6 +65,7 @@ function getKnownMimeType(ext) {
61
65
  }
62
66
  return null;
63
67
  }
68
+ __name(getKnownMimeType, "getKnownMimeType");
64
69
  const defaultAcl = {
65
70
  groups: [],
66
71
  acl: {
@@ -107,23 +112,21 @@ function getMimeType(ext, isTextData) {
107
112
  }
108
113
  return { mimeType: isTextData ? "text/plain" : "application/octet-stream", isBinary: !isTextData };
109
114
  }
110
- function checkFile(fileOptions, options, flag, defaultNewAcl) {
111
- if (typeof fileOptions.acl !== "object") {
112
- fileOptions = {};
113
- fileOptions.mimeType = (0, import_deep_clone.default)(fileOptions);
114
- fileOptions.acl = {
115
- owner: defaultNewAcl && defaultNewAcl.owner || CONSTS.SYSTEM_ADMIN_USER,
116
- ownerGroup: defaultNewAcl && defaultNewAcl.ownerGroup || CONSTS.SYSTEM_ADMIN_GROUP,
117
- permissions: defaultNewAcl && defaultNewAcl.file || CONSTS.ACCESS_USER_RW | CONSTS.ACCESS_GROUP_READ | CONSTS.ACCESS_EVERY_READ
118
- // '0644'
119
- };
120
- }
121
- fileOptions.acl.ownerGroup = fileOptions.acl.ownerGroup || defaultNewAcl && defaultNewAcl.ownerGroup || CONSTS.SYSTEM_ADMIN_GROUP;
122
- fileOptions.acl.owner = fileOptions.acl.owner || defaultNewAcl && defaultNewAcl.owner || CONSTS.SYSTEM_ADMIN_USER;
123
- fileOptions.acl.permissions = fileOptions.acl.permissions || defaultNewAcl && defaultNewAcl.file || CONSTS.ACCESS_USER_RW | CONSTS.ACCESS_GROUP_READ | CONSTS.ACCESS_EVERY_READ;
124
- if (options.user !== CONSTS.SYSTEM_ADMIN_USER && options.groups.indexOf(CONSTS.SYSTEM_ADMIN_GROUP) === -1 && fileOptions.acl) {
125
- if (fileOptions.acl.owner !== options.user) {
126
- if (options.groups.indexOf(fileOptions.acl.ownerGroup) !== -1) {
115
+ __name(getMimeType, "getMimeType");
116
+ function checkFile(fileOptions, userContext, flag, defaultNewAcl) {
117
+ fileOptions ||= {};
118
+ fileOptions.acl ||= {
119
+ owner: defaultNewAcl?.owner || CONSTS.SYSTEM_ADMIN_USER,
120
+ ownerGroup: defaultNewAcl?.ownerGroup || CONSTS.SYSTEM_ADMIN_GROUP,
121
+ permissions: defaultNewAcl?.file || CONSTS.ACCESS_USER_RW | CONSTS.ACCESS_GROUP_READ | CONSTS.ACCESS_EVERY_READ
122
+ // '0644'
123
+ };
124
+ fileOptions.acl.owner ||= defaultNewAcl?.owner || CONSTS.SYSTEM_ADMIN_USER;
125
+ fileOptions.acl.ownerGroup ||= defaultNewAcl?.ownerGroup || CONSTS.SYSTEM_ADMIN_GROUP;
126
+ fileOptions.acl.permissions ||= defaultNewAcl?.file || CONSTS.ACCESS_USER_RW | CONSTS.ACCESS_GROUP_READ | CONSTS.ACCESS_EVERY_READ;
127
+ if (userContext.user !== CONSTS.SYSTEM_ADMIN_USER && !userContext.groups.includes(CONSTS.SYSTEM_ADMIN_GROUP) && fileOptions.acl) {
128
+ if (fileOptions.acl.owner !== userContext.user) {
129
+ if (userContext.groups.includes(fileOptions.acl.ownerGroup)) {
127
130
  if (!(fileOptions.acl.permissions & flag << 4)) {
128
131
  return false;
129
132
  }
@@ -140,36 +143,39 @@ function checkFile(fileOptions, options, flag, defaultNewAcl) {
140
143
  }
141
144
  return true;
142
145
  }
143
- function checkFileRights(objects, id, name, options, flag, callback) {
144
- const _options = options || {};
145
- if (!_options.user) {
146
- _options.user = "system.user.admin";
147
- _options.params = _options;
148
- _options.group = "system.group.administrator";
149
- }
150
- if (!_options.acl) {
151
- objects.getUserGroup(_options.user, (_user, groups2, acl) => {
152
- _options.acl = acl || {};
153
- _options.groups = groups2;
154
- _options.group = groups2 ? groups2[0] : null;
155
- checkFileRights(objects, id, name, _options, flag, callback);
156
- });
157
- return;
158
- }
159
- if (flag === CONSTS.ACCESS_WRITE && !_options.acl.file.write) {
160
- return import_db_base.tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION, _options);
161
- }
162
- if (flag === CONSTS.ACCESS_READ && !_options.acl.file.read) {
163
- return import_db_base.tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION, _options);
164
- }
165
- _options.checked = true;
166
- objects.checkFile(id, name, _options, flag, (err, options2, opt) => {
167
- if (err) {
168
- return import_db_base.tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION, options2);
169
- }
170
- return import_db_base.tools.maybeCallbackWithError(callback, null, options2, opt);
171
- });
146
+ __name(checkFile, "checkFile");
147
+ async function checkFileRightsAsync(objects, id, name, options, flag) {
148
+ let userContext;
149
+ if (!options?.user) {
150
+ userContext = {
151
+ user: import_constants.SYSTEM_ADMIN_USER,
152
+ group: import_constants.SYSTEM_ADMIN_GROUP,
153
+ groups: [import_constants.SYSTEM_ADMIN_GROUP],
154
+ acl: getDefaultAdminRights()
155
+ };
156
+ } else {
157
+ const [, groups2, acl] = await getUserGroupAsync(objects, options.user);
158
+ userContext = {
159
+ user: options.user,
160
+ group: groups2?.[0] || null,
161
+ groups: groups2,
162
+ acl
163
+ };
164
+ }
165
+ if (flag === CONSTS.ACCESS_WRITE && !userContext.acl.file.write) {
166
+ throw new Error(ERRORS.ERROR_PERMISSION);
167
+ }
168
+ if (flag === CONSTS.ACCESS_READ && !userContext.acl.file.read) {
169
+ throw new Error(ERRORS.ERROR_PERMISSION);
170
+ }
171
+ userContext.checked = true;
172
+ const fileOptions = await objects.checkFileAsync(id, name, userContext, flag);
173
+ if (!fileOptions) {
174
+ throw new Error(ERRORS.ERROR_PERMISSION);
175
+ }
176
+ return { fileOptions, userContext };
172
177
  }
178
+ __name(checkFileRightsAsync, "checkFileRightsAsync");
173
179
  function getDefaultAdminRights(acl, _isState) {
174
180
  return {
175
181
  ...acl,
@@ -208,129 +214,131 @@ function getDefaultAdminRights(acl, _isState) {
208
214
  }
209
215
  };
210
216
  }
217
+ __name(getDefaultAdminRights, "getDefaultAdminRights");
211
218
  function getUserGroup(objects, user, callback) {
219
+ try {
220
+ getUserGroupAsync(objects, user).then((result) => import_db_base.tools.maybeCallbackWithError(callback, null, result[0], result[1], result[2])).catch((err) => import_db_base.tools.maybeCallbackWithError(callback, err, (0, import_deep_clone.default)(user), [], (0, import_deep_clone.default)(defaultAcl.acl)));
221
+ } catch (err) {
222
+ return import_db_base.tools.maybeCallbackWithError(callback, err, (0, import_deep_clone.default)(user), [], (0, import_deep_clone.default)(defaultAcl.acl));
223
+ }
224
+ }
225
+ __name(getUserGroup, "getUserGroup");
226
+ async function getUserGroupAsync(objects, user) {
212
227
  if (!user || typeof user !== "string" || !user.startsWith(USER_STARTS_WITH)) {
213
228
  console.log(`invalid user name: ${user}`);
214
- return import_db_base.tools.maybeCallbackWithError(callback, `invalid user name: ${user}`, (0, import_deep_clone.default)(user), [], (0, import_deep_clone.default)(defaultAcl.acl));
229
+ throw new Error(`invalid user name: ${user}`);
215
230
  }
216
231
  if (users[user]) {
217
- return import_db_base.tools.maybeCallbackWithError(callback, null, user, users[user].groups, users[user].acl);
232
+ return [user, users[user].groups, users[user].acl];
218
233
  }
219
234
  let error;
220
- objects.getObjectList({ startkey: "system.group.", endkey: "system.group.\u9999" }, { checked: true }, (err, arr) => {
221
- if (err) {
222
- error = err;
223
- }
224
- groups = [];
225
- if (arr) {
226
- for (const g in arr.rows) {
227
- const val = arr.rows[g].value;
228
- if (!val) {
229
- continue;
230
- }
231
- groups[g] = val;
232
- if (groups[g]._id === CONSTS.SYSTEM_ADMIN_GROUP) {
233
- groups[g].common.acl = getDefaultAdminRights(groups[g].common.acl);
234
- }
235
+ groups = [];
236
+ const groupList = await objects.getObjectListAsync({ startkey: "system.group.", endkey: "system.group.\u9999" }, { checked: true });
237
+ if (groupList) {
238
+ for (let g = 0; g < groupList.rows.length; g++) {
239
+ const val = groupList.rows[g].value;
240
+ if (!val) {
241
+ continue;
242
+ }
243
+ groups[g] = val;
244
+ if (groups[g]._id === CONSTS.SYSTEM_ADMIN_GROUP) {
245
+ groups[g].common.acl = getDefaultAdminRights(groups[g].common.acl);
235
246
  }
236
247
  }
237
- objects.getObjectList({ startkey: "system.user.", endkey: "system.user.\u9999" }, { checked: true }, (err2, arr2) => {
238
- if (err2) {
239
- error = err2;
248
+ }
249
+ users = {};
250
+ const userList = await objects.getObjectListAsync({ startkey: "system.user.", endkey: "system.user.\u9999" }, { checked: true });
251
+ if (userList) {
252
+ for (const row of userList.rows) {
253
+ users[row.value._id] = (0, import_deep_clone.default)(defaultAcl);
254
+ }
255
+ }
256
+ users[CONSTS.SYSTEM_ADMIN_USER] ||= (0, import_deep_clone.default)(defaultAcl);
257
+ users[CONSTS.SYSTEM_ADMIN_USER].acl = getDefaultAdminRights(users[CONSTS.SYSTEM_ADMIN_USER].acl);
258
+ for (let g = 0; g < groups.length; g++) {
259
+ if (!groups[g]?.common?.members) {
260
+ continue;
261
+ }
262
+ for (let m = 0; m < groups[g].common.members.length; m++) {
263
+ const u = groups[g].common.members[m];
264
+ if (!users[u]) {
265
+ error ||= `Unknown user in group "${groups[g]._id.replace("system.group.", "")}": ${u}`;
266
+ continue;
267
+ }
268
+ users[u].groups.push(groups[g]._id);
269
+ if (groups[g].common.acl?.file) {
270
+ if (!users[u].acl?.file) {
271
+ users[u].acl ||= {};
272
+ users[u].acl.file ||= {};
273
+ users[u].acl.file.create = groups[g].common.acl.file.create;
274
+ users[u].acl.file.read = groups[g].common.acl.file.read;
275
+ users[u].acl.file.write = groups[g].common.acl.file.write;
276
+ users[u].acl.file.delete = groups[g].common.acl.file.delete;
277
+ users[u].acl.file.list = groups[g].common.acl.file.list;
278
+ } else {
279
+ users[u].acl.file.create ||= groups[g].common.acl.file.create;
280
+ users[u].acl.file.read ||= groups[g].common.acl.file.read;
281
+ users[u].acl.file.write ||= groups[g].common.acl.file.write;
282
+ users[u].acl.file.delete ||= groups[g].common.acl.file.delete;
283
+ users[u].acl.file.list ||= groups[g].common.acl.file.list;
284
+ }
240
285
  }
241
- users = {};
242
- if (arr2) {
243
- for (const row of arr2.rows) {
244
- users[row.value._id] = (0, import_deep_clone.default)(defaultAcl);
286
+ if (groups[g].common.acl?.object) {
287
+ if (!users[u].acl?.object) {
288
+ users[u].acl ||= {};
289
+ users[u].acl.object ||= {};
290
+ users[u].acl.object.create = groups[g].common.acl.object.create;
291
+ users[u].acl.object.read = groups[g].common.acl.object.read;
292
+ users[u].acl.object.write = groups[g].common.acl.object.write;
293
+ users[u].acl.object.delete = groups[g].common.acl.object.delete;
294
+ users[u].acl.object.list = groups[g].common.acl.object.list;
295
+ } else {
296
+ users[u].acl.object.create ||= groups[g].common.acl.object.create;
297
+ users[u].acl.object.read ||= groups[g].common.acl.object.read;
298
+ users[u].acl.object.write ||= groups[g].common.acl.object.write;
299
+ users[u].acl.object.delete ||= groups[g].common.acl.object.delete;
300
+ users[u].acl.object.list ||= groups[g].common.acl.object.list;
245
301
  }
246
302
  }
247
- users[CONSTS.SYSTEM_ADMIN_USER] = users[CONSTS.SYSTEM_ADMIN_USER] || (0, import_deep_clone.default)(defaultAcl);
248
- users[CONSTS.SYSTEM_ADMIN_USER].acl = getDefaultAdminRights(users[CONSTS.SYSTEM_ADMIN_USER].acl);
249
- for (let g = 0; g < groups.length; g++) {
250
- if (!groups[g] || !groups[g].common || !groups[g].common.members) {
251
- continue;
303
+ if (groups[g].common.acl?.users) {
304
+ if (!users[u].acl?.users) {
305
+ users[u].acl ||= {};
306
+ users[u].acl.users ||= {};
307
+ users[u].acl.users.create = groups[g].common.acl.users.create;
308
+ users[u].acl.users.read = groups[g].common.acl.users.read;
309
+ users[u].acl.users.write = groups[g].common.acl.users.write;
310
+ users[u].acl.users.delete = groups[g].common.acl.users.delete;
311
+ users[u].acl.users.list = groups[g].common.acl.users.list;
312
+ } else {
313
+ users[u].acl.users.create ||= groups[g].common.acl.users.create;
314
+ users[u].acl.users.read ||= groups[g].common.acl.users.read;
315
+ users[u].acl.users.write ||= groups[g].common.acl.users.write;
316
+ users[u].acl.users.delete ||= groups[g].common.acl.users.delete;
317
+ users[u].acl.users.list ||= groups[g].common.acl.users.list;
252
318
  }
253
- for (let m = 0; m < groups[g].common.members.length; m++) {
254
- const u = groups[g].common.members[m];
255
- if (!users[u]) {
256
- error = error || `Unknown user in group "${groups[g]._id.replace("system.group.", "")}": ${u}`;
257
- continue;
258
- }
259
- users[u].groups.push(groups[g]._id);
260
- if (groups[g].common.acl && groups[g].common.acl.file) {
261
- if (!users[u].acl || !users[u].acl.file) {
262
- users[u].acl = users[u].acl || {};
263
- users[u].acl.file = users[u].acl.file || {};
264
- users[u].acl.file.create = groups[g].common.acl.file.create;
265
- users[u].acl.file.read = groups[g].common.acl.file.read;
266
- users[u].acl.file.write = groups[g].common.acl.file.write;
267
- users[u].acl.file.delete = groups[g].common.acl.file.delete;
268
- users[u].acl.file.list = groups[g].common.acl.file.list;
269
- } else {
270
- users[u].acl.file.create = users[u].acl.file.create || groups[g].common.acl.file.create;
271
- users[u].acl.file.read = users[u].acl.file.read || groups[g].common.acl.file.read;
272
- users[u].acl.file.write = users[u].acl.file.write || groups[g].common.acl.file.write;
273
- users[u].acl.file.delete = users[u].acl.file.delete || groups[g].common.acl.file.delete;
274
- users[u].acl.file.list = users[u].acl.file.list || groups[g].common.acl.file.list;
275
- }
276
- }
277
- if (groups[g].common.acl && groups[g].common.acl.object) {
278
- if (!users[u].acl || !users[u].acl.object) {
279
- users[u].acl = users[u].acl || {};
280
- users[u].acl.object = users[u].acl.object || {};
281
- users[u].acl.object.create = groups[g].common.acl.object.create;
282
- users[u].acl.object.read = groups[g].common.acl.object.read;
283
- users[u].acl.object.write = groups[g].common.acl.object.write;
284
- users[u].acl.object.delete = groups[g].common.acl.object.delete;
285
- users[u].acl.object.list = groups[g].common.acl.object.list;
286
- } else {
287
- users[u].acl.object.create = users[u].acl.object.create || groups[g].common.acl.object.create;
288
- users[u].acl.object.read = users[u].acl.object.read || groups[g].common.acl.object.read;
289
- users[u].acl.object.write = users[u].acl.object.write || groups[g].common.acl.object.write;
290
- users[u].acl.object.delete = users[u].acl.object.delete || groups[g].common.acl.object.delete;
291
- users[u].acl.object.list = users[u].acl.object.list || groups[g].common.acl.object.list;
292
- }
293
- }
294
- if (groups[g].common.acl && groups[g].common.acl.users) {
295
- if (!users[u].acl || !users[u].acl.users) {
296
- users[u].acl = users[u].acl || {};
297
- users[u].acl.users = users[u].acl.users || {};
298
- users[u].acl.users.create = groups[g].common.acl.users.create;
299
- users[u].acl.users.read = groups[g].common.acl.users.read;
300
- users[u].acl.users.write = groups[g].common.acl.users.write;
301
- users[u].acl.users.delete = groups[g].common.acl.users.delete;
302
- users[u].acl.users.list = groups[g].common.acl.users.list;
303
- } else {
304
- users[u].acl.users.create = users[u].acl.users.create || groups[g].common.acl.users.create;
305
- users[u].acl.users.read = users[u].acl.users.read || groups[g].common.acl.users.read;
306
- users[u].acl.users.write = users[u].acl.users.write || groups[g].common.acl.users.write;
307
- users[u].acl.users.delete = users[u].acl.users.delete || groups[g].common.acl.users.delete;
308
- users[u].acl.users.list = users[u].acl.users.list || groups[g].common.acl.users.list;
309
- }
310
- }
311
- if (groups[g].common.acl && groups[g].common.acl.state) {
312
- if (!users[u].acl || !users[u].acl.state) {
313
- users[u].acl = users[u].acl || {};
314
- users[u].acl.state = users[u].acl.state || {};
315
- users[u].acl.state.create = groups[g].common.acl.state?.create;
316
- users[u].acl.state.read = groups[g].common.acl.state?.read;
317
- users[u].acl.state.write = groups[g].common.acl.state?.write;
318
- users[u].acl.state.delete = groups[g].common.acl.state?.delete;
319
- users[u].acl.state.list = groups[g].common.acl.state?.list;
320
- } else {
321
- users[u].acl.state.create = users[u].acl.state.create || groups[g].common.acl.state?.create;
322
- users[u].acl.state.read = users[u].acl.state.read || groups[g].common.acl.state?.read;
323
- users[u].acl.state.write = users[u].acl.state.write || groups[g].common.acl.state?.write;
324
- users[u].acl.state.delete = users[u].acl.state.delete || groups[g].common.acl.state?.delete;
325
- users[u].acl.state.list = users[u].acl.state.list || groups[g].common.acl.state?.list;
326
- }
327
- }
319
+ }
320
+ if (groups[g].common.acl?.state) {
321
+ if (!users[u].acl?.state) {
322
+ users[u].acl ||= {};
323
+ users[u].acl.state ||= {};
324
+ users[u].acl.state.create = groups[g].common.acl.state.create;
325
+ users[u].acl.state.read = groups[g].common.acl.state.read;
326
+ users[u].acl.state.write = groups[g].common.acl.state.write;
327
+ users[u].acl.state.delete = groups[g].common.acl.state.delete;
328
+ users[u].acl.state.list = groups[g].common.acl.state.list;
329
+ } else {
330
+ users[u].acl.state.create ||= groups[g].common.acl.state.create;
331
+ users[u].acl.state.read ||= groups[g].common.acl.state.read;
332
+ users[u].acl.state.write ||= groups[g].common.acl.state.write;
333
+ users[u].acl.state.delete ||= groups[g].common.acl.state.delete;
334
+ users[u].acl.state.list ||= groups[g].common.acl.state.list;
328
335
  }
329
336
  }
330
- return import_db_base.tools.maybeCallbackWithError(callback, error, user, users[user] ? users[user].groups : [], users[user] ? users[user].acl : (0, import_deep_clone.default)(defaultAcl.acl));
331
- });
332
- });
337
+ }
338
+ }
339
+ return [user, users[user]?.groups || [], users[user]?.acl || (0, import_deep_clone.default)(defaultAcl.acl)];
333
340
  }
341
+ __name(getUserGroupAsync, "getUserGroupAsync");
334
342
  function sanitizePath(id, name) {
335
343
  if (!name) {
336
344
  name = "";
@@ -356,6 +364,7 @@ function sanitizePath(id, name) {
356
364
  }
357
365
  return { id, name };
358
366
  }
367
+ __name(sanitizePath, "sanitizePath");
359
368
  function checkObject(obj, options, flag) {
360
369
  if (!obj || !("common" in obj) || !obj.acl || flag === CONSTS.ACCESS_LIST) {
361
370
  return true;
@@ -386,80 +395,91 @@ function checkObject(obj, options, flag) {
386
395
  }
387
396
  return true;
388
397
  }
398
+ __name(checkObject, "checkObject");
389
399
  function checkObjectRights(objects, id, object, options, flag, callback) {
390
- options = options || {};
391
- if (!options.user) {
392
- options = {
400
+ try {
401
+ checkObjectRightsAsync(objects, id, object, options, flag).then((userContext) => import_db_base.tools.maybeCallbackWithError(callback, null, userContext)).catch((error) => import_db_base.tools.maybeCallbackWithError(callback, error));
402
+ } catch (error) {
403
+ import_db_base.tools.maybeCallbackWithError(callback, error);
404
+ }
405
+ }
406
+ __name(checkObjectRights, "checkObjectRights");
407
+ async function checkObjectRightsAsync(objects, id, object, options, flag) {
408
+ let userContext;
409
+ options ||= {};
410
+ if (!options?.user) {
411
+ userContext = {
393
412
  user: CONSTS.SYSTEM_ADMIN_USER,
394
- params: options,
395
413
  group: CONSTS.SYSTEM_ADMIN_GROUP,
396
414
  groups: [CONSTS.SYSTEM_ADMIN_GROUP],
397
415
  acl: getDefaultAdminRights()
398
416
  };
417
+ } else {
418
+ const [, groups2, acl] = await getUserGroupAsync(objects, options.user);
419
+ userContext = {
420
+ user: options.user,
421
+ groups: groups2,
422
+ acl: acl || {},
423
+ group: groups2?.[0] || null
424
+ };
399
425
  }
400
- if (!options.acl) {
401
- return objects.getUserGroup(options.user, (_user, groups2, acl) => {
402
- options = options || {};
403
- options.acl = acl || {};
404
- options.groups = groups2;
405
- options.group = groups2 ? groups2[0] : null;
406
- checkObjectRights(objects, id, object, options, flag, callback);
407
- });
408
- }
409
- if (options.user === CONSTS.SYSTEM_ADMIN_USER || options.group === CONSTS.SYSTEM_ADMIN_GROUP || options.groups && options.groups.includes(CONSTS.SYSTEM_ADMIN_GROUP)) {
410
- return import_db_base.tools.maybeCallbackWithError(callback, null, options);
426
+ if (userContext.user === CONSTS.SYSTEM_ADMIN_USER || userContext.group === CONSTS.SYSTEM_ADMIN_GROUP || userContext.groups?.includes(CONSTS.SYSTEM_ADMIN_GROUP)) {
427
+ return userContext;
411
428
  }
412
429
  if (typeof id === "string" && (id.startsWith(USER_STARTS_WITH) || id.startsWith(GROUP_STARTS_WITH))) {
413
- if (flag === CONSTS.ACCESS_WRITE && !options.acl.users.write) {
414
- return import_db_base.tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION, options);
430
+ if (flag === CONSTS.ACCESS_WRITE && !userContext.acl.users.write) {
431
+ throw new Error(ERRORS.ERROR_PERMISSION);
415
432
  }
416
- if (flag === CONSTS.ACCESS_READ && !options.acl.users.read) {
417
- return import_db_base.tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION, options);
433
+ if (flag === CONSTS.ACCESS_READ && !userContext.acl.users.read) {
434
+ throw new Error(ERRORS.ERROR_PERMISSION);
418
435
  }
419
- if (flag === CONSTS.ACCESS_DELETE && !options.acl.users.delete) {
420
- return import_db_base.tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION, options);
436
+ if (flag === CONSTS.ACCESS_DELETE && !userContext.acl.users.delete) {
437
+ throw new Error(ERRORS.ERROR_PERMISSION);
421
438
  }
422
- if (flag === CONSTS.ACCESS_LIST && !options.acl.users.list) {
423
- return import_db_base.tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION, options);
439
+ if (flag === CONSTS.ACCESS_LIST && !userContext.acl.users.list) {
440
+ throw new Error(ERRORS.ERROR_PERMISSION);
424
441
  }
425
- if (flag === CONSTS.ACCESS_CREATE && !options.acl.users.create) {
426
- return import_db_base.tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION, options);
442
+ if (flag === CONSTS.ACCESS_CREATE && !userContext.acl.users.create) {
443
+ throw new Error(ERRORS.ERROR_PERMISSION);
427
444
  }
428
445
  if (flag === CONSTS.ACCESS_DELETE) {
429
446
  flag = CONSTS.ACCESS_WRITE;
430
447
  }
431
448
  }
432
- if (flag === CONSTS.ACCESS_WRITE && !options.acl.object.write) {
433
- import_db_base.tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION, options);
449
+ if (flag === CONSTS.ACCESS_WRITE && !userContext.acl.object.write) {
450
+ throw new Error(ERRORS.ERROR_PERMISSION);
434
451
  }
435
- if (flag === CONSTS.ACCESS_READ && !options.acl.object.read) {
436
- return import_db_base.tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION, options);
452
+ if (flag === CONSTS.ACCESS_READ && !userContext.acl.object.read) {
453
+ throw new Error(ERRORS.ERROR_PERMISSION);
437
454
  }
438
- if (flag === CONSTS.ACCESS_DELETE && !options.acl.object.delete) {
439
- return import_db_base.tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION, options);
455
+ if (flag === CONSTS.ACCESS_DELETE && !userContext.acl.object.delete) {
456
+ throw new Error(ERRORS.ERROR_PERMISSION);
440
457
  }
441
- if (flag === CONSTS.ACCESS_LIST && !options.acl.object.list) {
442
- return import_db_base.tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION, options);
458
+ if (flag === CONSTS.ACCESS_LIST && !userContext.acl.object.list) {
459
+ throw new Error(ERRORS.ERROR_PERMISSION);
443
460
  }
444
461
  if (flag === CONSTS.ACCESS_DELETE) {
445
462
  flag = CONSTS.ACCESS_WRITE;
446
463
  }
447
- if (id && !checkObject(object, options, flag)) {
448
- return import_db_base.tools.maybeCallbackWithError(callback, ERRORS.ERROR_PERMISSION, options);
464
+ if (id && !checkObject(object, userContext, flag)) {
465
+ throw new Error(ERRORS.ERROR_PERMISSION);
449
466
  }
450
- return import_db_base.tools.maybeCallbackWithError(callback, null, options);
467
+ return userContext;
451
468
  }
469
+ __name(checkObjectRightsAsync, "checkObjectRightsAsync");
452
470
  // Annotate the CommonJS export names for ESM import in node:
453
471
  0 && (module.exports = {
454
472
  CONSTS,
455
473
  ERRORS,
456
474
  REG_CHECK_ID,
457
475
  checkFile,
458
- checkFileRights,
476
+ checkFileRightsAsync,
459
477
  checkObject,
460
478
  checkObjectRights,
479
+ checkObjectRightsAsync,
461
480
  getMimeType,
462
481
  getUserGroup,
482
+ getUserGroupAsync,
463
483
  sanitizePath
464
484
  });
465
485
  //# sourceMappingURL=objectsUtils.js.map