[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
This commit is contained in:
Guillermo Vayá
2020-10-05 08:47:29 +02:00
committed by GitHub
parent f06a498134
commit 1979721ac9
3 changed files with 19 additions and 3 deletions

View File

@@ -94,7 +94,7 @@ export default class MattermostView extends React.Component {
} else if (destURL.path.match(/^\/help\//)) { } else if (destURL.path.match(/^\/help\//)) {
// continue to open special case internal urls in default browser // continue to open special case internal urls in default browser
shell.openExternal(e.url); 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(); e.preventDefault();
this.webviewRef.current.loadURL(e.url); this.webviewRef.current.loadURL(e.url);
} else if (Utils.isPluginUrl(this.props.src, e.url)) { } else if (Utils.isPluginUrl(this.props.src, e.url)) {

View File

@@ -487,7 +487,8 @@ function handleAppWebContentsCreated(dc, contents) {
const parsedURL = Utils.parseURL(url); const parsedURL = Utils.parseURL(url);
const server = Utils.getServer(parsedURL, config.teams); 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; return;
} }
@@ -536,10 +537,14 @@ function handleAppWebContentsCreated(dc, contents) {
log.info(`Untrusted popup window blocked: ${url}`); log.info(`Untrusted popup window blocked: ${url}`);
return; 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`); log.info(`${url} is a known team, preventing to open a new window`);
return; 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) { if (popupWindow && !popupWindow.closed && popupWindow.getURL() === url) {
log.info(`Popup window already open at provided url: ${url}`); log.info(`Popup window already open at provided url: ${url}`);
return; return;

View File

@@ -79,6 +79,16 @@ function getManagedResources() {
return buildConfig.managedResources || []; 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) { function isTeamUrl(serverUrl, inputUrl, withApi) {
const parsedURL = parseURL(inputUrl); const parsedURL = parseURL(inputUrl);
const server = getServerInfo(serverUrl); const server = getServerInfo(serverUrl);
@@ -225,6 +235,7 @@ export default {
parseURL, parseURL,
getServer, getServer,
getServerInfo, getServerInfo,
isAdminUrl,
isTeamUrl, isTeamUrl,
isPluginUrl, isPluginUrl,
isManagedResource, isManagedResource,