From bee69cc250547f22b8d3f120df11e5a4930f9a18 Mon Sep 17 00:00:00 2001 From: Adarnof Date: Thu, 19 Apr 2018 17:10:38 -0400 Subject: [PATCH] User is created inactive. When users were created they started active, then were changed to inactive and saved. This triggered service account validation logic which is silly to be running on brand new users. I hated seeing those logging messages so now it doesn't happen. At the same time I do love logging messages so I added some to the authentication process. --- allianceauth/authentication/backends.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/allianceauth/authentication/backends.py b/allianceauth/authentication/backends.py index a37e4afd..69c516b8 100644 --- a/allianceauth/authentication/backends.py +++ b/allianceauth/authentication/backends.py @@ -1,10 +1,13 @@ from django.contrib.auth.backends import ModelBackend from django.contrib.auth.models import Permission from django.contrib.auth.models import User - +import logging from .models import UserProfile, CharacterOwnership, OwnershipRecord +logger = logging.getLogger(__name__) + + class StateBackend(ModelBackend): @staticmethod def _get_state_permissions(user_obj): @@ -30,14 +33,17 @@ class StateBackend(ModelBackend): try: ownership = CharacterOwnership.objects.get(character__character_id=token.character_id) if ownership.owner_hash == token.character_owner_hash: + logger.debug('Authenticating {0} by ownership of character {1}'.format(ownership.user, token.character_name)) return ownership.user else: + logger.debug('{0} has changed ownership. Creating new user account.'.format(token.character_name)) ownership.delete() return self.create_user(token) except CharacterOwnership.DoesNotExist: try: # insecure legacy main check for pre-sso registration auth installs profile = UserProfile.objects.get(main_character__character_id=token.character_id) + logger.debug('Authenticating {0} by their main character {1} without active ownership.'.format(profile.user, profile.main_character)) # attach an ownership token.user = profile.user CharacterOwnership.objects.create_by_token(token) @@ -50,23 +56,25 @@ class StateBackend(ModelBackend): user = records[0].user token.user = user co = CharacterOwnership.objects.create_by_token(token) + logger.debug('Authenticating {0} by matching owner hash record of character {1}'.format(user, co.character)) if not user.profile.main_character: # set this as their main by default if they have none user.profile.main_character = co.character user.profile.save() return user + logger.debug('Unable to authenticate character {0}. Creating new user.'.format(token.character_name)) return self.create_user(token) def create_user(self, token): username = self.iterate_username(token.character_name) # build unique username off character name - user = User.objects.create_user(username) + user = User.objects.create_user(username, is_active=False) # prevent login until email set user.set_unusable_password() # prevent login via password - user.is_active = False # prevent login until email set user.save() token.user = user co = CharacterOwnership.objects.create_by_token(token) # assign ownership to this user user.profile.main_character = co.character # assign main character as token character user.profile.save() + logger.debug('Created new user {0}'.format(user)) return user @staticmethod