diff --git a/src/app/global/mainController.js b/src/app/global/mainController.js index 578086824d..bc9b59cb81 100644 --- a/src/app/global/mainController.js +++ b/src/app/global/mainController.js @@ -60,6 +60,10 @@ angular $scope.$broadcast('settingsSessions'); }; + $scope.domains = function () { + $scope.$broadcast('settingsDomains'); + }; + $scope.delete = function () { $scope.$broadcast('settingsDelete'); }; diff --git a/src/app/services/apiService.js b/src/app/services/apiService.js index 1d6cb9e946..4a6cf78ff4 100644 --- a/src/app/services/apiService.js +++ b/src/app/services/apiService.js @@ -36,6 +36,8 @@ putPassword: { url: _apiUri + '/accounts/password', method: 'POST', params: {} }, getProfile: { url: _apiUri + '/accounts/profile', method: 'GET', params: {} }, putProfile: { url: _apiUri + '/accounts/profile', method: 'POST', params: {} }, + getDomains: { url: _apiUri + '/accounts/domains', method: 'GET', params: {} }, + putDomains: { url: _apiUri + '/accounts/domains', method: 'POST', params: {} }, getTwoFactor: { url: _apiUri + '/accounts/two-factor', method: 'GET', params: {} }, putTwoFactor: { url: _apiUri + '/accounts/two-factor', method: 'POST', params: {} }, postTwoFactorRecover: { url: _apiUri + '/accounts/two-factor-recover', method: 'POST', params: {} }, diff --git a/src/app/settings/settingsController.js b/src/app/settings/settingsController.js index 2556b001f7..1de626da1d 100644 --- a/src/app/settings/settingsController.js +++ b/src/app/settings/settingsController.js @@ -70,6 +70,18 @@ $scope.sessions(); }); + $scope.domains = function () { + $uibModal.open({ + animation: true, + templateUrl: 'app/settings/views/settingsDomains.html', + controller: 'settingsDomainsController' + }); + }; + + $scope.$on('settingsDomains', function (event, args) { + $scope.domains(); + }); + $scope.delete = function () { $uibModal.open({ animation: true, diff --git a/src/app/settings/settingsDomainsController.js b/src/app/settings/settingsDomainsController.js new file mode 100644 index 0000000000..6a0b5f4270 --- /dev/null +++ b/src/app/settings/settingsDomainsController.js @@ -0,0 +1,87 @@ +angular + .module('bit.settings') + + .controller('settingsDomainsController', function ($scope, $state, apiService, $uibModalInstance, toastr, $analytics) { + $analytics.eventTrack('settingsDomainsController', { category: 'Modal' }); + + $scope.globalEquivalentDomains = []; + $scope.equivalentDomains = []; + + apiService.accounts.getDomains({}, function (response) { + if (response.EquivalentDomains) { + for (var i = 0; i < response.EquivalentDomains.length; i++) { + $scope.equivalentDomains.push(response.EquivalentDomains[i].join(', ')); + } + } + + if (response.GlobalEquivalentDomains) { + for (var globalDomain in response.GlobalEquivalentDomains) { + if (response.GlobalEquivalentDomains.hasOwnProperty(globalDomain)) { + var domain = { + values: response.GlobalEquivalentDomains[globalDomain], + excluded: false, + key: globalDomain + }; + + if (response.ExcludedGlobalEquivalentDomains) { + for (i = 0; i < response.ExcludedGlobalEquivalentDomains.length; i++) { + if (response.ExcludedGlobalEquivalentDomains[i] === globalDomain) { + domain.excluded = true; + break; + } + } + } + + $scope.globalEquivalentDomains.push(domain); + } + } + } + }); + + $scope.toggleExclude = function (globalDomain) { + globalDomain.excluded = !globalDomain.excluded; + } + + $scope.customize = function (globalDomain) { + globalDomain.excluded = true; + $scope.equivalentDomains.push(globalDomain.values.join(', ')); + } + + $scope.delete = function (i) { + $scope.equivalentDomains.splice(i, 1); + } + + $scope.submit = function () { + var request = { + ExcludedGlobalEquivalentDomains: [], + EquivalentDomains: [] + }; + + for (var i = 0; i < $scope.globalEquivalentDomains.length; i++) { + if ($scope.globalEquivalentDomains[i].excluded) { + request.ExcludedGlobalEquivalentDomains.push($scope.globalEquivalentDomains[i].key); + } + } + + for (i = 0; i < $scope.equivalentDomains.length; i++) { + request.EquivalentDomains.push($scope.equivalentDomains[i].split(' ').join('').split(', ')); + } + + if (!request.EquivalentDomains.length) { + request.EquivalentDomains = null; + } + + if (!request.ExcludedGlobalEquivalentDomains.length) { + request.ExcludedGlobalEquivalentDomains = null; + } + + $scope.submitPromise = apiService.accounts.putDomains(request, function (domains) { + $scope.close(); + toastr.success('Domains have been updated.', 'Success!'); + }).$promise; + }; + + $scope.close = function () { + $uibModalInstance.dismiss('cancel'); + }; + }); diff --git a/src/app/settings/views/settingsDomains.html b/src/app/settings/views/settingsDomains.html new file mode 100644 index 0000000000..e978545fed --- /dev/null +++ b/src/app/settings/views/settingsDomains.html @@ -0,0 +1,83 @@ + +
+ + +
diff --git a/src/app/views/backendLayout.html b/src/app/views/backendLayout.html index 56a65a14ac..109d464802 100644 --- a/src/app/views/backendLayout.html +++ b/src/app/views/backendLayout.html @@ -79,6 +79,11 @@ Two-step Login +
  • + + Domain Rules + +
  • Delete Account diff --git a/src/index.html b/src/index.html index 9f5f9c9557..43a4eefc1a 100644 --- a/src/index.html +++ b/src/index.html @@ -125,6 +125,7 @@ + diff --git a/src/less/vault.less b/src/less/vault.less index 67c4d01e34..a7f6b7614b 100644 --- a/src/less/vault.less +++ b/src/less/vault.less @@ -199,3 +199,10 @@ form .btn .loading-icon { } } } + +/* Misc */ + +.strike { + text-decoration: line-through; + color: @text-muted; +}