From d45fa0a36ab90c8fbe96e108b9268b41ff7ece36 Mon Sep 17 00:00:00 2001 From: Jeremy Stanley Date: Wed, 4 Oct 2017 08:27:25 +0000 Subject: [PATCH] Use new-style elements for accounts Switch account elements to the new data model, and fix some old-style assumptions in Element creation and destruction. Also use (and coerce to) boolean values for the administrator facet, and be more clear in logs when accounts authenticating are admins or not. --- mudpy/misc.py | 26 ++++++++++++++++++-------- mudpy/tests/selftest.py | 4 ++-- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/mudpy/misc.py b/mudpy/misc.py index ebccc26..7478f3f 100644 --- a/mudpy/misc.py +++ b/mudpy/misc.py @@ -57,7 +57,11 @@ class Element: # parse out appropriate category and subkey names, add to list if self.key.find(":") > 0: + # TODO(fungi) this can be removed once old_style Elements + # are no longer needed self.category, self.subkey = self.key.split(":", 1) + elif self.key.find(".") > 0: + self.category, self.subkey = self.key.split(".", 1)[-2:] else: self.category = "other" self.subkey = self.key @@ -73,10 +77,6 @@ class Element: # record or reset a pointer to the origin file self.origin = self.universe.files[origin.source] - # add a data section to the origin if necessary - if self.key not in self.origin.data: - self.origin.data[self.key] = {} - # add or replace this element in the universe self.universe.contents[self.key] = self self.universe.categories[self.category][self.subkey] = self @@ -88,7 +88,11 @@ class Element: def destroy(self): """Remove an element from the universe and destroy it.""" - del(self.origin.data[self.key]) + if self.old_style: + del self.origin.data[self.key] + else: + for facet in self.facethash: + del self.origin.data[".".join((self.key, facet))] del self.universe.categories[self.category][self.subkey] del self.universe.contents[self.key] del self @@ -156,6 +160,8 @@ class Element: "disallowed") if facet in ["loglevel"]: value = int(value) + elif facet in ["administrator"]: + value = bool(value) if not self.has_facet(facet) or not self.get(facet) == value: if self.old_style: if self.key not in self.origin.data: @@ -679,11 +685,15 @@ class User: def authenticate(self): """Flag the user as authenticated and disconnect duplicates.""" if self.state is not "authenticated": - log("User " + self.account.get("name") + " logged in.", 2) self.authenticated = True if ("mudpy.limit" in universe.contents and self.account.subkey in universe.contents["mudpy.limit"].get("admins")): - self.account.set("administrator", "True") + self.account.set("administrator", True) + log("Administrator %s authenticated." % + self.account.get("name"), 2) + else: + # log("User %s authenticated." % self.account.get("name"), 2) + log("User %s authenticated." % self.account.subkey, 2) def show_menu(self): """Send the user their current menu.""" @@ -1723,7 +1733,7 @@ def handler_entering_account_name(user): # otherwise, this could be a brand new user else: - user.account = Element("account:" + name, universe, old_style=True) + user.account = Element("account.%s" % name, universe) user.account.set("name", name) log("New user: " + name, 2) user.state = "checking_new_account_name" diff --git a/mudpy/tests/selftest.py b/mudpy/tests/selftest.py index a7fefc2..15d7366 100644 --- a/mudpy/tests/selftest.py +++ b/mudpy/tests/selftest.py @@ -200,14 +200,14 @@ test_show_log = ( ) test_custom_loglevel = ( - (2, "> ", "set account:admin loglevel 2"), + (2, "> ", "set account.admin loglevel 2"), (2, "You have successfully .*> ", "show log"), (2, r"There are [0-9]+ log lines in memory and [0-9]+ at or above level " r"[0-9]+\. The matching lines\r\nfrom [0-9]+ to [0-9]+ are:", ""), ) test_invalid_loglevel = ( - (2, "> ", "set account:admin loglevel two"), + (2, "> ", "set account.admin loglevel two"), (2, r'''Value "two" of type "" cannot be coerced .*> ''', ""), ) -- 2.11.0