mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-15 23:40:17 +02:00
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.
This commit is contained in:
parent
a350e175c7
commit
bee69cc250
@ -1,10 +1,13 @@
|
|||||||
from django.contrib.auth.backends import ModelBackend
|
from django.contrib.auth.backends import ModelBackend
|
||||||
from django.contrib.auth.models import Permission
|
from django.contrib.auth.models import Permission
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
|
import logging
|
||||||
from .models import UserProfile, CharacterOwnership, OwnershipRecord
|
from .models import UserProfile, CharacterOwnership, OwnershipRecord
|
||||||
|
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class StateBackend(ModelBackend):
|
class StateBackend(ModelBackend):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _get_state_permissions(user_obj):
|
def _get_state_permissions(user_obj):
|
||||||
@ -30,14 +33,17 @@ class StateBackend(ModelBackend):
|
|||||||
try:
|
try:
|
||||||
ownership = CharacterOwnership.objects.get(character__character_id=token.character_id)
|
ownership = CharacterOwnership.objects.get(character__character_id=token.character_id)
|
||||||
if ownership.owner_hash == token.character_owner_hash:
|
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
|
return ownership.user
|
||||||
else:
|
else:
|
||||||
|
logger.debug('{0} has changed ownership. Creating new user account.'.format(token.character_name))
|
||||||
ownership.delete()
|
ownership.delete()
|
||||||
return self.create_user(token)
|
return self.create_user(token)
|
||||||
except CharacterOwnership.DoesNotExist:
|
except CharacterOwnership.DoesNotExist:
|
||||||
try:
|
try:
|
||||||
# insecure legacy main check for pre-sso registration auth installs
|
# insecure legacy main check for pre-sso registration auth installs
|
||||||
profile = UserProfile.objects.get(main_character__character_id=token.character_id)
|
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
|
# attach an ownership
|
||||||
token.user = profile.user
|
token.user = profile.user
|
||||||
CharacterOwnership.objects.create_by_token(token)
|
CharacterOwnership.objects.create_by_token(token)
|
||||||
@ -50,23 +56,25 @@ class StateBackend(ModelBackend):
|
|||||||
user = records[0].user
|
user = records[0].user
|
||||||
token.user = user
|
token.user = user
|
||||||
co = CharacterOwnership.objects.create_by_token(token)
|
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:
|
if not user.profile.main_character:
|
||||||
# set this as their main by default if they have none
|
# set this as their main by default if they have none
|
||||||
user.profile.main_character = co.character
|
user.profile.main_character = co.character
|
||||||
user.profile.save()
|
user.profile.save()
|
||||||
return user
|
return user
|
||||||
|
logger.debug('Unable to authenticate character {0}. Creating new user.'.format(token.character_name))
|
||||||
return self.create_user(token)
|
return self.create_user(token)
|
||||||
|
|
||||||
def create_user(self, token):
|
def create_user(self, token):
|
||||||
username = self.iterate_username(token.character_name) # build unique username off character name
|
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.set_unusable_password() # prevent login via password
|
||||||
user.is_active = False # prevent login until email set
|
|
||||||
user.save()
|
user.save()
|
||||||
token.user = user
|
token.user = user
|
||||||
co = CharacterOwnership.objects.create_by_token(token) # assign ownership to this 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.main_character = co.character # assign main character as token character
|
||||||
user.profile.save()
|
user.profile.save()
|
||||||
|
logger.debug('Created new user {0}'.format(user))
|
||||||
return user
|
return user
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
Loading…
x
Reference in New Issue
Block a user