Skip to content

Commit

Permalink
fix: tenantid in callback functions (#325)
Browse files Browse the repository at this point in the history
  • Loading branch information
sattvikc authored Aug 3, 2023
1 parent ccbec26 commit da527a6
Show file tree
Hide file tree
Showing 36 changed files with 136 additions and 117 deletions.
3 changes: 3 additions & 0 deletions ingredients/emaildelivery/models.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,13 @@ type EmailType struct {
type EmailVerificationType struct {
User User
EmailVerifyLink string
TenantId string
}

type PasswordResetType struct {
User User
PasswordResetLink string
TenantId string
}

type PasswordlessLoginType struct {
Expand All @@ -54,6 +56,7 @@ type PasswordlessLoginType struct {
UrlWithLinkCode *string
CodeLifetime uint64
PreAuthSessionId string
TenantId string
}

type User struct {
Expand Down
1 change: 1 addition & 0 deletions ingredients/smsdelivery/models.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ type PasswordlessLoginType struct {
UrlWithLinkCode *string
CodeLifetime uint64
PreAuthSessionId string
TenantId string
}

type User struct {
Expand Down
4 changes: 2 additions & 2 deletions recipe/dashboard/api/userdetails/userPasswordPut.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ func UserPasswordPut(apiInterface dashboardmodels.APIInterface, tenantId string,
}
}

validationError := passwordField.Validate(*readBody.NewPassword)
validationError := passwordField.Validate(*readBody.NewPassword, tenantId)

if validationError != nil {
return userPasswordPutResponse{
Expand Down Expand Up @@ -134,7 +134,7 @@ func UserPasswordPut(apiInterface dashboardmodels.APIInterface, tenantId string,
}
}

validationError := passwordField.Validate(*readBody.NewPassword)
validationError := passwordField.Validate(*readBody.NewPassword, tenantId)

if validationError != nil {
return userPasswordPutResponse{
Expand Down
36 changes: 18 additions & 18 deletions recipe/dashboard/api/userdetails/userPut.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ type userPutRequestBody struct {
Phone *string `json:"phone"`
}

func updateEmailForRecipeId(recipeId string, userId string, email string, userContext supertokens.UserContext) (updateEmailResponse, error) {
func updateEmailForRecipeId(recipeId string, userId string, email string, tenantId string, userContext supertokens.UserContext) (updateEmailResponse, error) {
if recipeId == "emailpassword" {
var emailField epmodels.NormalisedFormField

Expand All @@ -65,7 +65,7 @@ func updateEmailForRecipeId(recipeId string, userId string, email string, userCo
}
}

validationError := emailField.Validate(email)
validationError := emailField.Validate(email, tenantId)

if validationError != nil {
return updateEmailResponse{
Expand Down Expand Up @@ -104,7 +104,7 @@ func updateEmailForRecipeId(recipeId string, userId string, email string, userCo
}
}

validationError := emailField.Validate(email)
validationError := emailField.Validate(email, tenantId)

if validationError != nil {
return updateEmailResponse{
Expand Down Expand Up @@ -142,21 +142,21 @@ func updateEmailForRecipeId(recipeId string, userId string, email string, userCo
passwordlessConfig := passwordless.GetRecipeInstance().Config

if passwordlessConfig.ContactMethodPhone.Enabled {
validationResult := passwordless.DefaultValidateEmailAddress(email)
validationResult := passwordless.DefaultValidateEmailAddress(email, tenantId)

if validationResult != nil {
isValidEmail = false
validationError = *validationResult
}
} else if passwordlessConfig.ContactMethodEmail.Enabled {
validationResult := passwordlessConfig.ContactMethodEmail.ValidateEmailAddress(email)
validationResult := passwordlessConfig.ContactMethodEmail.ValidateEmailAddress(email, tenantId)

if validationResult != nil {
isValidEmail = false
validationError = *validationResult
}
} else {
validationResult := passwordlessConfig.ContactMethodEmailOrPhone.ValidateEmailAddress(email)
validationResult := passwordlessConfig.ContactMethodEmailOrPhone.ValidateEmailAddress(email, tenantId)

if validationResult != nil {
isValidEmail = false
Expand Down Expand Up @@ -199,21 +199,21 @@ func updateEmailForRecipeId(recipeId string, userId string, email string, userCo
passwordlessConfig := thirdpartypasswordless.GetRecipeInstance().Config

if passwordlessConfig.ContactMethodPhone.Enabled {
validationResult := passwordless.DefaultValidateEmailAddress(email)
validationResult := passwordless.DefaultValidateEmailAddress(email, tenantId)

if validationResult != nil {
isValidEmail = false
validationError = *validationResult
}
} else if passwordlessConfig.ContactMethodEmail.Enabled {
validationResult := passwordlessConfig.ContactMethodEmail.ValidateEmailAddress(email)
validationResult := passwordlessConfig.ContactMethodEmail.ValidateEmailAddress(email, tenantId)

if validationResult != nil {
isValidEmail = false
validationError = *validationResult
}
} else {
validationResult := passwordlessConfig.ContactMethodEmailOrPhone.ValidateEmailAddress(email)
validationResult := passwordlessConfig.ContactMethodEmailOrPhone.ValidateEmailAddress(email, tenantId)

if validationResult != nil {
isValidEmail = false
Expand Down Expand Up @@ -252,29 +252,29 @@ func updateEmailForRecipeId(recipeId string, userId string, email string, userCo
return updateEmailResponse{}, errors.New("Should never come here")
}

func updatePhoneForRecipeId(recipeId string, userId string, phone string, userContext supertokens.UserContext) (updatePhoneResponse, error) {
func updatePhoneForRecipeId(recipeId string, userId string, phone string, tenantId string, userContext supertokens.UserContext) (updatePhoneResponse, error) {
if recipeId == "passwordless" {
isValidPhone := true
validationError := ""

passwordlessConfig := passwordless.GetRecipeInstance().Config

if passwordlessConfig.ContactMethodEmail.Enabled {
validationResult := passwordless.DefaultValidatePhoneNumber(phone)
validationResult := passwordless.DefaultValidatePhoneNumber(phone, tenantId)

if validationResult != nil {
isValidPhone = false
validationError = *validationResult
}
} else if passwordlessConfig.ContactMethodPhone.Enabled {
validationResult := passwordlessConfig.ContactMethodPhone.ValidatePhoneNumber(phone)
validationResult := passwordlessConfig.ContactMethodPhone.ValidatePhoneNumber(phone, tenantId)

if validationResult != nil {
isValidPhone = false
validationError = *validationResult
}
} else {
validationResult := passwordlessConfig.ContactMethodEmailOrPhone.ValidatePhoneNumber(phone)
validationResult := passwordlessConfig.ContactMethodEmailOrPhone.ValidatePhoneNumber(phone, tenantId)

if validationResult != nil {
isValidPhone = false
Expand Down Expand Up @@ -317,21 +317,21 @@ func updatePhoneForRecipeId(recipeId string, userId string, phone string, userCo
passwordlessConfig := thirdpartypasswordless.GetRecipeInstance().Config

if passwordlessConfig.ContactMethodEmail.Enabled {
validationResult := passwordless.DefaultValidatePhoneNumber(phone)
validationResult := passwordless.DefaultValidatePhoneNumber(phone, tenantId)

if validationResult != nil {
isValidPhone = false
validationError = *validationResult
}
} else if passwordlessConfig.ContactMethodPhone.Enabled {
validationResult := passwordlessConfig.ContactMethodPhone.ValidatePhoneNumber(phone)
validationResult := passwordlessConfig.ContactMethodPhone.ValidatePhoneNumber(phone, tenantId)

if validationResult != nil {
isValidPhone = false
validationError = *validationResult
}
} else {
validationResult := passwordlessConfig.ContactMethodEmailOrPhone.ValidatePhoneNumber(phone)
validationResult := passwordlessConfig.ContactMethodEmailOrPhone.ValidatePhoneNumber(phone, tenantId)

if validationResult != nil {
isValidPhone = false
Expand Down Expand Up @@ -450,7 +450,7 @@ func UserPut(apiInterface dashboardmodels.APIInterface, tenantId string, options
}

if strings.TrimSpace(*readBody.Email) != "" {
updateResponse, updateError := updateEmailForRecipeId(recipeId, *readBody.UserId, strings.TrimSpace(*readBody.Email), userContext)
updateResponse, updateError := updateEmailForRecipeId(recipeId, *readBody.UserId, strings.TrimSpace(*readBody.Email), tenantId, userContext)

if updateError != nil {
return userPutResponse{}, updateError
Expand All @@ -465,7 +465,7 @@ func UserPut(apiInterface dashboardmodels.APIInterface, tenantId string, options
}

if strings.TrimSpace(*readBody.Phone) != "" {
updateResponse, updateError := updatePhoneForRecipeId(recipeId, *readBody.UserId, *readBody.Phone, userContext)
updateResponse, updateError := updatePhoneForRecipeId(recipeId, *readBody.UserId, *readBody.Phone, tenantId, userContext)

if updateError != nil {
return userPutResponse{}, updateError
Expand Down
2 changes: 1 addition & 1 deletion recipe/emailpassword/api/generatePasswordResetToken.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ func GeneratePasswordResetToken(apiImplementation epmodels.APIInterface, tenantI
return err
}

formFields, err := validateFormFieldsOrThrowError(options.Config.ResetPasswordUsingTokenFeature.FormFieldsForGenerateTokenForm, formFieldsRaw["formFields"])
formFields, err := validateFormFieldsOrThrowError(options.Config.ResetPasswordUsingTokenFeature.FormFieldsForGenerateTokenForm, formFieldsRaw["formFields"], tenantId)
if err != nil {
return err
}
Expand Down
1 change: 1 addition & 0 deletions recipe/emailpassword/api/implementation.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ func MakeAPIImplementation() epmodels.APIInterface {
Email: user.Email,
},
PasswordResetLink: passwordResetLink,
TenantId: tenantId,
},
}, userContext)
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion recipe/emailpassword/api/passwordReset.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ func PasswordReset(apiImplementation epmodels.APIInterface, tenantId string, opt
return err
}

formFields, err := validateFormFieldsOrThrowError(options.Config.ResetPasswordUsingTokenFeature.FormFieldsForPasswordResetForm, formFieldsRaw["formFields"])
formFields, err := validateFormFieldsOrThrowError(options.Config.ResetPasswordUsingTokenFeature.FormFieldsForPasswordResetForm, formFieldsRaw["formFields"], tenantId)
if err != nil {
return err
}
Expand Down
2 changes: 1 addition & 1 deletion recipe/emailpassword/api/signin.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ func SignInAPI(apiImplementation epmodels.APIInterface, tenantId string, options
return err
}

formFields, err := validateFormFieldsOrThrowError(options.Config.SignInFeature.FormFields, formFieldsRaw["formFields"])
formFields, err := validateFormFieldsOrThrowError(options.Config.SignInFeature.FormFields, formFieldsRaw["formFields"], tenantId)
if err != nil {
return err
}
Expand Down
2 changes: 1 addition & 1 deletion recipe/emailpassword/api/signup.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ func SignUpAPI(apiImplementation epmodels.APIInterface, tenantId string, options
return err
}

formFields, err := validateFormFieldsOrThrowError(options.Config.SignUpFeature.FormFields, formFieldsRaw["formFields"])
formFields, err := validateFormFieldsOrThrowError(options.Config.SignUpFeature.FormFields, formFieldsRaw["formFields"], tenantId)
if err != nil {
return err
}
Expand Down
8 changes: 4 additions & 4 deletions recipe/emailpassword/api/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import (
"github.com/supertokens/supertokens-golang/supertokens"
)

func validateFormFieldsOrThrowError(configFormFields []epmodels.NormalisedFormField, formFieldsRaw interface{}) ([]epmodels.TypeFormField, error) {
func validateFormFieldsOrThrowError(configFormFields []epmodels.NormalisedFormField, formFieldsRaw interface{}, tenantId string) ([]epmodels.TypeFormField, error) {
if formFieldsRaw == nil {
return nil, supertokens.BadInputError{
Msg: "Missing input param: formFields",
Expand Down Expand Up @@ -86,10 +86,10 @@ func validateFormFieldsOrThrowError(configFormFields []epmodels.NormalisedFormFi
}
}

return formFields, validateFormOrThrowError(configFormFields, formFields)
return formFields, validateFormOrThrowError(configFormFields, formFields, tenantId)
}

func validateFormOrThrowError(configFormFields []epmodels.NormalisedFormField, inputs []epmodels.TypeFormField) error {
func validateFormOrThrowError(configFormFields []epmodels.NormalisedFormField, inputs []epmodels.TypeFormField, tenantId string) error {
var validationErrors []errors.ErrorPayload
if len(configFormFields) != len(inputs) {
return supertokens.BadInputError{
Expand All @@ -107,7 +107,7 @@ func validateFormOrThrowError(configFormFields []epmodels.NormalisedFormField, i
if input.Value == "" && !field.Optional {
validationErrors = append(validationErrors, errors.ErrorPayload{ID: field.ID, ErrorMsg: "Field is not optional"})
} else {
err := field.Validate(input.Value)
err := field.Validate(input.Value, tenantId)
if err != nil {
validationErrors = append(validationErrors, errors.ErrorPayload{
ID: field.ID,
Expand Down
8 changes: 4 additions & 4 deletions recipe/emailpassword/authFlow_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -543,7 +543,7 @@ func TestCustomEmailValidatorsToSignupAndMakeSureTheyAreAppliedToSignIn(t *testi
FormFields: []epmodels.TypeInputFormField{
{
ID: "email",
Validate: func(value interface{}) *string {
Validate: func(value interface{}, tenantId string) *string {
customErrMessage := "email does not start with test"
if strings.HasPrefix(value.(string), "test") {
return nil
Expand Down Expand Up @@ -633,7 +633,7 @@ func TestCustomPasswordValidatorsToSignupAndMakeSureTheyAreAppliedToSignIn(t *te
FormFields: []epmodels.TypeInputFormField{
{
ID: "password",
Validate: func(value interface{}) *string {
Validate: func(value interface{}, tenantId string) *string {
customErrMessage := "password is greater than 5 characters"
if len(value.(string)) <= 5 {
passesValidatorCtr++
Expand Down Expand Up @@ -2753,7 +2753,7 @@ func TestCustomFieldValidationError(t *testing.T) {
FormFields: []epmodels.TypeInputFormField{
{
ID: "testField",
Validate: func(value interface{}) *string {
Validate: func(value interface{}, tenantId string) *string {
if len(value.(string)) <= 5 {
return &customErrorMessage
} else {
Expand All @@ -2763,7 +2763,7 @@ func TestCustomFieldValidationError(t *testing.T) {
},
{
ID: "testField2",
Validate: func(value interface{}) *string {
Validate: func(value interface{}, tenantId string) *string {
if len(value.(string)) <= 5 {
return &customErrorMessage
} else {
Expand Down
28 changes: 14 additions & 14 deletions recipe/emailpassword/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ func TestDefaultConfigForEmailPasswordModule(t *testing.T) {
assert.Equal(t, len(signupFeature.FormFields), 2)
for i := 0; i < len(signupFeature.FormFields); i++ {
assert.Equal(t, signupFeature.FormFields[i].Optional, false)
assert.NotNil(t, *signupFeature.FormFields[i].Validate(""))
assert.NotNil(t, *signupFeature.FormFields[i].Validate("", "public"))
}

singInFeature := singletonEmailPasswordInstance.Config.SignInFeature
Expand Down Expand Up @@ -90,7 +90,7 @@ func TestChangedConfigForEmailPasswordModule(t *testing.T) {
{
ID: "test",
Optional: &customOptionalValue,
Validate: func(value interface{}) *string {
Validate: func(value interface{}, tenantId string) *string {
return &customReturnValueFromValidator
},
},
Expand Down Expand Up @@ -121,7 +121,7 @@ func TestChangedConfigForEmailPasswordModule(t *testing.T) {
}
assert.NotNil(t, testFormField)
assert.Equal(t, false, testFormField.Optional)
assert.Equal(t, "test", *testFormField.Validate(""))
assert.Equal(t, "test", *testFormField.Validate("", "public"))

}

Expand Down Expand Up @@ -163,8 +163,8 @@ func TestNoEmailPasswordValidatorsGivenShouldAddThem(t *testing.T) {
}
signupFeature := singletonEmailPasswordInstance.Config.SignUpFeature
formFields := signupFeature.FormFields
assert.NotNil(t, *formFields[0].Validate(""))
assert.NotNil(t, *formFields[1].Validate(""))
assert.NotNil(t, *formFields[0].Validate("", "public"))
assert.NotNil(t, *formFields[1].Validate("", "public"))

}

Expand Down Expand Up @@ -204,14 +204,14 @@ func TestToCheckTheDefaultEmailPasswordValidators(t *testing.T) {
passwordFormField = formFiled
}
}
assert.Equal(t, "Email is invalid", *emailFormField.Validate("aaaaa"))
assert.Equal(t, "Email is invalid", *emailFormField.Validate("aaaaa@aaaaa"))
assert.Equal(t, "Email is invalid", *emailFormField.Validate("random User @randomMail.com"))
assert.Equal(t, "Email is invalid", *emailFormField.Validate("*@*"))
assert.Nil(t, emailFormField.Validate("validemail@supertokens.io"))
assert.Equal(t, "Email is invalid", *emailFormField.Validate("aaaaa", "public"))
assert.Equal(t, "Email is invalid", *emailFormField.Validate("aaaaa@aaaaa", "public"))
assert.Equal(t, "Email is invalid", *emailFormField.Validate("random User @randomMail.com", "public"))
assert.Equal(t, "Email is invalid", *emailFormField.Validate("*@*", "public"))
assert.Nil(t, emailFormField.Validate("validemail@supertokens.io", "public"))

assert.Equal(t, "Password must contain at least 8 characters, including a number", *passwordFormField.Validate("aaaa"))
assert.Equal(t, "Password must contain at least one number", *passwordFormField.Validate("aaaaaaaaa"))
assert.Equal(t, "Password must contain at least one alphabet", *passwordFormField.Validate("1234*-56*789"))
assert.Nil(t, passwordFormField.Validate("validPass123"))
assert.Equal(t, "Password must contain at least 8 characters, including a number", *passwordFormField.Validate("aaaa", "public"))
assert.Equal(t, "Password must contain at least one number", *passwordFormField.Validate("aaaaaaaaa", "public"))
assert.Equal(t, "Password must contain at least one alphabet", *passwordFormField.Validate("1234*-56*789", "public"))
assert.Nil(t, passwordFormField.Validate("validPass123", "public"))
}
4 changes: 2 additions & 2 deletions recipe/emailpassword/epmodels/models.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ type OverrideStruct struct {

type TypeInputFormField struct {
ID string
Validate func(value interface{}) *string
Validate func(value interface{}, tenantId string) *string
Optional *bool
}

Expand All @@ -44,7 +44,7 @@ type TypeInputSignUp struct {

type NormalisedFormField struct {
ID string
Validate func(value interface{}) *string
Validate func(value interface{}, tenantId string) *string
Optional bool
}

Expand Down
Loading

0 comments on commit da527a6

Please sign in to comment.