Auth: Enable retries and transaction for some db calls for auth tokens (#16785)
the WithSession wrapper handles retries and connection management so the caller dont have to worry about it.
This commit is contained in:
@@ -119,7 +119,7 @@ func (server *HTTPServer) AdminLogoutUser(c *m.ReqContext) Response {
|
||||
return Error(400, "You cannot logout yourself", nil)
|
||||
}
|
||||
|
||||
return server.logoutUserFromAllDevicesInternal(userID)
|
||||
return server.logoutUserFromAllDevicesInternal(c.Req.Context(), userID)
|
||||
}
|
||||
|
||||
// GET /api/admin/users/:id/auth-tokens
|
||||
|
||||
+2
-2
@@ -131,7 +131,7 @@ func (hs *HTTPServer) loginUserWithUser(user *m.User, c *m.ReqContext) {
|
||||
hs.log.Error("user login with nil user")
|
||||
}
|
||||
|
||||
userToken, err := hs.AuthTokenService.CreateToken(user.Id, c.RemoteAddr(), c.Req.UserAgent())
|
||||
userToken, err := hs.AuthTokenService.CreateToken(c.Req.Context(), user.Id, c.RemoteAddr(), c.Req.UserAgent())
|
||||
if err != nil {
|
||||
hs.log.Error("failed to create auth token", "error", err)
|
||||
}
|
||||
@@ -140,7 +140,7 @@ func (hs *HTTPServer) loginUserWithUser(user *m.User, c *m.ReqContext) {
|
||||
}
|
||||
|
||||
func (hs *HTTPServer) Logout(c *m.ReqContext) {
|
||||
if err := hs.AuthTokenService.RevokeToken(c.UserToken); err != nil && err != m.ErrUserTokenNotFound {
|
||||
if err := hs.AuthTokenService.RevokeToken(c.Req.Context(), c.UserToken); err != nil && err != m.ErrUserTokenNotFound {
|
||||
hs.log.Error("failed to revoke auth token", "error", err)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"github.com/grafana/grafana/pkg/api/dtos"
|
||||
@@ -19,7 +20,7 @@ func (server *HTTPServer) RevokeUserAuthToken(c *models.ReqContext, cmd models.R
|
||||
return server.revokeUserAuthTokenInternal(c, c.UserId, cmd)
|
||||
}
|
||||
|
||||
func (server *HTTPServer) logoutUserFromAllDevicesInternal(userID int64) Response {
|
||||
func (server *HTTPServer) logoutUserFromAllDevicesInternal(ctx context.Context, userID int64) Response {
|
||||
userQuery := models.GetUserByIdQuery{Id: userID}
|
||||
|
||||
if err := bus.Dispatch(&userQuery); err != nil {
|
||||
@@ -29,7 +30,7 @@ func (server *HTTPServer) logoutUserFromAllDevicesInternal(userID int64) Respons
|
||||
return Error(500, "Could not read user from database", err)
|
||||
}
|
||||
|
||||
err := server.AuthTokenService.RevokeAllUserTokens(userID)
|
||||
err := server.AuthTokenService.RevokeAllUserTokens(ctx, userID)
|
||||
if err != nil {
|
||||
return Error(500, "Failed to logout user", err)
|
||||
}
|
||||
@@ -49,7 +50,7 @@ func (server *HTTPServer) getUserAuthTokensInternal(c *models.ReqContext, userID
|
||||
return Error(500, "Failed to get user", err)
|
||||
}
|
||||
|
||||
tokens, err := server.AuthTokenService.GetUserTokens(userID)
|
||||
tokens, err := server.AuthTokenService.GetUserTokens(c.Req.Context(), userID)
|
||||
if err != nil {
|
||||
return Error(500, "Failed to get user auth tokens", err)
|
||||
}
|
||||
@@ -84,7 +85,7 @@ func (server *HTTPServer) revokeUserAuthTokenInternal(c *models.ReqContext, user
|
||||
return Error(500, "Failed to get user", err)
|
||||
}
|
||||
|
||||
token, err := server.AuthTokenService.GetUserToken(userID, cmd.AuthTokenId)
|
||||
token, err := server.AuthTokenService.GetUserToken(c.Req.Context(), userID, cmd.AuthTokenId)
|
||||
if err != nil {
|
||||
if err == models.ErrUserTokenNotFound {
|
||||
return Error(404, "User auth token not found", err)
|
||||
@@ -96,7 +97,7 @@ func (server *HTTPServer) revokeUserAuthTokenInternal(c *models.ReqContext, user
|
||||
return Error(400, "Cannot revoke active user auth token", nil)
|
||||
}
|
||||
|
||||
err = server.AuthTokenService.RevokeToken(token)
|
||||
err = server.AuthTokenService.RevokeToken(c.Req.Context(), token)
|
||||
if err != nil {
|
||||
if err == models.ErrUserTokenNotFound {
|
||||
return Error(404, "User auth token not found", err)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@@ -75,7 +76,7 @@ func TestUserTokenApiEndpoint(t *testing.T) {
|
||||
token := &m.UserToken{Id: 1}
|
||||
|
||||
revokeUserAuthTokenInternalScenario("Should be successful", cmd, 200, token, func(sc *scenarioContext) {
|
||||
sc.userAuthTokenService.GetUserTokenProvider = func(userId, userTokenId int64) (*m.UserToken, error) {
|
||||
sc.userAuthTokenService.GetUserTokenProvider = func(ctx context.Context, userId, userTokenId int64) (*m.UserToken, error) {
|
||||
return &m.UserToken{Id: 2}, nil
|
||||
}
|
||||
sc.fakeReqWithParams("POST", sc.url, map[string]string{}).exec()
|
||||
@@ -93,7 +94,7 @@ func TestUserTokenApiEndpoint(t *testing.T) {
|
||||
token := &m.UserToken{Id: 2}
|
||||
|
||||
revokeUserAuthTokenInternalScenario("Should not be successful", cmd, TestUserID, token, func(sc *scenarioContext) {
|
||||
sc.userAuthTokenService.GetUserTokenProvider = func(userId, userTokenId int64) (*m.UserToken, error) {
|
||||
sc.userAuthTokenService.GetUserTokenProvider = func(ctx context.Context, userId, userTokenId int64) (*m.UserToken, error) {
|
||||
return token, nil
|
||||
}
|
||||
sc.fakeReqWithParams("POST", sc.url, map[string]string{}).exec()
|
||||
@@ -126,7 +127,7 @@ func TestUserTokenApiEndpoint(t *testing.T) {
|
||||
SeenAt: time.Now().Unix(),
|
||||
},
|
||||
}
|
||||
sc.userAuthTokenService.GetUserTokensProvider = func(userId int64) ([]*m.UserToken, error) {
|
||||
sc.userAuthTokenService.GetUserTokensProvider = func(ctx context.Context, userId int64) ([]*m.UserToken, error) {
|
||||
return tokens, nil
|
||||
}
|
||||
sc.fakeReqWithParams("GET", sc.url, map[string]string{}).exec()
|
||||
@@ -226,7 +227,7 @@ func logoutUserFromAllDevicesInternalScenario(desc string, userId int64, fn scen
|
||||
sc.context.OrgId = TestOrgID
|
||||
sc.context.OrgRole = m.ROLE_ADMIN
|
||||
|
||||
return hs.logoutUserFromAllDevicesInternal(userId)
|
||||
return hs.logoutUserFromAllDevicesInternal(context.Background(), userId)
|
||||
})
|
||||
|
||||
sc.m.Post("/", sc.defaultHandler)
|
||||
|
||||
Reference in New Issue
Block a user