From fb2cfb13af5e8f9012a084f1ffa574ee67dd3568 Mon Sep 17 00:00:00 2001 From: Susmitha Girumala Date: Tue, 9 Feb 2021 22:46:45 -0500 Subject: [PATCH 1/9] feat: Show info messages when resources are empty --- addons/core/translations/resources/en-us.yaml | 3 + .../scopes/scope/projects/targets/index.hbs | 138 ++++++++++-------- .../scope/projects/targets/target/hosts.hbs | 74 ++++++---- .../projects/targets/target/sessions.hbs | 94 +++++++----- 4 files changed, 177 insertions(+), 132 deletions(-) diff --git a/addons/core/translations/resources/en-us.yaml b/addons/core/translations/resources/en-us.yaml index ff2dce9eb..55b547d0b 100644 --- a/addons/core/translations/resources/en-us.yaml +++ b/addons/core/translations/resources/en-us.yaml @@ -195,6 +195,9 @@ target: messages: welcome: title: Welcome to Targets + none: + title: No Targets Available + description: No Targets to display yet. Contact your Boundary admin if you don't see a Target you expect access to. actions: create: New Target delete: Delete Target diff --git a/ui/desktop/app/templates/scopes/scope/projects/targets/index.hbs b/ui/desktop/app/templates/scopes/scope/projects/targets/index.hbs index b816ced05..bbb3e7b5d 100644 --- a/ui/desktop/app/templates/scopes/scope/projects/targets/index.hbs +++ b/ui/desktop/app/templates/scopes/scope/projects/targets/index.hbs @@ -7,73 +7,87 @@ - - - - {{t "form.name.label"}} - {{t "form.id.label"}} - {{t "form.type.label"}} - {{t "resources.project.title"}} - - - - - {{#each @model as |model|}} - - - - - {{model.target.displayName}} - -

{{model.target.description}}

-
- - - {{model.target.id}} - - - - {{#if model.target.type}} - - {{t (concat "resources.target.types." model.target.type)}} - - {{/if}} - - -
+ {{#if @model}} + + + + + {{t "form.name.label"}} + {{t "form.id.label"}} + {{t "form.type.label"}} + {{t "resources.project.title"}} + + + + + {{#each @model as |model|}} + + + + + {{model.target.displayName}} + +

{{model.target.description}}

+
+ - {{model.project.id}} + {{model.target.id}} -
- - {{model.project.name}} - -
- - - {{t "resources.session.actions.connect"}} - - -
- {{/each}} -
-
+ + + {{#if model.target.type}} + + {{t (concat "resources.target.types." model.target.type)}} + + {{/if}} + + +
+ + {{model.project.id}} + +
+ + {{model.project.name}} + +
+ + + {{t "resources.session.actions.connect"}} + + + + {{/each}} + + + + {{else}} + + + + + {{t "resources.target.messages.none.description"}} + + + + + {{/if}}
diff --git a/ui/desktop/app/templates/scopes/scope/projects/targets/target/hosts.hbs b/ui/desktop/app/templates/scopes/scope/projects/targets/target/hosts.hbs index bb76d5e56..e2cf73f39 100644 --- a/ui/desktop/app/templates/scopes/scope/projects/targets/target/hosts.hbs +++ b/ui/desktop/app/templates/scopes/scope/projects/targets/target/hosts.hbs @@ -1,32 +1,46 @@ {{page-title (t "resources.host-set.title_plural")}} - - - {{#each @model.hosts as |host|}} - - - {{host.displayName}} -

{{host.description}}

-
- - - {{host.id}} - - - {{host.attributes.address}} - - {{t (concat 'resources.host.types.' host.type)}} - - - - {{t "resources.session.actions.connect"}} - - -
- {{/each}} -
-
+{{#if @model.hosts}} + + + + {{#each @model.hosts as |host|}} + + + {{host.displayName}} +

{{host.description}}

+
+ + + {{host.id}} + + + {{host.attributes.address}} + + {{t (concat 'resources.host.types.' host.type)}} + + + + {{t "resources.session.actions.connect"}} + + +
+ {{/each}} +
+
+ +{{else}} + + + + + {{t "resources.host.messages.none.description"}} + + + + +{{/if}} diff --git a/ui/desktop/app/templates/scopes/scope/projects/targets/target/sessions.hbs b/ui/desktop/app/templates/scopes/scope/projects/targets/target/sessions.hbs index 48f10efda..d9edc3900 100644 --- a/ui/desktop/app/templates/scopes/scope/projects/targets/target/sessions.hbs +++ b/ui/desktop/app/templates/scopes/scope/projects/targets/target/sessions.hbs @@ -1,40 +1,54 @@ - - - {{!-- - TODO: sort these via the controller so that active and pending appear first - similar to the way the sessions routes are sorted. - --}} - {{#each @model.target.sessions as |session|}} - - - - - {{session.id}} - - - - - - - {{session.status}} - - - {{#if session.isCancelable}} - - {{t "actions.cancel"}} - - {{/if}} - - - {{/each}} - - +{{#if @model.target.sessions}} + + + + {{!-- + TODO: sort these via the controller so that active and pending appear first + similar to the way the sessions routes are sorted. + --}} + {{#each @model.target.sessions as |session|}} + + + + + {{session.id}} + + + + + + + {{session.status}} + + + {{#if session.isCancelable}} + + {{t "actions.cancel"}} + + {{/if}} + + + {{/each}} + + + +{{else}} + + + + + {{t "resources.session.messages.none.description"}} + + + + +{{/if}} \ No newline at end of file From 40cb386cfd3cf82e0403fdca9d9d8b389047e556 Mon Sep 17 00:00:00 2001 From: Susmitha Girumala Date: Wed, 10 Feb 2021 21:49:33 -0500 Subject: [PATCH 2/9] chore: Add friendly tag to desktop info messages Adding a friendly tag to translation file properties helps maintain the current structure while adding non-administrative language to info messages. --- addons/core/translations/resources/en-us.yaml | 9 +++++++++ .../templates/scopes/scope/projects/sessions/index.hbs | 4 ++-- .../scopes/scope/projects/targets/target/hosts.hbs | 4 ++-- .../scopes/scope/projects/targets/target/sessions.hbs | 4 ++-- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/addons/core/translations/resources/en-us.yaml b/addons/core/translations/resources/en-us.yaml index 55b547d0b..e670a70d7 100644 --- a/addons/core/translations/resources/en-us.yaml +++ b/addons/core/translations/resources/en-us.yaml @@ -95,6 +95,9 @@ host: none: title: No Hosts description: No hosts available in this scope. + none-friendly: + title: No Hosts Available + description: No hosts available to display yet. actions: add: Add Host create: New Host @@ -110,6 +113,12 @@ session: none: title: No Sessions description: There are no active sessions within the current scope. + none-friendly: + title: No Sessions Available + description: No sessions available to display yet. + none-active-friendly: + title: No Active Sessions Available + description: No active sessions available to display yet. actions: connect: Connect org: diff --git a/ui/desktop/app/templates/scopes/scope/projects/sessions/index.hbs b/ui/desktop/app/templates/scopes/scope/projects/sessions/index.hbs index 35c53bb63..4c124cc24 100644 --- a/ui/desktop/app/templates/scopes/scope/projects/sessions/index.hbs +++ b/ui/desktop/app/templates/scopes/scope/projects/sessions/index.hbs @@ -83,9 +83,9 @@ {{else}} - + - {{t "resources.session.messages.none.description"}} + {{t "resources.session.messages.none-friendly.description"}} diff --git a/ui/desktop/app/templates/scopes/scope/projects/targets/target/hosts.hbs b/ui/desktop/app/templates/scopes/scope/projects/targets/target/hosts.hbs index e2cf73f39..92ae3eebe 100644 --- a/ui/desktop/app/templates/scopes/scope/projects/targets/target/hosts.hbs +++ b/ui/desktop/app/templates/scopes/scope/projects/targets/target/hosts.hbs @@ -36,9 +36,9 @@ {{else}} - + - {{t "resources.host.messages.none.description"}} + {{t "resources.host.messages.none-friendly.description"}} diff --git a/ui/desktop/app/templates/scopes/scope/projects/targets/target/sessions.hbs b/ui/desktop/app/templates/scopes/scope/projects/targets/target/sessions.hbs index d9edc3900..0c8095880 100644 --- a/ui/desktop/app/templates/scopes/scope/projects/targets/target/sessions.hbs +++ b/ui/desktop/app/templates/scopes/scope/projects/targets/target/sessions.hbs @@ -44,9 +44,9 @@ {{else}} - + - {{t "resources.session.messages.none.description"}} + {{t "resources.session.messages.none-active-friendly.description"}} From 87c91d5d62092cee420e77fbc27f03d90c217e20 Mon Sep 17 00:00:00 2001 From: Randall Morey Date: Thu, 11 Feb 2021 15:48:46 -0500 Subject: [PATCH 3/9] =?UTF-8?q?fix:=20=F0=9F=90=9B=20target=20sessions=20s?= =?UTF-8?q?hould=20update=20on=20poll?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scopes/scope/projects/sessions/index.js | 2 -- .../scope/projects/targets/target/sessions.js | 22 ++++++++++--------- .../scope/projects/targets/target/sessions.js | 10 +-------- .../projects/targets/target/sessions.hbs | 3 ++- 4 files changed, 15 insertions(+), 22 deletions(-) diff --git a/ui/desktop/app/controllers/scopes/scope/projects/sessions/index.js b/ui/desktop/app/controllers/scopes/scope/projects/sessions/index.js index babe28f5f..0cfb61dbf 100644 --- a/ui/desktop/app/controllers/scopes/scope/projects/sessions/index.js +++ b/ui/desktop/app/controllers/scopes/scope/projects/sessions/index.js @@ -1,5 +1,4 @@ import Controller from '@ember/controller'; -import { computed } from '@ember/object'; import { inject as service } from '@ember/service'; export default class ScopesScopeProjectsSessionsIndexController extends Controller { @@ -15,7 +14,6 @@ export default class ScopesScopeProjectsSessionsIndexController extends Controll * and active/pending. * @type {SessionModel[]} */ - @computed('model.@each.{created_time,active}', 'session.data.authenticated.user_id') get sorted() { const userId = this.session.data.authenticated.user_id; const sessions = this.model; diff --git a/ui/desktop/app/controllers/scopes/scope/projects/targets/target/sessions.js b/ui/desktop/app/controllers/scopes/scope/projects/targets/target/sessions.js index dfab20739..9b10b7e0d 100644 --- a/ui/desktop/app/controllers/scopes/scope/projects/targets/target/sessions.js +++ b/ui/desktop/app/controllers/scopes/scope/projects/targets/target/sessions.js @@ -1,5 +1,4 @@ import Controller from '@ember/controller'; -import { computed } from '@ember/object'; import { inject as service } from '@ember/service'; import { A } from '@ember/array'; @@ -9,14 +8,21 @@ export default class ScopesScopeProjectsTargetsTargetSessionsController extends @service session; /** - * Sort and filter to active sessions of current user + * Sessions belonging to the target. + * @type {SessionModel[]} + */ + get sessions() { + return this.model.sessions; + } + + /** + * Sort and filter to active sessions of current user. * @param {[SessionModel]} model * @param {object} session * @type {[SessionModel]} */ - @computed('model.@each.{created_time,active}', 'session.data.authenticated.user_id') - get selfActiveSessions() { - const sessions = this.model; + get cancelableUserSessions() { + const sessions = this.sessions; const userId = this.session.data.authenticated.user_id; const filteredSessions = sessions.filter(session => @@ -27,10 +33,6 @@ export default class ScopesScopeProjectsTargetsTargetSessionsController extends // Sort sessions const sortedSessions = A(filteredSessions).sortBy('created_time').reverse(); - // Move active sessions to top - return [ - ...sortedSessions.filter(session => session.isActive), - ...sortedSessions.filter(session => !session.isActive) - ] + return sortedSessions; } } diff --git a/ui/desktop/app/routes/scopes/scope/projects/targets/target/sessions.js b/ui/desktop/app/routes/scopes/scope/projects/targets/target/sessions.js index 203b74d62..9306118c7 100644 --- a/ui/desktop/app/routes/scopes/scope/projects/targets/target/sessions.js +++ b/ui/desktop/app/routes/scopes/scope/projects/targets/target/sessions.js @@ -4,15 +4,6 @@ import { notifySuccess, notifyError } from 'core/decorators/notify'; export default class ScopesScopeProjectsTargetsTargetSessionsRoute extends Route { - // =methods - - /** - * @return {[SessionModel]} - */ - model() { - return this.modelFor('scopes.scope.projects.targets.target').sessions; - } - // =actions /** @@ -25,4 +16,5 @@ export default class ScopesScopeProjectsTargetsTargetSessionsRoute extends Route async cancelSession(session) { await session.cancelSession(); } + } diff --git a/ui/desktop/app/templates/scopes/scope/projects/targets/target/sessions.hbs b/ui/desktop/app/templates/scopes/scope/projects/targets/target/sessions.hbs index 008e5dfb0..e99a67ec1 100644 --- a/ui/desktop/app/templates/scopes/scope/projects/targets/target/sessions.hbs +++ b/ui/desktop/app/templates/scopes/scope/projects/targets/target/sessions.hbs @@ -1,6 +1,7 @@ - {{#each this.selfActiveSessions as |session|}} + {{this.sessions.length}} / {{this.cancelableUserSessions.length}} + {{#each this.cancelableUserSessions as |session|}} Date: Thu, 11 Feb 2021 19:01:45 -0500 Subject: [PATCH 4/9] =?UTF-8?q?feat:=20=F0=9F=8E=B8=20add=20disconnect=20b?= =?UTF-8?q?utton=20to=20error=20page?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tests/integration/components/error/message-test.js | 2 +- addons/core/translations/actions/en-us.yaml | 1 + addons/core/translations/errors/en-us.yaml | 2 +- ui/desktop/app/routes/application.js | 10 ++++++++++ ui/desktop/app/services/origin.js | 10 ++++++++++ ui/desktop/app/templates/error.hbs | 8 ++++++++ ui/desktop/electron-app/src/handlers.js | 7 +++++++ ui/desktop/electron-app/src/origin.js | 9 ++++++++- 8 files changed, 46 insertions(+), 3 deletions(-) diff --git a/addons/core/tests/integration/components/error/message-test.js b/addons/core/tests/integration/components/error/message-test.js index f7e92a534..47651bd89 100644 --- a/addons/core/tests/integration/components/error/message-test.js +++ b/addons/core/tests/integration/components/error/message-test.js @@ -60,7 +60,7 @@ module('Integration | Component | error/message', function (hooks) { ); assert.equal( find('.rose-message-description').textContent.trim(), - 'Please contact your administrator or try again later.' + 'We\'re not sure what happened. Please contact your administrator or try again later.' ); }); }); diff --git a/addons/core/translations/actions/en-us.yaml b/addons/core/translations/actions/en-us.yaml index 89165233a..1c4c2483a 100644 --- a/addons/core/translations/actions/en-us.yaml +++ b/addons/core/translations/actions/en-us.yaml @@ -3,6 +3,7 @@ cancel: Cancel delete: Delete remove: Remove discard: Discard +disconnect: Disconnect dismiss: Dismiss save: Save submit: Submit diff --git a/addons/core/translations/errors/en-us.yaml b/addons/core/translations/errors/en-us.yaml index c814611d0..0f05b94a7 100644 --- a/addons/core/translations/errors/en-us.yaml +++ b/addons/core/translations/errors/en-us.yaml @@ -12,7 +12,7 @@ description: We ran into a problem and could not continue. You can ask your administrator or try again later. unknown: title: Something went wrong - description: Please contact your administrator or try again later. + description: We're not sure what happened. Please contact your administrator or try again later. generic: title: Error authentication-failed: diff --git a/ui/desktop/app/routes/application.js b/ui/desktop/app/routes/application.js index 45c73b24a..f32dbf9bc 100644 --- a/ui/desktop/app/routes/application.js +++ b/ui/desktop/app/routes/application.js @@ -71,6 +71,16 @@ export default class ApplicationRoute extends Route.extend( this.session.invalidate(); } + /** + * Disconnects from origin and invalidates session, thereby resetting + * the client and reloading to the onboarding origin screen. + */ + @action + disconnect() { + this.origin.resetOrigin(); + this.invalidateSession(); + } + /** * Hooks into ember-loading to kick off loading indicator in the * application template. diff --git a/ui/desktop/app/services/origin.js b/ui/desktop/app/services/origin.js index ba280a1ae..e72a738f0 100644 --- a/ui/desktop/app/services/origin.js +++ b/ui/desktop/app/services/origin.js @@ -1,6 +1,7 @@ import Service from '@ember/service'; import { assert } from '@ember/debug'; import { inject as service } from '@ember/service'; +import { notifyError } from 'core/decorators/notify'; export default class OriginService extends Service { @@ -72,4 +73,13 @@ export default class OriginService extends Service { } } + /** + * Resets the origin. + */ + @notifyError(({ message }) => message, { catch: true }) + async resetOrigin() { + this.rendererOrigin = null; + await this.ipc.invoke('resetOrigin'); + } + } diff --git a/ui/desktop/app/templates/error.hbs b/ui/desktop/app/templates/error.hbs index c93470673..f5fcb9fbf 100644 --- a/ui/desktop/app/templates/error.hbs +++ b/ui/desktop/app/templates/error.hbs @@ -1,7 +1,15 @@ {{page-title (t "errors.generic.title") }}
+ + + + + {{t "actions.disconnect"}} + + +
diff --git a/ui/desktop/electron-app/src/handlers.js b/ui/desktop/electron-app/src/handlers.js index f4b9a62b4..948e82c51 100644 --- a/ui/desktop/electron-app/src/handlers.js +++ b/ui/desktop/electron-app/src/handlers.js @@ -17,6 +17,13 @@ handle('setOrigin', async (requestOrigin) => { origin.origin = requestOrigin; }); +/** + * Resets the origin. + */ +handle('resetOrigin', async (requestOrigin) => { + origin.resetOrigin(); +}); + /** * Check for boundary cli existence */ diff --git a/ui/desktop/electron-app/src/origin.js b/ui/desktop/electron-app/src/origin.js index f4461e8f0..7d85e4466 100644 --- a/ui/desktop/electron-app/src/origin.js +++ b/ui/desktop/electron-app/src/origin.js @@ -24,7 +24,7 @@ class RuntimeSettings { } /** - * + * Validates the origin is reachable and has a scopes endpoint. */ async validateOrigin(origin) { // If the origin is the Electron origin, it is automatically valid. @@ -40,6 +40,13 @@ class RuntimeSettings { } } + /** + * Sets the origin to null. + */ + async resetOrigin() { + this.origin = null; + } + // Quick and dirty event handler pattern to enable the application to respond // when the origin is changed. #originWatchers = []; From 3590d58ecb5596cd89837f66cd53bbf75d29b51c Mon Sep 17 00:00:00 2001 From: Susmitha Girumala Date: Thu, 11 Feb 2021 21:42:05 -0500 Subject: [PATCH 5/9] chore: Capture unauthorized model errors with error template --- ui/desktop/app/templates/scopes/scope/projects/error.hbs | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 ui/desktop/app/templates/scopes/scope/projects/error.hbs diff --git a/ui/desktop/app/templates/scopes/scope/projects/error.hbs b/ui/desktop/app/templates/scopes/scope/projects/error.hbs new file mode 100644 index 000000000..4b50d06f4 --- /dev/null +++ b/ui/desktop/app/templates/scopes/scope/projects/error.hbs @@ -0,0 +1,7 @@ +{{page-title (t "errors.generic.title") }} + + + {{#each @model.errors as |error|}} + + {{/each}} + From b96ce2327e7c49fea6e45dcb1d4364a370ed14ed Mon Sep 17 00:00:00 2001 From: Susmitha Girumala Date: Thu, 11 Feb 2021 23:26:15 -0500 Subject: [PATCH 6/9] chore: Hide devtools in production menu --- ui/desktop/electron-app/src/index.js | 10 +++- ui/desktop/electron-app/src/menu.js | 89 ++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 ui/desktop/electron-app/src/menu.js diff --git a/ui/desktop/electron-app/src/index.js b/ui/desktop/electron-app/src/index.js index d811bcf9e..5b95e658f 100644 --- a/ui/desktop/electron-app/src/index.js +++ b/ui/desktop/electron-app/src/index.js @@ -4,12 +4,14 @@ const { default: installExtension, EMBER_INSPECTOR, } = require('electron-devtools-installer'); -const { session, app, protocol, BrowserWindow, ipcMain } = require('electron'); +const { session, app, protocol, BrowserWindow, ipcMain, Menu } = require('electron'); require('./handlers.js'); const origin = require('./origin.js'); const { generateCSPHeader } = require('./content-security-policy.js'); +const menu = require('./menu.js'); + const isDev = require('electron-is-dev'); // Register the custom file protocol @@ -88,6 +90,12 @@ app.on('ready', async () => { } } + // Configure menu in prod env + if(!isDev) { + const menuTemplate = Menu.buildFromTemplate(menu.generateMenuTemplate()); + Menu.setApplicationMenu(menuTemplate); + } + mainWindow = new BrowserWindow({ width: 1024, height: 768, diff --git a/ui/desktop/electron-app/src/menu.js b/ui/desktop/electron-app/src/menu.js new file mode 100644 index 000000000..8e37595bc --- /dev/null +++ b/ui/desktop/electron-app/src/menu.js @@ -0,0 +1,89 @@ +const { shell } = require('electron') + +const generateMenuTemplate = () => { + return [ + // { role: 'appMenu' } + { + label: 'Boundary Desktop', + submenu: [ + { role: 'about' }, + { type: 'separator' }, + { role: 'services' }, + { type: 'separator' }, + { role: 'hide' }, + { role: 'hideothers' }, + { role: 'unhide' }, + { type: 'separator' }, + { role: 'quit' } + ] + }, + // { role: 'fileMenu' } + { + label: 'File', + submenu: [ + { role: 'close' } + ] + }, + // { role: 'editMenu' } + { + label: 'Edit', + submenu: [ + { role: 'undo' }, + { role: 'redo' }, + { type: 'separator' }, + { role: 'cut' }, + { role: 'copy' }, + { role: 'paste' }, + { role: 'pasteAndMatchStyle' }, + { role: 'delete' }, + { role: 'selectAll' }, + { type: 'separator' }, + { + label: 'Speech', + submenu: [ + { role: 'startSpeaking' }, + { role: 'stopSpeaking' } + ] + } + ] + }, + // { role: 'viewMenu' } + { + label: 'View', + submenu: [ + { role: 'reload' }, + { type: 'separator' }, + { role: 'resetZoom' }, + { role: 'zoomIn' }, + { role: 'zoomOut' }, + { type: 'separator' }, + { role: 'togglefullscreen' } + ] + }, + // { role: 'windowMenu' } + { + label: 'Window', + submenu: [ + { role: 'minimize' }, + { role: 'zoom' }, + { type: 'separator' }, + { role: 'front' }, + { type: 'separator' }, + { role: 'window' } + ] + }, + { + role: 'help', + submenu: [ + { + label: 'Documentation', + click: () => shell.openExternal('https://www.boundaryproject.io') + } + ] + } + ] +} + +module.exports = { + generateMenuTemplate: generateMenuTemplate +}; \ No newline at end of file From cb04f93a8333d5e8b77f11bc5c4b0b5ebb0263de Mon Sep 17 00:00:00 2001 From: Susmitha Girumala Date: Fri, 12 Feb 2021 09:34:42 -0500 Subject: [PATCH 7/9] style: Fix tab spacing in sessions template --- .../projects/targets/target/sessions.hbs | 41 ++++++++++--------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/ui/desktop/app/templates/scopes/scope/projects/targets/target/sessions.hbs b/ui/desktop/app/templates/scopes/scope/projects/targets/target/sessions.hbs index 8806a81af..fa93594e3 100644 --- a/ui/desktop/app/templates/scopes/scope/projects/targets/target/sessions.hbs +++ b/ui/desktop/app/templates/scopes/scope/projects/targets/target/sessions.hbs @@ -17,26 +17,27 @@
- {{!-- - Two if's here because: - 1) Local proxy info is only relevant if the session is - active or pending (aka isCancelable). Once the session - is canceled or in the process thereof, the local proxy - may no longer be used. - 2) The session actually has proxy information associated - with it. It's possible for the user to start sessions - from other devices (or even another tab), in which case we - won't have the local proxy info available here. - --}} - {{#if session.isCancelable}} - {{#if session.proxy}} - - {{session.proxy}} - + {{!-- + Two if's here because: + 1) Local proxy info is only relevant if the session is + active or pending (aka isCancelable). Once the session + is canceled or in the process thereof, the local proxy + may no longer be used. + 2) The session actually has proxy information associated + with it. It's possible for the user to start sessions + from other devices (or even another tab), in which case we + won't have the local proxy info available here. + --}} + {{#if session.isCancelable}} + {{#if session.proxy}} + + {{session.proxy}} + + {{/if}} {{/if}}
From 80fb07d960444f0436fc8a4d56177b3c2329b69f Mon Sep 17 00:00:00 2001 From: Randall Morey Date: Fri, 12 Feb 2021 09:57:43 -0500 Subject: [PATCH 8/9] =?UTF-8?q?chore:=20=F0=9F=A4=96=20add=20network=20err?= =?UTF-8?q?or=20and=20disconnect=20support?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../templates/scopes/scope/projects/error.hbs | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/ui/desktop/app/templates/scopes/scope/projects/error.hbs b/ui/desktop/app/templates/scopes/scope/projects/error.hbs index 4b50d06f4..57529c9f8 100644 --- a/ui/desktop/app/templates/scopes/scope/projects/error.hbs +++ b/ui/desktop/app/templates/scopes/scope/projects/error.hbs @@ -1,7 +1,23 @@ {{page-title (t "errors.generic.title") }} - - {{#each @model.errors as |error|}} - - {{/each}} - +{{! Most error types will land here }} +{{#if @model.errors}} + + {{#each @model.errors as |error|}} + + {{/each}} + +{{/if}} + +{{! But a disconnected state doesn't get normalized errors }} +{{#unless @model.errors}} + + + + + + + {{t "actions.disconnect"}} + + +{{/unless}} From e78138189f7dcea3b0689d61e7441c7364f809c4 Mon Sep 17 00:00:00 2001 From: Randall Morey Date: Fri, 12 Feb 2021 10:48:37 -0500 Subject: [PATCH 9/9] chore: remove debug output --- .../templates/scopes/scope/projects/targets/target/sessions.hbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/desktop/app/templates/scopes/scope/projects/targets/target/sessions.hbs b/ui/desktop/app/templates/scopes/scope/projects/targets/target/sessions.hbs index e99a67ec1..3dfa9e4e4 100644 --- a/ui/desktop/app/templates/scopes/scope/projects/targets/target/sessions.hbs +++ b/ui/desktop/app/templates/scopes/scope/projects/targets/target/sessions.hbs @@ -1,6 +1,6 @@ - {{this.sessions.length}} / {{this.cancelableUserSessions.length}} + {{#each this.cancelableUserSessions as |session|}}