diff --git a/src/backups.js b/src/backups.js index 19637bbb7..1bcf76b1a 100644 --- a/src/backups.js +++ b/src/backups.js @@ -89,6 +89,7 @@ function api(provider) { case 'caas': return caas; case 's3': return s3; case 'filesystem': return filesystem; + case 'minio': return s3; default: return null; } } diff --git a/src/backuptask.js b/src/backuptask.js index a27dc2278..6f8d77b83 100755 --- a/src/backuptask.js +++ b/src/backuptask.js @@ -26,6 +26,7 @@ function api(provider) { case 'caas': return caas; case 's3': return s3; case 'filesystem': return filesystem; + case 'minio': return s3; default: return null; } } diff --git a/src/storage/s3.js b/src/storage/s3.js index 7238752e7..33360c97d 100644 --- a/src/storage/s3.js +++ b/src/storage/s3.js @@ -198,6 +198,7 @@ function testConfig(apiConfig, callback) { if (typeof apiConfig.bucket !== 'string') return callback(new BackupsError(BackupsError.BAD_FIELD, 'bucket must be a string')); if (typeof apiConfig.prefix !== 'string') return callback(new BackupsError(BackupsError.BAD_FIELD, 'prefix must be a string')); if ('signatureVersion' in apiConfig && typeof apiConfig.prefix !== 'string') return callback(new BackupsError(BackupsError.BAD_FIELD, 'signatureVersion must be a string')); + if ('endpoint' in apiConfig && typeof apiConfig.prefix !== 'string') return callback(new BackupsError(BackupsError.BAD_FIELD, 'endpoint must be a string')); // attempt to upload and delete a file with new credentials getBackupCredentials(apiConfig, function (error, credentials) { diff --git a/webadmin/src/views/settings.html b/webadmin/src/views/settings.html index cb8c81608..549578b5a 100644 --- a/webadmin/src/views/settings.html +++ b/webadmin/src/views/settings.html @@ -161,15 +161,15 @@ - -
+ +
- +
-
+
- +
@@ -177,19 +177,19 @@
-
+
- +
-
+
- +
-
- - +
+ +
@@ -379,7 +379,7 @@
{{ backupConfig.backupFolder || '/var/backups' }} - {{ backupConfig.region + ' ' + backupConfig.bucket + '/' + backupConfig.prefix }} + {{ backupConfig.region + ' ' + backupConfig.bucket + '/' + backupConfig.prefix }}
diff --git a/webadmin/src/views/settings.js b/webadmin/src/views/settings.js index 35dc22733..3bef28b09 100644 --- a/webadmin/src/views/settings.js +++ b/webadmin/src/views/settings.js @@ -52,7 +52,8 @@ angular.module('Application').controller('SettingsController', ['$scope', '$loca $scope.storageProvider = [ { name: 'Amazon S3', value: 's3' }, - { name: 'Filesystem (not recommended)', value: 'filesystem' } + { name: 'Filesystem (not recommended)', value: 'filesystem' }, + { name: 'Minio', value: 'minio' } ]; $scope.planChange = { @@ -333,6 +334,10 @@ angular.module('Application').controller('SettingsController', ['$scope', '$loca } }; + $scope.s3like = function (provider) { + return provider === 's3' || provider === 'minio'; + }; + $scope.configureBackup = { busy: false, error: {}, @@ -373,18 +378,23 @@ angular.module('Application').controller('SettingsController', ['$scope', '$loca }; // only set provider specific fields, this will clear them in the db - if (backupConfig.provider === 's3') { + if ($scope.s3like(backupConfig.provider)) { backupConfig.bucket = $scope.configureBackup.bucket; backupConfig.prefix = $scope.configureBackup.prefix; backupConfig.accessKeyId = $scope.configureBackup.accessKeyId; backupConfig.secretAccessKey = $scope.configureBackup.secretAccessKey; + + if (backupConfig.provider === 's3') { + if ($scope.configureBackup.region) backupConfig.region = $scope.configureBackup.region; + } else if (backupConfig.provider === 'minio') { + backupConfig.region = 'us-east-1'; + } + + if ($scope.configureBackup.endpoint) backupConfig.endpoint = $scope.configureBackup.endpoint; } else if (backupConfig.provider === 'filesystem') { backupConfig.backupFolder = $scope.configureBackup.backupFolder; } - if ($scope.configureBackup.region) backupConfig.region = $scope.configureBackup.region; - if ($scope.configureBackup.endpoint) backupConfig.endpoint = $scope.configureBackup.endpoint; - Client.setBackupConfig(backupConfig, function (error) { $scope.configureBackup.busy = false;