From 605bdd0ea0338981b2771335fc5410dd42c52bb5 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Mon, 9 Jan 2017 22:26:20 -0500 Subject: [PATCH] domain rules page setup with new APIs --- src/app/global/mainController.js | 4 + src/app/services/apiService.js | 2 + src/app/settings/settingsController.js | 12 +++ src/app/settings/settingsDomainsController.js | 87 +++++++++++++++++++ src/app/settings/views/settingsDomains.html | 83 ++++++++++++++++++ src/app/views/backendLayout.html | 5 ++ src/index.html | 1 + src/less/vault.less | 7 ++ 8 files changed, 201 insertions(+) create mode 100644 src/app/settings/settingsDomainsController.js create mode 100644 src/app/settings/views/settingsDomains.html diff --git a/src/app/global/mainController.js b/src/app/global/mainController.js index 578086824db..bc9b59cb817 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 1d6cb9e946c..4a6cf78ff42 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 2556b001f7c..1de626da1de 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 00000000000..6a0b5f4270e --- /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 00000000000..e978545fedf --- /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 56a65a14aca..109d464802e 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 9f5f9c9557a..43a4eefc1aa 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 67c4d01e344..a7f6b7614b3 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; +}