From d09892397bc2854cceb7c51505c7f7b4975993f3 Mon Sep 17 00:00:00 2001 From: Joel Falknau Date: Sun, 29 Dec 2024 21:15:03 +1000 Subject: [PATCH] add TempUser to more authenticator functions --- .../services/modules/mumble/authenticator.py | 75 ++++++++++++++----- 1 file changed, 56 insertions(+), 19 deletions(-) diff --git a/allianceauth/services/modules/mumble/authenticator.py b/allianceauth/services/modules/mumble/authenticator.py index 579c0c03..ceaf97a9 100644 --- a/allianceauth/services/modules/mumble/authenticator.py +++ b/allianceauth/services/modules/mumble/authenticator.py @@ -41,19 +41,19 @@ from threading import Timer from passlib.hash import bcrypt_sha256 from hashlib import sha1 -import django # noqa -import os # noqa +import django +from django.utils.datetime_safe import datetime +import os import sys logger = logging.getLogger(__name__) sys.path.append(os.getcwd()) -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myauth.settings.local") # noqa -os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true" # noqa -django.setup() # noqa -from django.utils.datetime_safe import datetime +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myauth.settings.local") +os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true" +django.setup() -from allianceauth import __version__ -from allianceauth.services.modules.mumble.models import MumbleServerServer, MumbleUser +from allianceauth import __version__ # noqa +from allianceauth.services.modules.mumble.models import MumbleServerServer, MumbleUser, TempUser # noqa def main() -> None: @@ -293,22 +293,48 @@ def main() -> None: mumble_user.version = user.version mumble_user.last_connect = datetime.now() mumble_user.save() - except Exception as e: - logger.error(e) + except MumbleUser.DoesNotExist as a: + try: + mumble_user = TempUser.objects.get(username=user) + mumble_user.release = user.release + mumble_user.version = user.version + mumble_user.last_connect = datetime.now() + mumble_user.save() + except Exception as b: + logger.exception(a) + logger.exception(b) def userDisconnected(self, user, current=None) -> None: try: mumble_user = MumbleUser.objects.get(username=user) mumble_user.last_disconnect = datetime.now() mumble_user.save() - except Exception as e: - logger.error(e) + except MumbleUser.DoesNotExist as a: + try: + mumble_user = TempUser.objects.get(username=user) + mumble_user.last_disconnect = datetime.now() + mumble_user.save() + except Exception as b: + logger.exception(a) + logger.exception(b) def userStateChanged(self, user, current=None) -> None: pass def userTextMessage(self, user, text_message=None) -> None: - pass + if text_message.text == "!kicktemps": + if self.server.hasPermission(user.session, 0, 0x10000): + self.server.sendMessage(user.session, "Kicking all templink clients!") + + users = self.server.getUsers() + for (userid, auser) in users.items(): + if auser.userid > (MumbleServerServer.objects.get(id=1).offset * 2): + self.server.kickUser(auser.session, "Kicking all temp users! :-)") + + self.server.sendMessage(user.session, "All templink clients kicked!") + + else: + self.server.sendMessage(user.session, "You do not have kick permissions!") def channelCreated(self, channel, current=None) -> None: pass @@ -340,13 +366,16 @@ def main() -> None: try: mumble_user = MumbleUser.objects.get(username=name) except MumbleUser.DoesNotExist: - return (-2, None, None) + try: + mumble_user = TempUser.objects.get(username=name) + except TempUser.DoesNotExist: + return (-2, None, None) # No Standard or Temp User logger.debug("checking password with hash function: %s" % mumble_user.hashfn) if allianceauth_check_hash(pw, mumble_user.pwhash, mumble_user.hashfn): - logger.info(f'User authenticated: {mumble_user.get_display_name()} {mumble_user.user_id + MumbleServerServer.objects.get(id=1).offset}') + logger.info(f'User authenticated: {mumble_user.display_name} {mumble_user.user_id + MumbleServerServer.objects.get(id=1).offset}') logger.debug("Group memberships: %s", mumble_user.group_string()) - return (mumble_user.user_id + MumbleServerServer.objects.get(id=1).offset, mumble_user.get_display_name(), mumble_user.group_string()) + return (mumble_user.user_id + MumbleServerServer.objects.get(id=1).offset, mumble_user.display_name, mumble_user.group_string()) logger.info( f'Failed authentication attempt for user: {name} {mumble_user.user_id + MumbleServerServer.objects.get(id=1).offset}') return (AUTH_REFUSED, None, None) @@ -374,7 +403,10 @@ def main() -> None: try: return (MumbleUser.objects.get(username=name).pk + MumbleServerServer.objects.get(id=1).offset) except MumbleUser.DoesNotExist: - return -2 # FALL_THROUGH + try: + return (TempUser.objects.get(username=name).pk + MumbleServerServer.objects.get(id=1).offset * 2) + except TempUser.DoesNotExist: + return -2 # FALL_THROUGH @fortifyIceFu("") @checkSecret @@ -387,12 +419,17 @@ def main() -> None: try: mumble_user = MumbleUser.objects.get(user_id=id - MumbleServerServer.objects.get(id=1).offset) + mumble_user.username except MumbleUser.DoesNotExist: - return "" # FALL_THROUGH + try: + mumble_user = TempUser.objects.get(user_id=id - MumbleServerServer.objects.get(id=1).offset * 2) + mumble_user.username + except TempUser.DoesNotExist: + return "" # FALL_THROUGH # I dont quite rightly know why we have this # SuperUser shouldnt be in our Authenticator? - # But Maybe it can be + # But Maybe it can be? if MumbleUser.objects.get(user_id=id - MumbleServerServer.objects.get(id=1).offset).username == "SuperUser": logger.debug('idToName %d -> "SuperUser" caught') return "" # FALL_THROUGH