diff --git a/ui/desktop/electron-app/src/ipc/handlers.js b/ui/desktop/electron-app/src/ipc/handlers.js index d5aac6fb4..9f956d49b 100644 --- a/ui/desktop/electron-app/src/ipc/handlers.js +++ b/ui/desktop/electron-app/src/ipc/handlers.js @@ -5,7 +5,7 @@ const boundaryCli = require('../cli/index.js'); const sessionManager = require('../services/session-manager.js'); const runtimeSettings = require('../services/runtime-settings.js'); const sanitizer = require('../utils/sanitizer.js'); -const { isMac, isWindows } = require('../helpers/platform.js'); +const { isMac, isWindows, isLinux } = require('../helpers/platform.js'); /** * Returns the current runtime origin, which is used by the main thread to @@ -38,9 +38,23 @@ handle('openExternal', async (href) => { const isLocalhost = href.startsWith('http://localhost') || href.startsWith('http://127.0.0.1'); if (isSecure || isLocalhost || isDev) { - // openExternal is necessary in order to display documentation and to - // support arbitrary OIDC flows. The protocol is validated (see above). - shell.openExternal(href); /* eng-disable OPEN_EXTERNAL_JS_CHECK */ + /** + * Launch browser to display documentation and to support arbitrary OIDC flows. + * The protocol is validated (see above). + * In linux, launch application (xdg-open) does not launch browser window + * and fails silently. As a bypass, launch a new browser window attached + * to main window. + */ + if (isLinux()) { + const browserWindow = new BrowserWindow({ + parent: BrowserWindow.getFocusedWindow(), + }); + browserWindow.loadURL(href); + browserWindow.show(); + } else { + // openExternal is necessary to open urls in Windows and MacOS + shell.openExternal(href); /* eng-disable OPEN_EXTERNAL_JS_CHECK */ + } } else { throw new Error( `URLs may only be opened over HTTPS in an external browser. diff --git a/ui/desktop/environments/ubuntu-focal64/Vagrantfile b/ui/desktop/environments/ubuntu-focal64/Vagrantfile index 6eef580f7..e037674ad 100644 --- a/ui/desktop/environments/ubuntu-focal64/Vagrantfile +++ b/ui/desktop/environments/ubuntu-focal64/Vagrantfile @@ -13,7 +13,7 @@ For using locally built debian artifacts: artifacts on MacOS ## Setup Ubuntu -- Create a ubuntu desktop box using vagrant: `vagrant up --provision-with setup,cli,staged-desktop` +- Create a ubuntu desktop box using vagrant: `vagrant up --provision-with setup,cli,staged-desktop`. - Desktop client artifact and cli will be available in `/home/vagrant/Desktop` after logging into ubuntu. Username/password for login: vagrant/vagrant. Navigate to `/home/vagrant/Desktop` in a terminal app. - To install desktop app use either `apt` or `dpkg` @@ -24,12 +24,12 @@ For using locally built debian artifacts: ## Provision types User --provision-with option to setup machine for either cli or development -Setup for testing: +Setup for testing staged desktop release: + vagrant up --provision-with setup,cli,staged-desktop +Setup for testing artifacts built locally: vagrant up --provision-with setup,cli Setup for developing desktop client: vagrant up --provision-with setup,development -Setup for staged desktop release: - vagrant up --provision-with setup,cli,staged-desktop To destroy machine: vagrant destroy -f =end @@ -50,7 +50,7 @@ Vagrant.configure("2") do |config| config.vm.provision "setup", type: "shell", inline: <<-SHELL sudo apt-get update -y sudo apt-get upgrade -y - sudo apt-get install curl + sudo apt-get install curl firefox # Add vagrant to administrator group sudo usermod -aG sudo vagrant # Add vagrant to shared folder @@ -85,7 +85,7 @@ Vagrant.configure("2") do |config| sudo apt-get install -y nodejs sudo apt-get remove cmdtest - sudo apt-get install -y npm git + sudo apt-get install -y npm git chromium-browser git clone https://github.com/hashicorp/boundary-ui.git /home/vagrant/Desktop/boundary-ui sudo npm install -g yarn