summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPanFritz <redstonenoobpan@gmail.com>2015-11-25 18:20:29 +0100
committerPanFritz <redstonenoobpan@gmail.com>2015-11-25 18:20:29 +0100
commit513996a351c69b8f057089e539eacc1ee5bc0493 (patch)
tree852557bbe591a4e4823b450e3b785d0c5ee1768e
parenta85194d7be08e5fd35a08793d4b1991446e8a177 (diff)
Lots of fixes, added player loading/ unloading, login.py custom event system, mysql_utils.columns property
-rw-r--r--login.py129
-rw-r--r--util_events.py71
2 files changed, 200 insertions, 0 deletions
diff --git a/login.py b/login.py
new file mode 100644
index 0000000..ada7162
--- /dev/null
+++ b/login.py
@@ -0,0 +1,129 @@
+from wrapper import *
+from passlib.hash import pbkdf2_sha256 as crypt
+
+@event_handler("player_login","normal", utils = True)
+def player_join(*args):
+ player = args[1]
+ if not player.registered:
+ player.authenticated = True
+ player.msg("Successfully logged in!")
+
+"""
+@event_handler("player.PlayerCommandPreprocessEvent", "lowest")
+def on_login_command(event):
+ player = event.player
+ password = event.message.replace("/login", "").replace(" ", "")
+ event.message = event.player.name + " Attempting to login!"
+ event.cancelled = True
+
+ @async(daemon = True)
+ def check_pass(player, password):
+ print password
+ if not player.registered:
+ player.msg("You are not registered! use /register <password> to register!")
+ return
+ else:
+ if crypt.verify(password, player.password):
+ player.authenticated = True
+ player.msg("Successfully logged in!")
+ else:
+ print event.message
+ player.msg("Wrong password!")
+ check_pass(player, password)"""
+
+@command("login")
+@async(daemon = True)
+def on_login_command(**kwargs):
+ player = kwargs["sender"]
+ args = kwargs["args"]
+
+ if not player.registered:
+ player.msg("You are not registered! use /register <password> to register!")
+ return
+ if len(args) > 1:
+ player.msg("The syntax is /login <password>")
+ return
+ elif len(args) is 1:
+ if crypt.verify(args[0], player.password):
+ player.authenticated = True
+ player.msg("Successfully logged in!")
+ else:
+ player.msg("Wrong password!")
+
+@command("changepass")
+@async(daemon = True)
+def on_changepass_command(**kwargs):
+ player = kwargs["sender"]
+ args = kwargs["args"]
+
+ if not player.registered:
+ player.msg("You are not registered! use /register <password> to register!")
+ return
+
+ if len(args) < 2:
+ player.msg("The syntax is /login <current_password> <new_password>")
+ return
+ elif len(args) is 2:
+ if crypt.verify(args[0], player.password):
+ player.password = crypt.encrypt(args[1], rounds=200000, salt_size=16)
+ player.msg("Successfully changed your password!")
+ player.save()
+ else:
+ player.msg("You have entered an incorrect current password!")
+
+@command("removepass")
+@async(daemon = True)
+def on_removepass_command(**kwargs):
+ player = kwargs["sender"]
+ args = kwargs["args"]
+
+ if not player.registered:
+ player.msg("You are not registered! use /register <password> to register!")
+ return
+
+ if len(args) < 1:
+ player.msg("The syntax is /removepass <current_password>")
+ return
+
+ elif len(args) is 1:
+ if crypt.verify(args[0], player.password):
+ player.password = "None"
+ player.registered = False
+ player.save()
+ player.msg("Successfully removed your password!")
+ else:
+ player.msg("You have entered an incorrect current password!")
+
+
+
+
+@command("register")
+@async(daemon = True)
+def on_register_command(**kwargs):
+ player = kwargs["sender"]
+ args = kwargs["args"]
+ if len(args) > 1:
+ player.msg("The syntax is /register <password>")
+ return
+ elif len(args) is 1:
+ if player.registered:
+ player.msg("You are already registered!")
+ return
+ player.password = crypt.encrypt(args[0], rounds=200000, salt_size=16)
+ player.registered = True
+ print player.password
+ player.save()
+ player.msg("Successfully registered!")
+
+
+blocked_events = ["block.BlockBreakEvent", "block.BlockPlaceEvent", "player.PlayerMoveEvent",
+ "player.AsyncPlayerChatEvent","player.PlayerTeleportEvent",
+ "player.PlayerInteractEvent"]
+
+for event in blocked_events:
+ @event_handler(event_name = event, priority = "highest")
+ def on_blocked_event(event):
+ if not event.player.authenticated:
+ event.cancelled = True
+
+
diff --git a/util_events.py b/util_events.py
new file mode 100644
index 0000000..93645ba
--- /dev/null
+++ b/util_events.py
@@ -0,0 +1,71 @@
+from thread_utils import *
+
+MONITOR_PRIORITY = "monitor"
+HIGHEST_PRIORITY = "highest"
+HIGH_PRIORITY = "high"
+NORMAL_PRIORITY = "normal"
+LOW_PRIORITY = "low"
+LOWEST_PRIORITY = "lowest"
+
+priorities = ["lowest","low","normal","high","highest","monitor"]
+events = []
+
+class base_event():
+ def __init__(self,event_name):
+ self.name = event_name
+ self.canceled = False
+ self._handlers = [ [],[],[],[],[],[] ]
+
+ self.canceled_lock = threading.Lock()
+
+ def add_handler(self,function,priority):
+ for prior in priorities:
+ if prior == priority:
+ self._handlers[priorities.index(prior)].append(function)
+
+ def fire(self,*args):
+ for priority in self._handlers:
+ for handler in priority:
+ handler(self,*args)
+
+ def set_canceled(self,state):
+ with self.canceled_lock:
+ self.canceled = state
+
+
+class utils_events(base_event):
+ def __init__(self,event_name):
+ base_event.__init__(self,event_name)
+
+
+def add_event(event_name,event = base_event): #Adds a new event
+ event = event(event_name)
+ events.append(event)
+
+def fire_event(event_name,*args): #Fires the event
+ for event in events:
+ if event.name == event_name:
+ event.fire(*args)
+ return event
+
+def check_events(event_name): #Returns false if the even does not exist.
+ for event in events:
+ if event.name == event_name:
+ return True
+ return False
+
+
+#Decorator
+def utils_event(event_name, priority, create_event=base_event):
+ def event_decorator(function):
+ def wrapper(*args, **kwargs):
+ pass
+
+ if not check_events(event_name): #Check if the event exists, if not create it.
+ add_event(event_name,create_event)
+
+ for event in events: #Go through the list of events, find the one we need and call all of its handlers
+ if event.name == event_name:
+ event.add_handler(function,priority)
+ return wrapper
+ return event_decorator \ No newline at end of file