@resolveio/server-lib 20.13.0 → 20.13.1
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/methods/mongo-explorer.js +39 -1
- package/methods/mongo-explorer.js.map +1 -1
- package/methods.ts +1 -1
- package/package.json +1 -1
|
@@ -43,6 +43,28 @@ var resolveio_server_app_1 = require("../resolveio-server-app");
|
|
|
43
43
|
var common_1 = require("../util/common");
|
|
44
44
|
var DEFAULT_LIMIT = 100;
|
|
45
45
|
var MAX_LIMIT = 2000;
|
|
46
|
+
function parseMongoExplorerWriteUsers() {
|
|
47
|
+
var raw = typeof process.env.MONGO_EXPLORER_WRITE_USERS === 'string' ? process.env.MONGO_EXPLORER_WRITE_USERS.trim() : '';
|
|
48
|
+
if (!raw) {
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
51
|
+
try {
|
|
52
|
+
var parsed = JSON.parse(raw);
|
|
53
|
+
if (Array.isArray(parsed)) {
|
|
54
|
+
return parsed.map(function (value) { return String(value); }).filter(function (value) { return value.trim().length; });
|
|
55
|
+
}
|
|
56
|
+
if (typeof parsed === 'string') {
|
|
57
|
+
return [parsed.trim()].filter(Boolean);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (_a) {
|
|
61
|
+
// Fall back to comma-separated list.
|
|
62
|
+
}
|
|
63
|
+
return raw
|
|
64
|
+
.split(',')
|
|
65
|
+
.map(function (value) { return value.trim(); })
|
|
66
|
+
.filter(Boolean);
|
|
67
|
+
}
|
|
46
68
|
function resolveDatabaseName(database) {
|
|
47
69
|
var _a, _b;
|
|
48
70
|
var defaultDb = ((_a = resolveio_server_app_1.ResolveIOServer.getServerConfig()) === null || _a === void 0 ? void 0 : _a.DATABASE) || '';
|
|
@@ -110,7 +132,7 @@ function userHasView(user, view) {
|
|
|
110
132
|
}
|
|
111
133
|
function ensureWriteAccess(context, permissionView) {
|
|
112
134
|
return __awaiter(this, void 0, void 0, function () {
|
|
113
|
-
var idUser, user, normalizedPermission;
|
|
135
|
+
var idUser, user, allowedUsers, username_1, email_1, id_1, isAllowed, normalizedPermission;
|
|
114
136
|
var _a;
|
|
115
137
|
return __generator(this, function (_b) {
|
|
116
138
|
switch (_b.label) {
|
|
@@ -128,6 +150,22 @@ function ensureWriteAccess(context, permissionView) {
|
|
|
128
150
|
if (user.readonly) {
|
|
129
151
|
throw new Error('Mongo Explorer: Readonly user');
|
|
130
152
|
}
|
|
153
|
+
allowedUsers = parseMongoExplorerWriteUsers();
|
|
154
|
+
if (allowedUsers.length) {
|
|
155
|
+
username_1 = String(user.username || '').trim().toLowerCase();
|
|
156
|
+
email_1 = String(user.email || '').trim().toLowerCase();
|
|
157
|
+
id_1 = String(user._id || '').trim();
|
|
158
|
+
isAllowed = allowedUsers.some(function (entry) {
|
|
159
|
+
var normalized = String(entry || '').trim().toLowerCase();
|
|
160
|
+
if (!normalized) {
|
|
161
|
+
return false;
|
|
162
|
+
}
|
|
163
|
+
return normalized === username_1 || (email_1 && normalized === email_1) || (id_1 && entry === id_1);
|
|
164
|
+
});
|
|
165
|
+
if (!isAllowed) {
|
|
166
|
+
throw new Error('Mongo Explorer: Write access denied');
|
|
167
|
+
}
|
|
168
|
+
}
|
|
131
169
|
if ((_a = user.roles) === null || _a === void 0 ? void 0 : _a.super_admin) {
|
|
132
170
|
return [2 /*return*/];
|
|
133
171
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/methods/mongo-explorer.ts"],"names":[],"mappings":"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","file":"mongo-explorer.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { Db } from 'mongodb';\nimport { Users } from '../collections/user.collection';\nimport { MethodManager } from '../managers/method.manager';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { objectIdHexString } from '../util/common';\n\nconst DEFAULT_LIMIT = 100;\nconst MAX_LIMIT = 2000;\n\ntype ExplorerFindOptions = {\n\tprojection?: Record<string, number>;\n\tsort?: Record<string, any>;\n\tlimit?: number;\n\tskip?: number;\n\tincludeTotal?: boolean;\n};\n\nfunction resolveDatabaseName(database?: string): string {\n\tconst defaultDb = ResolveIOServer.getServerConfig()?.DATABASE || '';\n\tconst dbName = typeof database === 'string' && database.trim().length ? database.trim() : defaultDb;\n\n\tif (!dbName) {\n\t\tthrow new Error('Mongo Explorer: Database is required');\n\t}\n\n\tconst allowedDatabases = ResolveIOServer.getMongoManager()?.getWatchedDatabases() || [];\n\tif (allowedDatabases.length && !allowedDatabases.includes(dbName)) {\n\t\tthrow new Error('Mongo Explorer: Database access denied');\n\t}\n\n\treturn dbName;\n}\n\nfunction resolveDatabase(database?: string): Db {\n\tconst dbName = resolveDatabaseName(database);\n\treturn ResolveIOServer.getMongoConnection().db(dbName);\n}\n\nfunction resolveCollectionHandle(database: string, collection: string) {\n\tconst mainDb = ResolveIOServer.getServerConfig()?.DATABASE || '';\n\tconst isMainDb = database === mainDb;\n\tconst managerCollection = isMainDb ? ResolveIOServer.getMongoManager()?.collection(collection) : null;\n\tconst db = ResolveIOServer.getMongoConnection().db(database);\n\n\treturn {\n\t\tmanagerCollection,\n\t\tdbCollection: db.collection(collection)\n\t};\n}\n\nfunction normalizeFindOptions(options?: ExplorerFindOptions) {\n\tconst normalized = options || {};\n\tconst projection = normalized.projection && Object.keys(normalized.projection).length ? normalized.projection : undefined;\n\tconst sort = normalized.sort && Object.keys(normalized.sort).length ? normalized.sort : undefined;\n\tconst limit = typeof normalized.limit === 'number' ? Math.min(Math.max(normalized.limit, 0), MAX_LIMIT) : DEFAULT_LIMIT;\n\tconst skip = typeof normalized.skip === 'number' ? Math.max(normalized.skip, 0) : 0;\n\n\treturn {\n\t\tfindOptions: {\n\t\t\tprojection,\n\t\t\tsort,\n\t\t\tlimit,\n\t\t\tskip\n\t\t},\n\t\tincludeTotal: normalized.includeTotal === true\n\t};\n}\n\nfunction userHasView(user, view: string): boolean {\n\tif (!user || !view) {\n\t\treturn false;\n\t}\n\n\tif (user.roles?.super_admin) {\n\t\treturn true;\n\t}\n\n\tconst groups = Array.isArray(user.roles?.groups) ? user.roles.groups : [];\n\tconst miscs = Array.isArray(user.roles?.miscs) ? user.roles.miscs : [];\n\n\tif (groups.some(group => Array.isArray(group.views) && group.views.some(v => v.startsWith(view)))) {\n\t\treturn true;\n\t}\n\n\tif (miscs.some(v => v.startsWith(view))) {\n\t\treturn true;\n\t}\n\n\tif (groups.some(group => group.name === view)) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nasync function ensureWriteAccess(context: any, permissionView?: string) {\n\tconst idUser = context?.id_user;\n\tif (!idUser) {\n\t\tthrow new Error('Mongo Explorer: Unauthorized');\n\t}\n\n\tconst user = await Users.findOne({_id: idUser});\n\tif (!user) {\n\t\tthrow new Error('Mongo Explorer: Unauthorized');\n\t}\n\n\tif (user.readonly) {\n\t\tthrow new Error('Mongo Explorer: Readonly user');\n\t}\n\n\tif (user.roles?.super_admin) {\n\t\treturn;\n\t}\n\n\tconst normalizedPermission = typeof permissionView === 'string' ? permissionView.trim() : '';\n\n\tif (!normalizedPermission) {\n\t\treturn;\n\t}\n\n\tif (userHasView(user, normalizedPermission)) {\n\t\treturn;\n\t}\n\n\tthrow new Error('Mongo Explorer: Write access denied');\n}\n\nexport function loadMongoExplorerMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\tmongoExplorerListCollections: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database?: string) {\n\t\t\t\tconst db = resolveDatabase(database);\n\t\t\t\tconst collections = await db.listCollections().toArray();\n\t\t\t\treturn collections\n\t\t\t\t\t.map(col => ({\n\t\t\t\t\t\tname: col.name,\n\t\t\t\t\t\ttype: col.type || 'collection'\n\t\t\t\t\t}))\n\t\t\t\t\t.sort((a, b) => a.name.localeCompare(b.name));\n\t\t\t}\n\t\t},\n\t\tmongoExplorerFind: {\n\t\t\tbypassSession: true,\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tquery: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database: string, collection: string, query: any = {}, options?: ExplorerFindOptions) {\n\t\t\t\tconst db = resolveDatabase(database);\n\t\t\t\tconst normalized = normalizeFindOptions(options);\n\t\t\t\tconst documents = await db.collection(collection).find(query || {}, normalized.findOptions).toArray();\n\t\t\t\tlet total = null;\n\n\t\t\t\tif (normalized.includeTotal) {\n\t\t\t\t\ttotal = await db.collection(collection).countDocuments(query || {});\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tdocuments,\n\t\t\t\t\ttotal\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\tmongoExplorerAggregate: {\n\t\t\tbypassSession: true,\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tpipeline: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'pipeline.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\toptional: true,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database: string, collection: string, pipeline: any[], options: any = {}) {\n\t\t\t\tconst db = resolveDatabase(database);\n\t\t\t\treturn db.collection(collection).aggregate(pipeline || [], options || undefined).toArray();\n\t\t\t}\n\t\t},\n\t\tmongoExplorerCommand: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcommand: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tpermissionView: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database: string, command: any, permissionView?: string) {\n\t\t\t\tawait ensureWriteAccess(this, permissionView);\n\t\t\t\tconst db = resolveDatabase(database);\n\t\t\t\treturn db.command(command);\n\t\t\t}\n\t\t},\n\t\tmongoExplorerInsertDocument: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tdocument: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tpermissionView: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database: string, collection: string, document: any, permissionView?: string) {\n\t\t\t\tawait ensureWriteAccess(this, permissionView);\n\t\t\t\tconst dbName = resolveDatabaseName(database);\n\t\t\t\tconst { managerCollection, dbCollection } = resolveCollectionHandle(dbName, collection);\n\n\t\t\t\tif (!document || typeof document !== 'object') {\n\t\t\t\t\tthrow new Error('Mongo Explorer: Document is required');\n\t\t\t\t}\n\n\t\t\t\tif (!document._id) {\n\t\t\t\t\tdocument._id = objectIdHexString();\n\t\t\t\t}\n\n\t\t\t\tif (document.__v === undefined) {\n\t\t\t\t\tdocument.__v = 0;\n\t\t\t\t}\n\n\t\t\t\tif (managerCollection) {\n\t\t\t\t\tawait managerCollection.insertOne(document);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tawait dbCollection.insertOne(document);\n\t\t\t\t}\n\n\t\t\t\treturn document._id;\n\t\t\t}\n\t\t},\n\t\tmongoExplorerReplaceDocument: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tdocument: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tpermissionView: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database: string, collection: string, document: any, permissionView?: string) {\n\t\t\t\tawait ensureWriteAccess(this, permissionView);\n\t\t\t\tconst dbName = resolveDatabaseName(database);\n\t\t\t\tconst { managerCollection, dbCollection } = resolveCollectionHandle(dbName, collection);\n\n\t\t\t\tif (!document || typeof document !== 'object' || !document._id) {\n\t\t\t\t\tthrow new Error('Mongo Explorer: Document with _id is required');\n\t\t\t\t}\n\n\t\t\t\tif (managerCollection) {\n\t\t\t\t\tawait managerCollection.replaceOne({_id: document._id}, document);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tawait dbCollection.replaceOne({_id: document._id}, document);\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\tmongoExplorerDeleteDocument: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tdoc_id: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tpermissionView: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\t\tfunction: async function(database: string, collection: string, doc_id: string, permissionView?: string) {\n\t\t\t\t\tawait ensureWriteAccess(this, permissionView);\n\t\t\t\t\tconst dbName = resolveDatabaseName(database);\n\t\t\t\t\tconst { managerCollection, dbCollection } = resolveCollectionHandle(dbName, collection);\n\t\t\t\t\tconst deleteFilter = { _id: doc_id } as any;\n\n\t\t\t\t\tif (managerCollection) {\n\t\t\t\t\t\tawait managerCollection.deleteOne(deleteFilter);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tawait dbCollection.deleteOne(deleteFilter);\n\t\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t});\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/methods/mongo-explorer.ts"],"names":[],"mappings":"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","file":"mongo-explorer.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { Db } from 'mongodb';\nimport { Users } from '../collections/user.collection';\nimport { MethodManager } from '../managers/method.manager';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { objectIdHexString } from '../util/common';\n\nconst DEFAULT_LIMIT = 100;\nconst MAX_LIMIT = 2000;\n\ntype ExplorerFindOptions = {\n\tprojection?: Record<string, number>;\n\tsort?: Record<string, any>;\n\tlimit?: number;\n\tskip?: number;\n\tincludeTotal?: boolean;\n};\n\nfunction parseMongoExplorerWriteUsers(): string[] {\n\tconst raw = typeof process.env.MONGO_EXPLORER_WRITE_USERS === 'string' ? process.env.MONGO_EXPLORER_WRITE_USERS.trim() : '';\n\tif (!raw) {\n\t\treturn [];\n\t}\n\n\ttry {\n\t\tconst parsed = JSON.parse(raw);\n\t\tif (Array.isArray(parsed)) {\n\t\t\treturn parsed.map(value => String(value)).filter(value => value.trim().length);\n\t\t}\n\t\tif (typeof parsed === 'string') {\n\t\t\treturn [parsed.trim()].filter(Boolean);\n\t\t}\n\t}\n\tcatch {\n\t\t// Fall back to comma-separated list.\n\t}\n\n\treturn raw\n\t\t.split(',')\n\t\t.map(value => value.trim())\n\t\t.filter(Boolean);\n}\n\nfunction resolveDatabaseName(database?: string): string {\n\tconst defaultDb = ResolveIOServer.getServerConfig()?.DATABASE || '';\n\tconst dbName = typeof database === 'string' && database.trim().length ? database.trim() : defaultDb;\n\n\tif (!dbName) {\n\t\tthrow new Error('Mongo Explorer: Database is required');\n\t}\n\n\tconst allowedDatabases = ResolveIOServer.getMongoManager()?.getWatchedDatabases() || [];\n\tif (allowedDatabases.length && !allowedDatabases.includes(dbName)) {\n\t\tthrow new Error('Mongo Explorer: Database access denied');\n\t}\n\n\treturn dbName;\n}\n\nfunction resolveDatabase(database?: string): Db {\n\tconst dbName = resolveDatabaseName(database);\n\treturn ResolveIOServer.getMongoConnection().db(dbName);\n}\n\nfunction resolveCollectionHandle(database: string, collection: string) {\n\tconst mainDb = ResolveIOServer.getServerConfig()?.DATABASE || '';\n\tconst isMainDb = database === mainDb;\n\tconst managerCollection = isMainDb ? ResolveIOServer.getMongoManager()?.collection(collection) : null;\n\tconst db = ResolveIOServer.getMongoConnection().db(database);\n\n\treturn {\n\t\tmanagerCollection,\n\t\tdbCollection: db.collection(collection)\n\t};\n}\n\nfunction normalizeFindOptions(options?: ExplorerFindOptions) {\n\tconst normalized = options || {};\n\tconst projection = normalized.projection && Object.keys(normalized.projection).length ? normalized.projection : undefined;\n\tconst sort = normalized.sort && Object.keys(normalized.sort).length ? normalized.sort : undefined;\n\tconst limit = typeof normalized.limit === 'number' ? Math.min(Math.max(normalized.limit, 0), MAX_LIMIT) : DEFAULT_LIMIT;\n\tconst skip = typeof normalized.skip === 'number' ? Math.max(normalized.skip, 0) : 0;\n\n\treturn {\n\t\tfindOptions: {\n\t\t\tprojection,\n\t\t\tsort,\n\t\t\tlimit,\n\t\t\tskip\n\t\t},\n\t\tincludeTotal: normalized.includeTotal === true\n\t};\n}\n\nfunction userHasView(user, view: string): boolean {\n\tif (!user || !view) {\n\t\treturn false;\n\t}\n\n\tif (user.roles?.super_admin) {\n\t\treturn true;\n\t}\n\n\tconst groups = Array.isArray(user.roles?.groups) ? user.roles.groups : [];\n\tconst miscs = Array.isArray(user.roles?.miscs) ? user.roles.miscs : [];\n\n\tif (groups.some(group => Array.isArray(group.views) && group.views.some(v => v.startsWith(view)))) {\n\t\treturn true;\n\t}\n\n\tif (miscs.some(v => v.startsWith(view))) {\n\t\treturn true;\n\t}\n\n\tif (groups.some(group => group.name === view)) {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nasync function ensureWriteAccess(context: any, permissionView?: string) {\n\tconst idUser = context?.id_user;\n\tif (!idUser) {\n\t\tthrow new Error('Mongo Explorer: Unauthorized');\n\t}\n\n\tconst user = await Users.findOne({_id: idUser});\n\tif (!user) {\n\t\tthrow new Error('Mongo Explorer: Unauthorized');\n\t}\n\n\tif (user.readonly) {\n\t\tthrow new Error('Mongo Explorer: Readonly user');\n\t}\n\n\tconst allowedUsers = parseMongoExplorerWriteUsers();\n\tif (allowedUsers.length) {\n\t\tconst username = String(user.username || '').trim().toLowerCase();\n\t\tconst email = String(user.email || '').trim().toLowerCase();\n\t\tconst id = String(user._id || '').trim();\n\t\tconst isAllowed = allowedUsers.some(entry => {\n\t\t\tconst normalized = String(entry || '').trim().toLowerCase();\n\t\t\tif (!normalized) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn normalized === username || (email && normalized === email) || (id && entry === id);\n\t\t});\n\n\t\tif (!isAllowed) {\n\t\t\tthrow new Error('Mongo Explorer: Write access denied');\n\t\t}\n\t}\n\n\tif (user.roles?.super_admin) {\n\t\treturn;\n\t}\n\n\tconst normalizedPermission = typeof permissionView === 'string' ? permissionView.trim() : '';\n\n\tif (!normalizedPermission) {\n\t\treturn;\n\t}\n\n\tif (userHasView(user, normalizedPermission)) {\n\t\treturn;\n\t}\n\n\tthrow new Error('Mongo Explorer: Write access denied');\n}\n\nexport function loadMongoExplorerMethods(methodManager: MethodManager) {\n\tmethodManager.methods({\n\t\tmongoExplorerListCollections: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database?: string) {\n\t\t\t\tconst db = resolveDatabase(database);\n\t\t\t\tconst collections = await db.listCollections().toArray();\n\t\t\t\treturn collections\n\t\t\t\t\t.map(col => ({\n\t\t\t\t\t\tname: col.name,\n\t\t\t\t\t\ttype: col.type || 'collection'\n\t\t\t\t\t}))\n\t\t\t\t\t.sort((a, b) => a.name.localeCompare(b.name));\n\t\t\t}\n\t\t},\n\t\tmongoExplorerFind: {\n\t\t\tbypassSession: true,\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tquery: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database: string, collection: string, query: any = {}, options?) {\n\t\t\t\tconst db = resolveDatabase(database);\n\t\t\t\tconst normalized = normalizeFindOptions(options);\n\t\t\t\tconst documents = await db.collection(collection).find(query || {}, normalized.findOptions).toArray();\n\t\t\t\tlet total = null;\n\n\t\t\t\tif (normalized.includeTotal) {\n\t\t\t\t\ttotal = await db.collection(collection).countDocuments(query || {});\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tdocuments,\n\t\t\t\t\ttotal\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\tmongoExplorerAggregate: {\n\t\t\tbypassSession: true,\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tpipeline: {\n\t\t\t\t\ttype: Array\n\t\t\t\t},\n\t\t\t\t'pipeline.$': {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\toptional: true,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database: string, collection: string, pipeline: any[], options: any = {}) {\n\t\t\t\tconst db = resolveDatabase(database);\n\t\t\t\treturn db.collection(collection).aggregate(pipeline || [], options || undefined).toArray();\n\t\t\t}\n\t\t},\n\t\tmongoExplorerCommand: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcommand: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tpermissionView: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database: string, command: any, permissionView?: string) {\n\t\t\t\tawait ensureWriteAccess(this, permissionView);\n\t\t\t\tconst db = resolveDatabase(database);\n\t\t\t\treturn db.command(command);\n\t\t\t}\n\t\t},\n\t\tmongoExplorerInsertDocument: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tdocument: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tpermissionView: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database: string, collection: string, document: any, permissionView?: string) {\n\t\t\t\tawait ensureWriteAccess(this, permissionView);\n\t\t\t\tconst dbName = resolveDatabaseName(database);\n\t\t\t\tconst { managerCollection, dbCollection } = resolveCollectionHandle(dbName, collection);\n\n\t\t\t\tif (!document || typeof document !== 'object') {\n\t\t\t\t\tthrow new Error('Mongo Explorer: Document is required');\n\t\t\t\t}\n\n\t\t\t\tif (!document._id) {\n\t\t\t\t\tdocument._id = objectIdHexString();\n\t\t\t\t}\n\n\t\t\t\tif (document.__v === undefined) {\n\t\t\t\t\tdocument.__v = 0;\n\t\t\t\t}\n\n\t\t\t\tif (managerCollection) {\n\t\t\t\t\tawait managerCollection.insertOne(document);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tawait dbCollection.insertOne(document);\n\t\t\t\t}\n\n\t\t\t\treturn document._id;\n\t\t\t}\n\t\t},\n\t\tmongoExplorerReplaceDocument: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tdocument: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t},\n\t\t\t\tpermissionView: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(database: string, collection: string, document: any, permissionView?: string) {\n\t\t\t\tawait ensureWriteAccess(this, permissionView);\n\t\t\t\tconst dbName = resolveDatabaseName(database);\n\t\t\t\tconst { managerCollection, dbCollection } = resolveCollectionHandle(dbName, collection);\n\n\t\t\t\tif (!document || typeof document !== 'object' || !document._id) {\n\t\t\t\t\tthrow new Error('Mongo Explorer: Document with _id is required');\n\t\t\t\t}\n\n\t\t\t\tif (managerCollection) {\n\t\t\t\t\tawait managerCollection.replaceOne({_id: document._id}, document);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tawait dbCollection.replaceOne({_id: document._id}, document);\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\tmongoExplorerDeleteDocument: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tdatabase: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tcollection: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tdoc_id: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tpermissionView: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\t\tfunction: async function(database: string, collection: string, doc_id: string, permissionView?: string) {\n\t\t\t\t\tawait ensureWriteAccess(this, permissionView);\n\t\t\t\t\tconst dbName = resolveDatabaseName(database);\n\t\t\t\t\tconst { managerCollection, dbCollection } = resolveCollectionHandle(dbName, collection);\n\t\t\t\t\tconst deleteFilter = { _id: doc_id } as any;\n\n\t\t\t\t\tif (managerCollection) {\n\t\t\t\t\t\tawait managerCollection.deleteOne(deleteFilter);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tawait dbCollection.deleteOne(deleteFilter);\n\t\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t});\n}\n"]}
|
package/methods.ts
CHANGED
|
@@ -105,7 +105,7 @@ export function SERVER_METHODS(resolveioServer) {
|
|
|
105
105
|
mongoExplorerDeleteDocument: (database: string, collection: string, doc_id: string, permissionView?: string, cb?: Function): Promise<any> => {
|
|
106
106
|
return resolveioServer.call('mongoExplorerDeleteDocument', database, collection, doc_id, permissionView, cb);
|
|
107
107
|
},
|
|
108
|
-
mongoExplorerFind: (database: string, collection: string, query: any = {}, options
|
|
108
|
+
mongoExplorerFind: (database: string, collection: string, query: any = {}, options?, cb?: Function): Promise<any> => {
|
|
109
109
|
return resolveioServer.call('mongoExplorerFind', database, collection, query, options, cb);
|
|
110
110
|
},
|
|
111
111
|
mongoExplorerInsertDocument: (database: string, collection: string, document: any, permissionView?: string, cb?: Function): Promise<any> => {
|