From cf5882dfe2b3fb7a2e4042e027452c8838918a28 Mon Sep 17 00:00:00 2001 From: Ebru Yucesar Date: Tue, 3 Dec 2024 10:20:28 -0500 Subject: [PATCH] prevent downcasing raw email --- perma_web/perma/forms.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/perma_web/perma/forms.py b/perma_web/perma/forms.py index 184a51c5f..24347024a 100755 --- a/perma_web/perma/forms.py +++ b/perma_web/perma/forms.py @@ -505,7 +505,7 @@ def clean_csv_file(self): for row in reader: row_count += 1 email = row.get('email') - email = email.strip().lower() if email else None + email = email.strip() if email else None if not email: raise forms.ValidationError("Each row in the CSV file must contain email.") @@ -536,8 +536,10 @@ def save(self, commit=True): expires_at = self.cleaned_data['expires_at'] organization = self.cleaned_data['organizations'] - emails = set(self.user_data.keys()) - existing_users = LinkUser.objects.filter(email__in=emails) + raw_emails = set(self.user_data.keys()) + # lower casing the emails to feed into the filter query in order to prevent duplicate user creation + lower_case_emails = {email.lower() for email in self.user_data.keys()} + existing_users = LinkUser.objects.filter(email__in=lower_case_emails) updated_user_affiliations = [] for user in existing_users: @@ -547,16 +549,18 @@ def save(self, commit=True): else: updated_user_affiliations.append(user) self.updated_users[user.email] = user - - new_user_emails = emails - set(self.ineligible_users.keys()) - set(self.updated_users.keys()) + + new_user_emails = lower_case_emails - set(self.ineligible_users.keys()) - set(self.updated_users.keys()) + created_user_affiliations = [] if new_user_emails and commit: for email in new_user_emails: + raw_email = next((raw_email for raw_email in raw_emails if raw_email.lower() == email.lower()), None) new_user = LinkUser( - email=email, - first_name=self.user_data[email]['first_name'], - last_name=self.user_data[email]['last_name'] + email=raw_email, + first_name=self.user_data[raw_email]['first_name'], + last_name=self.user_data[raw_email]['last_name'] ) new_user.save() self.created_users[email] = new_user