From e0448feab874531aa4aaed68f9566b37e859d571 Mon Sep 17 00:00:00 2001 From: gjsjohnmurray Date: Fri, 16 Apr 2021 13:59:00 +0100 Subject: [PATCH] 2.0.0 candidate, implementing a tree UI --- CHANGELOG.md | 3 + README.md | 106 ++++++++++++++++++----- images/README/editSettings.png | Bin 0 -> 35733 bytes images/README/portalWebAppSetting.png | Bin 0 -> 5638 bytes images/README/portalWebApps.png | Bin 0 -> 34498 bytes images/README/tree.png | Bin 0 -> 19073 bytes package.json | 16 +++- src/api/addServer.ts | 119 ++++++++++++++------------ src/ui/serverManagerView.ts | 24 ++++-- 9 files changed, 183 insertions(+), 85 deletions(-) create mode 100644 images/README/editSettings.png create mode 100644 images/README/portalWebAppSetting.png create mode 100644 images/README/portalWebApps.png create mode 100644 images/README/tree.png diff --git a/CHANGELOG.md b/CHANGELOG.md index f60a817..11344c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +## 2.0.0 (16-Apr-2021) +* Add tree view interface. + ## 1.0.5 (02-Feb-2021) * Fix publication problem (#69). diff --git a/README.md b/README.md index c47b44e..4a8a273 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,75 @@ # InterSystems Server Manager -This is a VS Code helper extension for defining connections to [InterSystems®](https://www.intersystems.com/) servers. These connection definitions can used by other VS Code extensions when they make connections. One example is the [ObjectScript extension](https://github.com/intersystems-community/vscode-objectscript). + +InterSystems Server Manager is a Visual Studio Code extension for defining connections to [InterSystems](https://www.intersystems.com/) servers. These definitions can used by other VS Code extensions when they make connections. One example is the [ObjectScript extension](https://github.com/intersystems-community/vscode-objectscript) for code editing. + +# New in 2.0 - April 2021 + +> We are pleased to publish version 2.0 of this extension, adding a tree-style user interface. This significant new release is competing in the April 2021 InterSystems Programming Contest for Developer Tools. If you like the new 2.0 features please visit the [contest page](https://openexchange.intersystems.com/contest/13) no later than April 25 and vote for us. + +> Thanks to [George James Software](https://georgejames.com) for backing this development effort. + +## The Server Tree + +Server Manager displays connection definitions as a tree on an InterSystems Tools view: + +![Server Manager tree](images/README/tree.png) + +In this tree you can: + +- Launch the InterSystems Management Portal, either in a VS Code tab or in your default browser. +- List namespaces. +- Add namespaces to your VS Code workspace for viewing or editing code on the server with the [ObjectScript extension](https://github.com/intersystems-community/vscode-objectscript). +- Tag favorite servers. +- Set icon colors. +- Focus on recently used connections. +- Manage stored passwords. +- Add new servers, and edit existing ones. In common with the rest of VS Code, Server Manager stores your connection settings in JSON files. VS Code settings are arranged in a hierarchy that you can learn more about [here](https://code.visualstudio.com/docs/getstarted/settings). -Using Server Manager you can store connection passwords in the native keystore of your workstation's operating system instead of as plaintext in JSON files. +Server Manager can store connection passwords in the native keystore of your workstation's operating system. This is a more secure alternative to you putting them as plaintext in your JSON files. + +On Windows, Server Manager can create connection entries for all connections you previously defined with the original Windows app called InterSystems Server Manager. This action is available from the '`...`' menu at the top right corner of Server Manager's tree. + +## Defining a New Server + +1. Click the '`+`' button on Server Manager's title bar. +2. Complete the sequence of prompts. +3. Expand `All Servers` to see your new entry in the tree. + +The server definition is added to your [user-level](https://code.visualstudio.com/docs/getstarted/settings) `settings.json` file. + +Optionally use its context menu to store the password for the username you entered when defining the server. You can also set the color of the server icon. -On Windows you can run `Import Servers from Registry` from [Command Palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette) to create connection entries for all connections you previously defined with the InterSystems Server Manager. +The 'star' button that appears when you hover over the row lets you add the server to the `Favorites` list at the top of the tree. -## Defining a new connection +## Launching Management Portal -1. Open the VS Code [Command Palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette) by typing Ctrl+Shift+P (Cmd+Shift+P on macOS) or F1. -2. Start typing "Server Manager" to locate `InterSystems Server Manager: Store Password in Keychain`. -3. Type the '+' character into the quickpick input field. Alternatively click the '+' button on the top right of the quickpick. -4. Complete the prompts. By the time you reach the password prompt your connection definition has already been saved in **user-level** JSON. If you prefer to enter your password whenever a VS Code extension connects via Server Manager for the first time in a session, press Esc here. +When you hover over a server entry in the tree, two command buttons let you launch InterSystems Management Portal. -## Amending and removing definitions +The first button uses VS Code's Simple Browser feature, which creates a tab alongside any documents you may have open. The second button opens Portal in your workstation's default web browser. -To manage your definitions, [edit the relevant JSON file](https://code.visualstudio.com/docs/getstarted/settings). VS Code offers several routes to these files. One way is to type "json" into the Command Palette. +### Notes About Simple Browser +- There is only ever a single Simple Browser tab. Launching another server's Management Portal in it will replace the previous one. +- If the server version is InterSystems IRIS 2021.1.1 or later you will need to change a setting on the suite of web applications that implement Management Portal. This is a consequence of change [SGM031 - Support SameSite for CSP session and user cookies](https://docs.intersystems.com/iris20201/csp/docbook/relnotes/index.html#SGM031). Simple Browser will not be permitted to store Portal's session management cookies, so Portal must be willing to fall back to using the CSPCHD query parameter mechanism. + - Locate the five web applications whose path begins with `/csp/sys` + ![Portal web app list](images/README/portalWebApps.png) + + - Alter the `Use Cookie for Session` setting on each of them so it is `Autodetect` instead of `Always`. + ![Portal web app detail](images/README/portalWebAppSetting.png) + Remember to save the change. The change is not thought to have any adverse effects on the usage of Portal from ordinary browsers, which will continue to use session cookies. +- When a 2020.1.1+ Portal has resorted to using CSPCHD (see above) a few inter-page links fail because they don't add the CSPCHD queryparam. One specific case is the breadcrumb links. Pending the arrival of an InterSystems correction (JIRA DP-404817) these links will take you to the login page. Either enter your credentials to proceed, or launch Simple Browser again from the Server Manager tree. + +## Amending and Removing Servers + +To manage your server definitions, including changing the username it connects with, [edit the relevant JSON file](https://code.visualstudio.com/docs/getstarted/settings). + +1. From a server's context menu, or from Server Manager's top-right '`...`' menu, choose `Edit Settings`. This opens VS Code's Settings Editor and filters its contents. + +![Edit Settings](images/README/editSettings.png) + +2. Click the `Edit in settings.json` link. In this example two connections have been defined: @@ -48,25 +100,37 @@ In this example two connections have been defined: The JSON editor offers the usual [IntelliSense](https://code.visualstudio.com/docs/editor/intellisense) as you work in this structure. -Notice how you can add a `description` property to each connection. This will be shown alongside its entry in the server quickpick. +Notice how you can add a `description` property to each connection. This will be shown in the hover in Server Manager's tree, and alongside the entry if a server quickpick is used. Servers are displayed in the quickpick in the order they are defined in the JSON file. The exception is that if a server name is set as the value of the `/default` property (see example above) it will be shown first in the list. -A set of embedded servers with names beginning `default~` will appear at the end of the quickpick unless you add the property `"/hideEmbeddedEntries": true` to your `intersystems.server` object (see above). +A set of embedded servers with names beginning `default~` will appear at the end of the lists unless you add the property `"/hideEmbeddedEntries": true` to your `intersystems.server` object to hide them (see above). + +## Removing a Stored Password + +Use the server's context menu. Alternatively, run `InterSystems Server Manager: Clear Password from Keychain` from Command Palette. + +--- + +## Technical Notes + +### Colors, Favorites and Recents + +These features use VS Code's extension-private global state storage. Data is not present in your `settings.json` file. + +### The 'All Servers' Folder -## Removing a stored password +The `All Servers` tree respects the optional `/default` and `/hideEmbeddedEntries` settings in the `intersystems.servers` JSON. -The command `InterSystems Server Manager: Clear Password from Keychain` removes a stored password. +If a server has been named in `/default` it is promoted to the top of the list, which is otherwise presented in alphabetical order. -**Usage:** +Embedded entries (built-in default ones) are demoted to the end of the list, or omitted completely if `/hideEmbeddedEntries` is true. -1. Bring up the [Command Palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette) by typing Ctrl+Shift+P (Cmd+Shift+P on Mac) or F1. -2. Start typing "Server Manager" to locate the `InterSystems Server Manager: Clear Password from Keychain` command. -3. Pick a server. +--- -## For VS Code Extension Developers: Use By Other Extensions +## Information for VS Code Extension Developers - How To Leverage Server Manager -An extension XYZ needing to connect to InterSystems servers can define this extension as a dependency in its `package.json` +An extension XYZ needing to connect to InterSystems servers can define Server Manager as a dependency in its `package.json` like this: ```json "extensionDependencies": [ @@ -74,7 +138,7 @@ An extension XYZ needing to connect to InterSystems servers can define this exte ], ``` -Alternatively the `activate` method of XYZ can detect if the extension is already available, then offer to install it if necessary: +Alternatively the `activate` method of XYZ can detect whether the extension is already available, then offer to install it if necessary: ```ts const extId = "intersystems-community.servermanager"; diff --git a/images/README/editSettings.png b/images/README/editSettings.png new file mode 100644 index 0000000000000000000000000000000000000000..79cff415516e679c88359d55634b4a755fe577a4 GIT binary patch literal 35733 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 literal 0 HcmV?d00001 diff --git a/images/README/portalWebApps.png b/images/README/portalWebApps.png new file mode 100644 index 0000000000000000000000000000000000000000..153af917318fe78aca844668388ba4089de8beb4 GIT binary patch literal 34498 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 a#4qqY#lcfOY3$jje5|acRHR_`?tcJ=NBQ&s literal 0 HcmV?d00001 diff --git a/images/README/tree.png b/images/README/tree.png new file mode 100644 index 0000000000000000000000000000000000000000..49255ebcc16ef23efd10f0d34787fcff10f281d1 GIT binary patch literal 19073 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 => { if (name) { - const host = await vscode.window.showInputBox({ - placeHolder: "Hostname or IP address of web server", - validateInput: (value) => { - return value.trim().length ? undefined : "Required"; - }, + const description = await vscode.window.showInputBox({ + placeHolder: "Optional description", ignoreFocusOut: true }); - if (host) { - spec.webServer.host = host.trim(); - const portString = await vscode.window.showInputBox({ - placeHolder: "Port of web server", + if (typeof description !== 'undefined') { + if (description) { + spec.description = description.trim(); + } + const host = await vscode.window.showInputBox({ + placeHolder: "Hostname or IP address of web server", validateInput: (value) => { - const port = +value; - return value.match(/\d+/) && - port.toString() === value && - port > 0 && - port < 65536 - ? undefined - : "Required, 1-65535"; + return value.trim().length ? undefined : "Required"; }, ignoreFocusOut: true }); - if (portString) { - spec.webServer.port = +portString; - const username = await vscode.window.showInputBox({ - placeHolder: - "Username", - prompt: - "Leave empty to be prompted when connecting.", + if (host) { + spec.webServer.host = host.trim(); + const portString = await vscode.window.showInputBox({ + placeHolder: "Port of web server", + validateInput: (value) => { + const port = +value; + return value.match(/\d+/) && + port.toString() === value && + port > 0 && + port < 65536 + ? undefined + : "Required, 1-65535"; + }, ignoreFocusOut: true - }); - if (typeof username !== 'undefined') { - const usernameTrimmed = username.trim(); - if (usernameTrimmed !== "") { - spec.username = usernameTrimmed; - } - const scheme = await vscode.window.showQuickPick( - ["http", "https"], - { - placeHolder: - "Confirm connection type, then the definition will be stored in your User Settings. 'Escape' to cancel.", - ignoreFocusOut: true + }); + if (portString) { + spec.webServer.port = +portString; + const username = await vscode.window.showInputBox({ + placeHolder: + "Username", + prompt: + "Leave empty to be prompted when connecting.", + ignoreFocusOut: true + }); + if (typeof username !== 'undefined') { + const usernameTrimmed = username.trim(); + if (usernameTrimmed !== "") { + spec.username = usernameTrimmed; + } + const scheme = await vscode.window.showQuickPick( + ["http", "https"], + { + placeHolder: + "Confirm connection type, then the definition will be stored in your User Settings. 'Escape' to cancel.", + ignoreFocusOut: true + } + ); + if (scheme) { + spec.webServer.scheme = scheme; + try { + const config = vscode.workspace.getConfiguration( + "intersystems", + scope + ); + // For simplicity we always add to the user-level (aka Global) settings + const servers: any = + config.inspect("servers")?.globalValue || {}; + servers[name] = spec; + await config.update("servers", servers, true); + vscode.window.showInformationMessage(`Server '${name}' stored in user-level settings.`); + return name; + } catch (error) { + vscode.window.showErrorMessage( + "Failed to store server '${name}' definition." + ); + return undefined; } - ); - if (scheme) { - spec.webServer.scheme = scheme; - try { - const config = vscode.workspace.getConfiguration( - "intersystems", - scope - ); - // For simplicity we always add to the user-level (aka Global) settings - const servers: any = - config.inspect("servers")?.globalValue || {}; - servers[name] = spec; - await config.update("servers", servers, true); - vscode.window.showInformationMessage(`Server '${name}' stored in user-level settings.`); - return name; - } catch (error) { - vscode.window.showErrorMessage( - "Failed to store server '${name}' definition." - ); - return undefined; } } } diff --git a/src/ui/serverManagerView.ts b/src/ui/serverManagerView.ts index 45e8ca3..943e2e5 100644 --- a/src/ui/serverManagerView.ts +++ b/src/ui/serverManagerView.ts @@ -128,26 +128,26 @@ class SMNodeProvider implements vscode.TreeDataProvider { let firstRevealId = favoritesMap.size > 0 ? 'starred' : recentsArray.length > 0 ? 'recent' : 'sorted'; if (vscode.workspace.workspaceFolders?.length || 0 > 0) { - children.push(new SMTreeItem({parent: element, label: 'Current', id: 'current', tooltip: 'Servers referenced by current workspace', codiconName: 'home', getChildren: currentServers})); + children.push(new SMTreeItem({parent: element, label: 'Current', id: 'current', contextValue: 'current', tooltip: 'Servers referenced by current workspace', codiconName: 'home', getChildren: currentServers})); firstRevealId = 'current'; this._firstRevealItem = children[children.length - 1]; } if (favoritesMap.size > 0) { - children.push(new SMTreeItem({parent: element, label: 'Starred', id: 'starred', tooltip: 'Favorite servers', codiconName: 'star-full', getChildren: favoriteServers})); + children.push(new SMTreeItem({parent: element, label: 'Favorites', id: 'starred', contextValue: 'starred', tooltip: 'Favorite servers', codiconName: 'star-full', getChildren: favoriteServers})); if (firstRevealId === 'starred') { this._firstRevealItem = children[children.length - 1]; } } - children.push(new SMTreeItem({parent: element, label: 'Recent', id: 'recent', tooltip: 'Recently used servers', codiconName: 'history', getChildren: recentServers})); + children.push(new SMTreeItem({parent: element, label: 'Recent', id: 'recent', contextValue: 'recent', tooltip: 'Recently used servers', codiconName: 'history', getChildren: recentServers})); if (firstRevealId === 'recent') { this._firstRevealItem = children[children.length - 1]; } // TODO - use this when we can implement resequencing in the UI - // children.push(new SMTreeItem({parent: element, label: 'Ordered', id: 'ordered', tooltip: 'All servers in settings.json order', codiconName: 'list-ordered', getChildren: allServers, params: {sorted: false}})); + // children.push(new SMTreeItem({parent: element, label: 'Ordered', id: 'ordered', contextValue: 'ordered', tooltip: 'All servers in settings.json order', codiconName: 'list-ordered', getChildren: allServers, params: {sorted: false}})); - children.push(new SMTreeItem({parent: element, label: 'All Servers', id: 'sorted', tooltip: 'All servers in alphabetical order', codiconName: 'server-environment', getChildren: allServers, params: {sorted: true}})); + children.push(new SMTreeItem({parent: element, label: 'All Servers', id: 'sorted', contextValue: 'sorted', tooltip: 'All servers in alphabetical order', codiconName: 'server-environment', getChildren: allServers, params: {sorted: true}})); if (firstRevealId === 'sorted') { this._firstRevealItem = children[children.length - 1]; } @@ -286,20 +286,30 @@ export class ServerTreeItem extends SMTreeItem { serverSummary: ServerName ) { const parentFolderId = element.parent?.id || ""; + // Convert linebreaks etc, escape Markdown characters, truncate + const escapedDescription = serverSummary.description + .replace(/[\n\t]/g, ' ') + .replace(/[\r\f\b]/g, '') + .replace(/[\\`*_{}[\]()#+\-.!]/g, '\\$&') + .substr(0,90) + .trim(); // Wrap detail (a uri string) as a null link to prevent it from being linkified + const wrappedDetail = `[${serverSummary.detail}]()`; super({ parent: element.parent, label: serverSummary.name, id: parentFolderId + ':' + serverSummary.name, - tooltip: new vscode.MarkdownString(`[${serverSummary.detail}]()`).appendMarkdown(serverSummary.description ? `\n\n*${serverSummary.description}*` : ''), + tooltip: new vscode.MarkdownString(wrappedDetail).appendMarkdown(escapedDescription ? `\n\n*${escapedDescription}*` : ''), getChildren: serverFeatures, params: { serverSummary } }); this.name = serverSummary.name; - //this.command = {command: 'intersystems-community.servermanager.openPortalTab', title: 'Open Management Portal in Simple Browser Tab', arguments: [this]}; this.contextValue = `${parentFolderId}.server.${favoritesMap.has(this.name) ? 'starred' : ''}`; const color = colorsMap.get(this.name); this.iconPath = new vscode.ThemeIcon('server-environment', color ? new vscode.ThemeColor('charts.' + color) : undefined); + + // TODO If single click on server item should open Portal tab + // this.command = {command: 'intersystems-community.servermanager.openPortalTab', title: 'Open Management Portal in Simple Browser Tab', arguments: [this]}; } }