diff --git a/src/js/client.js b/src/js/client.js index 36de9b972..279c1e998 100644 --- a/src/js/client.js +++ b/src/js/client.js @@ -1697,6 +1697,32 @@ angular.module('Application').service('Client', ['$http', '$interval', 'md5', 'N }); }; + Client.prototype.prepareDashboardDomain = function (domain, callback) { + var data = { + domain: domain + }; + + post('/api/v1/cloudron/prepare_dashboard_domain', data, null, function (error, data, status) { + if (error) return callback(error); + if (status !== 202) return callback(new ClientError(status, data)); + + callback(null, data.taskId); + }); + }; + + Client.prototype.setDashboardDomain = function (domain, callback) { + var data = { + domain: domain + }; + + post('/api/v1/cloudron/set_dashboard_domain', data, null, function (error, data, status) { + if (error) return callback(error); + if (status !== 204) return callback(new ClientError(status, data)); + + callback(null); + }); + }; + // Email Client.prototype.getMailConfigForDomain = function (domain, callback) { get('/api/v1/mail/' + domain, null, function (error, data, status) { diff --git a/src/views/domains.html b/src/views/domains.html index 6a53ff38a..3e2d5a81d 100644 --- a/src/views/domains.html +++ b/src/views/domains.html @@ -307,7 +307,46 @@ Show Logs + +
+

Change Dashboard Domain

+
+ +
+
+
+

+ Use this to move this dashboard to another domain. +

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

{{ changeDashboard.message }}

+

+

{{ changeDashboard.errorMessage }}
+

+
+
+ + Show Logs +
+
diff --git a/src/views/domains.js b/src/views/domains.js index 281389f2a..bf99f63cb 100644 --- a/src/views/domains.js +++ b/src/views/domains.js @@ -463,6 +463,65 @@ angular.module('Application').controller('DomainsController', ['$scope', '$locat } }; + $scope.changeDashboard = { + busy: false, + percent: 0, + message: '', + errorMessage: '', + taskId: '', + selectedDomain: null, + adminDomain: null, + + updateStatus: function () { + Client.getTask($scope.changeDashboard.taskId, function (error, data) { + if (error) return window.setTimeout($scope.changeDashboard.updateStatus, 5000); + + if (!data.active) { + $scope.changeDashboard.busy = false; + $scope.changeDashboard.message = ''; + $scope.changeDashboard.percent = 100; // indicates that 'result' is valid + $scope.changeDashboard.errorMessage = data.errorMessage; + + if (!$scope.changeDashboard.errorMessage) $scope.changeDashboard.setDashboardDomain(); + + return; + } + + $scope.changeDashboard.busy = true; + $scope.changeDashboard.percent = data.percent; + $scope.changeDashboard.message = data.message; + window.setTimeout($scope.changeDashboard.updateStatus, 500); + }); + }, + + setDashboardDomain: function () { + Client.setDashboardDomain($scope.changeDashboard.selectedDomain.domain, function (error) { + if (error) { + console.error(error); + $scope.changeDashboard.errorMessage = error.message; + + $scope.changeDashboard.busy = false; + } else { + window.location.href = 'https://my.' + $scope.changeDashboard.selectedDomain.domain; + } + }); + }, + + change: function () { + Client.prepareDashboardDomain($scope.changeDashboard.selectedDomain.domain, function (error, taskId) { + if (error) { + console.error(error); + $scope.changeDashboard.errorMessage = error.message; + + $scope.changeDashboard.busy = false; + } else { + $scope.changeDashboard.taskId = taskId; + $scope.changeDashboard.updateStatus(); + } + }); + } + }; + $scope.dyndnsConfigure = { busy: false, success: false, @@ -501,6 +560,8 @@ angular.module('Application').controller('DomainsController', ['$scope', '$locat $scope.domains = result; $scope.ready = true; + $scope.changeDashboard.selectedDomain = $scope.changeDashboard.adminDomain = $scope.domains.find(function (d) { return d.domain === $scope.config.adminDomain; }); + if (!$scope.config.managed) { $scope.dyndnsConfigure.refresh(); }