Compare commits

..

1 Commits

Author SHA1 Message Date
Benjamin Dauvergne 1cd07f836c saml: always retry user creation when detecting duplicates on sso (#75777)
gitea/wcs/pipeline/head This commit looks good Details
2024-01-27 15:28:08 +01:00
1 changed files with 3 additions and 22 deletions

View File

@ -572,30 +572,11 @@ class Saml2Directory(Directory):
def lookup_user(self, session, login):
if not login.nameIdentifier or not login.nameIdentifier.content:
return None
user_class = get_publisher().user_class
ni = login.nameIdentifier.content
session.name_identifier = ni
while True:
users = sorted(
user_class.get_users_with_name_identifier(ni), key=lambda u: (u.last_seen or 0, -int(u.id))
)
if users:
# if multiple users, use the more recently used or the younger
user = users[-1]
else:
user = get_publisher().user_class(ni)
user.name_identifiers = [ni]
if login.identity:
user.lasso_dump = login.identity.dump()
user.store()
others = user_class.get_users_with_name_identifier(ni)
# there is an user mapping to the same id with a younger id:
# try again.
if any(int(other.id) < int(user.id) for other in others):
user.remove_self()
continue
break
session.name_identifier = ni
user = self.get_or_create_user_by_name_id(login, ni)
self.fill_user_attributes(session, login, user)