duplicati/Duplicati/Server/webroot/ngax/scripts/services/EditUriBackendConfig.js
Kenneth Skovhede 238caeb74a Fix ngax support --use-ssl
This fixes ngax to not use the `s` postfix on destinations, but instead rely on `--use-ssl`.

There is still support for inputting strings with the postfix, but the generated url will be without it.
2025-07-11 11:03:23 +02:00

143 lines
5.2 KiB
JavaScript

backupApp.service('EditUriBackendConfig', function(AppService, AppUtils, SystemInfo, DialogService, gettextCatalog) {
var self = this;
// All backends with a custom UI must register here
this.templates = { };
// Loaders are a way for backends to request extra data from the server
this.loaders = { };
// Parsers take a decomposed uri input and sets up the scope variables
this.parsers = { };
// Builders take the scope and produce the uri output
this.builders = { };
// Validaters check the input and show the user an error or warning
this.validaters = { };
// Testers perform additional checks when pressing the Test button
this.testers = { };
this.defaultbackend = 'file';
this.defaulttemplate = 'templates/backends/generic.html';
this.defaultbuilder = function(scope) {
var opts = {};
self.merge_in_advanced_options(scope, opts, true);
var url = AppUtils.format('{0}://{1}{2}/{3}{4}',
scope.Backend.Key,
scope.Server || '',
(scope.Port || '') == '' ? '' : ':' + scope.Port,
scope.Path || '',
AppUtils.encodeDictAsUrl(opts)
);
return url;
};
this.merge_in_advanced_options = function (scope, dict, includeUserPassword) {
if (includeUserPassword == null) {
includeUserPassword = true;
}
// Some backends do not have input fields for Username and Password
// When changing backends, these variables are not cleared
// Only include them if the backend supports it and shows input fields for them
// Other options appear in the AdvancedOptions list and can be removed manually if not supported
if (includeUserPassword && scope.Username != null && scope.Username != '')
dict['auth-username'] = scope.Username;
if (includeUserPassword && scope.Password != null && scope.Password != '')
dict['auth-password'] = scope.Password;
if (scope.UseSSL)
dict['use-ssl'] = 'true';
if (!AppUtils.parse_extra_options(scope.AdvancedOptions, dict))
return false;
for(var k in dict)
if (k.indexOf('--') == 0) {
dict[k.substr(2)] = dict[k];
delete dict[k];
}
return true;
};
this.show_error_dialog = function(msg) {
DialogService.dialog('Error', msg);
return false;
};
this.show_warning_dialog = function(msg, continuation) {
DialogService.dialog(gettextCatalog.getString('Confirmation required'), msg, [gettextCatalog.getString('No'), gettextCatalog.getString('Yes')], function(ix) {
if (ix == 1)
continuation();
});
};
this.defaultvalidater = function(scope, continuation) {
continuation();
};
this.require_field = function(scope, field, label) {
if ((scope[field] || '').trim().length == 0)
return self.show_error_dialog(gettextCatalog.getString('You must fill in {{field}}', { field: label || field }));
return true;
};
this.recommend_field = function (scope, field, label, reason, continuation) {
if ((scope[field] || '').trim().length == 0)
return self.show_warning_dialog(gettextCatalog.getString('You should fill in {{field}} {{reason}}', { field: label || field, reason: reason }), continuation);
else
continuation();
};
this.require_server = function(scope) {
if ((scope.Server || '').trim().length == 0)
return self.show_error_dialog(gettextCatalog.getString('You must fill in the server name or address'));
return true;
};
this.require_path = function(scope) {
if ((scope.Path || '').trim().length == 0)
return self.show_error_dialog(gettextCatalog.getString('You must specify a path'));
return true;
};
this.recommend_path = function(scope, continuation) {
if ((scope.Path || '').trim().length == 0)
return self.show_warning_dialog(gettextCatalog.getString('If you do not enter a path, all files will be stored in the login folder.\nAre you sure this is what you want?'), continuation);
else
continuation();
};
this.require_username_and_password = function(scope) {
if ((scope.Username || '').trim().length == 0)
return self.show_error_dialog(gettextCatalog.getString('You must fill in the username'));
if ((scope.Password || '').trim().length == 0)
return self.show_error_dialog(gettextCatalog.getString('You must fill in the password'));
return true;
};
this.require_username = function(scope) {
if ((scope.Username || '').trim().length == 0)
return self.show_error_dialog(gettextCatalog.getString('You must fill in the username'));
return true;
};
this.recommend_username = function(scope, continuation) {
if ((scope.Username || '').trim().length == 0)
return self.show_warning_dialog(gettextCatalog.getString('Most servers require a username, so you will likely need to enter one.\nAre you sure want to continue without a username?'), continuation);
else
continuation();
};
});