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();
}