@@ -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
6173func init () {
62- evclaims .EmailVerificationClaim = NewEmailVerificationClaim ()
74+ // this function is called automatically when the package is imported
75+ evclaims .EmailVerificationClaim , evclaims .EmailVerificationClaimValidators = NewEmailVerificationClaim ()
6376}
0 commit comments