134 lines
4.6 KiB
JavaScript
134 lines
4.6 KiB
JavaScript
$(function() {
|
|
function UserSettingsViewModel(parameters) {
|
|
var self = this;
|
|
|
|
self.loginState = parameters[0];
|
|
self.users = parameters[1];
|
|
|
|
self.userSettingsDialog = undefined;
|
|
|
|
var auto_locale = {language: "_default", display: gettext("Site default"), english: undefined};
|
|
self.locales = ko.observableArray([auto_locale].concat(_.sortBy(_.values(AVAILABLE_LOCALES), function(n) {
|
|
return n.display;
|
|
})));
|
|
self.locale_languages = _.keys(AVAILABLE_LOCALES);
|
|
|
|
self.access_password = ko.observable(undefined);
|
|
self.access_repeatedPassword = ko.observable(undefined);
|
|
self.access_apikey = ko.observable(undefined);
|
|
self.interface_language = ko.observable(undefined);
|
|
|
|
self.currentUser = ko.observable(undefined);
|
|
self.currentUser.subscribe(function(newUser) {
|
|
self.access_password(undefined);
|
|
self.access_repeatedPassword(undefined);
|
|
self.access_apikey(undefined);
|
|
self.interface_language("_default");
|
|
|
|
if (newUser !== undefined) {
|
|
self.access_apikey(newUser.apikey);
|
|
if (newUser.settings.hasOwnProperty("interface") && newUser.settings.interface.hasOwnProperty("language")) {
|
|
self.interface_language(newUser.settings.interface.language);
|
|
}
|
|
}
|
|
});
|
|
|
|
self.passwordMismatch = ko.pureComputed(function() {
|
|
return self.access_password() !== self.access_repeatedPassword();
|
|
});
|
|
|
|
self.show = function(user) {
|
|
if (!CONFIG_ACCESS_CONTROL) return;
|
|
|
|
if (user === undefined) {
|
|
user = self.loginState.currentUser();
|
|
}
|
|
|
|
self.currentUser(user);
|
|
self.userSettingsDialog.modal("show");
|
|
};
|
|
|
|
self.save = function() {
|
|
if (!CONFIG_ACCESS_CONTROL) return;
|
|
|
|
if (self.access_password() && !self.passwordMismatch()) {
|
|
self.users.updatePassword(self.currentUser().name, self.access_password(), function(){});
|
|
}
|
|
|
|
var settings = {
|
|
"interface": {
|
|
"language": self.interface_language()
|
|
}
|
|
};
|
|
self.updateSettings(self.currentUser().name, settings)
|
|
.done(function() {
|
|
// close dialog
|
|
self.currentUser(undefined);
|
|
self.userSettingsDialog.modal("hide");
|
|
self.loginState.reloadUser();
|
|
});
|
|
};
|
|
|
|
self.copyApikey = function() {
|
|
copyToClipboard(self.access_apikey());
|
|
};
|
|
|
|
self.generateApikey = function() {
|
|
if (!CONFIG_ACCESS_CONTROL) return;
|
|
|
|
var generate = function() {
|
|
self.users.generateApikey(self.currentUser().name)
|
|
.done(function(response) {
|
|
self.access_apikey(response.apikey);
|
|
});
|
|
};
|
|
|
|
if (self.access_apikey()) {
|
|
showConfirmationDialog(gettext("This will generate a new API Key. The old API Key will cease to function immediately."),
|
|
generate);
|
|
} else {
|
|
generate();
|
|
}
|
|
};
|
|
|
|
self.deleteApikey = function() {
|
|
if (!CONFIG_ACCESS_CONTROL) return;
|
|
if (!self.access_apikey()) return;
|
|
|
|
showConfirmationDialog(gettext("This will delete the API Key. It will cease to to function immediately."), function() {
|
|
self.users.deleteApikey(self.currentUser().name)
|
|
.done(function() {
|
|
self.access_apikey(undefined);
|
|
});
|
|
})
|
|
};
|
|
|
|
self.updateSettings = function(username, settings) {
|
|
return OctoPrint.users.saveSettings(username, settings);
|
|
};
|
|
|
|
self.saveEnabled = function() {
|
|
return !self.passwordMismatch();
|
|
};
|
|
|
|
self.onStartup = function() {
|
|
self.userSettingsDialog = $("#usersettings_dialog");
|
|
};
|
|
|
|
self.onAllBound = function(allViewModels) {
|
|
self.userSettingsDialog.on('show', function() {
|
|
callViewModels(allViewModels, "onUserSettingsShown");
|
|
});
|
|
self.userSettingsDialog.on('hidden', function() {
|
|
callViewModels(allViewModels, "onUserSettingsHidden");
|
|
});
|
|
}
|
|
|
|
}
|
|
|
|
OCTOPRINT_VIEWMODELS.push({
|
|
construct: UserSettingsViewModel,
|
|
dependencies: ["loginStateViewModel", "usersViewModel"],
|
|
elements: ["#usersettings_dialog"]
|
|
});
|
|
});
|