aboutsummaryrefslogtreecommitdiff
path: root/internal/route
diff options
context:
space:
mode:
authorJoe Chen <jc@unknwon.io>2022-06-11 09:42:17 +0800
committerGitHub <noreply@github.com>2022-06-11 09:42:17 +0800
commitf837ea6346ac720d586eda51ab89c5c71a1f3e65 (patch)
tree678b0bdccee80e65c399e8696cd209c9e902618d /internal/route
parent9776bdc9b8b441ebd73c100bfe2aa4e495c233ca (diff)
db: use `context` and go-mockgen for `UsersStore` (#7042)
Diffstat (limited to 'internal/route')
-rw-r--r--internal/route/lfs/route.go6
-rw-r--r--internal/route/lfs/route_test.go82
-rw-r--r--internal/route/org/setting.go2
-rw-r--r--internal/route/repo/http.go6
-rw-r--r--internal/route/repo/tasks.go4
-rw-r--r--internal/route/user/auth.go2
-rw-r--r--internal/route/user/setting.go2
7 files changed, 55 insertions, 49 deletions
diff --git a/internal/route/lfs/route.go b/internal/route/lfs/route.go
index f5195837..94c42fea 100644
--- a/internal/route/lfs/route.go
+++ b/internal/route/lfs/route.go
@@ -58,7 +58,7 @@ func authenticate() macaron.Handler {
return
}
- user, err := db.Users.Authenticate(username, password, -1)
+ user, err := db.Users.Authenticate(c.Req.Context(), username, password, -1)
if err != nil && !auth.IsErrBadCredentials(err) {
internalServerError(c.Resp)
log.Error("Failed to authenticate user [name: %s]: %v", username, err)
@@ -86,7 +86,7 @@ func authenticate() macaron.Handler {
log.Error("Failed to touch access token: %v", err)
}
- user, err = db.Users.GetByID(token.UserID)
+ user, err = db.Users.GetByID(c.Req.Context(), token.UserID)
if err != nil {
// Once we found the token, we're supposed to find its related user,
// thus any error is unexpected.
@@ -108,7 +108,7 @@ func authorize(mode db.AccessMode) macaron.Handler {
username := c.Params(":username")
reponame := strings.TrimSuffix(c.Params(":reponame"), ".git")
- owner, err := db.Users.GetByUsername(username)
+ owner, err := db.Users.GetByUsername(c.Req.Context(), username)
if err != nil {
if db.IsErrUserNotExist(err) {
c.Status(http.StatusNotFound)
diff --git a/internal/route/lfs/route_test.go b/internal/route/lfs/route_test.go
index 57d0728f..6202695b 100644
--- a/internal/route/lfs/route_test.go
+++ b/internal/route/lfs/route_test.go
@@ -30,7 +30,7 @@ func Test_authenticate(t *testing.T) {
tests := []struct {
name string
header http.Header
- mockUsersStore *db.MockUsersStore
+ mockUsersStore func() db.UsersStore
mockTwoFactorsStore *db.MockTwoFactorsStore
mockAccessTokensStore func() db.AccessTokensStore
expStatusCode int
@@ -51,10 +51,10 @@ func Test_authenticate(t *testing.T) {
header: http.Header{
"Authorization": []string{"Basic dXNlcm5hbWU6cGFzc3dvcmQ="},
},
- mockUsersStore: &db.MockUsersStore{
- MockAuthenticate: func(username, password string, loginSourceID int64) (*db.User, error) {
- return &db.User{}, nil
- },
+ mockUsersStore: func() db.UsersStore {
+ mock := db.NewMockUsersStore()
+ mock.AuthenticateFunc.SetDefaultReturn(&db.User{}, nil)
+ return mock
},
mockTwoFactorsStore: &db.MockTwoFactorsStore{
MockIsUserEnabled: func(userID int64) bool {
@@ -70,10 +70,10 @@ func Test_authenticate(t *testing.T) {
header: http.Header{
"Authorization": []string{"Basic dXNlcm5hbWU="},
},
- mockUsersStore: &db.MockUsersStore{
- MockAuthenticate: func(username, password string, loginSourceID int64) (*db.User, error) {
- return nil, auth.ErrBadCredentials{}
- },
+ mockUsersStore: func() db.UsersStore {
+ mock := db.NewMockUsersStore()
+ mock.AuthenticateFunc.SetDefaultReturn(nil, auth.ErrBadCredentials{})
+ return mock
},
mockAccessTokensStore: func() db.AccessTokensStore {
mock := db.NewMockAccessTokensStore()
@@ -93,10 +93,10 @@ func Test_authenticate(t *testing.T) {
header: http.Header{
"Authorization": []string{"Basic dXNlcm5hbWU6cGFzc3dvcmQ="},
},
- mockUsersStore: &db.MockUsersStore{
- MockAuthenticate: func(username, password string, loginSourceID int64) (*db.User, error) {
- return &db.User{ID: 1, Name: "unknwon"}, nil
- },
+ mockUsersStore: func() db.UsersStore {
+ mock := db.NewMockUsersStore()
+ mock.AuthenticateFunc.SetDefaultReturn(&db.User{ID: 1, Name: "unknwon"}, nil)
+ return mock
},
mockTwoFactorsStore: &db.MockTwoFactorsStore{
MockIsUserEnabled: func(userID int64) bool {
@@ -112,13 +112,11 @@ func Test_authenticate(t *testing.T) {
header: http.Header{
"Authorization": []string{"Basic dXNlcm5hbWU="},
},
- mockUsersStore: &db.MockUsersStore{
- MockAuthenticate: func(username, password string, loginSourceID int64) (*db.User, error) {
- return nil, auth.ErrBadCredentials{}
- },
- MockGetByID: func(id int64) (*db.User, error) {
- return &db.User{ID: 1, Name: "unknwon"}, nil
- },
+ mockUsersStore: func() db.UsersStore {
+ mock := db.NewMockUsersStore()
+ mock.AuthenticateFunc.SetDefaultReturn(nil, auth.ErrBadCredentials{})
+ mock.GetByIDFunc.SetDefaultReturn(&db.User{ID: 1, Name: "unknwon"}, nil)
+ return mock
},
mockAccessTokensStore: func() db.AccessTokensStore {
mock := db.NewMockAccessTokensStore()
@@ -132,9 +130,10 @@ func Test_authenticate(t *testing.T) {
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
- db.SetMockUsersStore(t, test.mockUsersStore)
+ if test.mockUsersStore != nil {
+ db.SetMockUsersStore(t, test.mockUsersStore())
+ }
db.SetMockTwoFactorsStore(t, test.mockTwoFactorsStore)
-
if test.mockAccessTokensStore != nil {
db.SetMockAccessTokensStore(t, test.mockAccessTokensStore())
}
@@ -165,7 +164,7 @@ func Test_authorize(t *testing.T) {
tests := []struct {
name string
authroize macaron.Handler
- mockUsersStore *db.MockUsersStore
+ mockUsersStore func() db.UsersStore
mockReposStore *db.MockReposStore
mockPermsStore func() db.PermsStore
expStatusCode int
@@ -174,20 +173,22 @@ func Test_authorize(t *testing.T) {
{
name: "user does not exist",
authroize: authorize(db.AccessModeNone),
- mockUsersStore: &db.MockUsersStore{
- MockGetByUsername: func(username string) (*db.User, error) {
- return nil, db.ErrUserNotExist{}
- },
+ mockUsersStore: func() db.UsersStore {
+ mock := db.NewMockUsersStore()
+ mock.GetByUsernameFunc.SetDefaultReturn(nil, db.ErrUserNotExist{})
+ return mock
},
expStatusCode: http.StatusNotFound,
},
{
name: "repository does not exist",
authroize: authorize(db.AccessModeNone),
- mockUsersStore: &db.MockUsersStore{
- MockGetByUsername: func(username string) (*db.User, error) {
+ mockUsersStore: func() db.UsersStore {
+ mock := db.NewMockUsersStore()
+ mock.GetByUsernameFunc.SetDefaultHook(func(ctx context.Context, username string) (*db.User, error) {
return &db.User{Name: username}, nil
- },
+ })
+ return mock
},
mockReposStore: &db.MockReposStore{
MockGetByName: func(ownerID int64, name string) (*db.Repository, error) {
@@ -199,10 +200,12 @@ func Test_authorize(t *testing.T) {
{
name: "actor is not authorized",
authroize: authorize(db.AccessModeWrite),
- mockUsersStore: &db.MockUsersStore{
- MockGetByUsername: func(username string) (*db.User, error) {
+ mockUsersStore: func() db.UsersStore {
+ mock := db.NewMockUsersStore()
+ mock.GetByUsernameFunc.SetDefaultHook(func(ctx context.Context, username string) (*db.User, error) {
return &db.User{Name: username}, nil
- },
+ })
+ return mock
},
mockReposStore: &db.MockReposStore{
MockGetByName: func(ownerID int64, name string) (*db.Repository, error) {
@@ -222,10 +225,12 @@ func Test_authorize(t *testing.T) {
{
name: "actor is authorized",
authroize: authorize(db.AccessModeRead),
- mockUsersStore: &db.MockUsersStore{
- MockGetByUsername: func(username string) (*db.User, error) {
+ mockUsersStore: func() db.UsersStore {
+ mock := db.NewMockUsersStore()
+ mock.GetByUsernameFunc.SetDefaultHook(func(ctx context.Context, username string) (*db.User, error) {
return &db.User{Name: username}, nil
- },
+ })
+ return mock
},
mockReposStore: &db.MockReposStore{
MockGetByName: func(ownerID int64, name string) (*db.Repository, error) {
@@ -245,9 +250,10 @@ func Test_authorize(t *testing.T) {
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
- db.SetMockUsersStore(t, test.mockUsersStore)
+ if test.mockUsersStore != nil {
+ db.SetMockUsersStore(t, test.mockUsersStore())
+ }
db.SetMockReposStore(t, test.mockReposStore)
-
if test.mockPermsStore != nil {
db.SetMockPermsStore(t, test.mockPermsStore())
}
diff --git a/internal/route/org/setting.go b/internal/route/org/setting.go
index 94e9b7a6..e15b9faf 100644
--- a/internal/route/org/setting.go
+++ b/internal/route/org/setting.go
@@ -109,7 +109,7 @@ func SettingsDelete(c *context.Context) {
org := c.Org.Organization
if c.Req.Method == "POST" {
- if _, err := db.Users.Authenticate(c.User.Name, c.Query("password"), c.User.LoginSource); err != nil {
+ if _, err := db.Users.Authenticate(c.Req.Context(), c.User.Name, c.Query("password"), c.User.LoginSource); err != nil {
if auth.IsErrBadCredentials(err) {
c.RenderWithErr(c.Tr("form.enterred_invalid_password"), SETTINGS_DELETE, nil)
} else {
diff --git a/internal/route/repo/http.go b/internal/route/repo/http.go
index 7e970194..888ad4d8 100644
--- a/internal/route/repo/http.go
+++ b/internal/route/repo/http.go
@@ -65,7 +65,7 @@ func HTTPContexter() macaron.Handler {
strings.HasSuffix(c.Req.URL.Path, "git-upload-pack") ||
c.Req.Method == "GET"
- owner, err := db.Users.GetByUsername(ownerName)
+ owner, err := db.Users.GetByUsername(c.Req.Context(), ownerName)
if err != nil {
if db.IsErrUserNotExist(err) {
c.Status(http.StatusNotFound)
@@ -123,7 +123,7 @@ func HTTPContexter() macaron.Handler {
return
}
- authUser, err := db.Users.Authenticate(authUsername, authPassword, -1)
+ authUser, err := db.Users.Authenticate(c.Req.Context(), authUsername, authPassword, -1)
if err != nil && !auth.IsErrBadCredentials(err) {
c.Status(http.StatusInternalServerError)
log.Error("Failed to authenticate user [name: %s]: %v", authUsername, err)
@@ -146,7 +146,7 @@ func HTTPContexter() macaron.Handler {
log.Error("Failed to touch access token: %v", err)
}
- authUser, err = db.Users.GetByID(token.UserID)
+ authUser, err = db.Users.GetByID(c.Req.Context(), token.UserID)
if err != nil {
// Once we found token, we're supposed to find its related user,
// thus any error is unexpected.
diff --git a/internal/route/repo/tasks.go b/internal/route/repo/tasks.go
index 81e85e2a..c5b555b9 100644
--- a/internal/route/repo/tasks.go
+++ b/internal/route/repo/tasks.go
@@ -26,7 +26,7 @@ func TriggerTask(c *macaron.Context) {
username := c.Params(":username")
reponame := c.Params(":reponame")
- owner, err := db.Users.GetByUsername(username)
+ owner, err := db.Users.GetByUsername(c.Req.Context(), username)
if err != nil {
if db.IsErrUserNotExist(err) {
c.Error(http.StatusBadRequest, "Owner does not exist")
@@ -55,7 +55,7 @@ func TriggerTask(c *macaron.Context) {
return
}
- pusher, err := db.Users.GetByID(pusherID)
+ pusher, err := db.Users.GetByID(c.Req.Context(), pusherID)
if err != nil {
if db.IsErrUserNotExist(err) {
c.Error(http.StatusBadRequest, "Pusher does not exist")
diff --git a/internal/route/user/auth.go b/internal/route/user/auth.go
index f8bbe7ab..b3b785c2 100644
--- a/internal/route/user/auth.go
+++ b/internal/route/user/auth.go
@@ -161,7 +161,7 @@ func LoginPost(c *context.Context, f form.SignIn) {
return
}
- u, err := db.Users.Authenticate(f.UserName, f.Password, f.LoginSource)
+ u, err := db.Users.Authenticate(c.Req.Context(), f.UserName, f.Password, f.LoginSource)
if err != nil {
switch errors.Cause(err).(type) {
case auth.ErrBadCredentials:
diff --git a/internal/route/user/setting.go b/internal/route/user/setting.go
index cf2226c5..c28a1747 100644
--- a/internal/route/user/setting.go
+++ b/internal/route/user/setting.go
@@ -640,7 +640,7 @@ func SettingsDelete(c *context.Context) {
c.PageIs("SettingsDelete")
if c.Req.Method == "POST" {
- if _, err := db.Users.Authenticate(c.User.Name, c.Query("password"), c.User.LoginSource); err != nil {
+ if _, err := db.Users.Authenticate(c.Req.Context(), c.User.Name, c.Query("password"), c.User.LoginSource); err != nil {
if auth.IsErrBadCredentials(err) {
c.RenderWithErr(c.Tr("form.enterred_invalid_password"), SETTINGS_DELETE, nil)
} else {