Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 36 additions & 19 deletions training/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,21 @@
import csv
import requests


def ensure_username_equals_email(user):
"""
Ensure Django username always matches email.
This is required for ILW Moodle authentication.
"""
email = (user.email or "").strip().lower()

if email and user.username != email:
# Prevent duplicate username conflicts
if not User.objects.filter(username=email).exclude(id=user.id).exists():
user.username = email
user.save(update_fields=["username"])


class TrainingEventCreateView(CreateView):
form_class = CreateTrainingEventForm
model = TrainingEvents
Expand Down Expand Up @@ -201,7 +216,8 @@ def register_user(request):

if request.user.is_authenticated():
user = request.user
profile = Profile.objects.get(user=user)
# profile = Profile.objects.get(user=user)
profile, created = Profile.objects.get_or_create(user=user)
form.fields["name"].initial = user.get_full_name()
form.fields["email"].initial = getattr(user, 'email')
form.fields["phone"].initial = profile.phone
Expand Down Expand Up @@ -647,17 +663,10 @@ def get_create_user(self, row):
email = (row[2] or "").strip().lower()
first = (row[0] or "").strip()
last = (row[1] or "").strip()
# 1) Try to find existing user by email OR username
user = User.objects.filter(Q(email=email) | Q(username=email)).first()

if user:
if user.username != user.email:
user.username = user.email #ILW moodle allows login with only email as valid credential username
try:
user.save()
except IntegrityError as e:
print(f"ILW error : {e}")
#user with above username already exists -- handle such cases manually, so returning None
return None
ensure_username_equals_email(user)
return user

# 2) Create new user
Expand All @@ -668,6 +677,7 @@ def get_create_user(self, row):
confirmation_code = send_registration_confirmation(user)
if confirmation_code:
user.save()
ensure_username_equals_email(user)
create_profile(user, '', confirmation_code)
return user
except IntegrityError:
Expand Down Expand Up @@ -774,15 +784,22 @@ def ajax_check_college(request):


def get_create_user(row):
try:
return User.objects.get(email=row[2].strip())
except User.DoesNotExist:
user = User(username=row[2], email=row[2].strip(), first_name=row[0], last_name=row[1])
user.set_password(row[0]+'@ST'+str(random.random()).split('.')[1][:5])
user.save()
create_profile(user, '')
send_registration_confirmation(user)
return user
email = row[2].strip().lower()

try:
user = User.objects.get(email=email)
ensure_username_equals_email(user)
return user

except User.DoesNotExist:
user = User(username=email,email=email,first_name=row[0],last_name=row[1]
)
user.set_password(row[0] + '@ST' + str(random.random()).split('.')[1][:5])
user.save()
ensure_username_equals_email(user)
create_profile(user, '')
send_registration_confirmation(user)
return user

from io import TextIOWrapper
from django.contrib.auth.decorators import login_required
Expand Down