From 45d6c6f341754ff67d4321a4e420c43c3f083930 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Tue, 28 Mar 2017 22:11:47 -0400 Subject: [PATCH] better domain parsing with tldjs backup --- src/background.js | 8 +-- src/models/domainModels.js | 5 +- src/popup/app/current/currentController.js | 4 +- src/popup/app/services/backgroundService.js | 3 -- .../app/vault/vaultViewLoginController.js | 6 +-- src/services/utilsService.js | 49 +++++++++++++++++++ 6 files changed, 62 insertions(+), 13 deletions(-) diff --git a/src/background.js b/src/background.js index 71efb2d8efb..540c9cfbfea 100644 --- a/src/background.js +++ b/src/background.js @@ -253,7 +253,7 @@ function loadMenuAndUpdateBadge(url, tabId, contextMenuEnabled) { return; } - var tabDomain = tldjs.getDomain(url); + var tabDomain = utilsService.getDomain(url); if (!tabDomain) { return; } @@ -393,7 +393,7 @@ function collectPageDetailsForContentScript(tab) { } function addLogin(login, tab) { - var loginDomain = tldjs.getDomain(login.url); + var loginDomain = utilsService.getDomain(login.url); if (!loginDomain) { return; } @@ -449,7 +449,7 @@ function saveAddLogin(tab) { if (loginsToAdd[i].tabId === tab.id) { var loginToAdd = loginsToAdd[i]; - var tabDomain = tldjs.getDomain(tab.url); + var tabDomain = utilsService.getDomain(tab.url); if (tabDomain && tabDomain === loginToAdd.domain) { loginsToAdd.splice(i, 1); loginService.encrypt({ @@ -504,7 +504,7 @@ function checkLoginsToAdd(tab, callback) { return; } - var tabDomain = tldjs.getDomain(tab.url); + var tabDomain = utilsService.getDomain(tab.url); if (!tabDomain) { if (callback) { callback(); diff --git a/src/models/domainModels.js b/src/models/domainModels.js index 6dfa519fa54..a7bf55b84f2 100644 --- a/src/models/domainModels.js +++ b/src/models/domainModels.js @@ -80,7 +80,10 @@ var Folder = function (obj, alreadyEncrypted) { return null; }).then(function (val) { model.uri = val; - model.domain = tldjs.getDomain(val); + + var utilsService = chrome.extension.getBackgroundPage().utilsService; + model.domain = utilsService.getDomain(val); + if (self.username) { return self.username.decrypt(); } diff --git a/src/popup/app/current/currentController.js b/src/popup/app/current/currentController.js index 271aa36f6d1..e8c09119a47 100644 --- a/src/popup/app/current/currentController.js +++ b/src/popup/app/current/currentController.js @@ -1,7 +1,7 @@ angular .module('bit.current') - .controller('currentController', function ($scope, loginService, tldjs, toastr, $q, $window, $state, $timeout, + .controller('currentController', function ($scope, loginService, utilsService, toastr, $q, $window, $state, $timeout, autofillService, $analytics, i18nService) { $scope.i18n = i18nService; @@ -30,7 +30,7 @@ angular return; } - domain = tldjs.getDomain(url); + domain = utilsService.getDomain(url); if (!domain) { $scope.loaded = true; $scope.$apply(); diff --git a/src/popup/app/services/backgroundService.js b/src/popup/app/services/backgroundService.js index ccc6064c9be..5824eec0b4e 100644 --- a/src/popup/app/services/backgroundService.js +++ b/src/popup/app/services/backgroundService.js @@ -22,9 +22,6 @@ .factory('syncService', function () { return chrome.extension.getBackgroundPage().syncService; }) - .factory('tldjs', function () { - return chrome.extension.getBackgroundPage().tldjs; - }) .factory('autofillService', function () { return chrome.extension.getBackgroundPage().autofillService; }) diff --git a/src/popup/app/vault/vaultViewLoginController.js b/src/popup/app/vault/vaultViewLoginController.js index 3c67f379615..0da099a5de7 100644 --- a/src/popup/app/vault/vaultViewLoginController.js +++ b/src/popup/app/vault/vaultViewLoginController.js @@ -1,8 +1,8 @@ angular .module('bit.vault') - .controller('vaultViewLoginController', function ($scope, $state, $stateParams, loginService, tldjs, toastr, $q, - $analytics, i18nService) { + .controller('vaultViewLoginController', function ($scope, $state, $stateParams, loginService, toastr, $q, + $analytics, i18nService, utilsService) { $scope.i18n = i18nService; var from = $stateParams.from; @@ -26,7 +26,7 @@ angular if (model.uri) { $scope.login.showLaunch = model.uri.startsWith('http://') || model.uri.startsWith('https://'); - var domain = tldjs.getDomain(model.uri); + var domain = utilsService.getDomain(model.uri); if (domain) { $scope.login.website = domain; } diff --git a/src/services/utilsService.js b/src/services/utilsService.js index 97b5b6748ba..b3152a8138f 100644 --- a/src/services/utilsService.js +++ b/src/services/utilsService.js @@ -128,4 +128,53 @@ function initUtilsService() { $(this).parent().removeClass('active'); }); } + + UtilsService.prototype.getDomain = function (uriString) { + if (!uriString) { + return null; + } + + uriString = uriString.trim(); + if (uriString === '') { + return null; + } + + if (uriString.startsWith('http://') || uriString.startsWith('https://')) { + try { + var url = new URL(uriString); + if (!url || !url.hostname) { + return null; + } + + if (url.hostname === 'localhost' || validIpAddress(url.hostname)) { + return url.hostname; + } + + if (tldjs) { + var domain = tldjs.getDomain(uriString); + if (domain) { + return domain; + } + } + + return url.hostname; + } + catch (e) { + return null; + } + } + else if (tldjs) { + var domain2 = tldjs.getDomain(uriString); + if (domain2) { + return domain2; + } + } + + return null; + } + + function validIpAddress(ipString) { + var ipRegex = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; + return ipRegex.test(ipString); + } };