@ -1,4 +1,4 @@
package auth
package authimpl
import (
"context"
@ -11,7 +11,7 @@ import (
"github.com/grafana/grafana/pkg/infra/db"
"github.com/grafana/grafana/pkg/infra/log"
"github.com/grafana/grafana/pkg/infra/serverlock"
"github.com/grafana/grafana/pkg/models "
"github.com/grafana/grafana/pkg/services/auth "
"github.com/grafana/grafana/pkg/services/quota"
"github.com/grafana/grafana/pkg/services/user"
"github.com/grafana/grafana/pkg/setting"
@ -42,10 +42,6 @@ type UserAuthTokenService struct {
log log . Logger
}
type ActiveTokenService interface {
ActiveTokenCount ( ctx context . Context , _ * quota . ScopeParameters ) ( * quota . Map , error )
}
type ActiveAuthTokenService struct {
cfg * setting . Cfg
sqlStore db . DB
@ -63,7 +59,7 @@ func ProvideActiveAuthTokenService(cfg *setting.Cfg, sqlStore db.DB, quotaServic
}
if err := quotaService . RegisterQuotaReporter ( & quota . NewUsageReporter {
TargetSrv : QuotaTargetSrv ,
TargetSrv : auth . QuotaTargetSrv ,
DefaultLimits : defaultLimits ,
Reporter : s . ActiveTokenCount ,
} ) ; err != nil {
@ -86,7 +82,7 @@ func (a *ActiveAuthTokenService) ActiveTokenCount(ctx context.Context, _ *quota.
return err
} )
tag , err := quota . NewTag ( QuotaTargetSrv , QuotaTarget , quota . GlobalScope )
tag , err := quota . NewTag ( auth . QuotaTargetSrv , auth . QuotaTarget , quota . GlobalScope )
if err != nil {
return nil , err
}
@ -96,7 +92,7 @@ func (a *ActiveAuthTokenService) ActiveTokenCount(ctx context.Context, _ *quota.
return u , err
}
func ( s * UserAuthTokenService ) CreateToken ( ctx context . Context , user * user . User , clientIP net . IP , userAgent string ) ( * models . UserToken , error ) {
func ( s * UserAuthTokenService ) CreateToken ( ctx context . Context , user * user . User , clientIP net . IP , userAgent string ) ( * auth . UserToken , error ) {
token , err := util . RandomHex ( 16 )
if err != nil {
return nil , err
@ -138,13 +134,13 @@ func (s *UserAuthTokenService) CreateToken(ctx context.Context, user *user.User,
ctxLogger := s . log . FromContext ( ctx )
ctxLogger . Debug ( "user auth token created" , "tokenId" , userAuthToken . Id , "userId" , userAuthToken . UserId , "clientIP" , userAuthToken . ClientIp , "userAgent" , userAuthToken . UserAgent , "authToken" , userAuthToken . AuthToken )
var userToken models . UserToken
var userToken auth . UserToken
err = userAuthToken . toUserToken ( & userToken )
return & userToken , err
}
func ( s * UserAuthTokenService ) LookupToken ( ctx context . Context , unhashedToken string ) ( * models . UserToken , error ) {
func ( s * UserAuthTokenService ) LookupToken ( ctx context . Context , unhashedToken string ) ( * auth . UserToken , error ) {
hashedToken := hashToken ( unhashedToken )
var model userAuthToken
var exists bool
@ -162,14 +158,14 @@ func (s *UserAuthTokenService) LookupToken(ctx context.Context, unhashedToken st
}
if ! exists {
return nil , models . ErrUserTokenNotFound
return nil , auth . ErrUserTokenNotFound
}
ctxLogger := s . log . FromContext ( ctx )
if model . RevokedAt > 0 {
ctxLogger . Debug ( "user token has been revoked" , "user ID" , model . UserId , "token ID" , model . Id )
return nil , & models . TokenRevokedError {
return nil , & auth . TokenRevokedError {
UserID : model . UserId ,
TokenID : model . Id ,
}
@ -177,7 +173,7 @@ func (s *UserAuthTokenService) LookupToken(ctx context.Context, unhashedToken st
if model . CreatedAt <= s . createdAfterParam ( ) || model . RotatedAt <= s . rotatedAfterParam ( ) {
ctxLogger . Debug ( "user token has expired" , "user ID" , model . UserId , "token ID" , model . Id )
return nil , & models . TokenExpiredError {
return nil , & auth . TokenExpiredError {
UserID : model . UserId ,
TokenID : model . Id ,
}
@ -242,13 +238,13 @@ func (s *UserAuthTokenService) LookupToken(ctx context.Context, unhashedToken st
model . UnhashedToken = unhashedToken
var userToken models . UserToken
var userToken auth . UserToken
err = model . toUserToken ( & userToken )
return & userToken , err
}
func ( s * UserAuthTokenService ) TryRotateToken ( ctx context . Context , token * models . UserToken ,
func ( s * UserAuthTokenService ) TryRotateToken ( ctx context . Context , token * auth . UserToken ,
clientIP net . IP , userAgent string ) ( bool , error ) {
if token == nil {
return false , nil
@ -328,9 +324,9 @@ func (s *UserAuthTokenService) TryRotateToken(ctx context.Context, token *models
return false , nil
}
func ( s * UserAuthTokenService ) RevokeToken ( ctx context . Context , token * models . UserToken , soft bool ) error {
func ( s * UserAuthTokenService ) RevokeToken ( ctx context . Context , token * auth . UserToken , soft bool ) error {
if token == nil {
return models . ErrUserTokenNotFound
return auth . ErrUserTokenNotFound
}
model , err := userAuthTokenFromUserToken ( token )
@ -361,7 +357,7 @@ func (s *UserAuthTokenService) RevokeToken(ctx context.Context, token *models.Us
if rowsAffected == 0 {
ctxLogger . Debug ( "user auth token not found/revoked" , "tokenId" , model . Id , "userId" , model . UserId , "clientIP" , model . ClientIp , "userAgent" , model . UserAgent )
return models . ErrUserTokenNotFound
return auth . ErrUserTokenNotFound
}
ctxLogger . Debug ( "user auth token revoked" , "tokenId" , model . Id , "userId" , model . UserId , "clientIP" , model . ClientIp , "userAgent" , model . UserAgent , "soft" , soft )
@ -418,8 +414,8 @@ func (s *UserAuthTokenService) BatchRevokeAllUserTokens(ctx context.Context, use
} )
}
func ( s * UserAuthTokenService ) GetUserToken ( ctx context . Context , userId , userTokenId int64 ) ( * models . UserToken , error ) {
var result models . UserToken
func ( s * UserAuthTokenService ) GetUserToken ( ctx context . Context , userId , userTokenId int64 ) ( * auth . UserToken , error ) {
var result auth . UserToken
err := s . SQLStore . WithDbSession ( ctx , func ( dbSession * db . Session ) error {
var token userAuthToken
exists , err := dbSession . Where ( "id = ? AND user_id = ?" , userTokenId , userId ) . Get ( & token )
@ -428,7 +424,7 @@ func (s *UserAuthTokenService) GetUserToken(ctx context.Context, userId, userTok
}
if ! exists {
return models . ErrUserTokenNotFound
return auth . ErrUserTokenNotFound
}
return token . toUserToken ( & result )
@ -437,8 +433,8 @@ func (s *UserAuthTokenService) GetUserToken(ctx context.Context, userId, userTok
return & result , err
}
func ( s * UserAuthTokenService ) GetUserTokens ( ctx context . Context , userId int64 ) ( [ ] * models . UserToken , error ) {
result := [ ] * models . UserToken { }
func ( s * UserAuthTokenService ) GetUserTokens ( ctx context . Context , userId int64 ) ( [ ] * auth . UserToken , error ) {
result := [ ] * auth . UserToken { }
err := s . SQLStore . WithDbSession ( ctx , func ( dbSession * db . Session ) error {
var tokens [ ] * userAuthToken
err := dbSession . Where ( "user_id = ? AND created_at > ? AND rotated_at > ? AND revoked_at = 0" ,
@ -451,7 +447,7 @@ func (s *UserAuthTokenService) GetUserTokens(ctx context.Context, userId int64)
}
for _ , token := range tokens {
var userToken models . UserToken
var userToken auth . UserToken
if err := token . toUserToken ( & userToken ) ; err != nil {
return err
}
@ -464,8 +460,8 @@ func (s *UserAuthTokenService) GetUserTokens(ctx context.Context, userId int64)
return result , err
}
func ( s * UserAuthTokenService ) GetUserRevokedTokens ( ctx context . Context , userId int64 ) ( [ ] * models . UserToken , error ) {
result := [ ] * models . UserToken { }
func ( s * UserAuthTokenService ) GetUserRevokedTokens ( ctx context . Context , userId int64 ) ( [ ] * auth . UserToken , error ) {
result := [ ] * auth . UserToken { }
err := s . SQLStore . WithDbSession ( ctx , func ( dbSession * db . Session ) error {
var tokens [ ] * userAuthToken
err := dbSession . Where ( "user_id = ? AND revoked_at > 0" , userId ) . Find ( & tokens )
@ -474,7 +470,7 @@ func (s *UserAuthTokenService) GetUserRevokedTokens(ctx context.Context, userId
}
for _ , token := range tokens {
var userToken models . UserToken
var userToken auth . UserToken
if err := token . toUserToken ( & userToken ) ; err != nil {
return err
}
@ -507,7 +503,7 @@ func readQuotaConfig(cfg *setting.Cfg) (*quota.Map, error) {
return limits , nil
}
globalQuotaTag , err := quota . NewTag ( QuotaTargetSrv , QuotaTarget , quota . GlobalScope )
globalQuotaTag , err := quota . NewTag ( auth . QuotaTargetSrv , auth . QuotaTarget , quota . GlobalScope )
if err != nil {
return limits , err
}