diff --git a/src/views/app.js b/src/views/app.js
index 72f77f6a1..18a19a308 100644
--- a/src/views/app.js
+++ b/src/views/app.js
@@ -107,6 +107,7 @@ angular.module('Application').controller('AppController', ['$scope', '$location'
{ name: 'S3 API Compatible (v4)', value: 's3-v4-compat' },
{ name: 'Scaleway Object Storage', value: 'scaleway-objectstorage' },
{ name: 'SSHFS Mount', value: 'sshfs' },
+ { name: 'UpCloud Object Storage', value: 'upcloud-objectstorage' },
{ name: 'Vultr Object Storage', value: 'vultr-objectstorage' },
// { name: 'No-op (Only for testing)', value: 'noop' },
{ name: 'Wasabi', value: 'wasabi' }
@@ -1048,7 +1049,8 @@ angular.module('Application').controller('AppController', ['$scope', '$location'
return provider === 's3' || provider === 'minio' || provider === 's3-v4-compat' ||
provider === 'exoscale-sos' || provider === 'digitalocean-spaces' ||
provider === 'scaleway-objectstorage' || provider === 'wasabi' || provider === 'backblaze-b2' ||
- provider === 'linode-objectstorage' || provider === 'ovh-objectstorage' || provider === 'ionos-objectstorage' || provider === 'vultr-objectstorage';
+ provider === 'linode-objectstorage' || provider === 'ovh-objectstorage' || provider === 'ionos-objectstorage'
+ || provider === 'vultr-objectstorage' || provider === 'upcloud-objectstorage';
};
$scope.mountlike = function (provider) {
@@ -1141,6 +1143,10 @@ angular.module('Application').controller('AppController', ['$scope', '$location'
} else if (backupConfig.provider === 'vultr-objectstorage') {
backupConfig.region = $scope.vultrRegions.find(function (x) { return x.value === $scope.importBackup.endpoint; }).region;
backupConfig.signatureVersion = 'v4';
+ } else if (backupConfig.provider === 'upcloud-objectstorage') {
+ var m = /^.*\.(.*)\.upcloudobjects.com$/.exec(backupConfig.endpoint);
+ backupConfig.region = m ? m[1] : 'us-east-1'; // let it fail in validation phase if m is not valid
+ backupConfig.signatureVersion = 'v4';
} else if (backupConfig.provider === 'digitalocean-spaces') {
backupConfig.region = 'us-east-1';
}
diff --git a/src/views/backups.html b/src/views/backups.html
index b7e8187f5..71070fad0 100644
--- a/src/views/backups.html
+++ b/src/views/backups.html
@@ -198,10 +198,10 @@
+
+
-
+
diff --git a/src/views/backups.js b/src/views/backups.js
index 75009beb7..aef073d70 100644
--- a/src/views/backups.js
+++ b/src/views/backups.js
@@ -90,6 +90,21 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat
{ name: 'DE', value: 'https://s3-de-central.profitbricks.com', region: 's3-de-central' }, // default
];
+ // this is not used anywhere because upcloud needs endpoint URL. we detect region from the URL
+ $scope.upcloudRegions = [
+ { name: 'AU-SYD1 (Australia)', value: 'https://au-syd1.upcloudobjects.com', region: 'au-syd1' }, // default
+ { name: 'DE-FRA1 (Germany)', value: 'https://de-fra1.upcloudobjects.com', region: 'de-fra1' },
+ { name: 'ES-MAD1 (Spain)', value: 'https://es-mad1.upcloudobjects.com', region: 'es-mad1' },
+ { name: 'FI-HEL2 (Finland)', value: 'https://fi-hel2.upcloudobjects.com', region: 'fi-hel2' },
+ { name: 'NL-AMS1 (Netherlands)', value: 'https://nl-ams1.upcloudobjects.com', region: 'nl-ams1' },
+ { name: 'PL-WAW1 (Poland)', value: 'https://pl-waw1.upcloudobjects.com', region: 'pl-waw1' },
+ { name: 'SG-SIN1 (Singapore)', value: 'https://sg-sin1.upcloudobjects.com', region: 'sg-sin1' },
+ { name: 'UK-LON1 (United Kingdom)', value: 'https://uk-lon1.upcloudobjects.com', region: 'uk-lon1' },
+ { name: 'US-CHI1 (USA)', value: 'https://us-chi1.upcloudobjects.com', region: 'us-chi1' },
+ { name: 'US-NYC1 (USA)', value: 'https://us-nyc1.upcloudobjects.com', region: 'us-nyc1' },
+ { name: 'US-SJO1 (USA)', value: 'https://us-sjo1.upcloudobjects.com', region: 'us-sjo1' },
+ ];
+
$scope.vultrRegions = [
{ name: 'New Jersey', value: 'https://ewr1.vultrobjects.com', region: 'us-east-1' }, // default
];
@@ -112,6 +127,7 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat
{ name: 'S3 API Compatible (v4)', value: 's3-v4-compat' },
{ name: 'Scaleway Object Storage', value: 'scaleway-objectstorage' },
{ name: 'SSHFS Mount', value: 'sshfs' },
+ { name: 'UpCloud Object Storage', value: 'upcloud-objectstorage' },
{ name: 'Vultr Object Storage', value: 'vultr-objectstorage' },
{ name: 'Wasabi', value: 'wasabi' },
{ name: 'No-op (Only for testing)', value: 'noop' }
@@ -289,7 +305,8 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat
return provider === 's3' || provider === 'minio' || provider === 's3-v4-compat'
|| provider === 'exoscale-sos' || provider === 'digitalocean-spaces'
|| provider === 'scaleway-objectstorage' || provider === 'wasabi' || provider === 'backblaze-b2'
- || provider === 'linode-objectstorage' || provider === 'ovh-objectstorage' || provider === 'ionos-objectstorage' || provider === 'vultr-objectstorage';
+ || provider === 'linode-objectstorage' || provider === 'ovh-objectstorage' || provider === 'ionos-objectstorage'
+ || provider === 'vultr-objectstorage' || provider === 'upcloud-objectstorage';
};
$scope.mountlike = function (provider) {
@@ -580,6 +597,10 @@ angular.module('Application').controller('BackupsController', ['$scope', '$locat
} else if (backupConfig.provider === 'vultr-objectstorage') {
backupConfig.region = $scope.vultrRegions.find(function (x) { return x.value === $scope.configureBackup.endpoint; }).region;
backupConfig.signatureVersion = 'v4';
+ } else if (backupConfig.provider === 'upcloud-objectstorage') { // the UI sets region and endpoint
+ var m = /^.*\.(.*)\.upcloudobjects.com$/.exec(backupConfig.endpoint);
+ backupConfig.region = m ? m[1] : 'us-east-1'; // let it fail in validation phase if m is not valid
+ backupConfig.signatureVersion = 'v4';
} else if (backupConfig.provider === 'digitalocean-spaces') {
backupConfig.region = 'us-east-1';
}