1
0
mirror of https://github.com/mail-in-a-box/mailinabox.git synced 2026-03-23 18:57:23 +01:00

Allow to backup on any S3-compatible service

Starting from the versions subsequent to the v57a, the default backend
of duplicity for backups to S3-compatible services is boto3
which requires the indication of the region (--S3-region-name)
for most cases in which the S3 service is not provided by AWS.
Thanks to this intervention, the region of the S3 service
is provided as a parameter to duplicity and is stored in the
/home/user-data/backup/custom.yaml file, like any other backup
configuration parameters.
Moreover, the list of the regions shown to the user in the drop-down
menu in the backup configuration panel is replaced with
a normal text field, since the list included the AWS regions only
and therefore was not usable in all other cases.

See issue #2200.
This commit is contained in:
pappapisshu
2022-12-23 01:08:35 +01:00
parent 3314c4f7de
commit 1fc33a3933
4 changed files with 28 additions and 38 deletions

View File

@@ -77,23 +77,18 @@
<p>You MUST manually copy the encryption password from <tt class="backup-encpassword-file"></tt> to a safe and secure location. You will need this file to decrypt backup files. It is <b>NOT</b> stored in your S3 bucket.</p>
</div>
</div>
<div class="form-group backup-target-s3">
<label for="backup-target-s3-host-select" class="col-sm-2 control-label">S3 Region</label>
<div class="col-sm-8">
<select class="form-control" rows="1" id="backup-target-s3-host-select">
{% for name, host in backup_s3_hosts %}
<option value="{{host}}">{{name}}</option>
{% endfor %}
<option value="other">Other (non AWS)</option>
</select>
</div>
</div>
<div class="form-group backup-target-s3">
<label for="backup-target-s3-host" class="col-sm-2 control-label">S3 Host / Endpoint</label>
<div class="col-sm-8">
<input type="text" placeholder="Endpoint" class="form-control" rows="1" id="backup-target-s3-host">
</div>
</div>
<div class="form-group backup-target-s3">
<label for="backup-target-s3-region" class="col-sm-2 control-label">S3 Region</label>
<div class="col-sm-8">
<input type="text" placeholder="Region" class="form-control" rows="1" id="backup-target-s3-region">
</div>
</div>
<div class="form-group backup-target-s3">
<label for="backup-target-s3-path" class="col-sm-2 control-label">S3 Path</label>
<div class="col-sm-8">
@@ -172,8 +167,6 @@ function toggle_form() {
var target_type = $("#backup-target-type").val();
$(".backup-target-local, .backup-target-rsync, .backup-target-s3, .backup-target-b2").hide();
$(".backup-target-" + target_type).show();
init_inputs(target_type);
}
function nice_size(bytes) {
@@ -253,6 +246,7 @@ function show_custom_backup() {
$(".backup-location").text(r.file_target_directory);
$(".backup-encpassword-file").text(r.enc_pw_file);
$("#ssh-pub-key").val(r.ssh_pub_key);
$("#backup-target-s3-region").val(r.target_region);
if (r.target == "file://" + r.file_target_directory) {
$("#backup-target-type").val("local");
@@ -269,7 +263,6 @@ function show_custom_backup() {
$("#backup-target-type").val("s3");
var hostpath = r.target.substring(5).split('/');
var host = hostpath.shift();
$("#backup-target-s3-host-select").val(host);
$("#backup-target-s3-host").val(host);
$("#backup-target-s3-path").val(hostpath.join('/'));
} else if (r.target.substring(0, 5) == "b2://") {
@@ -308,6 +301,8 @@ function set_custom_backup() {
}
var target_region = $("#backup-target-s3-region").val();
var min_age = $("#min-age").val();
api(
"/system/backup/config",
@@ -316,7 +311,8 @@ function set_custom_backup() {
target: target,
target_user: target_user,
target_pass: target_pass,
min_age: min_age
min_age: min_age,
target_region: target_region
},
function(r) {
// use .text() --- it's a text response, not html
@@ -328,20 +324,4 @@ function set_custom_backup() {
});
return false;
}
function init_inputs(target_type) {
function set_host(host) {
if(host !== 'other') {
$("#backup-target-s3-host").val(host);
} else {
$("#backup-target-s3-host").val('');
}
}
if (target_type == "s3") {
$('#backup-target-s3-host-select').off('change').on('change', function() {
set_host($('#backup-target-s3-host-select').val());
});
set_host($('#backup-target-s3-host-select').val());
}
}
</script>