From 0b0cdc1862c870667cadd2b523ead2f4d7188dbd Mon Sep 17 00:00:00 2001 From: Nandgopal-R Date: Fri, 2 Jan 2026 05:18:39 +0530 Subject: [PATCH 1/3] chore: add provisions for lowercase emails --- models/auth.go | 8 ++++---- pkg/grab_email.go | 4 +++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/models/auth.go b/models/auth.go index 47ead85d..628797e9 100644 --- a/models/auth.go +++ b/models/auth.go @@ -11,7 +11,7 @@ type CheckEmailRequest struct { func (s CheckEmailRequest) Validate() error { return v.ValidateStruct(&s, - v.Field(&s.Email, v.Required, is.Email), + v.Field(&s.Email, v.Required, is.Email, is.LowerCase), ) } @@ -29,7 +29,7 @@ type StudentOnboardingRequest struct { func (s StudentOnboardingRequest) Validate() error { return v.ValidateStruct(&s, v.Field(&s.Name, v.Required, v.Length(3, 50)), - v.Field(&s.Email, v.Required, is.Email), + v.Field(&s.Email, v.Required, is.Email, is.LowerCase), v.Field(&s.Password, v.Required, v.Length(8, 0)), v.Field(&s.PhoneNumber, v.Required, v.Length(10, 10)), v.Field(&s.CollegeName, v.Required, v.Length(3, 128)), @@ -44,7 +44,7 @@ type LoginRequest struct { func (l LoginRequest) Validate() error { return v.ValidateStruct(&l, - v.Field(&l.Email, v.Required, is.Email), + v.Field(&l.Email, v.Required, is.Email, is.LowerCase), v.Field(&l.HashedPassword, v.Required)) } @@ -65,6 +65,6 @@ type ForgetPasswordRequest struct { func (f ForgetPasswordRequest) Validate() error { return v.ValidateStruct(&f, - v.Field(&f.Email, v.Required, is.Email), + v.Field(&f.Email, v.Required, is.Email, is.LowerCase), v.Field(&f.NewPassword, v.Required, v.Length(8, 0))) } diff --git a/pkg/grab_email.go b/pkg/grab_email.go index 47aa326d..992b7a77 100644 --- a/pkg/grab_email.go +++ b/pkg/grab_email.go @@ -3,6 +3,7 @@ package pkg import ( "fmt" "net/http" + "strings" "github.com/gin-gonic/gin" ) @@ -18,6 +19,7 @@ func GrabEmail(c *gin.Context, route string) (string, bool) { return "", false } + emailLowercase := strings.ToLower(email) - return email, true + return emailLowercase, true } From 5246c26b3f01b3cab33bd9a0d24e99c8353ecd47 Mon Sep 17 00:00:00 2001 From: Nandgopal-R Date: Fri, 2 Jan 2026 05:18:55 +0530 Subject: [PATCH 2/3] add .dump to .gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index cbc7d43d..4fe6efa0 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,6 @@ mail/mail-queue # .DS_Store files .DS_Store + +# Ignoring database dump files +*.dump From e247cc8cb232385e28caa97f1a248529db2a5feb Mon Sep 17 00:00:00 2001 From: Ritesh Koushik Date: Thu, 8 Jan 2026 08:06:04 +0530 Subject: [PATCH 3/3] fix: Email lowering in all validators --- models/auth.go | 30 ++++++++++++++++++------------ models/dispute.go | 7 +++++-- models/organizer.go | 12 ++++++++---- models/people.go | 15 +++++++++++---- models/team.go | 9 +++++++-- 5 files changed, 49 insertions(+), 24 deletions(-) diff --git a/models/auth.go b/models/auth.go index 628797e9..b4a5bb86 100644 --- a/models/auth.go +++ b/models/auth.go @@ -1,6 +1,8 @@ package models import ( + "strings" + v "github.com/go-ozzo/ozzo-validation/v4" "github.com/go-ozzo/ozzo-validation/v4/is" ) @@ -9,9 +11,10 @@ type CheckEmailRequest struct { Email string `json:"email"` } -func (s CheckEmailRequest) Validate() error { - return v.ValidateStruct(&s, - v.Field(&s.Email, v.Required, is.Email, is.LowerCase), +func (s *CheckEmailRequest) Validate() error { + s.Email = strings.ToLower(s.Email) + return v.ValidateStruct(s, + v.Field(&s.Email, v.Required, is.Email), ) } @@ -26,10 +29,11 @@ type StudentOnboardingRequest struct { CollegeCity string `json:"college_city"` } -func (s StudentOnboardingRequest) Validate() error { - return v.ValidateStruct(&s, +func (s *StudentOnboardingRequest) Validate() error { + s.Email = strings.ToLower(s.Email) + return v.ValidateStruct(s, v.Field(&s.Name, v.Required, v.Length(3, 50)), - v.Field(&s.Email, v.Required, is.Email, is.LowerCase), + v.Field(&s.Email, v.Required, is.Email), v.Field(&s.Password, v.Required, v.Length(8, 0)), v.Field(&s.PhoneNumber, v.Required, v.Length(10, 10)), v.Field(&s.CollegeName, v.Required, v.Length(3, 128)), @@ -42,9 +46,10 @@ type LoginRequest struct { HashedPassword string `json:"password"` } -func (l LoginRequest) Validate() error { - return v.ValidateStruct(&l, - v.Field(&l.Email, v.Required, is.Email, is.LowerCase), +func (l *LoginRequest) Validate() error { + l.Email = strings.ToLower(l.Email) + return v.ValidateStruct(l, + v.Field(&l.Email, v.Required, is.Email), v.Field(&l.HashedPassword, v.Required)) } @@ -63,8 +68,9 @@ type ForgetPasswordRequest struct { NewPassword string `json:"new_password"` } -func (f ForgetPasswordRequest) Validate() error { - return v.ValidateStruct(&f, - v.Field(&f.Email, v.Required, is.Email, is.LowerCase), +func (f *ForgetPasswordRequest) Validate() error { + f.Email = strings.ToLower(f.Email) + return v.ValidateStruct(f, + v.Field(&f.Email, v.Required, is.Email), v.Field(&f.NewPassword, v.Required, v.Length(8, 0))) } diff --git a/models/dispute.go b/models/dispute.go index 008193c0..a67a97d9 100644 --- a/models/dispute.go +++ b/models/dispute.go @@ -1,6 +1,8 @@ package models import ( + "strings" + v "github.com/go-ozzo/ozzo-validation/v4" "github.com/go-ozzo/ozzo-validation/v4/is" ) @@ -10,8 +12,9 @@ type UpdateDisputeStatusInput struct { Description string `json:"description"` } -func (u UpdateDisputeStatusInput) Validate() error { - if err := v.ValidateStruct(&u, +func (u *UpdateDisputeStatusInput) Validate() error { + u.StudentEmail = strings.ToLower(u.StudentEmail) + if err := v.ValidateStruct(u, v.Field(&u.StudentEmail, is.Email), v.Field(&u.Description), ); err != nil { diff --git a/models/organizer.go b/models/organizer.go index 6fdf4652..8e44fee7 100644 --- a/models/organizer.go +++ b/models/organizer.go @@ -1,6 +1,8 @@ package models import ( + "strings" + v "github.com/go-ozzo/ozzo-validation/v4" "github.com/go-ozzo/ozzo-validation/v4/is" ) @@ -15,8 +17,9 @@ type CreateOrganizerRequest struct { FacultyHead string `json:"faculty_head"` } -func (r CreateOrganizerRequest) Validate() error { - return v.ValidateStruct(&r, +func (r *CreateOrganizerRequest) Validate() error { + r.Email = strings.ToLower(r.Email) + return v.ValidateStruct(r, // Required fields v.Field(&r.Name, v.Required, v.RuneLength(3, 100)), @@ -40,8 +43,9 @@ type EditOrganizerRequest struct { FacultyHead string `json:"faculty_head"` } -func (r EditOrganizerRequest) Validate() error { - return v.ValidateStruct(&r, +func (r *EditOrganizerRequest) Validate() error { + r.Email = strings.ToLower(r.Email) + return v.ValidateStruct(r, v.Field(&r.Name, v.Required, v.RuneLength(3, 100)), v.Field(&r.Email, v.Required, is.Email), diff --git a/models/people.go b/models/people.go index c0668213..a80949e4 100644 --- a/models/people.go +++ b/models/people.go @@ -2,6 +2,7 @@ package models import ( "regexp" + "strings" v "github.com/go-ozzo/ozzo-validation/v4" "github.com/go-ozzo/ozzo-validation/v4/is" @@ -14,8 +15,11 @@ type CreateNewPerson struct { Email *string `json:"email"` } -func (p CreateNewPerson) Validate() error { - return v.ValidateStruct(&p, +func (p *CreateNewPerson) Validate() error { + if p.Email != nil { + *p.Email = strings.ToLower(*p.Email) + } + return v.ValidateStruct(p, v.Field(&p.Name, v.Required, v.Length(2, 100)), v.Field(&p.PhoneNumber, v.Required, v.Match(regexp.MustCompile(`^[0-9]{10}$`))), @@ -36,8 +40,11 @@ type UpdatePersonEventRequest struct { Email *string `json:"email"` } -func (p UpdatePersonEventRequest) Validate() error { - return v.ValidateStruct(&p, +func (p *UpdatePersonEventRequest) Validate() error { + if p.Email != nil { + *p.Email = strings.ToLower(*p.Email) + } + return v.ValidateStruct(p, v.Field(&p.Name, v.When( p.Name != "", v.Length(2, 100), diff --git a/models/team.go b/models/team.go index d7822779..cfd5f1d2 100644 --- a/models/team.go +++ b/models/team.go @@ -1,6 +1,8 @@ package models import ( + "strings" + v "github.com/go-ozzo/ozzo-validation/v4" "github.com/go-ozzo/ozzo-validation/v4/is" ) @@ -24,8 +26,11 @@ func (t TeamMember) Validate() error { ) } -func (e TeamBookingRequest) Validate() error { - return v.ValidateStruct(&e, +func (e *TeamBookingRequest) Validate() error { + for i := range e.TeamMembers { + e.TeamMembers[i].StudentEmail = strings.ToLower(e.TeamMembers[i].StudentEmail) + } + return v.ValidateStruct(e, v.Field(&e.TeamName, v.Required, v.Length(2, 100)), v.Field(&e.TeamMembers, v.Length(0, 100),