From 71e1d5ce376f16f90e5eaa29e192d5871d263028 Mon Sep 17 00:00:00 2001 From: MaysWind Date: Sun, 8 Oct 2017 22:48:30 +0800 Subject: [PATCH] disable http and ws when navigating AriaNg via https --- src/langs/zh_Hans.txt | 3 + src/langs/zh_Hant.txt | 3 + src/scripts/config/constants.js | 1 + src/scripts/config/defaultLanguage.js | 3 + src/scripts/controllers/settings-ariang.js | 1 + src/scripts/services/ariaNgSettingService.js | 61 +++++++++++++------- src/views/settings-ariang.html | 6 +- 7 files changed, 55 insertions(+), 23 deletions(-) diff --git a/src/langs/zh_Hans.txt b/src/langs/zh_Hans.txt index 7c03acf..c8a601e 100644 --- a/src/langs/zh_Hans.txt +++ b/src/langs/zh_Hans.txt @@ -179,9 +179,12 @@ Minutes=分 Seconds=秒 Milliseconds=毫秒 Http=Http +Http (Disabled)=Http (禁用) Https=Https WebSocket=WebSocket +WebSocket (Disabled)=WebSocket (禁用) WebSocket (Security)=WebSocket (安全) +Http and WebSocket would be disabled when navigating AriaNg via Https.=使用 Https 访问 AriaNg 时,Http 和 WebSocket 将被禁用. POST=POST GET=GET Disabled=禁用 diff --git a/src/langs/zh_Hant.txt b/src/langs/zh_Hant.txt index b4b62b4..d38a2d7 100644 --- a/src/langs/zh_Hant.txt +++ b/src/langs/zh_Hant.txt @@ -179,9 +179,12 @@ Minutes=分 Seconds=秒 Milliseconds=毫秒 Http=Http +Http (Disabled)=Http (禁用) Https=Https WebSocket=WebSocket +WebSocket (Disabled)=WebSocket (禁用) WebSocket (Security)=WebSocket (安全) +Http and WebSocket would be disabled when navigating AriaNg via Https.=使用 Https 訪問 AriaNg 時,Http 和 WebSocket 將被禁用. POST=POST GET=GET Disabled=禁用 diff --git a/src/scripts/config/constants.js b/src/scripts/config/constants.js index cc75b7f..0eaa0ea 100644 --- a/src/scripts/config/constants.js +++ b/src/scripts/config/constants.js @@ -10,6 +10,7 @@ languageFileExtension: '.txt', defaultLanguage: 'en', defaultHost: 'localhost', + defaultSecureProtocol: 'https', globalStatStorageCapacity: 120, taskStatStorageCapacity: 300, lazySaveTimeout: 500, diff --git a/src/scripts/config/defaultLanguage.js b/src/scripts/config/defaultLanguage.js index cb7ebf1..199bf3d 100644 --- a/src/scripts/config/defaultLanguage.js +++ b/src/scripts/config/defaultLanguage.js @@ -183,9 +183,12 @@ 'Seconds': 'Seconds', 'Milliseconds': 'Milliseconds', 'Http': 'Http', + 'Http (Disabled)': 'Http (Disabled)', 'Https': 'Https', 'WebSocket': 'WebSocket', + 'WebSocket (Disabled)': 'WebSocket (Disabled)', 'WebSocket (Security)': 'WebSocket (Security)', + 'Http and WebSocket would be disabled when navigating AriaNg via Https.': 'Http and WebSocket would be disabled when navigating AriaNg via Https.', 'POST': 'POST', 'GET': 'GET', 'Disabled': 'Disabled', diff --git a/src/scripts/controllers/settings-ariang.js b/src/scripts/controllers/settings-ariang.js index 90479ed..6405b37 100644 --- a/src/scripts/controllers/settings-ariang.js +++ b/src/scripts/controllers/settings-ariang.js @@ -38,6 +38,7 @@ availableTime: ariaNgCommonService.getTimeOptions([1000, 2000, 3000, 5000, 10000, 30000, 60000], true), trueFalseOptions: [{name: 'True', value: true}, {name: 'False', value: false}], showRpcSecret: false, + isInsecureProtocolDisabled: ariaNgSettingService.isInsecureProtocolDisabled(), settings: ariaNgSettingService.getAllOptions(), sessionSettings: ariaNgSettingService.getAllSessionOptions(), rpcSettings: ariaNgSettingService.getAllRpcSettings() diff --git a/src/scripts/services/ariaNgSettingService.js b/src/scripts/services/ariaNgSettingService.js index 8e84a0d..77fbe68 100644 --- a/src/scripts/services/ariaNgSettingService.js +++ b/src/scripts/services/ariaNgSettingService.js @@ -18,6 +18,12 @@ } }; + var isInsecureProtocolDisabled = function () { + var protocol = $location.protocol(); + + return protocol === 'https'; + }; + var getLanguageNameFromAlias = function (alias) { for (var langName in ariaNgLanguages) { if (!ariaNgLanguages.hasOwnProperty(langName)) { @@ -100,6 +106,20 @@ options = angular.extend({}, ariaNgDefaultOptions); options.language = getDefaultLanguage(); + if (!options.rpcHost) { + initRpcSettingWithDefaultHostAndProtocol(options); + } + + if (angular.isArray(options.extendRpcServers)) { + for (var i = 0; i < options.extendRpcServers.length; i++) { + var rpcSetting = options.extendRpcServers[i]; + + if (!rpcSetting.rpcHost) { + initRpcSettingWithDefaultHostAndProtocol(rpcSetting); + } + } + } + setOptions(options); fireFirstVisitEvent(); } @@ -129,6 +149,14 @@ setOptions(options); }; + var initRpcSettingWithDefaultHostAndProtocol = function (setting) { + setting.rpcHost = getDefaultRpcHost(); + + if (isInsecureProtocolDisabled()) { + setting.protocol = ariaNgConstants.defaultSecureProtocol; + } + }; + var cloneRpcSetting = function (setting) { return { rpcAlias: setting.rpcAlias, @@ -144,7 +172,8 @@ var createNewRpcSetting = function () { var setting = cloneRpcSetting(ariaNgDefaultOptions); setting.rpcId = ariaNgCommonService.generateUniqueId(); - setting.rpcHost = getDefaultRpcHost(); + + initRpcSettingWithDefaultHostAndProtocol(setting); return setting; }; @@ -153,10 +182,6 @@ getAllOptions: function () { var options = angular.extend({}, ariaNgDefaultOptions, getOptions()); - if (!options.rpcHost) { - options.rpcHost = getDefaultRpcHost(); - } - if (options.secret) { options.secret = base64.decode(options.secret); } @@ -165,10 +190,6 @@ for (var i = 0; i < options.extendRpcServers.length; i++) { var rpcSetting = options.extendRpcServers[i]; - if (!rpcSetting.rpcHost) { - rpcSetting.rpcHost = getDefaultRpcHost(); - } - if (rpcSetting.secret) { rpcSetting.secret = base64.decode(rpcSetting.secret); } @@ -199,6 +220,9 @@ getAllSessionOptions: function () { return angular.copy(sessionSettings); }, + isInsecureProtocolDisabled: function () { + return isInsecureProtocolDisabled(); + }, applyLanguage: function (lang) { if (!ariaNgLanguages[lang]) { return false; @@ -248,26 +272,21 @@ setOption('browserNotification', value); }, getCurrentRpcUrl: function () { - var protocol = getOption('protocol'); - var rpcHost = getOption('rpcHost'); - var rpcPort = getOption('rpcPort'); - var rpcInterface = getOption('rpcInterface'); - - if (!rpcHost) { - rpcHost = getDefaultRpcHost(); - } + var options = getOptions(); + var protocol = options.protocol; + var rpcHost = options.rpcHost; + var rpcPort = options.rpcPort; + var rpcInterface = options.rpcInterface; return protocol + '://' + rpcHost + ':' + rpcPort + '/' + rpcInterface; }, - getCurrentRpcProtocol: function () { - return getOption('protocol'); - }, getCurrentRpcHttpMethod: function () { return getOption('httpMethod'); }, isCurrentRpcUseWebSocket: function (protocol) { if (!protocol) { - protocol = this.getCurrentRpcProtocol(); + var options = getOptions(); + protocol = options.protocol; } return protocol === 'ws' || protocol === 'wss'; diff --git a/src/views/settings-ariang.html b/src/views/settings-ariang.html index d448178..b4ef19d 100644 --- a/src/views/settings-ariang.html +++ b/src/views/settings-ariang.html @@ -171,12 +171,14 @@
Aria2 RPC Protocol * +