diff options
author | PanFritz <redstonenoobpan@gmail.com> | 2015-11-25 18:20:29 +0100 |
---|---|---|
committer | PanFritz <redstonenoobpan@gmail.com> | 2015-11-25 18:20:29 +0100 |
commit | 513996a351c69b8f057089e539eacc1ee5bc0493 (patch) | |
tree | 852557bbe591a4e4823b450e3b785d0c5ee1768e | |
parent | a85194d7be08e5fd35a08793d4b1991446e8a177 (diff) |
Lots of fixes, added player loading/ unloading, login.py custom event system, mysql_utils.columns property
-rw-r--r-- | login.py | 129 | ||||
-rw-r--r-- | util_events.py | 71 |
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 |