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
135 lines
4.8 KiB
JavaScript
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;
|
|
};
|
|
|
|
});
|