MCPcopy Create free account
hub / github.com/gnmyt/Nexterm / createSession

Function createSession

server/controllers/serverSession.js:48–121  ·  view source on GitHub ↗
(accountId, entryId, identityId, connectionReason, type = null, directIdentity = null, tabId = null, browserId = null, scriptId = null, startPath = null, ipAddress = null, userAgent = null)

Source from the content-addressed store, hash-verified

46};
47
48const createSession = async (accountId, entryId, identityId, connectionReason, type = null, directIdentity = null, tabId = null, browserId = null, scriptId = null, startPath = null, ipAddress = null, userAgent = null) => {
49 const entry = await Entry.findByPk(entryId);
50 if (!entry) {
51 return { code: 404, message: "Entry not found" };
52 }
53
54 const requiredPermission = getRequiredConnectPermission(entry, type, scriptId);
55 const accessResult = await validateEntryAccess(accountId, entry, "Access denied", requiredPermission);
56 if (!accessResult.valid) {
57 return { code: 403, message: "Access denied" };
58 }
59
60 if (directIdentity && entry.type?.startsWith('pve-')) {
61 return { code: 400, message: "Direct connections are not supported for Proxmox entries" };
62 }
63
64 if (entry.organizationId) {
65 const auditSettings = await getOrganizationAuditSettingsInternal(entry.organizationId);
66 if (auditSettings?.requireConnectionReason && !connectionReason) {
67 return { code: 400, message: "Connection reason required" };
68 }
69 }
70
71 const result = await resolveIdentity(entry, identityId, directIdentity, accountId);
72 const identity = result?.identity !== undefined ? result.identity : result;
73
74 if (result.accessDenied) {
75 return { code: 403, message: "You don't have access to this identity" };
76 }
77
78 if (result.requiresIdentity && !identity) {
79 return { code: 400, message: "Identity not found" };
80 }
81
82 const auditLogId = await createAuditLog({
83 accountId,
84 organizationId: entry.organizationId,
85 action: getAuditAction(entry, scriptId),
86 resource: scriptId ? RESOURCE_TYPES.SCRIPT : RESOURCE_TYPES.ENTRY,
87 resourceId: scriptId || entry.id,
88 details: { connectionReason, ...(scriptId && { serverId: entry.id }) },
89 ipAddress,
90 userAgent,
91 });
92
93 const configuration = {
94 identityId: identity ? identity.id : null,
95 type: type || null,
96 directIdentity: directIdentity || null,
97 scriptId: scriptId || null,
98 startPath: startPath || null,
99 renderer: type === "sftp" ? "sftp" : entry.renderer,
100 };
101
102 const session = SessionManager.create(accountId, entryId, configuration, connectionReason, tabId, browserId, auditLogId);
103
104 stateBroadcaster.broadcast("CONNECTIONS", { accountId });
105

Callers 3

duplicateSessionFunction · 0.85
users.jsFile · 0.85
serverSession.jsFile · 0.85

Calls 7

validateEntryAccessFunction · 0.85
resolveIdentityFunction · 0.85
createAuditLogFunction · 0.85
getAuditActionFunction · 0.85
broadcastMethod · 0.45

Tested by

no test coverage detected