From 1979721ac9540644b26376d8a071c2be1a483161 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20Vay=C3=A1?= Date: Mon, 5 Oct 2020 08:47:29 +0200 Subject: [PATCH] [MM-28620] allow navigating links to admin_console (#1374) * [MM-28620] allow navigating links to admin_console * Fix when there is not a server associated --- src/browser/components/MattermostView.jsx | 2 +- src/main.js | 9 +++++++-- src/utils/util.js | 11 +++++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/browser/components/MattermostView.jsx b/src/browser/components/MattermostView.jsx index 62ba8473..8f5da834 100644 --- a/src/browser/components/MattermostView.jsx +++ b/src/browser/components/MattermostView.jsx @@ -94,7 +94,7 @@ export default class MattermostView extends React.Component { } else if (destURL.path.match(/^\/help\//)) { // continue to open special case internal urls in default browser shell.openExternal(e.url); - } else if (Utils.isTeamUrl(this.props.src, e.url, true)) { + } else if (Utils.isTeamUrl(this.props.src, e.url, true) || Utils.isAdminUrl(this.props.src, e.url)) { e.preventDefault(); this.webviewRef.current.loadURL(e.url); } else if (Utils.isPluginUrl(this.props.src, e.url)) { diff --git a/src/main.js b/src/main.js index a28f8920..2ac572f6 100644 --- a/src/main.js +++ b/src/main.js @@ -487,7 +487,8 @@ function handleAppWebContentsCreated(dc, contents) { const parsedURL = Utils.parseURL(url); const server = Utils.getServer(parsedURL, config.teams); - if ((server !== null && Utils.isTeamUrl(server.url, parsedURL)) || isTrustedPopupWindow(event.sender)) { + if ((server !== null && (Utils.isTeamUrl(server.url, parsedURL) || Utils.isAdminUrl(server.url, parsedURL))) || + isTrustedPopupWindow(event.sender)) { return; } @@ -536,10 +537,14 @@ function handleAppWebContentsCreated(dc, contents) { log.info(`Untrusted popup window blocked: ${url}`); return; } - if (Utils.isTeamUrl(server.url, parsedURL, true) === true) { + if (Utils.isTeamUrl(server.url, parsedURL, true)) { log.info(`${url} is a known team, preventing to open a new window`); return; } + if (Utils.isAdminUrl(server.url, parsedURL)) { + log.info(`${url} is an admin console page, preventing to open a new window`); + return; + } if (popupWindow && !popupWindow.closed && popupWindow.getURL() === url) { log.info(`Popup window already open at provided url: ${url}`); return; diff --git a/src/utils/util.js b/src/utils/util.js index 42fd53f8..ee75e102 100644 --- a/src/utils/util.js +++ b/src/utils/util.js @@ -79,6 +79,16 @@ function getManagedResources() { return buildConfig.managedResources || []; } +function isAdminUrl(serverUrl, inputUrl) { + const parsedURL = parseURL(inputUrl); + const server = getServerInfo(serverUrl); + if (!parsedURL || !server || (!equalUrlsIgnoringSubpath(server, parsedURL))) { + return null; + } + return (parsedURL.pathname.toLowerCase().startsWith(`${server.subpath}/admin_console/`) || + parsedURL.pathname.toLowerCase().startsWith('/admin_console/')); +} + function isTeamUrl(serverUrl, inputUrl, withApi) { const parsedURL = parseURL(inputUrl); const server = getServerInfo(serverUrl); @@ -225,6 +235,7 @@ export default { parseURL, getServer, getServerInfo, + isAdminUrl, isTeamUrl, isPluginUrl, isManagedResource,