Fabian Deutsch has uploaded a new change for review. Change subject: tui: Correct password checking ......................................................................
tui: Correct password checking Previously the password checking on the security page did not work, this is fixed now. Change-Id: Iebe584c81483345750b77a1bb79c66c8a8621814 Signed-off-by: Fabian Deutsch <[email protected]> --- M scripts/tui/src/ovirt/node/plugins.py M scripts/tui/src/ovirt/node/setup/security_page.py M scripts/tui/src/ovirt/node/ui/__init__.py M scripts/tui/src/ovirt/node/ui/builder.py M scripts/tui/src/ovirt/node/ui/widgets.py 5 files changed, 53 insertions(+), 13 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-node refs/changes/56/10056/1 diff --git a/scripts/tui/src/ovirt/node/plugins.py b/scripts/tui/src/ovirt/node/plugins.py index ac1225f..6144c8b 100644 --- a/scripts/tui/src/ovirt/node/plugins.py +++ b/scripts/tui/src/ovirt/node/plugins.py @@ -284,17 +284,22 @@ self.logger.debug("Request to discard model changes: %s" % changes) self.__changes = {} - def pending_changes(self, only_effective_changes=True): + def pending_changes(self, only_effective_changes=True, + include_invalid=False): """Return all changes which happened since the last on_merge call Args: only_effective_changes: Boolean if all or only the effective changes are returned. + include_invalid: If the invalid changes should be included Returns: dict of changes """ - return self.__effective_changes() if only_effective_changes \ - else self.__changes + changes = self.__effective_changes() if only_effective_changes \ + else self.__changes + if include_invalid: + changes.update(self.__invalid_changes) + return changes def is_valid_changes(self): """If all changes are valid or not @@ -384,9 +389,10 @@ class WidgetsHelper(dict, base.Base): """A helper class to handle widgets """ - def __init__(self): + def __init__(self, widgets={}): super(WidgetsHelper, self).__init__() base.Base.__init__(self) + self.update(widgets) def subset(self, paths): return [self[p] for p in paths] @@ -412,4 +418,15 @@ """Enable or disable all widgets of this group """ self.logger.debug("Enabling widget group: %s" % self) - map(lambda w: w.enabled(is_enable), self.widgethelper.subset(self)) + map(lambda w: w.enabled(is_enable), self.elements()) + + def text(self, text): + """Enable or disable all widgets of this group + """ + self.logger.debug("Setting text of widget group: %s" % self) + map(lambda w: w.set_text(text), self.elements()) + + def elements(self): + """Return the UI elements of this group + """ + return self.widgethelper.subset(self) \ No newline at end of file diff --git a/scripts/tui/src/ovirt/node/setup/security_page.py b/scripts/tui/src/ovirt/node/setup/security_page.py index d4e95f4..96295af 100644 --- a/scripts/tui/src/ovirt/node/setup/security_page.py +++ b/scripts/tui/src/ovirt/node/setup/security_page.py @@ -73,21 +73,27 @@ "Confirm Password:")), ] # Save it "locally" as a dict, for better accessability - self._widgets = dict(widgets) + self._widgets = plugins.WidgetsHelper(dict(widgets)) page = ui.Page(widgets) return page def on_change(self, changes): m = self.model() - m.update(self.pending_changes() or {}) + m.update(self.pending_changes(False, True)) + m.update(changes) effective_model = ChangesHelper(m) passwd_keys = ["passwd.admin.password", "passwd.admin.password_confirmation"] + passwd_widget_group = self._widgets.group(passwd_keys) if effective_model.any_key_in_change(passwd_keys): passwd, passwdc = effective_model.get_key_values(passwd_keys) - if passwd != passwdc: + if passwd == passwdc: + # Remove all potential error messages + map(lambda e: e.valid(True), passwd_widget_group.elements()) + else: + # Throw an error message raise exceptions.InvalidData("Passwords do not match.") def on_merge(self, effective_changes): @@ -119,10 +125,15 @@ raise exceptions.InvalidData("Passwords do not match") passwd = utils.security.Passwd() + # Create a custom transaction element, because the password + # is not handled/saved in the defaults file class SetAdminPasswd(utils.Transaction.Element): + title = "Setting admin password" + def commit(self): self.logger.debug("Setting admin password.") passwd.set_password("admin", pw) + txs += [SetAdminPasswd()] progress_dialog = ui.TransactionProgressDialog(txs, self) diff --git a/scripts/tui/src/ovirt/node/ui/__init__.py b/scripts/tui/src/ovirt/node/ui/__init__.py index 3f915fb..0e1c883 100644 --- a/scripts/tui/src/ovirt/node/ui/__init__.py +++ b/scripts/tui/src/ovirt/node/ui/__init__.py @@ -174,6 +174,13 @@ super(Entry, self).__init__(label, enabled) self.label = label self.align_vertical = align_vertical + self.valid(True) + + @Element.signal_change + def valid(self, is_valid): + if is_valid in [True, False]: + self._valid = is_valid + return self._valid class PasswordEntry(Entry): diff --git a/scripts/tui/src/ovirt/node/ui/builder.py b/scripts/tui/src/ovirt/node/ui/builder.py index 2ebc855..b0f51d4 100644 --- a/scripts/tui/src/ovirt/node/ui/builder.py +++ b/scripts/tui/src/ovirt/node/ui/builder.py @@ -143,6 +143,11 @@ item.connect_signal("enabled", on_item_enabled_change_cb) + def on_item_valid_change_cb(w, v): + widget.valid(v) + + item.connect_signal("valid", on_item_valid_change_cb) + def on_widget_value_change(widget, new_value): LOGGER.debug("Entry %s changed, calling callback: '%s'" % (widget, path)) diff --git a/scripts/tui/src/ovirt/node/ui/widgets.py b/scripts/tui/src/ovirt/node/ui/widgets.py index cc56648..f3eab3f 100644 --- a/scripts/tui/src/ovirt/node/ui/widgets.py +++ b/scripts/tui/src/ovirt/node/ui/widgets.py @@ -275,10 +275,8 @@ alignment_widget = urwid.Columns if self._align_vertical: alignment_widget = urwid.Pile - self._columns = alignment_widget([ - self._label_attrmap, - input_widget - ]) + self._columns = alignment_widget([self._label_attrmap, + input_widget]) self._notice = urwid.Text("") self._notice_attrmap = urwid.AttrMap(self._notice, @@ -309,7 +307,9 @@ attr_map_label = {None: "plugin.widget.entry.label"} attr_map_edit = {None: "plugin.widget.entry"} attr_map_linebox = {None: "plugin.widget.entry.frame"} - if not is_valid: + if is_valid: + self.set_notice(None) + else: attr_map_label = {None: "plugin.widget.entry.label.invalid"} attr_map_edit = {None: "plugin.widget.entry.invalid"} attr_map_linebox = {None: "plugin.widget.entry.frame.invalid"} -- To view, visit http://gerrit.ovirt.org/10056 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iebe584c81483345750b77a1bb79c66c8a8621814 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-node Gerrit-Branch: master Gerrit-Owner: Fabian Deutsch <[email protected]> _______________________________________________ node-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/node-patches
