|
|
|
|
@ -1,12 +1,15 @@ |
|
|
|
|
package authtoken |
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
"encoding/json" |
|
|
|
|
"testing" |
|
|
|
|
"time" |
|
|
|
|
|
|
|
|
|
"github.com/grafana/grafana/pkg/components/simplejson" |
|
|
|
|
"github.com/grafana/grafana/pkg/setting" |
|
|
|
|
|
|
|
|
|
"github.com/grafana/grafana/pkg/log" |
|
|
|
|
"github.com/grafana/grafana/pkg/services/auth" |
|
|
|
|
"github.com/grafana/grafana/pkg/services/sqlstore" |
|
|
|
|
. "github.com/smartystreets/goconvey/convey" |
|
|
|
|
) |
|
|
|
|
@ -25,28 +28,24 @@ func TestUserAuthToken(t *testing.T) { |
|
|
|
|
Convey("When creating token", func() { |
|
|
|
|
userToken, err := userAuthTokenService.CreateToken(userID, "192.168.10.11:1234", "some user agent") |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
model, err := extractModelFromToken(userToken) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(model, ShouldNotBeNil) |
|
|
|
|
So(model.AuthTokenSeen, ShouldBeFalse) |
|
|
|
|
So(userToken, ShouldNotBeNil) |
|
|
|
|
So(userToken.AuthTokenSeen, ShouldBeFalse) |
|
|
|
|
|
|
|
|
|
Convey("When lookup unhashed token should return user auth token", func() { |
|
|
|
|
userToken, err := userAuthTokenService.LookupToken(model.UnhashedToken) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
lookedUpModel, err := extractModelFromToken(userToken) |
|
|
|
|
userToken, err := userAuthTokenService.LookupToken(userToken.UnhashedToken) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(lookedUpModel, ShouldNotBeNil) |
|
|
|
|
So(lookedUpModel.UserId, ShouldEqual, userID) |
|
|
|
|
So(lookedUpModel.AuthTokenSeen, ShouldBeTrue) |
|
|
|
|
So(userToken, ShouldNotBeNil) |
|
|
|
|
So(userToken.UserId, ShouldEqual, userID) |
|
|
|
|
So(userToken.AuthTokenSeen, ShouldBeTrue) |
|
|
|
|
|
|
|
|
|
storedAuthToken, err := ctx.getAuthTokenByID(lookedUpModel.Id) |
|
|
|
|
storedAuthToken, err := ctx.getAuthTokenByID(userToken.Id) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(storedAuthToken, ShouldNotBeNil) |
|
|
|
|
So(storedAuthToken.AuthTokenSeen, ShouldBeTrue) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
Convey("When lookup hashed token should return user auth token not found error", func() { |
|
|
|
|
userToken, err := userAuthTokenService.LookupToken(model.AuthToken) |
|
|
|
|
userToken, err := userAuthTokenService.LookupToken(userToken.AuthToken) |
|
|
|
|
So(err, ShouldEqual, ErrAuthTokenNotFound) |
|
|
|
|
So(userToken, ShouldBeNil) |
|
|
|
|
}) |
|
|
|
|
@ -55,7 +54,7 @@ func TestUserAuthToken(t *testing.T) { |
|
|
|
|
err = userAuthTokenService.RevokeToken(userToken) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
|
|
|
|
|
model, err := ctx.getAuthTokenByID(model.Id) |
|
|
|
|
model, err := ctx.getAuthTokenByID(userToken.Id) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(model, ShouldBeNil) |
|
|
|
|
}) |
|
|
|
|
@ -66,10 +65,8 @@ func TestUserAuthToken(t *testing.T) { |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
Convey("revoking non-existing token should return error", func() { |
|
|
|
|
model.Id = 1000 |
|
|
|
|
nonExistingToken, err := model.toUserToken() |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
err = userAuthTokenService.RevokeToken(nonExistingToken) |
|
|
|
|
userToken.Id = 1000 |
|
|
|
|
err = userAuthTokenService.RevokeToken(userToken) |
|
|
|
|
So(err, ShouldEqual, ErrAuthTokenNotFound) |
|
|
|
|
}) |
|
|
|
|
}) |
|
|
|
|
@ -77,17 +74,8 @@ func TestUserAuthToken(t *testing.T) { |
|
|
|
|
Convey("expires correctly", func() { |
|
|
|
|
userToken, err := userAuthTokenService.CreateToken(userID, "192.168.10.11:1234", "some user agent") |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
model, err := extractModelFromToken(userToken) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(model, ShouldNotBeNil) |
|
|
|
|
|
|
|
|
|
_, err = userAuthTokenService.LookupToken(model.UnhashedToken) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
|
|
|
|
|
model, err = ctx.getAuthTokenByID(model.Id) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
|
|
|
|
|
userToken, err = model.toUserToken() |
|
|
|
|
userToken, err = userAuthTokenService.LookupToken(userToken.UnhashedToken) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
|
|
|
|
|
getTime = func() time.Time { |
|
|
|
|
@ -98,14 +86,14 @@ func TestUserAuthToken(t *testing.T) { |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(rotated, ShouldBeTrue) |
|
|
|
|
|
|
|
|
|
_, err = userAuthTokenService.LookupToken(model.UnhashedToken) |
|
|
|
|
userToken, err = userAuthTokenService.LookupToken(userToken.UnhashedToken) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
|
|
|
|
|
stillGood, err := userAuthTokenService.LookupToken(model.UnhashedToken) |
|
|
|
|
stillGood, err := userAuthTokenService.LookupToken(userToken.UnhashedToken) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(stillGood, ShouldNotBeNil) |
|
|
|
|
|
|
|
|
|
model, err = ctx.getAuthTokenByID(model.Id) |
|
|
|
|
model, err := ctx.getAuthTokenByID(userToken.Id) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
|
|
|
|
|
Convey("when rotated_at is 6:59:59 ago should find token", func() { |
|
|
|
|
@ -113,7 +101,7 @@ func TestUserAuthToken(t *testing.T) { |
|
|
|
|
return time.Unix(model.RotatedAt, 0).Add(24 * 7 * time.Hour).Add(-time.Second) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
stillGood, err = userAuthTokenService.LookupToken(stillGood.GetToken()) |
|
|
|
|
stillGood, err = userAuthTokenService.LookupToken(stillGood.UnhashedToken) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(stillGood, ShouldNotBeNil) |
|
|
|
|
}) |
|
|
|
|
@ -123,7 +111,7 @@ func TestUserAuthToken(t *testing.T) { |
|
|
|
|
return time.Unix(model.RotatedAt, 0).Add(24 * 7 * time.Hour) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
notGood, err := userAuthTokenService.LookupToken(userToken.GetToken()) |
|
|
|
|
notGood, err := userAuthTokenService.LookupToken(userToken.UnhashedToken) |
|
|
|
|
So(err, ShouldEqual, ErrAuthTokenNotFound) |
|
|
|
|
So(notGood, ShouldBeNil) |
|
|
|
|
}) |
|
|
|
|
@ -137,7 +125,7 @@ func TestUserAuthToken(t *testing.T) { |
|
|
|
|
return time.Unix(model.CreatedAt, 0).Add(24 * 30 * time.Hour).Add(-time.Second) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
stillGood, err = userAuthTokenService.LookupToken(stillGood.GetToken()) |
|
|
|
|
stillGood, err = userAuthTokenService.LookupToken(stillGood.UnhashedToken) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(stillGood, ShouldNotBeNil) |
|
|
|
|
}) |
|
|
|
|
@ -151,7 +139,7 @@ func TestUserAuthToken(t *testing.T) { |
|
|
|
|
return time.Unix(model.CreatedAt, 0).Add(24 * 30 * time.Hour) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
notGood, err := userAuthTokenService.LookupToken(userToken.GetToken()) |
|
|
|
|
notGood, err := userAuthTokenService.LookupToken(userToken.UnhashedToken) |
|
|
|
|
So(err, ShouldEqual, ErrAuthTokenNotFound) |
|
|
|
|
So(notGood, ShouldBeNil) |
|
|
|
|
}) |
|
|
|
|
@ -160,37 +148,35 @@ func TestUserAuthToken(t *testing.T) { |
|
|
|
|
Convey("can properly rotate tokens", func() { |
|
|
|
|
userToken, err := userAuthTokenService.CreateToken(userID, "192.168.10.11:1234", "some user agent") |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
model, err := extractModelFromToken(userToken) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(model, ShouldNotBeNil) |
|
|
|
|
|
|
|
|
|
prevToken := model.AuthToken |
|
|
|
|
unhashedPrev := model.UnhashedToken |
|
|
|
|
prevToken := userToken.AuthToken |
|
|
|
|
unhashedPrev := userToken.UnhashedToken |
|
|
|
|
|
|
|
|
|
rotated, err := userAuthTokenService.TryRotateToken(userToken, "192.168.10.12:1234", "a new user agent") |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(rotated, ShouldBeFalse) |
|
|
|
|
|
|
|
|
|
updated, err := ctx.markAuthTokenAsSeen(model.Id) |
|
|
|
|
updated, err := ctx.markAuthTokenAsSeen(userToken.Id) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(updated, ShouldBeTrue) |
|
|
|
|
|
|
|
|
|
model, err = ctx.getAuthTokenByID(model.Id) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
tok, err := model.toUserToken() |
|
|
|
|
model, err := ctx.getAuthTokenByID(userToken.Id) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
|
|
|
|
|
var tok auth.UserToken |
|
|
|
|
model.toUserToken(&tok) |
|
|
|
|
|
|
|
|
|
getTime = func() time.Time { |
|
|
|
|
return t.Add(time.Hour) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
rotated, err = userAuthTokenService.TryRotateToken(tok, "192.168.10.12:1234", "a new user agent") |
|
|
|
|
rotated, err = userAuthTokenService.TryRotateToken(&tok, "192.168.10.12:1234", "a new user agent") |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(rotated, ShouldBeTrue) |
|
|
|
|
|
|
|
|
|
unhashedToken := model.UnhashedToken |
|
|
|
|
unhashedToken := tok.UnhashedToken |
|
|
|
|
|
|
|
|
|
model, err = ctx.getAuthTokenByID(model.Id) |
|
|
|
|
model, err = ctx.getAuthTokenByID(tok.Id) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
model.UnhashedToken = unhashedToken |
|
|
|
|
|
|
|
|
|
@ -205,17 +191,15 @@ func TestUserAuthToken(t *testing.T) { |
|
|
|
|
|
|
|
|
|
lookedUpUserToken, err := userAuthTokenService.LookupToken(model.UnhashedToken) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
lookedUpModel, err := extractModelFromToken(lookedUpUserToken) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(lookedUpModel, ShouldNotBeNil) |
|
|
|
|
So(lookedUpModel.AuthTokenSeen, ShouldBeTrue) |
|
|
|
|
So(lookedUpModel.SeenAt, ShouldEqual, getTime().Unix()) |
|
|
|
|
So(lookedUpUserToken, ShouldNotBeNil) |
|
|
|
|
So(lookedUpUserToken.AuthTokenSeen, ShouldBeTrue) |
|
|
|
|
So(lookedUpUserToken.SeenAt, ShouldEqual, getTime().Unix()) |
|
|
|
|
|
|
|
|
|
lookedUpUserToken, err = userAuthTokenService.LookupToken(unhashedPrev) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(lookedUpModel, ShouldNotBeNil) |
|
|
|
|
So(lookedUpModel.Id, ShouldEqual, model.Id) |
|
|
|
|
So(lookedUpModel.AuthTokenSeen, ShouldBeTrue) |
|
|
|
|
So(lookedUpUserToken, ShouldNotBeNil) |
|
|
|
|
So(lookedUpUserToken.Id, ShouldEqual, model.Id) |
|
|
|
|
So(lookedUpUserToken.AuthTokenSeen, ShouldBeTrue) |
|
|
|
|
|
|
|
|
|
getTime = func() time.Time { |
|
|
|
|
return t.Add(time.Hour + (2 * time.Minute)) |
|
|
|
|
@ -223,12 +207,10 @@ func TestUserAuthToken(t *testing.T) { |
|
|
|
|
|
|
|
|
|
lookedUpUserToken, err = userAuthTokenService.LookupToken(unhashedPrev) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
lookedUpModel, err = extractModelFromToken(lookedUpUserToken) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(lookedUpModel, ShouldNotBeNil) |
|
|
|
|
So(lookedUpModel.AuthTokenSeen, ShouldBeTrue) |
|
|
|
|
So(lookedUpUserToken, ShouldNotBeNil) |
|
|
|
|
So(lookedUpUserToken.AuthTokenSeen, ShouldBeTrue) |
|
|
|
|
|
|
|
|
|
lookedUpModel, err = ctx.getAuthTokenByID(lookedUpModel.Id) |
|
|
|
|
lookedUpModel, err := ctx.getAuthTokenByID(lookedUpUserToken.Id) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(lookedUpModel, ShouldNotBeNil) |
|
|
|
|
So(lookedUpModel.AuthTokenSeen, ShouldBeFalse) |
|
|
|
|
@ -237,7 +219,7 @@ func TestUserAuthToken(t *testing.T) { |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(rotated, ShouldBeTrue) |
|
|
|
|
|
|
|
|
|
model, err = ctx.getAuthTokenByID(model.Id) |
|
|
|
|
model, err = ctx.getAuthTokenByID(userToken.Id) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(model, ShouldNotBeNil) |
|
|
|
|
So(model.SeenAt, ShouldEqual, 0) |
|
|
|
|
@ -246,11 +228,9 @@ func TestUserAuthToken(t *testing.T) { |
|
|
|
|
Convey("keeps prev token valid for 1 minute after it is confirmed", func() { |
|
|
|
|
userToken, err := userAuthTokenService.CreateToken(userID, "192.168.10.11:1234", "some user agent") |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
model, err := extractModelFromToken(userToken) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(model, ShouldNotBeNil) |
|
|
|
|
So(userToken, ShouldNotBeNil) |
|
|
|
|
|
|
|
|
|
lookedUpUserToken, err := userAuthTokenService.LookupToken(model.UnhashedToken) |
|
|
|
|
lookedUpUserToken, err := userAuthTokenService.LookupToken(userToken.UnhashedToken) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(lookedUpUserToken, ShouldNotBeNil) |
|
|
|
|
|
|
|
|
|
@ -258,7 +238,7 @@ func TestUserAuthToken(t *testing.T) { |
|
|
|
|
return t.Add(10 * time.Minute) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
prevToken := model.UnhashedToken |
|
|
|
|
prevToken := userToken.UnhashedToken |
|
|
|
|
rotated, err := userAuthTokenService.TryRotateToken(userToken, "1.1.1.1", "firefox") |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(rotated, ShouldBeTrue) |
|
|
|
|
@ -267,7 +247,7 @@ func TestUserAuthToken(t *testing.T) { |
|
|
|
|
return t.Add(20 * time.Minute) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
currentUserToken, err := userAuthTokenService.LookupToken(model.UnhashedToken) |
|
|
|
|
currentUserToken, err := userAuthTokenService.LookupToken(userToken.UnhashedToken) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(currentUserToken, ShouldNotBeNil) |
|
|
|
|
|
|
|
|
|
@ -279,23 +259,17 @@ func TestUserAuthToken(t *testing.T) { |
|
|
|
|
Convey("will not mark token unseen when prev and current are the same", func() { |
|
|
|
|
userToken, err := userAuthTokenService.CreateToken(userID, "192.168.10.11:1234", "some user agent") |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
model, err := extractModelFromToken(userToken) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(model, ShouldNotBeNil) |
|
|
|
|
So(userToken, ShouldNotBeNil) |
|
|
|
|
|
|
|
|
|
lookedUpUserToken, err := userAuthTokenService.LookupToken(model.UnhashedToken) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
lookedUpModel, err := extractModelFromToken(lookedUpUserToken) |
|
|
|
|
lookedUpUserToken, err := userAuthTokenService.LookupToken(userToken.UnhashedToken) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(lookedUpModel, ShouldNotBeNil) |
|
|
|
|
So(lookedUpUserToken, ShouldNotBeNil) |
|
|
|
|
|
|
|
|
|
lookedUpUserToken, err = userAuthTokenService.LookupToken(model.UnhashedToken) |
|
|
|
|
lookedUpUserToken, err = userAuthTokenService.LookupToken(userToken.UnhashedToken) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
lookedUpModel, err = extractModelFromToken(lookedUpUserToken) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(lookedUpModel, ShouldNotBeNil) |
|
|
|
|
So(lookedUpUserToken, ShouldNotBeNil) |
|
|
|
|
|
|
|
|
|
lookedUpModel, err = ctx.getAuthTokenByID(lookedUpModel.Id) |
|
|
|
|
lookedUpModel, err := ctx.getAuthTokenByID(lookedUpUserToken.Id) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(lookedUpModel, ShouldNotBeNil) |
|
|
|
|
So(lookedUpModel.AuthTokenSeen, ShouldBeTrue) |
|
|
|
|
@ -304,14 +278,12 @@ func TestUserAuthToken(t *testing.T) { |
|
|
|
|
Convey("Rotate token", func() { |
|
|
|
|
userToken, err := userAuthTokenService.CreateToken(userID, "192.168.10.11:1234", "some user agent") |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
model, err := extractModelFromToken(userToken) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(model, ShouldNotBeNil) |
|
|
|
|
So(userToken, ShouldNotBeNil) |
|
|
|
|
|
|
|
|
|
prevToken := model.AuthToken |
|
|
|
|
prevToken := userToken.AuthToken |
|
|
|
|
|
|
|
|
|
Convey("Should rotate current token and previous token when auth token seen", func() { |
|
|
|
|
updated, err := ctx.markAuthTokenAsSeen(model.Id) |
|
|
|
|
updated, err := ctx.markAuthTokenAsSeen(userToken.Id) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(updated, ShouldBeTrue) |
|
|
|
|
|
|
|
|
|
@ -323,7 +295,7 @@ func TestUserAuthToken(t *testing.T) { |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(rotated, ShouldBeTrue) |
|
|
|
|
|
|
|
|
|
storedToken, err := ctx.getAuthTokenByID(model.Id) |
|
|
|
|
storedToken, err := ctx.getAuthTokenByID(userToken.Id) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(storedToken, ShouldNotBeNil) |
|
|
|
|
So(storedToken.AuthTokenSeen, ShouldBeFalse) |
|
|
|
|
@ -332,7 +304,7 @@ func TestUserAuthToken(t *testing.T) { |
|
|
|
|
|
|
|
|
|
prevToken = storedToken.AuthToken |
|
|
|
|
|
|
|
|
|
updated, err = ctx.markAuthTokenAsSeen(model.Id) |
|
|
|
|
updated, err = ctx.markAuthTokenAsSeen(userToken.Id) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(updated, ShouldBeTrue) |
|
|
|
|
|
|
|
|
|
@ -344,7 +316,7 @@ func TestUserAuthToken(t *testing.T) { |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(rotated, ShouldBeTrue) |
|
|
|
|
|
|
|
|
|
storedToken, err = ctx.getAuthTokenByID(model.Id) |
|
|
|
|
storedToken, err = ctx.getAuthTokenByID(userToken.Id) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(storedToken, ShouldNotBeNil) |
|
|
|
|
So(storedToken.AuthTokenSeen, ShouldBeFalse) |
|
|
|
|
@ -353,7 +325,7 @@ func TestUserAuthToken(t *testing.T) { |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
Convey("Should rotate current token, but keep previous token when auth token not seen", func() { |
|
|
|
|
model.RotatedAt = getTime().Add(-2 * time.Minute).Unix() |
|
|
|
|
userToken.RotatedAt = getTime().Add(-2 * time.Minute).Unix() |
|
|
|
|
|
|
|
|
|
getTime = func() time.Time { |
|
|
|
|
return t.Add(2 * time.Minute) |
|
|
|
|
@ -363,7 +335,7 @@ func TestUserAuthToken(t *testing.T) { |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(rotated, ShouldBeTrue) |
|
|
|
|
|
|
|
|
|
storedToken, err := ctx.getAuthTokenByID(model.Id) |
|
|
|
|
storedToken, err := ctx.getAuthTokenByID(userToken.Id) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
So(storedToken, ShouldNotBeNil) |
|
|
|
|
So(storedToken.AuthTokenSeen, ShouldBeFalse) |
|
|
|
|
@ -372,6 +344,71 @@ func TestUserAuthToken(t *testing.T) { |
|
|
|
|
}) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
Convey("When populating userAuthToken from UserToken should copy all properties", func() { |
|
|
|
|
ut := auth.UserToken{ |
|
|
|
|
Id: 1, |
|
|
|
|
UserId: 2, |
|
|
|
|
AuthToken: "a", |
|
|
|
|
PrevAuthToken: "b", |
|
|
|
|
UserAgent: "c", |
|
|
|
|
ClientIp: "d", |
|
|
|
|
AuthTokenSeen: true, |
|
|
|
|
SeenAt: 3, |
|
|
|
|
RotatedAt: 4, |
|
|
|
|
CreatedAt: 5, |
|
|
|
|
UpdatedAt: 6, |
|
|
|
|
UnhashedToken: "e", |
|
|
|
|
} |
|
|
|
|
utBytes, err := json.Marshal(ut) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
utJSON, err := simplejson.NewJson(utBytes) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
utMap := utJSON.MustMap() |
|
|
|
|
|
|
|
|
|
var uat userAuthToken |
|
|
|
|
uat.fromUserToken(&ut) |
|
|
|
|
uatBytes, err := json.Marshal(uat) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
uatJSON, err := simplejson.NewJson(uatBytes) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
uatMap := uatJSON.MustMap() |
|
|
|
|
|
|
|
|
|
So(uatMap, ShouldResemble, utMap) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
Convey("When populating userToken from userAuthToken should copy all properties", func() { |
|
|
|
|
uat := userAuthToken{ |
|
|
|
|
Id: 1, |
|
|
|
|
UserId: 2, |
|
|
|
|
AuthToken: "a", |
|
|
|
|
PrevAuthToken: "b", |
|
|
|
|
UserAgent: "c", |
|
|
|
|
ClientIp: "d", |
|
|
|
|
AuthTokenSeen: true, |
|
|
|
|
SeenAt: 3, |
|
|
|
|
RotatedAt: 4, |
|
|
|
|
CreatedAt: 5, |
|
|
|
|
UpdatedAt: 6, |
|
|
|
|
UnhashedToken: "e", |
|
|
|
|
} |
|
|
|
|
uatBytes, err := json.Marshal(uat) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
uatJSON, err := simplejson.NewJson(uatBytes) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
uatMap := uatJSON.MustMap() |
|
|
|
|
|
|
|
|
|
var ut auth.UserToken |
|
|
|
|
err = uat.toUserToken(&ut) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
utBytes, err := json.Marshal(ut) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
utJSON, err := simplejson.NewJson(utBytes) |
|
|
|
|
So(err, ShouldBeNil) |
|
|
|
|
utMap := utJSON.MustMap() |
|
|
|
|
|
|
|
|
|
So(utMap, ShouldResemble, uatMap) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
Reset(func() { |
|
|
|
|
getTime = time.Now |
|
|
|
|
}) |
|
|
|
|
|