From 6f5a322927effca85052553ed19d832d6cddb73a Mon Sep 17 00:00:00 2001 From: Deluan Date: Sun, 1 Mar 2020 15:45:41 -0500 Subject: [PATCH] fix: login must be case-insensitive --- model/user.go | 1 + persistence/user_repository.go | 1 + persistence/user_repository_test.go | 41 +++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 persistence/user_repository_test.go diff --git a/model/user.go b/model/user.go index 5857f4a0..ad21e5db 100644 --- a/model/user.go +++ b/model/user.go @@ -22,6 +22,7 @@ type UserRepository interface { CountAll(...QueryOptions) (int64, error) Get(id string) (*User, error) Put(*User) error + // FindByUsername must be case-insensitive FindByUsername(username string) (*User, error) UpdateLastLoginAt(id string) error UpdateLastAccessAt(id string) error diff --git a/persistence/user_repository.go b/persistence/user_repository.go index fbb3a63a..969720aa 100644 --- a/persistence/user_repository.go +++ b/persistence/user_repository.go @@ -65,6 +65,7 @@ func (r *userRepository) Put(u *model.User) error { } func (r *userRepository) FindByUsername(username string) (*model.User, error) { + username = strings.ToLower(username) sel := r.newSelect().Columns("*").Where(Eq{"user_name": username}) var usr model.User err := r.queryOne(sel, &usr) diff --git a/persistence/user_repository_test.go b/persistence/user_repository_test.go new file mode 100644 index 00000000..f9c3b2ab --- /dev/null +++ b/persistence/user_repository_test.go @@ -0,0 +1,41 @@ +package persistence + +import ( + "github.com/astaxie/beego/orm" + "github.com/deluan/navidrome/log" + "github.com/deluan/navidrome/model" + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +var _ = Describe("UserRepository", func() { + var repo model.UserRepository + + BeforeEach(func() { + repo = NewUserRepository(log.NewContext(nil), orm.NewOrm()) + }) + + Describe("Put/Get/FindByUsername", func() { + usr := model.User{ + ID: "123", + UserName: "AdMiN", + Name: "Admin", + Email: "admin@admin.com", + Password: "wordpass", + IsAdmin: true, + } + It("saves the user to the DB", func() { + Expect(repo.Put(&usr)).To(BeNil()) + }) + It("returns the newly created user", func() { + actual, err := repo.Get("123") + Expect(err).ToNot(HaveOccurred()) + Expect(actual.Name).To(Equal("Admin")) + }) + It("find the user by case-insensitive username", func() { + actual, err := repo.FindByUsername("aDmIn") + Expect(err).ToNot(HaveOccurred()) + Expect(actual.Name).To(Equal("Admin")) + }) + }) +})