add TempUser to more authenticator functions

This commit is contained in:
Joel Falknau 2024-12-29 21:15:03 +10:00
parent 168e6cc290
commit d09892397b
No known key found for this signature in database

View File

@ -41,19 +41,19 @@ from threading import Timer
from passlib.hash import bcrypt_sha256 from passlib.hash import bcrypt_sha256
from hashlib import sha1 from hashlib import sha1
import django # noqa import django
import os # noqa from django.utils.datetime_safe import datetime
import os
import sys import sys
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
sys.path.append(os.getcwd()) sys.path.append(os.getcwd())
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myauth.settings.local") # noqa os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myauth.settings.local")
os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true" # noqa os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true"
django.setup() # noqa django.setup()
from django.utils.datetime_safe import datetime
from allianceauth import __version__ from allianceauth import __version__ # noqa
from allianceauth.services.modules.mumble.models import MumbleServerServer, MumbleUser from allianceauth.services.modules.mumble.models import MumbleServerServer, MumbleUser, TempUser # noqa
def main() -> None: def main() -> None:
@ -293,22 +293,48 @@ def main() -> None:
mumble_user.version = user.version mumble_user.version = user.version
mumble_user.last_connect = datetime.now() mumble_user.last_connect = datetime.now()
mumble_user.save() mumble_user.save()
except Exception as e: except MumbleUser.DoesNotExist as a:
logger.error(e) 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: def userDisconnected(self, user, current=None) -> None:
try: try:
mumble_user = MumbleUser.objects.get(username=user) mumble_user = MumbleUser.objects.get(username=user)
mumble_user.last_disconnect = datetime.now() mumble_user.last_disconnect = datetime.now()
mumble_user.save() mumble_user.save()
except Exception as e: except MumbleUser.DoesNotExist as a:
logger.error(e) 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: def userStateChanged(self, user, current=None) -> None:
pass pass
def userTextMessage(self, user, text_message=None) -> None: 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: def channelCreated(self, channel, current=None) -> None:
pass pass
@ -340,13 +366,16 @@ def main() -> None:
try: try:
mumble_user = MumbleUser.objects.get(username=name) mumble_user = MumbleUser.objects.get(username=name)
except MumbleUser.DoesNotExist: 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) logger.debug("checking password with hash function: %s" % mumble_user.hashfn)
if allianceauth_check_hash(pw, mumble_user.pwhash, 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()) 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( logger.info(
f'Failed authentication attempt for user: {name} {mumble_user.user_id + MumbleServerServer.objects.get(id=1).offset}') f'Failed authentication attempt for user: {name} {mumble_user.user_id + MumbleServerServer.objects.get(id=1).offset}')
return (AUTH_REFUSED, None, None) return (AUTH_REFUSED, None, None)
@ -374,7 +403,10 @@ def main() -> None:
try: try:
return (MumbleUser.objects.get(username=name).pk + MumbleServerServer.objects.get(id=1).offset) return (MumbleUser.objects.get(username=name).pk + MumbleServerServer.objects.get(id=1).offset)
except MumbleUser.DoesNotExist: 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("") @fortifyIceFu("")
@checkSecret @checkSecret
@ -387,12 +419,17 @@ def main() -> None:
try: try:
mumble_user = MumbleUser.objects.get(user_id=id - MumbleServerServer.objects.get(id=1).offset) mumble_user = MumbleUser.objects.get(user_id=id - MumbleServerServer.objects.get(id=1).offset)
mumble_user.username
except MumbleUser.DoesNotExist: 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 # I dont quite rightly know why we have this
# SuperUser shouldnt be in our Authenticator? # 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": if MumbleUser.objects.get(user_id=id - MumbleServerServer.objects.get(id=1).offset).username == "SuperUser":
logger.debug('idToName %d -> "SuperUser" caught') logger.debug('idToName %d -> "SuperUser" caught')
return "" # FALL_THROUGH return "" # FALL_THROUGH