|
@@ -1,4 +1,4 @@
|
|
|
-package authtoken
|
|
|
|
|
|
|
+package auth
|
|
|
|
|
|
|
|
import (
|
|
import (
|
|
|
"crypto/sha256"
|
|
"crypto/sha256"
|
|
@@ -16,30 +16,26 @@ import (
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
func init() {
|
|
func init() {
|
|
|
- registry.Register(®istry.Descriptor{
|
|
|
|
|
- Name: "AuthTokenService",
|
|
|
|
|
- Instance: &UserAuthTokenServiceImpl{},
|
|
|
|
|
- InitPriority: registry.Low,
|
|
|
|
|
- })
|
|
|
|
|
|
|
+ registry.RegisterService(&UserAuthTokenService{})
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
var getTime = time.Now
|
|
var getTime = time.Now
|
|
|
|
|
|
|
|
const urgentRotateTime = 1 * time.Minute
|
|
const urgentRotateTime = 1 * time.Minute
|
|
|
|
|
|
|
|
-type UserAuthTokenServiceImpl struct {
|
|
|
|
|
|
|
+type UserAuthTokenService struct {
|
|
|
SQLStore *sqlstore.SqlStore `inject:""`
|
|
SQLStore *sqlstore.SqlStore `inject:""`
|
|
|
ServerLockService *serverlock.ServerLockService `inject:""`
|
|
ServerLockService *serverlock.ServerLockService `inject:""`
|
|
|
Cfg *setting.Cfg `inject:""`
|
|
Cfg *setting.Cfg `inject:""`
|
|
|
log log.Logger
|
|
log log.Logger
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func (s *UserAuthTokenServiceImpl) Init() error {
|
|
|
|
|
|
|
+func (s *UserAuthTokenService) Init() error {
|
|
|
s.log = log.New("auth")
|
|
s.log = log.New("auth")
|
|
|
return nil
|
|
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)
|
|
clientIP = util.ParseIPAddress(clientIP)
|
|
|
token, err := util.RandomHex(16)
|
|
token, err := util.RandomHex(16)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
@@ -77,7 +73,7 @@ func (s *UserAuthTokenServiceImpl) CreateToken(userId int64, clientIP, userAgent
|
|
|
return &userToken, err
|
|
return &userToken, err
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func (s *UserAuthTokenServiceImpl) LookupToken(unhashedToken string) (*models.UserToken, error) {
|
|
|
|
|
|
|
+func (s *UserAuthTokenService) LookupToken(unhashedToken string) (*models.UserToken, error) {
|
|
|
hashedToken := hashToken(unhashedToken)
|
|
hashedToken := hashToken(unhashedToken)
|
|
|
if setting.Env == setting.DEV {
|
|
if setting.Env == setting.DEV {
|
|
|
s.log.Debug("looking up token", "unhashed", unhashedToken, "hashed", hashedToken)
|
|
s.log.Debug("looking up token", "unhashed", unhashedToken, "hashed", hashedToken)
|
|
@@ -95,7 +91,7 @@ func (s *UserAuthTokenServiceImpl) LookupToken(unhashedToken string) (*models.Us
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if !exists {
|
|
if !exists {
|
|
|
- return nil, ErrAuthTokenNotFound
|
|
|
|
|
|
|
+ return nil, models.ErrUserTokenNotFound
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if model.AuthToken != hashedToken && model.PrevAuthToken == hashedToken && model.AuthTokenSeen {
|
|
if model.AuthToken != hashedToken && model.PrevAuthToken == hashedToken && model.AuthTokenSeen {
|
|
@@ -142,7 +138,7 @@ func (s *UserAuthTokenServiceImpl) LookupToken(unhashedToken string) (*models.Us
|
|
|
return &userToken, err
|
|
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 {
|
|
if token == nil {
|
|
|
return false, nil
|
|
return false, nil
|
|
|
}
|
|
}
|
|
@@ -201,9 +197,9 @@ func (s *UserAuthTokenServiceImpl) TryRotateToken(token *models.UserToken, clien
|
|
|
return false, nil
|
|
return false, nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func (s *UserAuthTokenServiceImpl) RevokeToken(token *models.UserToken) error {
|
|
|
|
|
|
|
+func (s *UserAuthTokenService) RevokeToken(token *models.UserToken) error {
|
|
|
if token == nil {
|
|
if token == nil {
|
|
|
- return ErrAuthTokenNotFound
|
|
|
|
|
|
|
+ return models.ErrUserTokenNotFound
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
model := userAuthTokenFromUserToken(token)
|
|
model := userAuthTokenFromUserToken(token)
|
|
@@ -215,7 +211,7 @@ func (s *UserAuthTokenServiceImpl) RevokeToken(token *models.UserToken) error {
|
|
|
|
|
|
|
|
if rowsAffected == 0 {
|
|
if rowsAffected == 0 {
|
|
|
s.log.Debug("user auth token not found/revoked", "tokenId", model.Id, "userId", model.UserId, "clientIP", model.ClientIp, "userAgent", model.UserAgent)
|
|
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)
|
|
s.log.Debug("user auth token revoked", "tokenId", model.Id, "userId", model.UserId, "clientIP", model.ClientIp, "userAgent", model.UserAgent)
|