diff --git a/src/js/client.js b/src/js/client.js index eff27704c..33de36047 100644 --- a/src/js/client.js +++ b/src/js/client.js @@ -75,6 +75,7 @@ var TASK_TYPES = { TASK_CLEAN_BACKUPS: 'cleanBackups', TASK_SYNC_EXTERNAL_LDAP: 'syncExternalLdap', TASK_CHANGE_MAIL_LOCATION: 'changeMailLocation', + TASK_SYNC_DNS_RECORDS: 'syncDnsRecords', }; var SECRET_PLACEHOLDER = String.fromCharCode(0x25CF).repeat(8); diff --git a/src/views/domains.html b/src/views/domains.html index 46dac42d4..7a26d37e2 100644 --- a/src/views/domains.html +++ b/src/views/domains.html @@ -302,6 +302,39 @@ +
+

{{ 'domains.syncDns.title' | tr }}

+
+ +
+
+
+

+
+
+ +
+
+
+
+
+
+
+ +
+
+

{{ syncDns.message }}

+

+

{{ syncDns.errorMessage }}
+

+
+
+ + {{ 'domains.syncDns.showLogsAction' | tr }} +
+
+
+

{{ 'domains.changeDashboardDomain.title' | tr }}

diff --git a/src/views/domains.js b/src/views/domains.js index e8d1ba685..39e70fffd 100644 --- a/src/views/domains.js +++ b/src/views/domains.js @@ -2,7 +2,7 @@ /* global async */ /* global angular */ -/* global $ */ +/* global $, TASK_TYPES */ angular.module('Application').controller('DomainsController', ['$scope', '$location', 'Client', function ($scope, $location, Client) { Client.onReady(function () { if (!Client.getUserInfo().isAtLeastAdmin) $location.path('/'); }); @@ -389,7 +389,7 @@ angular.module('Application').controller('DomainsController', ['$scope', '$locat taskId: '', checkStatus: function () { - Client.getLatestTaskByType('renewcerts', function (error, task) { + Client.getLatestTaskByType(TASK_TYPES.TASK_RENEW_CERTS, function (error, task) { if (error) return console.error(error); if (!task) return; @@ -439,6 +439,64 @@ angular.module('Application').controller('DomainsController', ['$scope', '$locat } }; + $scope.syncDns = { + busy: false, + percent: 0, + message: '', + errorMessage: '', + taskId: '', + + checkStatus: function () { + Client.getLatestTaskByType(TASK_TYPES.TASK_SYNC_DNS_RECORDS, function (error, task) { + if (error) return console.error(error); + + if (!task) return; + + $scope.syncDns.taskId = task.id; + $scope.syncDns.updateStatus(); + }); + }, + + updateStatus: function () { + Client.getTask($scope.syncDns.taskId, function (error, data) { + if (error) return window.setTimeout($scope.syncDns.updateStatus, 5000); + + if (!data.active) { + $scope.syncDns.busy = false; + $scope.syncDns.message = ''; + $scope.syncDns.percent = 100; // indicates that 'result' is valid + $scope.syncDns.errorMessage = data.success ? '' : data.error.message; + + return; + } + + $scope.syncDns.busy = true; + $scope.syncDns.percent = data.percent; + $scope.syncDns.message = data.message; + window.setTimeout($scope.syncDns.updateStatus, 500); + }); + }, + + sync: function () { + $scope.syncDns.busy = true; + $scope.syncDns.percent = 0; + $scope.syncDns.message = ''; + $scope.syncDns.errorMessage = ''; + + Client.setDnsRecords({}, function (error, taskId) { + if (error) { + console.error(error); + $scope.syncDns.errorMessage = error.message; + + $scope.syncDns.busy = false; + } else { + $scope.syncDns.taskId = taskId; + $scope.syncDns.updateStatus(); + } + }); + } + }; + $scope.domainRemove = { busy: false, error: null,