in src/objectExplorer/objectExplorerService.ts [70:148]
private handleSessionCreatedNotification(): NotificationHandler<SessionCreatedParameters> {
const self = this;
const handler = async (result: SessionCreatedParameters) => {
if (self._currentNode instanceof ConnectTreeNode) {
self.currentNode = getParentNode(self.currentNode);
}
if (result.success) {
let nodeLabel = this._nodePathToNodeLabelMap.get(result.rootNode.nodePath);
// if no node label, check if it has a name in saved profiles
// in case this call came from new query
let savedConnections = this._connectionManager.connectionStore.loadAllConnections();
let nodeConnection = this._sessionIdToConnectionCredentialsMap.get(result.sessionId);
for (let connection of savedConnections) {
if (Utils.isSameConnection(connection.connectionCreds, nodeConnection)) {
// if it's not the defaul label
if (connection.label !== connection.connectionCreds.server) {
nodeLabel = connection.label;
}
break;
}
}
// set connection and other things
let node: TreeNodeInfo;
if (self._currentNode && (self._currentNode.sessionId === result.sessionId)) {
nodeLabel = !nodeLabel ? self.createNodeLabel(self._currentNode.connectionInfo) : nodeLabel;
node = TreeNodeInfo.fromNodeInfo(result.rootNode, result.sessionId,
undefined, self._currentNode.connectionInfo, nodeLabel, Constants.serverLabel);
} else {
nodeLabel = !nodeLabel ? self.createNodeLabel(nodeConnection) : nodeLabel;
node = TreeNodeInfo.fromNodeInfo(result.rootNode, result.sessionId,
undefined, nodeConnection, nodeLabel, Constants.serverLabel);
}
// make a connection if not connected already
const nodeUri = ObjectExplorerUtils.getNodeUri(node);
if (!this._connectionManager.isConnected(nodeUri) &&
!this._connectionManager.isConnecting(nodeUri)) {
const profile = <IConnectionProfile>node.connectionInfo;
await this._connectionManager.connect(nodeUri, profile);
}
self.updateNode(node);
self._objectExplorerProvider.objectExplorerExists = true;
const promise = self._sessionIdToPromiseMap.get(result.sessionId);
// remove the sign in node once the session is created
if (self._treeNodeToChildrenMap.has(node)) {
self._treeNodeToChildrenMap.delete(node);
}
return promise.resolve(node);
} else {
// create session failure
if (self._currentNode.connectionInfo?.password) {
self._currentNode.connectionInfo.password = '';
}
let error = LocalizedConstants.connectErrorLabel;
if (result.errorMessage) {
error += ` : ${result.errorMessage}`;
}
self._connectionManager.vscodeWrapper.showErrorMessage(error);
const promise = self._sessionIdToPromiseMap.get(result.sessionId);
// handle session failure because of firewall issue
if (ObjectExplorerUtils.isFirewallError(result.errorMessage)) {
let handleFirewallResult = await self._connectionManager.firewallService.handleFirewallRule
(Constants.errorFirewallRule, result.errorMessage);
if (handleFirewallResult.result && handleFirewallResult.ipAddress) {
const nodeUri = ObjectExplorerUtils.getNodeUri(self._currentNode);
const profile = <IConnectionProfile>self._currentNode.connectionInfo;
self.updateNode(self._currentNode);
self._connectionManager.connectionUI.handleFirewallError(nodeUri, profile, handleFirewallResult.ipAddress);
}
}
if (promise) {
return promise.resolve(undefined);
}
}
};
return handler;
}