diff --git a/src/js/client.js b/src/js/client.js
index dc2688023..1f3535ced 100644
--- a/src/js/client.js
+++ b/src/js/client.js
@@ -495,6 +495,20 @@ angular.module('Application').service('Client', ['$http', '$interval', 'md5', 'N
}).error(defaultErrorHandler(callback));
};
+ Client.prototype.setSpacesConfig = function (spacesConfig, callback) {
+ post('/api/v1/settings/spaces_config', spacesConfig).success(function(data, status) {
+ if (status !== 200) return callback(new ClientError(status, data));
+ callback(null);
+ }).error(defaultErrorHandler(callback));
+ };
+
+ Client.prototype.getSpacesConfig = function (callback) {
+ get('/api/v1/settings/spaces_config').success(function(data, status) {
+ if (status !== 200) return callback(new ClientError(status, data));
+ callback(null, data);
+ }).error(defaultErrorHandler(callback));
+ };
+
Client.prototype.getUpdateInfo = function (callback) {
get('/api/v1/cloudron/update').success(function(data, status) {
if (status !== 200) return callback(new ClientError(status, data));
diff --git a/src/views/settings.html b/src/views/settings.html
index 83018915e..0e6f3d0aa 100644
--- a/src/views/settings.html
+++ b/src/views/settings.html
@@ -324,4 +324,28 @@
+
+
+
+
Cloudron Spaces
+
+
+
+
+
+
Cloudron Spaces allows users to install and run apps of their own
+
{{ spaces.error }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/settings.js b/src/views/settings.js
index bb90e4c25..e065ba020 100644
--- a/src/views/settings.js
+++ b/src/views/settings.js
@@ -64,6 +64,23 @@ angular.module('Application').controller('SettingsController', ['$scope', '$loca
}
};
+ $scope.spaces = {
+ error: '',
+ busy: false,
+ enabled: false,
+
+ submit: function () {
+ $scope.spaces.error = null;
+ $scope.spaces.busy = true;
+
+ Client.setSpacesConfig({ enabled: !$scope.spaces.enabled }, function (error) {
+ if (error) $scope.spaces.error = error.message;
+
+ getSpacesConfig();
+ });
+ }
+ };
+
$scope.planChange = {
busy: false,
error: {},
@@ -296,6 +313,17 @@ angular.module('Application').controller('SettingsController', ['$scope', '$loca
});
}
+ function getSpacesConfig() {
+ $scope.spaces.busy = true;
+
+ Client.getSpacesConfig(function (error, result) {
+ if (error) return console.error(error);
+
+ $scope.spaces.busy = false;
+ $scope.spaces.enabled = result.enabled;
+ });
+ }
+
function getSubscription() {
AppStore.getSubscription($scope.appstoreConfig, function (error, result) {
if (error) return console.error(error);
@@ -405,6 +433,7 @@ angular.module('Application').controller('SettingsController', ['$scope', '$loca
Client.onReady(function () {
getAutoupdatePattern();
+ getSpacesConfig();
if ($scope.config.provider === 'caas') {
Client.getCaasConfig(function (error, caasConfig) {