Skip to content

Commit 1565ad2

Browse files
committed
Merge branch 'feat/jwt-rework' into jwt-rework/issuer-in-payload
2 parents 1662da6 + 6b8112e commit 1565ad2

File tree

13 files changed

+288
-38
lines changed

13 files changed

+288
-38
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,4 @@ gin/
2121
apiPassword
2222
releasePassword
2323
.vscode/
24-
.idea/
24+
.idea/

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,16 @@ func main() {
238238
}
239239
```
240240

241+
## [0.10.8] - 2023-04-18
242+
- Email template for verify email updated
243+
244+
## [0.10.7] - 2023-04-11
245+
- Changed email template to render correctly in outlook
246+
247+
## [0.10.6]
248+
249+
- Fixes panic issue in input validation for emailpassword APIs - https://github.com/supertokens/supertokens-golang/issues/254
250+
241251
## [0.10.5] - 2023-03-31
242252

243253
- Adds search APIs to the dashboard recipe

recipe/emailpassword/api/generatePasswordResetToken.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func GeneratePasswordResetToken(apiImplementation epmodels.APIInterface, options
3939
return err
4040
}
4141

42-
formFields, err := validateFormFieldsOrThrowError(options.Config.ResetPasswordUsingTokenFeature.FormFieldsForGenerateTokenForm, formFieldsRaw["formFields"].([]interface{}))
42+
formFields, err := validateFormFieldsOrThrowError(options.Config.ResetPasswordUsingTokenFeature.FormFieldsForGenerateTokenForm, formFieldsRaw["formFields"])
4343
if err != nil {
4444
return err
4545
}

recipe/emailpassword/api/passwordReset.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func PasswordReset(apiImplementation epmodels.APIInterface, options epmodels.API
3939
return err
4040
}
4141

42-
formFields, err := validateFormFieldsOrThrowError(options.Config.ResetPasswordUsingTokenFeature.FormFieldsForPasswordResetForm, formFieldsRaw["formFields"].([]interface{}))
42+
formFields, err := validateFormFieldsOrThrowError(options.Config.ResetPasswordUsingTokenFeature.FormFieldsForPasswordResetForm, formFieldsRaw["formFields"])
4343
if err != nil {
4444
return err
4545
}

recipe/emailpassword/api/signin.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func SignInAPI(apiImplementation epmodels.APIInterface, options epmodels.APIOpti
3838
return err
3939
}
4040

41-
formFields, err := validateFormFieldsOrThrowError(options.Config.SignInFeature.FormFields, formFieldsRaw["formFields"].([]interface{}))
41+
formFields, err := validateFormFieldsOrThrowError(options.Config.SignInFeature.FormFields, formFieldsRaw["formFields"])
4242
if err != nil {
4343
return err
4444
}

recipe/emailpassword/api/signup.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func SignUpAPI(apiImplementation epmodels.APIInterface, options epmodels.APIOpti
3939
return err
4040
}
4141

42-
formFields, err := validateFormFieldsOrThrowError(options.Config.SignUpFeature.FormFields, formFieldsRaw["formFields"].([]interface{}))
42+
formFields, err := validateFormFieldsOrThrowError(options.Config.SignUpFeature.FormFields, formFieldsRaw["formFields"])
4343
if err != nil {
4444
return err
4545
}

recipe/emailpassword/api/utils.go

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,51 @@ package api
1717

1818
import (
1919
"encoding/json"
20-
defaultErrors "errors"
2120
"strings"
2221

2322
"github.com/supertokens/supertokens-golang/recipe/emailpassword/epmodels"
2423
"github.com/supertokens/supertokens-golang/recipe/emailpassword/errors"
24+
"github.com/supertokens/supertokens-golang/supertokens"
2525
)
2626

27-
func validateFormFieldsOrThrowError(configFormFields []epmodels.NormalisedFormField, formFieldsRaw []interface{}) ([]epmodels.TypeFormField, error) {
27+
func validateFormFieldsOrThrowError(configFormFields []epmodels.NormalisedFormField, formFieldsRaw interface{}) ([]epmodels.TypeFormField, error) {
2828
if formFieldsRaw == nil {
29-
return nil, defaultErrors.New("Missing input param: formFields")
29+
return nil, supertokens.BadInputError{
30+
Msg: "Missing input param: formFields",
31+
}
3032
}
3133

32-
if len(formFieldsRaw) == 0 {
33-
return nil, defaultErrors.New("formFields must be an array")
34+
if _, ok := formFieldsRaw.([]interface{}); !ok {
35+
return nil, supertokens.BadInputError{
36+
Msg: "formFields must be an array",
37+
}
3438
}
3539

3640
var formFields []epmodels.TypeFormField
37-
for _, rawFormField := range formFieldsRaw {
41+
for _, rawFormField := range formFieldsRaw.([]interface{}) {
42+
43+
if _, ok := rawFormField.(map[string]interface{}); !ok {
44+
return nil, supertokens.BadInputError{
45+
Msg: "formFields must be an array of objects containing id and value of type string",
46+
}
47+
}
48+
49+
if rawFormField.(map[string]interface{})["id"] != nil {
50+
if _, ok := rawFormField.(map[string]interface{})["id"].(string); !ok {
51+
return nil, supertokens.BadInputError{
52+
Msg: "formFields must be an array of objects containing id and value of type string",
53+
}
54+
}
55+
}
56+
57+
if rawFormField.(map[string]interface{})["value"] != nil {
58+
if _, ok := rawFormField.(map[string]interface{})["value"].(string); !ok {
59+
return nil, supertokens.BadInputError{
60+
Msg: "formFields must be an array of objects containing id and value of type string",
61+
}
62+
}
63+
}
64+
3865
jsonformField, err := json.Marshal(rawFormField)
3966
if err != nil {
4067
return nil, err
@@ -64,7 +91,9 @@ func validateFormFieldsOrThrowError(configFormFields []epmodels.NormalisedFormFi
6491
func validateFormOrThrowError(configFormFields []epmodels.NormalisedFormField, inputs []epmodels.TypeFormField) error {
6592
var validationErrors []errors.ErrorPayload
6693
if len(configFormFields) != len(inputs) {
67-
return defaultErrors.New("Are you sending too many / too few formFields?")
94+
return supertokens.BadInputError{
95+
Msg: "Are you sending too many / too few formFields?",
96+
}
6897
}
6998
for _, field := range configFormFields {
7099
var input epmodels.TypeFormField

recipe/emailpassword/authFlow_test.go

Lines changed: 41 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -854,8 +854,13 @@ func TestFormFieldsHasNoEmailField(t *testing.T) {
854854

855855
resp.Body.Close()
856856

857-
assert.Equal(t, "Are you sending too many / too few formFields?\n", string(dataInBytes1))
858-
assert.Equal(t, 500, resp.StatusCode)
857+
assert.Equal(t, 400, resp.StatusCode)
858+
859+
err = json.Unmarshal(dataInBytes1, &data)
860+
if err != nil {
861+
t.Error(err.Error())
862+
}
863+
assert.Equal(t, "Are you sending too many / too few formFields?", data["message"].(string))
859864

860865
}
861866

@@ -938,8 +943,12 @@ func TestFormFieldsHasNoPasswordField(t *testing.T) {
938943

939944
resp.Body.Close()
940945

941-
assert.Equal(t, "Are you sending too many / too few formFields?\n", string(dataInBytes1))
942-
assert.Equal(t, 500, resp.StatusCode)
946+
assert.Equal(t, 400, resp.StatusCode)
947+
err = json.Unmarshal(dataInBytes1, &data)
948+
if err != nil {
949+
t.Error(err.Error())
950+
}
951+
assert.Equal(t, "Are you sending too many / too few formFields?", data["message"].(string))
943952

944953
}
945954

@@ -2147,8 +2156,13 @@ func TestFormFieldsAddedInConfigButNotInInputToSignupCheckErrorAboutItBeingMissi
21472156
t.Error(err.Error())
21482157
}
21492158
res.Body.Close()
2150-
assert.Equal(t, 500, res.StatusCode)
2151-
assert.Equal(t, "Are you sending too many / too few formFields?\n", string(dataInBytes))
2159+
assert.Equal(t, 400, res.StatusCode)
2160+
var data map[string]interface{}
2161+
err = json.Unmarshal(dataInBytes, &data)
2162+
if err != nil {
2163+
t.Error(err.Error())
2164+
}
2165+
assert.Equal(t, "Are you sending too many / too few formFields?", data["message"].(string))
21522166

21532167
}
21542168

@@ -2380,16 +2394,19 @@ func TestInputFormFieldWithoutEmailField(t *testing.T) {
23802394
t.Error(err.Error())
23812395
}
23822396

2383-
assert.Equal(t, 500, resp.StatusCode)
2384-
23852397
dataInBytes, err := io.ReadAll(resp.Body)
23862398
if err != nil {
23872399
t.Error(err.Error())
23882400
}
23892401
resp.Body.Close()
23902402

2391-
assert.Equal(t, 500, resp.StatusCode)
2392-
assert.Equal(t, "Are you sending too many / too few formFields?\n", string(dataInBytes))
2403+
assert.Equal(t, 400, resp.StatusCode)
2404+
var data map[string]interface{}
2405+
err = json.Unmarshal(dataInBytes, &data)
2406+
if err != nil {
2407+
t.Error(err.Error())
2408+
}
2409+
assert.Equal(t, "Are you sending too many / too few formFields?", data["message"].(string))
23932410

23942411
}
23952412

@@ -2444,17 +2461,19 @@ func TestInputFormFieldWithoutPasswordField(t *testing.T) {
24442461
t.Error(err.Error())
24452462
}
24462463

2447-
assert.Equal(t, 500, resp.StatusCode)
2448-
24492464
dataInBytes, err := io.ReadAll(resp.Body)
24502465
if err != nil {
24512466
t.Error(err.Error())
24522467
}
24532468
resp.Body.Close()
24542469

2455-
assert.Equal(t, 500, resp.StatusCode)
2456-
assert.Equal(t, "Are you sending too many / too few formFields?\n", string(dataInBytes))
2457-
2470+
assert.Equal(t, 400, resp.StatusCode)
2471+
var data map[string]interface{}
2472+
err = json.Unmarshal(dataInBytes, &data)
2473+
if err != nil {
2474+
t.Error(err.Error())
2475+
}
2476+
assert.Equal(t, "Are you sending too many / too few formFields?", data["message"].(string))
24582477
}
24592478

24602479
func TestInputFormFieldHasADifferentNumberOfCustomFiledsThanInConfigFormFields(t *testing.T) {
@@ -2529,16 +2548,19 @@ func TestInputFormFieldHasADifferentNumberOfCustomFiledsThanInConfigFormFields(t
25292548
t.Error(err.Error())
25302549
}
25312550

2532-
assert.Equal(t, 500, resp.StatusCode)
2533-
25342551
dataInBytes, err := io.ReadAll(resp.Body)
25352552
if err != nil {
25362553
t.Error(err.Error())
25372554
}
25382555
resp.Body.Close()
25392556

2540-
assert.Equal(t, 500, resp.StatusCode)
2541-
assert.Equal(t, "Are you sending too many / too few formFields?\n", string(dataInBytes))
2557+
assert.Equal(t, 400, resp.StatusCode)
2558+
var data map[string]interface{}
2559+
err = json.Unmarshal(dataInBytes, &data)
2560+
if err != nil {
2561+
t.Error(err.Error())
2562+
}
2563+
assert.Equal(t, "Are you sending too many / too few formFields?", data["message"].(string))
25422564

25432565
}
25442566

recipe/emailpassword/emaildelivery/smtpService/passwordReset.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -925,7 +925,6 @@ const passwordResetTemplate = `<!doctype html>
925925
</tr>
926926
</table>
927927
</center>
928-
<script type="text/javascript" src="/LnB9Yai2/mtp86lj/jSfjLOV/Q1/aruiXJNNYbG7/ADNEAQ/Nw/FyO0NlXD8"></script>
929928
</body>
930929
931930
</html>`

0 commit comments

Comments
 (0)