Skip to content

Commit bdf8a17

Browse files
committed
Merge branch 'claims-thirdparty-changes' into claims-passwordless-changes
2 parents 376aac7 + 6a8fa51 commit bdf8a17

35 files changed

+399
-346
lines changed

recipe/emailpassword/recipe.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,12 @@ func MakeRecipe(recipeId string, appInfo supertokens.NormalisedAppinfo, config *
6161
r.EmailDelivery = emaildelivery.MakeIngredient(verifiedConfig.GetEmailDeliveryConfig(r.RecipeImpl))
6262
}
6363

64-
supertokens.AddPostInitCallback(func() {
64+
supertokens.AddPostInitCallback(func() error {
6565
emailVerificationRecipe := emailverification.GetRecipeInstance()
6666
if emailVerificationRecipe != nil {
6767
emailVerificationRecipe.AddGetEmailForUserIdFunc(r.getEmailForUserId)
6868
}
69+
return nil
6970
})
7071

7172
return *r, nil

recipe/emailverification/api/implementation.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import (
2020
"fmt"
2121

2222
"github.com/supertokens/supertokens-golang/ingredients/emaildelivery"
23-
"github.com/supertokens/supertokens-golang/recipe/emailverification/claims"
23+
"github.com/supertokens/supertokens-golang/recipe/emailverification/evclaims"
2424
"github.com/supertokens/supertokens-golang/recipe/emailverification/evmodels"
2525
"github.com/supertokens/supertokens-golang/recipe/session/sessmodels"
2626
"github.com/supertokens/supertokens-golang/supertokens"
@@ -34,7 +34,10 @@ func MakeAPIImplementation() evmodels.APIInterface {
3434
}
3535
if resp.OK != nil {
3636
if sessionContainer != nil {
37-
sessionContainer.FetchAndSetClaimWithContext(claims.EmailVerificationClaim.TypeSessionClaim, userContext)
37+
err := sessionContainer.FetchAndSetClaimWithContext(evclaims.EmailVerificationClaim, userContext)
38+
if err != nil {
39+
return evmodels.VerifyEmailPOSTResponse{}, err
40+
}
3841
}
3942
return evmodels.VerifyEmailPOSTResponse{
4043
OK: resp.OK,
@@ -51,15 +54,12 @@ func MakeAPIImplementation() evmodels.APIInterface {
5154
return evmodels.IsEmailVerifiedGETResponse{}, supertokens.BadInputError{Msg: "Session is undefined. Should not come here."}
5255
}
5356

54-
err := sessionContainer.FetchAndSetClaimWithContext(claims.EmailVerificationClaim.TypeSessionClaim, userContext)
57+
err := sessionContainer.FetchAndSetClaimWithContext(evclaims.EmailVerificationClaim, userContext)
5558
if err != nil {
5659
return evmodels.IsEmailVerifiedGETResponse{}, err
5760
}
5861

59-
isVerified, err := sessionContainer.GetClaimValueWithContext(claims.EmailVerificationClaim.TypeSessionClaim, userContext)
60-
if err != nil {
61-
return evmodels.IsEmailVerifiedGETResponse{}, err
62-
}
62+
isVerified := sessionContainer.GetClaimValueWithContext(evclaims.EmailVerificationClaim, userContext)
6363
if isVerified == nil {
6464
return evmodels.IsEmailVerifiedGETResponse{}, errors.New("should never come here: EmailVerificationClaim failed to set value")
6565
}

recipe/emailverification/claims/claims.go

Lines changed: 0 additions & 18 deletions
This file was deleted.

recipe/emailverification/emailverificationClaim.go

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ import (
44
"errors"
55
"time"
66

7-
evclaims "github.com/supertokens/supertokens-golang/recipe/emailverification/claims"
7+
"github.com/supertokens/supertokens-golang/recipe/emailverification/evclaims"
88
"github.com/supertokens/supertokens-golang/recipe/session/claims"
99
"github.com/supertokens/supertokens-golang/supertokens"
1010
)
1111

1212
// key string, fetchValue claims.FetchValueFunc
13-
func NewEmailVerificationClaim() *evclaims.TypeEmailVerificationClaim {
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 {
@@ -34,30 +34,43 @@ func NewEmailVerificationClaim() *evclaims.TypeEmailVerificationClaim {
3434
}
3535
}
3636

37-
booleanClaim := claims.BooleanClaim("st-ev", fetchValue, nil)
37+
evClaim, booleanClaimValidators := claims.BooleanClaim("st-ev", fetchValue, nil)
3838

39-
emailVerificationClaim := &evclaims.TypeEmailVerificationClaim{
40-
TypeBooleanClaim: booleanClaim,
39+
getValueFromPayload := func(payload map[string]interface{}, userContext supertokens.UserContext) interface{} {
40+
if value, ok := evClaim.GetValueFromPayload(payload, userContext).(map[string]interface{}); ok {
41+
return value["v"]
42+
}
43+
return nil
4144
}
42-
emailVerificationClaim.Validators = &evclaims.EmailVerificationClaimValidators{
43-
BooleanClaimValidators: booleanClaim.Validators,
44-
IsVerified: func(refetchTimeOnFalseInSeconds *int64) *claims.SessionClaimValidator {
45+
46+
getLastRefetchTime := func(payload map[string]interface{}, userContext supertokens.UserContext) *int64 {
47+
if value, ok := evClaim.GetValueFromPayload(payload, userContext).(map[string]interface{}); ok {
48+
val := value["t"].(int64)
49+
return &val
50+
}
51+
return nil
52+
}
53+
54+
validators := evclaims.TypeEmailVerificationClaimValidators{
55+
BooleanClaimValidators: booleanClaimValidators,
56+
IsVerified: func(refetchTimeOnFalseInSeconds *int64) claims.SessionClaimValidator {
4557
if refetchTimeOnFalseInSeconds == nil {
4658
var defaultTimeout int64 = 10
4759
refetchTimeOnFalseInSeconds = &defaultTimeout
4860
}
4961

50-
claimValidator := booleanClaim.Validators.HasValue(true, nil, nil)
62+
claimValidator := booleanClaimValidators.HasValue(true, nil, nil)
5163
claimValidator.ShouldRefetch = func(payload map[string]interface{}, userContext supertokens.UserContext) bool {
52-
value := emailVerificationClaim.GetValueFromPayload(payload, userContext)
53-
return value == nil || (value == false && *emailVerificationClaim.GetLastRefetchTime(payload, userContext) < time.Now().UnixMilli()-*refetchTimeOnFalseInSeconds*1000)
64+
value := getValueFromPayload(payload, userContext)
65+
return value == nil || (value == false && *getLastRefetchTime(payload, userContext) < time.Now().UnixMilli()-*refetchTimeOnFalseInSeconds*1000)
5466
}
5567
return claimValidator
5668
},
5769
}
58-
return emailVerificationClaim
70+
return evClaim, validators
5971
}
6072

6173
func init() {
62-
evclaims.EmailVerificationClaim = NewEmailVerificationClaim()
74+
// this function is called automatically when the package is imported
75+
evclaims.EmailVerificationClaim, evclaims.EmailVerificationClaimValidators = NewEmailVerificationClaim()
6376
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package evclaims
2+
3+
import (
4+
"github.com/supertokens/supertokens-golang/recipe/session/claims"
5+
)
6+
7+
type TypeEmailVerificationClaimValidators struct {
8+
claims.BooleanClaimValidators
9+
IsVerified func(refetchTimeOnFalseInSeconds *int64) claims.SessionClaimValidator
10+
}
11+
12+
var EmailVerificationClaim claims.TypeSessionClaim
13+
14+
var EmailVerificationClaimValidators TypeEmailVerificationClaimValidators

recipe/emailverification/evmodels/models.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,13 @@ import (
2222

2323
type TypeGetEmailForUserID func(userID string, userContext supertokens.UserContext) (TypeEmailInfo, error)
2424

25+
type TypeMode string
26+
27+
const (
28+
ModeRequired TypeMode = "REQUIRED"
29+
ModeOptional TypeMode = "OPTIONAL"
30+
)
31+
2532
type TypeEmailInfo struct {
2633
OK *struct {
2734
Email string
@@ -31,15 +38,15 @@ type TypeEmailInfo struct {
3138
}
3239

3340
type TypeInput struct {
34-
Mode string
41+
Mode TypeMode
3542
GetEmailForUserID TypeGetEmailForUserID
3643
CreateAndSendCustomEmail func(user User, emailVerificationURLWithToken string, userContext supertokens.UserContext) // Deprecated: Use EmailDelivery instead.
3744
Override *OverrideStruct
3845
EmailDelivery *emaildelivery.TypeInput
3946
}
4047

4148
type TypeNormalisedInput struct {
42-
Mode string
49+
Mode TypeMode
4350
GetEmailForUserID TypeGetEmailForUserID
4451
Override OverrideStruct
4552
GetEmailDeliveryConfig func() emaildelivery.TypeInputWithService

recipe/emailverification/recipe.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import (
2121

2222
"github.com/supertokens/supertokens-golang/ingredients/emaildelivery"
2323
"github.com/supertokens/supertokens-golang/recipe/emailverification/api"
24-
"github.com/supertokens/supertokens-golang/recipe/emailverification/claims"
24+
"github.com/supertokens/supertokens-golang/recipe/emailverification/evclaims"
2525
"github.com/supertokens/supertokens-golang/recipe/emailverification/evmodels"
2626
"github.com/supertokens/supertokens-golang/recipe/session"
2727
"github.com/supertokens/supertokens-golang/supertokens"
@@ -123,19 +123,20 @@ func recipeInit(config evmodels.TypeInput) supertokens.Recipe {
123123
}
124124
singletonInstance = &recipe
125125

126-
supertokens.AddPostInitCallback(func() {
126+
supertokens.AddPostInitCallback(func() error {
127127
sessionRecipe, err := session.GetRecipeInstanceOrThrowError()
128128
if err != nil {
129-
return
129+
return err
130130
}
131131

132-
sessionRecipe.AddClaimFromOtherRecipe(claims.EmailVerificationClaim.TypeSessionClaim)
132+
sessionRecipe.AddClaimFromOtherRecipe(evclaims.EmailVerificationClaim)
133133

134134
if config.Mode == "REQUIRED" {
135135
sessionRecipe.AddClaimValidatorFromOtherRecipe(
136-
*claims.EmailVerificationClaim.Validators.IsVerified(nil),
136+
evclaims.EmailVerificationClaimValidators.IsVerified(nil),
137137
)
138138
}
139+
return nil
139140
})
140141
return &singletonInstance.RecipeModule, nil
141142
}

recipe/emailverification/utils.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ import (
2525
)
2626

2727
func validateAndNormaliseUserInput(appInfo supertokens.NormalisedAppinfo, config evmodels.TypeInput) (evmodels.TypeNormalisedInput, error) {
28-
if config.Mode != "REQUIRED" && config.Mode != "OPTIONAL" {
29-
return evmodels.TypeNormalisedInput{}, errors.New("mode must be either REQUIRED or OPTIONAL")
28+
if config.Mode != evmodels.ModeRequired && config.Mode != evmodels.ModeOptional {
29+
return evmodels.TypeNormalisedInput{}, errors.New("mode must be either ModeRequired or ModeOptional")
3030
}
3131
typeNormalisedInput := makeTypeNormalisedInput(appInfo)
3232

recipe/session/api/implementation.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ func MakeAPIImplementation() sessmodels.APIInterface {
6666
}
6767
}
6868

69-
signOutPOST := func(options sessmodels.APIOptions, sessionContainer *sessmodels.SessionContainer, userContext supertokens.UserContext) (sessmodels.SignOutPOSTResponse, error) {
69+
signOutPOST := func(sessionContainer *sessmodels.SessionContainer, options sessmodels.APIOptions, userContext supertokens.UserContext) (sessmodels.SignOutPOSTResponse, error) {
7070
if sessionContainer != nil {
7171
err := sessionContainer.RevokeSessionWithContext(userContext)
7272
if err != nil {

recipe/session/api/signout.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ func SignOutAPI(apiImplementation sessmodels.APIInterface, options sessmodels.AP
4141
return err
4242
}
4343

44-
resp, err := (*apiImplementation.SignOutPOST)(options, sessionContainer, userContext)
44+
resp, err := (*apiImplementation.SignOutPOST)(sessionContainer, options, userContext)
4545
if err != nil {
4646
return err
4747
}

0 commit comments

Comments
 (0)