From f5b80f93d2163eca5eda182630487c9f72eb0754 Mon Sep 17 00:00:00 2001 From: Carlos Alcaide Date: Fri, 23 Jul 2021 14:38:26 -0700 Subject: [PATCH 1/3] =?UTF-8?q?refactor:=20=F0=9F=92=A1=20Delete=20jQuery?= =?UTF-8?q?=20and=20refactor=20handler?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Delete jQuery from desktop client and refactor the handler using a native electron way. --- ui/desktop/app/routes/application.js | 13 ------------- ui/desktop/electron-app/src/index.js | 7 ++++++- ui/desktop/package.json | 1 - yarn.lock | 14 +------------- 4 files changed, 7 insertions(+), 28 deletions(-) diff --git a/ui/desktop/app/routes/application.js b/ui/desktop/app/routes/application.js index 66790a728..f2f8e11fe 100644 --- a/ui/desktop/app/routes/application.js +++ b/ui/desktop/app/routes/application.js @@ -1,5 +1,4 @@ import Route from '@ember/routing/route'; -import jQuery from 'jquery'; import { inject as service } from '@ember/service'; import { action } from '@ember/object'; import { A } from '@ember/array'; @@ -31,18 +30,6 @@ export default class ApplicationRoute extends Route { return this.origin.updateOrigin(); } - /** - * Adds listener on target=_blank links so that they may be opened in an - * external browser. - */ - afterModel() { - const ipc = this.ipc; - /* eslint-disable-next-line ember/no-jquery */ - jQuery(document).on('click', 'a[href][target="_blank"]', function () { - ipc.invoke('openExternal', this.href); - }); - } - /** * Add OS config on controller */ diff --git a/ui/desktop/electron-app/src/index.js b/ui/desktop/electron-app/src/index.js index 1c9c7f6e2..a08bfba96 100644 --- a/ui/desktop/electron-app/src/index.js +++ b/ui/desktop/electron-app/src/index.js @@ -12,6 +12,7 @@ const { BrowserWindow, Menu, MenuItem, + shell, } = require('electron'); require('./ipc/handlers.js'); @@ -166,9 +167,13 @@ app.on('ready', async () => { /* eng-disable LIMIT_NAVIGATION_JS_CHECK */ if (!url.startsWith('serve://boundary')) event.preventDefault(); }); + // Also opens links with target="_blank" in a browser window mainWindow.webContents.on('new-window', (event, url) => { /* eng-disable LIMIT_NAVIGATION_JS_CHECK */ - if (!url.startsWith('serve://boundary')) event.preventDefault(); + if (!url.startsWith('serve://boundary')) { + event.preventDefault(); + shell.openExternal(url); + } }); mainWindow.on('unresponsive', () => { diff --git a/ui/desktop/package.json b/ui/desktop/package.json index c22ee5143..607e577b1 100755 --- a/ui/desktop/package.json +++ b/ui/desktop/package.json @@ -49,7 +49,6 @@ }, "devDependencies": { "@doyensec/electronegativity": "^1.8.1", - "@ember/jquery": "^1.1.0", "@ember/optional-features": "^2.0.0", "@ember/render-modifiers": "^1.0.2", "@ember/test-helpers": "^2.2.8", diff --git a/yarn.lock b/yarn.lock index eeeb32795..99bc92f8e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1753,18 +1753,6 @@ resolved "https://registry.yarnpkg.com/@ember/edition-utils/-/edition-utils-1.2.0.tgz#a039f542dc14c8e8299c81cd5abba95e2459cfa6" integrity sha512-VmVq/8saCaPdesQmftPqbFtxJWrzxNGSQ+e8x8LLe3Hjm36pJ04Q8LeORGZkAeOhldoUX9seLGmSaHeXkIqoog== -"@ember/jquery@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@ember/jquery/-/jquery-1.1.0.tgz#33d062610a5ceaa5c5c8a3187f870d47d6595940" - integrity sha512-zePT3LiK4/2bS4xafrbOlwoLJrDFseOZ95OOuVDyswv8RjFL+9lar+uxX6+jxRb0w900BcQSWP/4nuFSK6HXXw== - dependencies: - broccoli-funnel "^2.0.2" - broccoli-merge-trees "^3.0.2" - ember-cli-babel "^7.11.1" - ember-cli-version-checker "^3.1.3" - jquery "^3.4.1" - resolve "^1.11.1" - "@ember/optional-features@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@ember/optional-features/-/optional-features-2.0.0.tgz#c809abd5a27d5b0ef3c6de3941334ab6153313f0" @@ -13497,7 +13485,7 @@ joi@^12.0.0: isemail "3.x.x" topo "2.x.x" -jquery@^3.4.1, jquery@^3.5.0: +jquery@^3.5.0: version "3.6.0" resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.6.0.tgz#c72a09f15c1bdce142f49dbf1170bdf8adac2470" integrity sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw== From a07cd9e1a13a0a28713afda0d203e9ea0e6957e8 Mon Sep 17 00:00:00 2001 From: Carlos Alcaide Date: Mon, 26 Jul 2021 13:09:08 -0700 Subject: [PATCH 2/3] =?UTF-8?q?refactor:=20=F0=9F=92=A1=20Allow=20external?= =?UTF-8?q?=20links=20just=20for=20specific=20domain?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Allow external links just for boundary.io domain. So far the only urls we want to open externally are our own documentation --- ui/desktop/electron-app/src/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ui/desktop/electron-app/src/index.js b/ui/desktop/electron-app/src/index.js index a08bfba96..8c303a7ee 100644 --- a/ui/desktop/electron-app/src/index.js +++ b/ui/desktop/electron-app/src/index.js @@ -167,10 +167,11 @@ app.on('ready', async () => { /* eng-disable LIMIT_NAVIGATION_JS_CHECK */ if (!url.startsWith('serve://boundary')) event.preventDefault(); }); - // Also opens links with target="_blank" in a browser window + // Opens external links in the host default browser. + // We just allow boundaryproject.io domain to open on external window (for now). mainWindow.webContents.on('new-window', (event, url) => { /* eng-disable LIMIT_NAVIGATION_JS_CHECK */ - if (!url.startsWith('serve://boundary')) { + if (url.startsWith('https://boundaryproject.io/')) { event.preventDefault(); shell.openExternal(url); } From 264f81a6f3df95c771eb9b8b0f7863e27b586100 Mon Sep 17 00:00:00 2001 From: Carlos Alcaide Date: Wed, 28 Jul 2021 10:16:37 -0700 Subject: [PATCH 3/3] =?UTF-8?q?refactor:=20=F0=9F=92=A1=20Prevent=20openin?= =?UTF-8?q?g=20unknown?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Prevent opening unknown links --- ui/desktop/electron-app/src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/desktop/electron-app/src/index.js b/ui/desktop/electron-app/src/index.js index 8c303a7ee..c0c437698 100644 --- a/ui/desktop/electron-app/src/index.js +++ b/ui/desktop/electron-app/src/index.js @@ -171,8 +171,8 @@ app.on('ready', async () => { // We just allow boundaryproject.io domain to open on external window (for now). mainWindow.webContents.on('new-window', (event, url) => { /* eng-disable LIMIT_NAVIGATION_JS_CHECK */ + event.preventDefault(); if (url.startsWith('https://boundaryproject.io/')) { - event.preventDefault(); shell.openExternal(url); } });