From 8ae066ab5d30e9049b186479fda64b62de50d544 Mon Sep 17 00:00:00 2001 From: Marcus Efraimsson Date: Wed, 6 Feb 2019 17:02:57 +0100 Subject: [PATCH] move authtoken package into auth package --- pkg/cmd/grafana-server/server.go | 1 + pkg/services/auth/auth.go | 1 - .../auth/{authtoken => }/auth_token.go | 26 ++++++++----------- .../auth/{authtoken => }/auth_token_test.go | 19 +++++++------- pkg/services/auth/{authtoken => }/model.go | 16 ++++++------ .../session_cleanup.go => token_cleanup.go} | 6 ++--- ..._cleanup_test.go => token_cleanup_test.go} | 2 +- 7 files changed, 34 insertions(+), 37 deletions(-) delete mode 100644 pkg/services/auth/auth.go rename pkg/services/auth/{authtoken => }/auth_token.go (89%) rename pkg/services/auth/{authtoken => }/auth_token_test.go (97%) rename pkg/services/auth/{authtoken => }/model.go (88%) rename pkg/services/auth/{authtoken/session_cleanup.go => token_cleanup.go} (87%) rename pkg/services/auth/{authtoken/session_cleanup_test.go => token_cleanup_test.go} (99%) diff --git a/pkg/cmd/grafana-server/server.go b/pkg/cmd/grafana-server/server.go index 4781361b9b9..f663e6be895 100644 --- a/pkg/cmd/grafana-server/server.go +++ b/pkg/cmd/grafana-server/server.go @@ -32,6 +32,7 @@ import ( _ "github.com/grafana/grafana/pkg/metrics" _ "github.com/grafana/grafana/pkg/plugins" _ "github.com/grafana/grafana/pkg/services/alerting" + _ "github.com/grafana/grafana/pkg/services/auth" _ "github.com/grafana/grafana/pkg/services/cleanup" _ "github.com/grafana/grafana/pkg/services/notifications" _ "github.com/grafana/grafana/pkg/services/provisioning" diff --git a/pkg/services/auth/auth.go b/pkg/services/auth/auth.go deleted file mode 100644 index 8832b06d188..00000000000 --- a/pkg/services/auth/auth.go +++ /dev/null @@ -1 +0,0 @@ -package auth diff --git a/pkg/services/auth/authtoken/auth_token.go b/pkg/services/auth/auth_token.go similarity index 89% rename from pkg/services/auth/authtoken/auth_token.go rename to pkg/services/auth/auth_token.go index eedf38e8141..ef5dccd779f 100644 --- a/pkg/services/auth/authtoken/auth_token.go +++ b/pkg/services/auth/auth_token.go @@ -1,4 +1,4 @@ -package authtoken +package auth import ( "crypto/sha256" @@ -16,30 +16,26 @@ import ( ) func init() { - registry.Register(®istry.Descriptor{ - Name: "AuthTokenService", - Instance: &UserAuthTokenServiceImpl{}, - InitPriority: registry.Low, - }) + registry.RegisterService(&UserAuthTokenService{}) } var getTime = time.Now const urgentRotateTime = 1 * time.Minute -type UserAuthTokenServiceImpl struct { +type UserAuthTokenService struct { SQLStore *sqlstore.SqlStore `inject:""` ServerLockService *serverlock.ServerLockService `inject:""` Cfg *setting.Cfg `inject:""` log log.Logger } -func (s *UserAuthTokenServiceImpl) Init() error { +func (s *UserAuthTokenService) Init() error { s.log = log.New("auth") return nil } -func (s *UserAuthTokenServiceImpl) CreateToken(userId int64, clientIP, userAgent string) (*models.UserToken, error) { +func (s *UserAuthTokenService) CreateToken(userId int64, clientIP, userAgent string) (*models.UserToken, error) { clientIP = util.ParseIPAddress(clientIP) token, err := util.RandomHex(16) if err != nil { @@ -77,7 +73,7 @@ func (s *UserAuthTokenServiceImpl) CreateToken(userId int64, clientIP, userAgent return &userToken, err } -func (s *UserAuthTokenServiceImpl) LookupToken(unhashedToken string) (*models.UserToken, error) { +func (s *UserAuthTokenService) LookupToken(unhashedToken string) (*models.UserToken, error) { hashedToken := hashToken(unhashedToken) if setting.Env == setting.DEV { s.log.Debug("looking up token", "unhashed", unhashedToken, "hashed", hashedToken) @@ -95,7 +91,7 @@ func (s *UserAuthTokenServiceImpl) LookupToken(unhashedToken string) (*models.Us } if !exists { - return nil, ErrAuthTokenNotFound + return nil, models.ErrUserTokenNotFound } if model.AuthToken != hashedToken && model.PrevAuthToken == hashedToken && model.AuthTokenSeen { @@ -142,7 +138,7 @@ func (s *UserAuthTokenServiceImpl) LookupToken(unhashedToken string) (*models.Us return &userToken, err } -func (s *UserAuthTokenServiceImpl) TryRotateToken(token *models.UserToken, clientIP, userAgent string) (bool, error) { +func (s *UserAuthTokenService) TryRotateToken(token *models.UserToken, clientIP, userAgent string) (bool, error) { if token == nil { return false, nil } @@ -201,9 +197,9 @@ func (s *UserAuthTokenServiceImpl) TryRotateToken(token *models.UserToken, clien return false, nil } -func (s *UserAuthTokenServiceImpl) RevokeToken(token *models.UserToken) error { +func (s *UserAuthTokenService) RevokeToken(token *models.UserToken) error { if token == nil { - return ErrAuthTokenNotFound + return models.ErrUserTokenNotFound } model := userAuthTokenFromUserToken(token) @@ -215,7 +211,7 @@ func (s *UserAuthTokenServiceImpl) RevokeToken(token *models.UserToken) error { if rowsAffected == 0 { s.log.Debug("user auth token not found/revoked", "tokenId", model.Id, "userId", model.UserId, "clientIP", model.ClientIp, "userAgent", model.UserAgent) - return ErrAuthTokenNotFound + return models.ErrUserTokenNotFound } s.log.Debug("user auth token revoked", "tokenId", model.Id, "userId", model.UserId, "clientIP", model.ClientIp, "userAgent", model.UserAgent) diff --git a/pkg/services/auth/authtoken/auth_token_test.go b/pkg/services/auth/auth_token_test.go similarity index 97% rename from pkg/services/auth/authtoken/auth_token_test.go rename to pkg/services/auth/auth_token_test.go index 3021b0efa4b..3313af9f87f 100644 --- a/pkg/services/auth/authtoken/auth_token_test.go +++ b/pkg/services/auth/auth_token_test.go @@ -1,4 +1,4 @@ -package authtoken +package auth import ( "encoding/json" @@ -46,7 +46,7 @@ func TestUserAuthToken(t *testing.T) { Convey("When lookup hashed token should return user auth token not found error", func() { userToken, err := userAuthTokenService.LookupToken(userToken.AuthToken) - So(err, ShouldEqual, ErrAuthTokenNotFound) + So(err, ShouldEqual, models.ErrUserTokenNotFound) So(userToken, ShouldBeNil) }) @@ -61,13 +61,13 @@ func TestUserAuthToken(t *testing.T) { Convey("revoking nil token should return error", func() { err = userAuthTokenService.RevokeToken(nil) - So(err, ShouldEqual, ErrAuthTokenNotFound) + So(err, ShouldEqual, models.ErrUserTokenNotFound) }) Convey("revoking non-existing token should return error", func() { userToken.Id = 1000 err = userAuthTokenService.RevokeToken(userToken) - So(err, ShouldEqual, ErrAuthTokenNotFound) + So(err, ShouldEqual, models.ErrUserTokenNotFound) }) }) @@ -112,7 +112,7 @@ func TestUserAuthToken(t *testing.T) { } notGood, err := userAuthTokenService.LookupToken(userToken.UnhashedToken) - So(err, ShouldEqual, ErrAuthTokenNotFound) + So(err, ShouldEqual, models.ErrUserTokenNotFound) So(notGood, ShouldBeNil) }) @@ -140,7 +140,7 @@ func TestUserAuthToken(t *testing.T) { } notGood, err := userAuthTokenService.LookupToken(userToken.UnhashedToken) - So(err, ShouldEqual, ErrAuthTokenNotFound) + So(err, ShouldEqual, models.ErrUserTokenNotFound) So(notGood, ShouldBeNil) }) }) @@ -164,7 +164,8 @@ func TestUserAuthToken(t *testing.T) { So(err, ShouldBeNil) var tok models.UserToken - model.toUserToken(&tok) + err = model.toUserToken(&tok) + So(err, ShouldBeNil) getTime = func() time.Time { return t.Add(time.Hour) @@ -419,7 +420,7 @@ func createTestContext(t *testing.T) *testContext { t.Helper() sqlstore := sqlstore.InitTestDB(t) - tokenService := &UserAuthTokenServiceImpl{ + tokenService := &UserAuthTokenService{ SQLStore: sqlstore, Cfg: &setting.Cfg{ LoginMaxInactiveLifetimeDays: 7, @@ -438,7 +439,7 @@ func createTestContext(t *testing.T) *testContext { type testContext struct { sqlstore *sqlstore.SqlStore - tokenService *UserAuthTokenServiceImpl + tokenService *UserAuthTokenService } func (c *testContext) getAuthTokenByID(id int64) (*userAuthToken, error) { diff --git a/pkg/services/auth/authtoken/model.go b/pkg/services/auth/model.go similarity index 88% rename from pkg/services/auth/authtoken/model.go rename to pkg/services/auth/model.go index 64123f02bc6..36652e70436 100644 --- a/pkg/services/auth/authtoken/model.go +++ b/pkg/services/auth/model.go @@ -1,17 +1,11 @@ -package authtoken +package auth import ( - "errors" "fmt" "github.com/grafana/grafana/pkg/models" ) -// Typed errors -var ( - ErrAuthTokenNotFound = errors.New("user auth token not found") -) - type userAuthToken struct { Id int64 UserId int64 @@ -33,7 +27,11 @@ func userAuthTokenFromUserToken(ut *models.UserToken) *userAuthToken { return &uat } -func (uat *userAuthToken) fromUserToken(ut *models.UserToken) { +func (uat *userAuthToken) fromUserToken(ut *models.UserToken) error { + if uat == nil { + return fmt.Errorf("needs pointer to userAuthToken struct") + } + uat.Id = ut.Id uat.UserId = ut.UserId uat.AuthToken = ut.AuthToken @@ -46,6 +44,8 @@ func (uat *userAuthToken) fromUserToken(ut *models.UserToken) { uat.CreatedAt = ut.CreatedAt uat.UpdatedAt = ut.UpdatedAt uat.UnhashedToken = ut.UnhashedToken + + return nil } func (uat *userAuthToken) toUserToken(ut *models.UserToken) error { diff --git a/pkg/services/auth/authtoken/session_cleanup.go b/pkg/services/auth/token_cleanup.go similarity index 87% rename from pkg/services/auth/authtoken/session_cleanup.go rename to pkg/services/auth/token_cleanup.go index 2b8dfb7b4e2..d0e12c9c0e1 100644 --- a/pkg/services/auth/authtoken/session_cleanup.go +++ b/pkg/services/auth/token_cleanup.go @@ -1,11 +1,11 @@ -package authtoken +package auth import ( "context" "time" ) -func (srv *UserAuthTokenServiceImpl) Run(ctx context.Context) error { +func (srv *UserAuthTokenService) Run(ctx context.Context) error { if srv.Cfg.ExpiredTokensCleanupIntervalDays <= 0 { srv.log.Debug("cleanup of expired auth tokens are disabled") return nil @@ -31,7 +31,7 @@ func (srv *UserAuthTokenServiceImpl) Run(ctx context.Context) error { } } -func (srv *UserAuthTokenServiceImpl) deleteExpiredTokens(maxInactiveLifetime, maxLifetime time.Duration) (int64, error) { +func (srv *UserAuthTokenService) deleteExpiredTokens(maxInactiveLifetime, maxLifetime time.Duration) (int64, error) { createdBefore := getTime().Add(-maxLifetime) rotatedBefore := getTime().Add(-maxInactiveLifetime) diff --git a/pkg/services/auth/authtoken/session_cleanup_test.go b/pkg/services/auth/token_cleanup_test.go similarity index 99% rename from pkg/services/auth/authtoken/session_cleanup_test.go rename to pkg/services/auth/token_cleanup_test.go index 7b611b3263c..410764d3f8d 100644 --- a/pkg/services/auth/authtoken/session_cleanup_test.go +++ b/pkg/services/auth/token_cleanup_test.go @@ -1,4 +1,4 @@ -package authtoken +package auth import ( "fmt"