X-Git-Url: https://mudpy.org/gitweb?p=mudpy.git;a=blobdiff_plain;f=mudpy%2Fmisc.py;h=2923feb6f670f8b2601e2b63c5861f042e6b50cd;hp=3cb201cba90f5d676505744ece8447e43fc89e60;hb=0580d77ecba37ac032dde3e3d8d7b054ccc7fd74;hpb=a848ee505cff4e968417004173adc790f4e78ff1 diff --git a/mudpy/misc.py b/mudpy/misc.py index 3cb201c..2923feb 100644 --- a/mudpy/misc.py +++ b/mudpy/misc.py @@ -651,8 +651,8 @@ class User: if self.state is not "authenticated": log("User " + self.account.get("name") + " logged in.", 2) self.authenticated = True - if self.account.subkey in universe.contents["mudpy.limit"].get( - "admins"): + if ("mudpy.limit" in universe.contents and self.account.subkey in + universe.contents["mudpy.limit"].get("admins")): self.account.set("administrator", "True") def show_menu(self): @@ -974,9 +974,14 @@ def log(message, level=0): """Log a message.""" # a couple references we need - file_name = universe.contents["mudpy.log"].get("file") - max_log_lines = universe.contents["mudpy.log"].get("lines") - syslog_name = universe.contents["mudpy.log"].get("syslog") + if "mudpy.log" in universe.contents: + file_name = universe.contents["mudpy.log"].get("file", "") + max_log_lines = universe.contents["mudpy.log"].get("lines", 0) + syslog_name = universe.contents["mudpy.log"].get("syslog", "") + else: + file_name = "" + max_log_lines = 0 + syslog_name = "" timestamp = time.asctime()[4:19] # turn the message into a list of nonempty lines @@ -993,7 +998,8 @@ def log(message, level=0): file_descriptor.close() # send the timestamp and line to standard output - if universe.contents["mudpy.log"].get("stdout"): + if ("mudpy.log" in universe.contents and + universe.contents["mudpy.log"].get("stdout")): for line in lines: print(timestamp + " " + line) @@ -1710,6 +1716,12 @@ def handler_checking_password(user): # get the next waiting line of input input_data = user.input_queue.pop(0) + if "mudpy.limit" in universe.contents: + max_password_tries = universe.contents["mudpy.limit"].get( + "password_tries", 3) + else: + max_password_tries = 3 + # does the hashed input equal the stored hash? if mudpy.password.verify(input_data, user.account.get("passhash")): @@ -1719,8 +1731,7 @@ def handler_checking_password(user): user.state = "main_utility" # if at first your hashes don't match, try, try again - elif user.password_tries < universe.contents["mudpy.limit"].get( - "password_tries") - 1: + elif user.password_tries < max_password_tries - 1: user.password_tries += 1 user.error = "incorrect" @@ -1738,6 +1749,12 @@ def handler_entering_new_password(user): # get the next waiting line of input input_data = user.input_queue.pop(0) + if "mudpy.limit" in universe.contents: + max_password_tries = universe.contents["mudpy.limit"].get( + "password_tries", 3) + else: + max_password_tries = 3 + # make sure the password is strong--at least one upper, one lower and # one digit, seven or more characters in length if len(input_data) > 6 and len( @@ -1753,8 +1770,7 @@ def handler_entering_new_password(user): user.state = "verifying_new_password" # the password was weak, try again if you haven't tried too many times - elif user.password_tries < universe.contents["mudpy.limit"].get( - "password_tries") - 1: + elif user.password_tries < max_password_tries - 1: user.password_tries += 1 user.error = "weak" @@ -1773,6 +1789,12 @@ def handler_verifying_new_password(user): # get the next waiting line of input input_data = user.input_queue.pop(0) + if "mudpy.limit" in universe.contents: + max_password_tries = universe.contents["mudpy.limit"].get( + "password_tries", 3) + else: + max_password_tries = 3 + # hash the input and match it to storage if mudpy.password.verify(input_data, user.account.get("passhash")): user.authenticate() @@ -1783,8 +1805,7 @@ def handler_verifying_new_password(user): # go back to entering the new password as long as you haven't tried # too many times - elif user.password_tries < universe.contents["mudpy.limit"].get( - "password_tries") - 1: + elif user.password_tries < max_password_tries - 1: user.password_tries += 1 user.error = "differs" user.state = "entering_new_password" @@ -1998,12 +2019,13 @@ def command_say(actor, parameters): if message: # match the punctuation used, if any, to an action - actions = universe.contents["mudpy.linguistic"].get( - "actions" - ) - default_punctuation = ( - universe.contents["mudpy.linguistic"].get( - "default_punctuation")) + if "mudpy.linguistic" in universe.contents: + actions = universe.contents["mudpy.linguistic"].get("actions", {}) + default_punctuation = (universe.contents["mudpy.linguistic"].get( + "default_punctuation", ".")) + else: + actions = {} + default_punctuation = "." action = "" # reverse sort punctuation options so the longest match wins @@ -2027,9 +2049,10 @@ def command_say(actor, parameters): message = message[0].lower() + message[1:] # iterate over all words in message, replacing typos - typos = universe.contents["mudpy.linguistic"].get( - "typos" - ) + if "mudpy.linguistic" in universe.contents: + typos = universe.contents["mudpy.linguistic"].get("typos", {}) + else: + typos = {} words = message.split() for index in range(len(words)): word = words[index] @@ -2313,7 +2336,8 @@ def daemonize(universe): """Fork and disassociate from everything.""" # only if this is what we're configured to do - if universe.contents["mudpy.process"].get("daemon"): + if "mudpy.process" in universe.contents and universe.contents[ + "mudpy.process"].get("daemon"): # log before we start forking around, so the terminal gets the message log("Disassociating from the controlling terminal.") @@ -2350,7 +2374,10 @@ def create_pidfile(universe): """Write a file containing the current process ID.""" pid = str(os.getpid()) log("Process ID: " + pid) - file_name = universe.contents["mudpy.process"].get("pidfile") + if "mudpy.process" in universe.contents: + file_name = universe.contents["mudpy.process"].get("pidfile", "") + else: + file_name = "" if file_name: if not os.path.isabs(file_name): file_name = os.path.join(universe.startdir, file_name) @@ -2362,7 +2389,10 @@ def create_pidfile(universe): def remove_pidfile(universe): """Remove the file containing the current process ID.""" - file_name = universe.contents["mudpy.process"].get("pidfile") + if "mudpy.process" in universe.contents: + file_name = universe.contents["mudpy.process"].get("pidfile", "") + else: + file_name = "" if file_name: if not os.path.isabs(file_name): file_name = os.path.join(universe.startdir, file_name)