X-Git-Url: https://mudpy.org/gitweb?p=mudpy.git;a=blobdiff_plain;f=mudpy%2Fmisc.py;h=c0f73a1faf6af70d44b7b5620de8acda50811c28;hp=e737a287687a784e282b57113dd8797617b0664e;hb=3b59b8a74388427be4e06d0dad558d597ee34ef4;hpb=87065461784719196154b37340e6c8f76b4d801f diff --git a/mudpy/misc.py b/mudpy/misc.py index e737a28..c0f73a1 100644 --- a/mudpy/misc.py +++ b/mudpy/misc.py @@ -184,27 +184,35 @@ class Element: prepend_padding ) + def is_restricted(self): + """Boolean check whether command is administrative or debugging.""" + return bool(self.get("administrative") or self.get("debugging")) + def is_admin(self): """Boolean check whether an actor is controlled by an admin owner.""" - return(self.owner and self.owner.is_admin()) + return self.owner and self.owner.is_admin() def can_run(self, command): """Check if the user can run this command object.""" # has to be in the commands group if command not in self.universe.groups["command"].values(): - return(False) + return False + + # debugging commands are not allowed outside debug mode + if command.get("debugging") and not self.universe.debug_mode(): + return False # avatars of administrators can run any command if self.is_admin(): - return(True) + return True # everyone can run non-administrative commands - if not command.get("administrative"): - return(True) + if not command.is_restricted(): + return True # otherwise the command cannot be run by this actor - return(False) + return False def update_location(self): """Make sure the location's contents contain this element.""" @@ -477,6 +485,10 @@ class Universe: if fallback not in self.files: mudpy.data.Data(fallback, self, flags=flags) + def debug_mode(self): + """Boolean method to indicate whether unsafe debugging is enabled.""" + return self.groups["mudpy"]["limit"].get("debug", False) + class User: @@ -565,7 +577,7 @@ class User: self.remove() # get rid of the old user object - del(self) + del self # create a new user object new_user = User() @@ -629,7 +641,7 @@ class User: # take this one out of the list and delete self.remove() - del(self) + del self return_value = True break @@ -1001,7 +1013,7 @@ class User: def is_admin(self): """Boolean check whether user's account is an admin.""" - return(self.account.get("administrator", False)) + return self.account.get("administrator", False) def broadcast(message, add_prompt=True): @@ -1506,7 +1518,7 @@ def find_command(command_name): else: for candidate in sorted(universe.groups["command"]): if candidate.startswith(command_name) and not universe.groups[ - "command"][candidate].get("administrative"): + "command"][candidate].is_restricted(): # the command matches the start of a command word and is not # restricted to administrators command = universe.groups["command"][candidate] @@ -2108,6 +2120,8 @@ def setup(): log("Running version: %s" % universe.versions.version, 1) log("Initial directory: %s" % universe.startdir, 1) log("Command line: %s" % " ".join(sys.argv), 1) + if universe.debug_mode(): + log("WARNING: Unsafe debugging mode is enabled!", 6) # pass the initialized universe back return universe