Skip to content

Commit 89f16c3

Browse files
Merge pull request #171 from supertokens/session-claims-tests
fix: Session claims review comments and tests
2 parents 919bb21 + 64548be commit 89f16c3

File tree

66 files changed

+2856
-600
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+2856
-600
lines changed

examples/with-labstack-echo/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ func verifySession(options *sessmodels.VerifySessionOptions) echo.MiddlewareFunc
144144
}
145145

146146
func sessioninfo(c echo.Context) error {
147-
sessionContainer := c.Get("session").(*sessmodels.SessionContainer)
147+
sessionContainer := c.Get("session").(sessmodels.SessionContainer)
148148

149149
if sessionContainer == nil {
150150
return errors.New("no session found")

recipe/emailpassword/api/implementation.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,6 @@ func MakeAPIImplementation() epmodels.APIInterface {
3737
}
3838

3939
generatePasswordResetTokenPOST := func(formFields []epmodels.TypeFormField, options epmodels.APIOptions, userContext supertokens.UserContext) (epmodels.GeneratePasswordResetTokenPOSTResponse, error) {
40-
stInstance, err := supertokens.GetInstanceOrThrowError()
41-
if err != nil {
42-
return epmodels.GeneratePasswordResetTokenPOSTResponse{}, err
43-
}
44-
4540
var email string
4641
for _, formField := range formFields {
4742
if formField.ID == "email" {
@@ -73,8 +68,8 @@ func MakeAPIImplementation() epmodels.APIInterface {
7368

7469
passwordResetLink := fmt.Sprintf(
7570
"%s%s/reset-password?token=%s&rid=%s",
76-
stInstance.AppInfo.WebsiteDomain.GetAsStringDangerous(),
77-
stInstance.AppInfo.WebsiteBasePath.GetAsStringDangerous(),
71+
options.AppInfo.WebsiteDomain.GetAsStringDangerous(),
72+
options.AppInfo.WebsiteBasePath.GetAsStringDangerous(),
7873
response.OK.Token,
7974
options.RecipeID,
8075
)

recipe/emailpassword/emailExistsAndVerificationCheck_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -931,8 +931,8 @@ func TestThatTheHandlePostEmailVerificationCallBackIsCalledOnSuccessFullVerifica
931931
Override: &evmodels.OverrideStruct{
932932
APIs: func(originalImplementation evmodels.APIInterface) evmodels.APIInterface {
933933
originalVerifyEmailPost := *originalImplementation.VerifyEmailPOST
934-
*originalImplementation.VerifyEmailPOST = func(token string, options evmodels.APIOptions, sessionContainer *sessmodels.SessionContainer, userContext supertokens.UserContext) (evmodels.VerifyEmailPOSTResponse, error) {
935-
res, err := originalVerifyEmailPost(token, options, sessionContainer, userContext)
934+
*originalImplementation.VerifyEmailPOST = func(token string, sessionContainer sessmodels.SessionContainer, options evmodels.APIOptions, userContext supertokens.UserContext) (evmodels.VerifyEmailPOSTResponse, error) {
935+
res, err := originalVerifyEmailPost(token, sessionContainer, options, userContext)
936936
if err != nil {
937937
log.Fatal(err.Error())
938938
}
@@ -1191,8 +1191,8 @@ func TestTheEmailVerifyAPIwithValidInputOverridingAPIs(t *testing.T) {
11911191
Override: &evmodels.OverrideStruct{
11921192
APIs: func(originalImplementation evmodels.APIInterface) evmodels.APIInterface {
11931193
originalVerifyEmailPost := *originalImplementation.VerifyEmailPOST
1194-
*originalImplementation.VerifyEmailPOST = func(token string, options evmodels.APIOptions, sessionContainer *sessmodels.SessionContainer, userContext supertokens.UserContext) (evmodels.VerifyEmailPOSTResponse, error) {
1195-
res, err := originalVerifyEmailPost(token, options, sessionContainer, userContext)
1194+
*originalImplementation.VerifyEmailPOST = func(token string, sessionContainer sessmodels.SessionContainer, options evmodels.APIOptions, userContext supertokens.UserContext) (evmodels.VerifyEmailPOSTResponse, error) {
1195+
res, err := originalVerifyEmailPost(token, sessionContainer, options, userContext)
11961196
if err != nil {
11971197
log.Fatal(err.Error())
11981198
}
@@ -1397,8 +1397,8 @@ func TestTheEmailVerifyAPIwithValidInputThrowsErrorOnSuchOverriding(t *testing.T
13971397
Override: &evmodels.OverrideStruct{
13981398
APIs: func(originalImplementation evmodels.APIInterface) evmodels.APIInterface {
13991399
originalVerifyEmailPost := *originalImplementation.VerifyEmailPOST
1400-
*originalImplementation.VerifyEmailPOST = func(token string, options evmodels.APIOptions, sessionContainer *sessmodels.SessionContainer, userContext supertokens.UserContext) (evmodels.VerifyEmailPOSTResponse, error) {
1401-
res, err := originalVerifyEmailPost(token, options, sessionContainer, userContext)
1400+
*originalImplementation.VerifyEmailPOST = func(token string, sessionContainer sessmodels.SessionContainer, options evmodels.APIOptions, userContext supertokens.UserContext) (evmodels.VerifyEmailPOSTResponse, error) {
1401+
res, err := originalVerifyEmailPost(token, sessionContainer, options, userContext)
14021402
if err != nil {
14031403
log.Fatal(err.Error())
14041404
}

recipe/emailpassword/emaildelivery/backwardCompatibilityService/main.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,10 @@ import (
2121

2222
"github.com/supertokens/supertokens-golang/ingredients/emaildelivery"
2323
"github.com/supertokens/supertokens-golang/recipe/emailpassword/epmodels"
24-
"github.com/supertokens/supertokens-golang/recipe/emailverification/evmodels"
2524
"github.com/supertokens/supertokens-golang/supertokens"
2625
)
2726

28-
func MakeBackwardCompatibilityService(recipeInterfaceImpl epmodels.RecipeInterface, appInfo supertokens.NormalisedAppinfo, sendResetPasswordEmail func(user epmodels.User, passwordResetURLWithToken string, userContext supertokens.UserContext), sendEmailVerificationEmail func(user evmodels.User, emailVerificationURLWithToken string, userContext supertokens.UserContext)) emaildelivery.EmailDeliveryInterface {
27+
func MakeBackwardCompatibilityService(recipeInterfaceImpl epmodels.RecipeInterface, appInfo supertokens.NormalisedAppinfo, sendResetPasswordEmail func(user epmodels.User, passwordResetURLWithToken string, userContext supertokens.UserContext)) emaildelivery.EmailDeliveryInterface {
2928
sendEmail := func(input emaildelivery.EmailType, userContext supertokens.UserContext) error {
3029
if input.PasswordReset != nil {
3130
user, err := (*recipeInterfaceImpl.GetUserByID)(input.PasswordReset.User.ID, userContext)

recipe/emailpassword/epmodels/apiInterface.go

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,19 @@ import (
1919
"net/http"
2020

2121
"github.com/supertokens/supertokens-golang/ingredients/emaildelivery"
22-
"github.com/supertokens/supertokens-golang/recipe/emailverification/evmodels"
2322
"github.com/supertokens/supertokens-golang/recipe/session/sessmodels"
2423
"github.com/supertokens/supertokens-golang/supertokens"
2524
)
2625

2726
type APIOptions struct {
28-
RecipeImplementation RecipeInterface
29-
EmailVerificationRecipeImplementation evmodels.RecipeInterface
30-
Config TypeNormalisedInput
31-
RecipeID string
32-
Req *http.Request
33-
Res http.ResponseWriter
34-
OtherHandler http.HandlerFunc
35-
EmailDelivery emaildelivery.Ingredient
27+
RecipeImplementation RecipeInterface
28+
AppInfo supertokens.NormalisedAppinfo
29+
Config TypeNormalisedInput
30+
RecipeID string
31+
Req *http.Request
32+
Res http.ResponseWriter
33+
OtherHandler http.HandlerFunc
34+
EmailDelivery emaildelivery.Ingredient
3635
}
3736

3837
type APIInterface struct {

recipe/emailpassword/recipe.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ func (r *Recipe) handleAPIRequest(id string, req *http.Request, res http.Respons
150150
OtherHandler: theirHandler,
151151
RecipeID: r.RecipeModule.GetRecipeID(),
152152
RecipeImplementation: r.RecipeImpl,
153+
AppInfo: r.RecipeModule.GetAppInfo(),
153154
Req: req,
154155
Res: res,
155156
EmailDelivery: r.EmailDelivery,

recipe/emailpassword/utils.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import (
2323
"github.com/supertokens/supertokens-golang/ingredients/emaildelivery"
2424
"github.com/supertokens/supertokens-golang/recipe/emailpassword/emaildelivery/backwardCompatibilityService"
2525
"github.com/supertokens/supertokens-golang/recipe/emailpassword/epmodels"
26-
"github.com/supertokens/supertokens-golang/recipe/emailverification"
2726
"github.com/supertokens/supertokens-golang/supertokens"
2827
)
2928

@@ -49,9 +48,7 @@ func validateAndNormaliseUserInput(recipeInstance *Recipe, appInfo supertokens.N
4948
sendPasswordResetEmail = config.ResetPasswordUsingTokenFeature.CreateAndSendCustomEmail
5049
}
5150

52-
sendEmailVerificationEmail := emailverification.DefaultCreateAndSendCustomEmail(appInfo)
53-
54-
emailService := backwardCompatibilityService.MakeBackwardCompatibilityService(recipeImpl, appInfo, sendPasswordResetEmail, sendEmailVerificationEmail)
51+
emailService := backwardCompatibilityService.MakeBackwardCompatibilityService(recipeImpl, appInfo, sendPasswordResetEmail)
5552
if config != nil && config.EmailDelivery != nil && config.EmailDelivery.Service != nil {
5653
emailService = *config.EmailDelivery.Service
5754
}

recipe/emailverification/api/emailverify.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@ func EmailVerify(apiImplementation evmodels.APIInterface, options evmodels.APIOp
4242
options.Req, options.Res,
4343
&sessmodels.VerifySessionOptions{
4444
SessionRequired: &sessionRequired,
45-
OverrideGlobalClaimValidators: func(globalClaimValidators []claims.SessionClaimValidator, sessionContainer *sessmodels.SessionContainer, userContext supertokens.UserContext) []claims.SessionClaimValidator {
45+
OverrideGlobalClaimValidators: func(globalClaimValidators []claims.SessionClaimValidator, sessionContainer sessmodels.SessionContainer, userContext supertokens.UserContext) ([]claims.SessionClaimValidator, error) {
4646
validators := []claims.SessionClaimValidator{}
47-
return validators
47+
return validators, nil
4848
},
4949
},
5050
userContext)
@@ -70,7 +70,7 @@ func EmailVerify(apiImplementation evmodels.APIInterface, options evmodels.APIOp
7070
return supertokens.BadInputError{Msg: "The email verification token must be a string"}
7171
}
7272

73-
response, err := (*apiImplementation.VerifyEmailPOST)(token.(string), options, sessionContainer, userContext)
73+
response, err := (*apiImplementation.VerifyEmailPOST)(token.(string), sessionContainer, options, userContext)
7474
if err != nil {
7575
return err
7676
}
@@ -100,9 +100,9 @@ func EmailVerify(apiImplementation evmodels.APIInterface, options evmodels.APIOp
100100
options.Req,
101101
options.Res,
102102
&sessmodels.VerifySessionOptions{
103-
OverrideGlobalClaimValidators: func(globalClaimValidators []claims.SessionClaimValidator, sessionContainer *sessmodels.SessionContainer, userContext supertokens.UserContext) []claims.SessionClaimValidator {
103+
OverrideGlobalClaimValidators: func(globalClaimValidators []claims.SessionClaimValidator, sessionContainer sessmodels.SessionContainer, userContext supertokens.UserContext) ([]claims.SessionClaimValidator, error) {
104104
validators := []claims.SessionClaimValidator{}
105-
return validators
105+
return validators, nil
106106
},
107107
},
108108
userContext,
@@ -111,7 +111,7 @@ func EmailVerify(apiImplementation evmodels.APIInterface, options evmodels.APIOp
111111
return err
112112
}
113113

114-
isVerified, err := (*apiImplementation.IsEmailVerifiedGET)(options, sessionContainer, userContext)
114+
isVerified, err := (*apiImplementation.IsEmailVerifiedGET)(sessionContainer, options, userContext)
115115
if err != nil {
116116
return err
117117
}

recipe/emailverification/api/generateEmailVerifyToken.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,9 @@ func GenerateEmailVerifyToken(apiImplementation evmodels.APIInterface, options e
3535
sessionContainer, err := session.GetSessionWithContext(
3636
options.Req, options.Res,
3737
&sessmodels.VerifySessionOptions{
38-
OverrideGlobalClaimValidators: func(globalClaimValidators []claims.SessionClaimValidator, sessionContainer *sessmodels.SessionContainer, userContext supertokens.UserContext) []claims.SessionClaimValidator {
38+
OverrideGlobalClaimValidators: func(globalClaimValidators []claims.SessionClaimValidator, sessionContainer sessmodels.SessionContainer, userContext supertokens.UserContext) ([]claims.SessionClaimValidator, error) {
3939
validators := []claims.SessionClaimValidator{}
40-
return validators
40+
return validators, nil
4141
},
4242
},
4343
userContext,
@@ -46,7 +46,7 @@ func GenerateEmailVerifyToken(apiImplementation evmodels.APIInterface, options e
4646
return err
4747
}
4848

49-
response, err := (*apiImplementation.GenerateEmailVerifyTokenPOST)(options, sessionContainer, userContext)
49+
response, err := (*apiImplementation.GenerateEmailVerifyTokenPOST)(sessionContainer, options, userContext)
5050
if err != nil {
5151
return err
5252
}

recipe/emailverification/api/implementation.go

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import (
2727
)
2828

2929
func MakeAPIImplementation() evmodels.APIInterface {
30-
verifyEmailPOST := func(token string, options evmodels.APIOptions, sessionContainer *sessmodels.SessionContainer, userContext supertokens.UserContext) (evmodels.VerifyEmailPOSTResponse, error) {
30+
verifyEmailPOST := func(token string, sessionContainer sessmodels.SessionContainer, options evmodels.APIOptions, userContext supertokens.UserContext) (evmodels.VerifyEmailPOSTResponse, error) {
3131
resp, err := (*options.RecipeImplementation.VerifyEmailUsingToken)(token, userContext)
3232
if err != nil {
3333
return evmodels.VerifyEmailPOSTResponse{}, err
@@ -49,7 +49,7 @@ func MakeAPIImplementation() evmodels.APIInterface {
4949
}
5050
}
5151

52-
isEmailVerifiedGET := func(options evmodels.APIOptions, sessionContainer *sessmodels.SessionContainer, userContext supertokens.UserContext) (evmodels.IsEmailVerifiedGETResponse, error) {
52+
isEmailVerifiedGET := func(sessionContainer sessmodels.SessionContainer, options evmodels.APIOptions, userContext supertokens.UserContext) (evmodels.IsEmailVerifiedGETResponse, error) {
5353
if sessionContainer == nil {
5454
return evmodels.IsEmailVerifiedGETResponse{}, supertokens.BadInputError{Msg: "Session is undefined. Should not come here."}
5555
}
@@ -70,11 +70,7 @@ func MakeAPIImplementation() evmodels.APIInterface {
7070
}, nil
7171
}
7272

73-
generateEmailVerifyTokenPOST := func(options evmodels.APIOptions, sessionContainer *sessmodels.SessionContainer, userContext supertokens.UserContext) (evmodels.GenerateEmailVerifyTokenPOSTResponse, error) {
74-
stInstance, err := supertokens.GetInstanceOrThrowError()
75-
if err != nil {
76-
return evmodels.GenerateEmailVerifyTokenPOSTResponse{}, err
77-
}
73+
generateEmailVerifyTokenPOST := func(sessionContainer sessmodels.SessionContainer, options evmodels.APIOptions, userContext supertokens.UserContext) (evmodels.GenerateEmailVerifyTokenPOSTResponse, error) {
7874
if sessionContainer == nil {
7975
return evmodels.GenerateEmailVerifyTokenPOSTResponse{}, supertokens.BadInputError{Msg: "Session is undefined. Should not come here."}
8076
}
@@ -111,8 +107,8 @@ func MakeAPIImplementation() evmodels.APIInterface {
111107
}
112108
emailVerificationURL := fmt.Sprintf(
113109
"%s%s/verify-email?token=%s&rid=%s",
114-
stInstance.AppInfo.WebsiteDomain.GetAsStringDangerous(),
115-
stInstance.AppInfo.WebsiteBasePath.GetAsStringDangerous(),
110+
options.AppInfo.WebsiteDomain.GetAsStringDangerous(),
111+
options.AppInfo.WebsiteBasePath.GetAsStringDangerous(),
116112
response.OK.Token,
117113
options.RecipeID,
118114
)

0 commit comments

Comments
 (0)