Files
duplicati/Duplicati/Server/webroot/ngax/scripts/services/EditUriBackendConfig.js
T
JanandGitHub a493b37a97 Fix hidden username and password options when changing backends. (#4973)
Remove username and password from target options if the backend does not show the input fields.

The username and password options are stored in different variables than the other backend options. Therefore, they are only visible if the backend supports them.

Closes #3082
2023-09-24 16:19:20 +02:00

135 lines
4.8 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}{5}',
scope.Backend.Key,
(scope.SupportsSSL && scope.UseSSL) ? 's' : '',
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 (!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;
};
});