36 lines
1 KiB
Python
36 lines
1 KiB
Python
import unicodedata
|
|
|
|
from django.contrib.auth import get_user_model
|
|
|
|
import mozilla_django_oidc.auth
|
|
|
|
from user.utils import prepare_user
|
|
|
|
User = get_user_model()
|
|
|
|
|
|
class OIDCAuthenticationBackend(mozilla_django_oidc.auth.OIDCAuthenticationBackend):
|
|
def create_user(self, claims):
|
|
user = super(OIDCAuthenticationBackend, self).create_user(claims)
|
|
username = None
|
|
for key in ('preferred_username', 'name'):
|
|
if claims.get(key):
|
|
username = claims[key]
|
|
break
|
|
n = 1
|
|
if username and username != user.username:
|
|
uname = username
|
|
while User.objects.filter(username=uname).exclude(id=user.id).exists():
|
|
n += 1
|
|
uname = '%s (%s)' % (username, n)
|
|
user.username = uname
|
|
user.save()
|
|
prepare_user(user)
|
|
return user
|
|
|
|
def update_user(self, user, claims):
|
|
return user
|
|
|
|
|
|
def generate_username(email):
|
|
return unicodedata.normalize('NFKC', email)[:150]
|