Skip to content

Commit d861f18

Browse files
Merge pull request #170 from supertokens/session-claims-fixes
fix: Session claims fixes
2 parents 0dc56f0 + 02d601b commit d861f18

File tree

16 files changed

+137
-82
lines changed

16 files changed

+137
-82
lines changed

recipe/emailpassword/emailExistsAndVerificationCheck_test.go

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,9 @@ func TestGenerateTokenAPIWithValidInputNoSessionAndCheckOutput(t *testing.T) {
491491
WebsiteDomain: "supertokens.io",
492492
},
493493
RecipeList: []supertokens.Recipe{
494+
emailverification.Init(evmodels.TypeInput{
495+
Mode: evmodels.ModeOptional,
496+
}),
494497
Init(nil),
495498
session.Init(&sessmodels.TypeInput{
496499
AntiCsrf: &customAntiCsrfVal,
@@ -542,6 +545,9 @@ func TestGenerateTokenAPIWithExpiredAccessToken(t *testing.T) {
542545
WebsiteDomain: "supertokens.io",
543546
},
544547
RecipeList: []supertokens.Recipe{
548+
emailverification.Init(evmodels.TypeInput{
549+
Mode: evmodels.ModeOptional,
550+
}),
545551
Init(nil),
546552
session.Init(&sessmodels.TypeInput{
547553
AntiCsrf: &customAntiCsrfVal,
@@ -657,6 +663,7 @@ func TestProvidingYourOwnEmailCallBackAndMakeSureItsCalled(t *testing.T) {
657663
},
658664
RecipeList: []supertokens.Recipe{
659665
emailverification.Init(evmodels.TypeInput{
666+
Mode: evmodels.ModeOptional,
660667
CreateAndSendCustomEmail: func(user evmodels.User, emailVerificationURLWithToken string, userContext supertokens.UserContext) {
661668
userInfo = user
662669
emailToken = emailVerificationURLWithToken
@@ -728,6 +735,7 @@ func TestEmailVerifyApiWithValidInput(t *testing.T) {
728735
},
729736
RecipeList: []supertokens.Recipe{
730737
emailverification.Init(evmodels.TypeInput{
738+
Mode: evmodels.ModeOptional,
731739
CreateAndSendCustomEmail: func(user evmodels.User, emailVerificationURLWithToken string, userContext supertokens.UserContext) {
732740
token = strings.Split(strings.Split(emailVerificationURLWithToken, "?token=")[1], "&rid=")[0]
733741
},
@@ -809,6 +817,9 @@ func TestTheEmailVerifyApiWithInvalidTokenAndCheckError(t *testing.T) {
809817
WebsiteDomain: "supertokens.io",
810818
},
811819
RecipeList: []supertokens.Recipe{
820+
emailverification.Init(evmodels.TypeInput{
821+
Mode: evmodels.ModeOptional,
822+
}),
812823
Init(nil),
813824
session.Init(&sessmodels.TypeInput{
814825
AntiCsrf: &customAntiCsrfVal,
@@ -858,6 +869,9 @@ func TestEmailVerifyAPIWithTokenOfNotTypeString(t *testing.T) {
858869
WebsiteDomain: "supertokens.io",
859870
},
860871
RecipeList: []supertokens.Recipe{
872+
emailverification.Init(evmodels.TypeInput{
873+
Mode: evmodels.ModeOptional,
874+
}),
861875
Init(nil),
862876
session.Init(&sessmodels.TypeInput{
863877
AntiCsrf: &customAntiCsrfVal,
@@ -910,6 +924,7 @@ func TestThatTheHandlePostEmailVerificationCallBackIsCalledOnSuccessFullVerifica
910924
},
911925
RecipeList: []supertokens.Recipe{
912926
emailverification.Init(evmodels.TypeInput{
927+
Mode: evmodels.ModeOptional,
913928
CreateAndSendCustomEmail: func(user evmodels.User, emailVerificationURLWithToken string, userContext supertokens.UserContext) {
914929
token = strings.Split(strings.Split(emailVerificationURLWithToken, "?token=")[1], "&rid=")[0]
915930
},
@@ -1012,6 +1027,7 @@ func TestEmailVerifyWithValidInputUsingTheGetMehtod(t *testing.T) {
10121027
},
10131028
RecipeList: []supertokens.Recipe{
10141029
emailverification.Init(evmodels.TypeInput{
1030+
Mode: evmodels.ModeOptional,
10151031
CreateAndSendCustomEmail: func(user evmodels.User, emailVerificationURLWithToken string, userContext supertokens.UserContext) {
10161032
token = strings.Split(strings.Split(emailVerificationURLWithToken, "?token=")[1], "&rid=")[0]
10171033
},
@@ -1113,6 +1129,9 @@ func TestVerifySessionWithNoSessionUsingTheGetMethod(t *testing.T) {
11131129
WebsiteDomain: "supertokens.io",
11141130
},
11151131
RecipeList: []supertokens.Recipe{
1132+
emailverification.Init(evmodels.TypeInput{
1133+
Mode: evmodels.ModeOptional,
1134+
}),
11161135
Init(nil),
11171136
session.Init(&sessmodels.TypeInput{
11181137
AntiCsrf: &customAntiCsrfVal,
@@ -1165,6 +1184,7 @@ func TestTheEmailVerifyAPIwithValidInputOverridingAPIs(t *testing.T) {
11651184
},
11661185
RecipeList: []supertokens.Recipe{
11671186
emailverification.Init(evmodels.TypeInput{
1187+
Mode: evmodels.ModeOptional,
11681188
CreateAndSendCustomEmail: func(user evmodels.User, emailVerificationURLWithToken string, userContext supertokens.UserContext) {
11691189
token = strings.Split(strings.Split(emailVerificationURLWithToken, "?token=")[1], "&rid=")[0]
11701190
},
@@ -1267,6 +1287,7 @@ func TestTheEmailVerifyAPIwithValidInputAndOverridingFunctions(t *testing.T) {
12671287
},
12681288
RecipeList: []supertokens.Recipe{
12691289
emailverification.Init(evmodels.TypeInput{
1290+
Mode: evmodels.ModeOptional,
12701291
CreateAndSendCustomEmail: func(user evmodels.User, emailVerificationURLWithToken string, userContext supertokens.UserContext) {
12711292
token = strings.Split(strings.Split(emailVerificationURLWithToken, "?token=")[1], "&rid=")[0]
12721293
},
@@ -1369,6 +1390,7 @@ func TestTheEmailVerifyAPIwithValidInputThrowsErrorOnSuchOverriding(t *testing.T
13691390
},
13701391
RecipeList: []supertokens.Recipe{
13711392
emailverification.Init(evmodels.TypeInput{
1393+
Mode: evmodels.ModeOptional,
13721394
CreateAndSendCustomEmail: func(user evmodels.User, emailVerificationURLWithToken string, userContext supertokens.UserContext) {
13731395
token = strings.Split(strings.Split(emailVerificationURLWithToken, "?token=")[1], "&rid=")[0]
13741396
},
@@ -1469,6 +1491,7 @@ func TestTheEmailVerifyAPIWithValidInputOverridingFunctionsThrowsError(t *testin
14691491
},
14701492
RecipeList: []supertokens.Recipe{
14711493
emailverification.Init(evmodels.TypeInput{
1494+
Mode: evmodels.ModeOptional,
14721495
CreateAndSendCustomEmail: func(user evmodels.User, emailVerificationURLWithToken string, userContext supertokens.UserContext) {
14731496
token = strings.Split(strings.Split(emailVerificationURLWithToken, "?token=")[1], "&rid=")[0]
14741497
},
@@ -1567,8 +1590,10 @@ func TestTheGenerateTokenAPIWithValidInputAndThenRemoveToken(t *testing.T) {
15671590
WebsiteDomain: "supertokens.io",
15681591
},
15691592
RecipeList: []supertokens.Recipe{
1593+
emailverification.Init(evmodels.TypeInput{
1594+
Mode: evmodels.ModeOptional,
1595+
}),
15701596
Init(nil),
1571-
emailverification.Init(evmodels.TypeInput{}),
15721597
session.Init(&sessmodels.TypeInput{
15731598
AntiCsrf: &customAntiCsrfVal,
15741599
}),
@@ -1620,6 +1645,7 @@ func TestTheGenerateTokenAPIWithValidInputAndThenRemoveToken(t *testing.T) {
16201645
emailverification.RevokeEmailVerificationTokens(userId.(string), nil)
16211646

16221647
res1, err := emailverification.VerifyEmailUsingToken(verifyToken)
1623-
assert.Nil(t, res1)
1624-
assert.Equal(t, "email verification token is invalid", err.Error())
1648+
assert.NoError(t, err)
1649+
assert.NotNil(t, res1.EmailVerificationInvalidTokenError)
1650+
assert.Nil(t, res1.OK)
16251651
}

recipe/emailpassword/emailpassword_email_test.go

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ func TestDefaultBackwardCompatibilityEmailVerifyForEmailPasswordUser(t *testing.
350350
unittesting.StartUpST("localhost", "8080")
351351
defer AfterEach()
352352

353-
testServer := supertokensInitForTest(t, session.Init(nil), Init(nil))
353+
testServer := supertokensInitForTest(t, session.Init(nil), Init(nil), emailverification.Init(evmodels.TypeInput{Mode: evmodels.ModeOptional}))
354354
defer testServer.Close()
355355

356356
resp, err := unittesting.SignupRequest("[email protected]", "1234abcd", testServer.URL)
@@ -380,6 +380,7 @@ func TestBackwardCompatibilityEmailVerifyForEmailPasswordUser(t *testing.T) {
380380
t,
381381
session.Init(nil),
382382
emailverification.Init(evmodels.TypeInput{
383+
Mode: evmodels.ModeOptional,
383384
CreateAndSendCustomEmail: func(user evmodels.User, emailVerificationURLWithToken string, userContext supertokens.UserContext) {
384385
email = user.Email
385386
emailVerifyLink = emailVerificationURLWithToken
@@ -418,22 +419,26 @@ func TestCustomOverrideEmailVerifyForEmailPasswordUser(t *testing.T) {
418419
email := ""
419420
emailVerifyLink := ""
420421

421-
tpepConfig := &epmodels.TypeInput{
422-
EmailDelivery: &emaildelivery.TypeInput{
423-
Override: func(originalImplementation emaildelivery.EmailDeliveryInterface) emaildelivery.EmailDeliveryInterface {
424-
*originalImplementation.SendEmail = func(input emaildelivery.EmailType, userContext supertokens.UserContext) error {
425-
if input.EmailVerification != nil {
426-
customCalled = true
427-
email = input.EmailVerification.User.Email
428-
emailVerifyLink = input.EmailVerification.EmailVerifyLink
422+
testServer := supertokensInitForTest(t,
423+
session.Init(nil),
424+
Init(nil),
425+
emailverification.Init(evmodels.TypeInput{
426+
Mode: evmodels.ModeOptional,
427+
EmailDelivery: &emaildelivery.TypeInput{
428+
Override: func(originalImplementation emaildelivery.EmailDeliveryInterface) emaildelivery.EmailDeliveryInterface {
429+
*originalImplementation.SendEmail = func(input emaildelivery.EmailType, userContext supertokens.UserContext) error {
430+
if input.EmailVerification != nil {
431+
customCalled = true
432+
email = input.EmailVerification.User.Email
433+
emailVerifyLink = input.EmailVerification.EmailVerifyLink
434+
}
435+
return nil
429436
}
430-
return nil
431-
}
432-
return originalImplementation
437+
return originalImplementation
438+
},
433439
},
434-
},
435-
}
436-
testServer := supertokensInitForTest(t, session.Init(nil), Init(tpepConfig))
440+
}),
441+
)
437442
defer testServer.Close()
438443

439444
resp, err := unittesting.SignupRequest("[email protected]", "1234abcd", testServer.URL)
@@ -492,12 +497,16 @@ func TestSMTPOverrideEmailVerifyForEmailPasswordUser(t *testing.T) {
492497
return originalImplementation
493498
},
494499
})
495-
tpepConfig := &epmodels.TypeInput{
496-
EmailDelivery: &emaildelivery.TypeInput{
497-
Service: smtpService,
498-
},
499-
}
500-
testServer := supertokensInitForTest(t, session.Init(nil), Init(tpepConfig))
500+
testServer := supertokensInitForTest(t,
501+
session.Init(nil),
502+
Init(nil),
503+
emailverification.Init(evmodels.TypeInput{
504+
Mode: evmodels.ModeOptional,
505+
EmailDelivery: &emaildelivery.TypeInput{
506+
Service: smtpService,
507+
},
508+
}),
509+
)
501510
defer testServer.Close()
502511

503512
resp, err := unittesting.SignupRequest("[email protected]", "1234abcd", testServer.URL)

recipe/emailpassword/recipe.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ func (r *Recipe) handleError(err error, req *http.Request, res http.ResponseWrit
180180
"formFields": errs.Payload,
181181
})
182182
}
183-
return false, err
183+
return false, nil
184184
}
185185

186186
func (r *Recipe) getEmailForUserId(userID string, userContext supertokens.UserContext) (evmodels.TypeEmailInfo, error) {

recipe/emailverification/api/implementation.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,19 @@ func MakeAPIImplementation() evmodels.APIInterface {
5959
return evmodels.IsEmailVerifiedGETResponse{}, err
6060
}
6161

62-
isVerified := sessionContainer.GetClaimValueWithContext(evclaims.EmailVerificationClaim, userContext)
63-
if isVerified == nil {
62+
var isVerified bool = false
63+
if isVerifiedVal, ok := sessionContainer.GetClaimValueWithContext(evclaims.EmailVerificationClaim, userContext).(map[string]interface{}); ok {
64+
isVerified, ok = isVerifiedVal["v"].(bool)
65+
if !ok {
66+
return evmodels.IsEmailVerifiedGETResponse{}, errors.New("should never come here: EmailVerificationClaim failed to set value")
67+
}
68+
} else {
6469
return evmodels.IsEmailVerifiedGETResponse{}, errors.New("should never come here: EmailVerificationClaim failed to set value")
6570
}
71+
6672
return evmodels.IsEmailVerifiedGETResponse{
6773
OK: &struct{ IsVerified bool }{
68-
IsVerified: isVerified.(bool),
74+
IsVerified: isVerified,
6975
},
7076
}, nil
7177
}

recipe/emailverification/emailverificationClaim.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
)
1111

1212
// key string, fetchValue claims.FetchValueFunc
13-
func NewEmailVerificationClaim() (claims.TypeSessionClaim, evclaims.TypeEmailVerificationClaimValidators) {
13+
func NewEmailVerificationClaim() (*claims.TypeSessionClaim, evclaims.TypeEmailVerificationClaimValidators) {
1414
fetchValue := func(userId string, userContext supertokens.UserContext) (interface{}, error) {
1515
instance, err := getRecipeInstanceOrThrowError()
1616
if err != nil {

recipe/emailverification/emailverification_email_test.go

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"github.com/stretchr/testify/assert"
2323
"github.com/supertokens/supertokens-golang/ingredients/emaildelivery"
2424
"github.com/supertokens/supertokens-golang/recipe/emailverification/evmodels"
25+
"github.com/supertokens/supertokens-golang/recipe/session"
2526
"github.com/supertokens/supertokens-golang/supertokens"
2627
)
2728

@@ -37,11 +38,16 @@ func TestBackwardCompatibilityServiceWithoutCustomFunction(t *testing.T) {
3738
},
3839
RecipeList: []supertokens.Recipe{
3940
Init(evmodels.TypeInput{
40-
Mode: "OPTIONAL",
41+
Mode: evmodels.ModeOptional,
4142
GetEmailForUserID: func(userID string, userContext supertokens.UserContext) (evmodels.TypeEmailInfo, error) {
42-
return evmodels.TypeEmailInfo{}, nil
43+
return evmodels.TypeEmailInfo{
44+
OK: &struct{ Email string }{
45+
Email: "someEmail",
46+
},
47+
}, nil
4348
},
4449
}),
50+
session.Init(nil),
4551
},
4652
}
4753

@@ -85,6 +91,7 @@ func TestBackwardCompatibilityServiceWithCustomFunction(t *testing.T) {
8591
return evmodels.TypeEmailInfo{}, nil
8692
},
8793
}),
94+
session.Init(nil),
8895
},
8996
}
9097

@@ -139,6 +146,7 @@ func TestBackwardCompatibilityServiceWithOverride(t *testing.T) {
139146
return evmodels.TypeEmailInfo{}, nil
140147
},
141148
}),
149+
session.Init(nil),
142150
},
143151
}
144152

@@ -209,6 +217,7 @@ func TestSMTPServiceOverride(t *testing.T) {
209217
return evmodels.TypeEmailInfo{}, nil
210218
},
211219
}),
220+
session.Init(nil),
212221
},
213222
}
214223

@@ -279,6 +288,7 @@ func TestSMTPServiceOverrideDefaultEmailTemplate(t *testing.T) {
279288
return evmodels.TypeEmailInfo{}, nil
280289
},
281290
}),
291+
session.Init(nil),
282292
},
283293
}
284294

recipe/emailverification/evclaims/claims.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@ type TypeEmailVerificationClaimValidators struct {
99
IsVerified func(refetchTimeOnFalseInSeconds *int64) claims.SessionClaimValidator
1010
}
1111

12-
var EmailVerificationClaim claims.TypeSessionClaim
12+
var EmailVerificationClaim *claims.TypeSessionClaim
1313

1414
var EmailVerificationClaimValidators TypeEmailVerificationClaimValidators

recipe/emailverification/recipe.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,9 @@ func MakeRecipe(recipeId string, appInfo supertokens.NormalisedAppinfo, config e
9090
if emailRes.UnknownUserIDError != nil {
9191
return emailRes, nil
9292
}
93+
if emailRes.OK != nil {
94+
return emailRes, nil
95+
}
9396
}
9497
return evmodels.TypeEmailInfo{
9598
UnknownUserIDError: &struct{}{},
@@ -125,6 +128,7 @@ func recipeInit(config evmodels.TypeInput) supertokens.Recipe {
125128

126129
supertokens.AddPostInitCallback(func() error {
127130
sessionRecipe, err := session.GetRecipeInstanceOrThrowError()
131+
128132
if err != nil {
129133
return err
130134
}

recipe/session/claims/booleanClaim.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package claims
22

3-
func BooleanClaim(key string, fetchValue FetchValueFunc, defaultMaxAgeInSeconds *int64) (TypeSessionClaim, BooleanClaimValidators) {
3+
func BooleanClaim(key string, fetchValue FetchValueFunc, defaultMaxAgeInSeconds *int64) (*TypeSessionClaim, BooleanClaimValidators) {
44
claim, primitiveClaimValidators := PrimitiveClaim(key, fetchValue, defaultMaxAgeInSeconds)
55

66
validators := BooleanClaimValidators{

recipe/session/claims/claims.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import (
44
"github.com/supertokens/supertokens-golang/supertokens"
55
)
66

7-
func SessionClaim(key string, fetchValue FetchValueFunc) TypeSessionClaim {
8-
sessionClaim := TypeSessionClaim{
7+
func SessionClaim(key string, fetchValue FetchValueFunc) *TypeSessionClaim {
8+
sessionClaim := &TypeSessionClaim{
99
Key: key,
1010
FetchValue: fetchValue,
1111
}

0 commit comments

Comments
 (0)