From 267b8780cf9e93323bb41544d7ce941491969966 Mon Sep 17 00:00:00 2001 From: lip-d Date: Sun, 25 Feb 2018 10:51:45 +0900 Subject: [PATCH] Fixed an issue where clicking on a file:// protocol path does not open windows explorer since version 3.5.0. --- src/browser/components/MattermostView.jsx | 42 +++++++++++++---------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/src/browser/components/MattermostView.jsx b/src/browser/components/MattermostView.jsx index 768b4964..968895ee 100644 --- a/src/browser/components/MattermostView.jsx +++ b/src/browser/components/MattermostView.jsx @@ -15,6 +15,25 @@ const ErrorView = require('./ErrorView.jsx'); const preloadJS = `file://${remote.app.getAppPath()}/browser/webview/mattermost_bundle.js`; +function extractFileURL(message) { + const matched = message.match(/Not allowed to load local resource:\s*(.+)/); + if (matched) { + return matched[1]; + } + return ''; +} + +function isNetworkDrive(fileURL) { + const u = url.parse(fileURL); + if (u.protocol === 'file:' && u.host) { + // Disallow localhost, 127.0.0.1, ::1. + if (!u.host.match(/^localhost$|^127\.0\.0\.1$|^\[::1\]$/)) { + return true; + } + } + return false; +} + const MattermostView = createReactClass({ propTypes: { name: PropTypes.string, @@ -156,9 +175,9 @@ const MattermostView = createReactClass({ case 1: console.warn(message); break; - case 2: - const fileURL = this.extractFileURL(e.message); - if (this.isNetworkDrive(fileURL)) { + case 2: { + const fileURL = extractFileURL(e.message); + if (isNetworkDrive(fileURL)) { // Network drive: Should be allowed. if (!shell.openExternal(decodeURI(fileURL))) { console.log(`[${this.props.name}] shell.openExternal failed: ${fileURL}`); @@ -168,6 +187,7 @@ const MattermostView = createReactClass({ console.error(message); } break; + } default: console.log(message); break; @@ -239,22 +259,6 @@ const MattermostView = createReactClass({ ); }, - extractFileURL(message) { - const matched = message.match(/Not allowed to load local resource:\s*(.+)/); - if (matched) { - return matched[1]; - } - return ''; - }, - - isNetworkDrive(fileURL) { - const u = url.parse(fileURL); - if (u.protocol === 'file:' && u.host) { - return true; - } - return false; - }, - render() { const errorView = this.state.errorInfo ? (