From 05ab45b5b839f6c83958571b69567b9dd83236ef Mon Sep 17 00:00:00 2001 From: David Barroso Date: Thu, 13 Jun 2024 14:35:02 +0200 Subject: [PATCH] fix: remove email from required fields as some users may not have one (#529) Fixes #526 --- go/api/openapi.yaml | 1 - go/api/server.gen.go | 52 +++++------ go/api/types.gen.go | 4 +- go/controller/main_test.go | 5 ++ .../post_signin_email_password_test.go | 8 +- go/controller/post_signin_pat_test.go | 5 +- .../post_signup_email_password_test.go | 11 +-- .../post_signup_webauthn_verify_test.go | 5 +- go/controller/post_token_test.go | 10 +-- go/controller/workflows.go | 18 ++-- package.json | 3 +- pnpm-lock.yaml | 86 +++---------------- 12 files changed, 79 insertions(+), 129 deletions(-) diff --git a/go/api/openapi.yaml b/go/api/openapi.yaml index a4380c4a3..65a81ed7c 100644 --- a/go/api/openapi.yaml +++ b/go/api/openapi.yaml @@ -559,7 +559,6 @@ components: - createdAt - defaultRole - displayName - - email - emailVerified - id - isAnonymous diff --git a/go/api/server.gen.go b/go/api/server.gen.go index 915aea79c..80a53f796 100644 --- a/go/api/server.gen.go +++ b/go/api/server.gen.go @@ -1152,32 +1152,32 @@ var swaggerSpec = []string{ "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", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/go/api/types.gen.go b/go/api/types.gen.go index 47af76c39..aa3bc5566 100644 --- a/go/api/types.gen.go +++ b/go/api/types.gen.go @@ -204,8 +204,8 @@ type User struct { DisplayName string `json:"displayName"` // Email A valid email - Email openapi_types.Email `json:"email"` - EmailVerified bool `json:"emailVerified"` + Email *openapi_types.Email `json:"email,omitempty"` + EmailVerified bool `json:"emailVerified"` // Id Id of the user Id string `json:"id"` diff --git a/go/controller/main_test.go b/go/controller/main_test.go index afe18954d..4f1e10ada 100644 --- a/go/controller/main_test.go +++ b/go/controller/main_test.go @@ -2,6 +2,7 @@ package controller_test import ( "context" + "encoding/json" "net/url" "strings" "testing" @@ -245,6 +246,10 @@ func assertRequest[T any, U any]( cmpopts.IgnoreFields(api.Session{}, "RefreshToken", "AccessToken"), //nolint:exhaustruct }, options...) + if _, err := json.Marshal(resp); err != nil { + t.Fatalf("failed to marshal response: %v", err) + } + if diff := cmp.Diff( resp, expectedResponse, cmpopts..., diff --git a/go/controller/post_signin_email_password_test.go b/go/controller/post_signin_email_password_test.go index 36e63052b..968942e41 100644 --- a/go/controller/post_signin_email_password_test.go +++ b/go/controller/post_signin_email_password_test.go @@ -13,10 +13,10 @@ import ( "github.com/nhost/hasura-auth/go/controller" "github.com/nhost/hasura-auth/go/controller/mock" "github.com/nhost/hasura-auth/go/sql" + "github.com/oapi-codegen/runtime/types" "go.uber.org/mock/gomock" ) -//nolint:dupl func getSigninUser(userID uuid.UUID) sql.AuthUser { //nolint:exhaustruct return sql.AuthUser{ @@ -115,7 +115,7 @@ func TestPostSigninEmailPassword(t *testing.T) { //nolint:maintidx CreatedAt: time.Now(), DefaultRole: "user", DisplayName: "Jane Doe", - Email: "jane@acme.com", + Email: ptr(types.Email("jane@acme.com")), EmailVerified: true, Id: "db477732-48fa-4289-b694-2886a646b6eb", IsAnonymous: false, @@ -220,7 +220,7 @@ func TestPostSigninEmailPassword(t *testing.T) { //nolint:maintidx CreatedAt: time.Now(), DefaultRole: "user", DisplayName: "Jane Doe", - Email: "jane@acme.com", + Email: ptr(types.Email("jane@acme.com")), EmailVerified: true, Id: "db477732-48fa-4289-b694-2886a646b6eb", IsAnonymous: false, @@ -445,7 +445,7 @@ func TestPostSigninEmailPassword(t *testing.T) { //nolint:maintidx CreatedAt: time.Now(), DefaultRole: "user", DisplayName: "Jane Doe", - Email: "jane@acme.com", + Email: ptr(types.Email("jane@acme.com")), EmailVerified: false, Id: "db477732-48fa-4289-b694-2886a646b6eb", IsAnonymous: false, diff --git a/go/controller/post_signin_pat_test.go b/go/controller/post_signin_pat_test.go index 49c660c78..049a1903e 100644 --- a/go/controller/post_signin_pat_test.go +++ b/go/controller/post_signin_pat_test.go @@ -13,6 +13,7 @@ import ( "github.com/nhost/hasura-auth/go/controller" "github.com/nhost/hasura-auth/go/controller/mock" "github.com/nhost/hasura-auth/go/sql" + "github.com/oapi-codegen/runtime/types" "go.uber.org/mock/gomock" ) @@ -81,7 +82,7 @@ func TestPostSigninPat(t *testing.T) { //nolint:maintidx CreatedAt: time.Now(), DefaultRole: "user", DisplayName: "Jane Doe", - Email: "jane@acme.com", + Email: ptr(types.Email("jane@acme.com")), EmailVerified: true, Id: "db477732-48fa-4289-b694-2886a646b6eb", IsAnonymous: false, @@ -188,7 +189,7 @@ func TestPostSigninPat(t *testing.T) { //nolint:maintidx CreatedAt: time.Now(), DefaultRole: "user", DisplayName: "Jane Doe", - Email: "jane@acme.com", + Email: ptr(types.Email("jane@acme.com")), EmailVerified: true, Id: "db477732-48fa-4289-b694-2886a646b6eb", IsAnonymous: false, diff --git a/go/controller/post_signup_email_password_test.go b/go/controller/post_signup_email_password_test.go index 42b05de7c..0fddfba66 100644 --- a/go/controller/post_signup_email_password_test.go +++ b/go/controller/post_signup_email_password_test.go @@ -17,6 +17,7 @@ import ( "github.com/nhost/hasura-auth/go/notifications" "github.com/nhost/hasura-auth/go/sql" "github.com/nhost/hasura-auth/go/testhelpers" + "github.com/oapi-codegen/runtime/types" "go.uber.org/mock/gomock" ) @@ -86,7 +87,7 @@ func TestPostSignupEmailPassword(t *testing.T) { //nolint:maintidx CreatedAt: time.Now(), DefaultRole: "user", DisplayName: "jane@acme.com", - Email: "jane@acme.com", + Email: ptr(types.Email("jane@acme.com")), EmailVerified: false, Id: "db477732-48fa-4289-b694-2886a646b6eb", IsAnonymous: false, @@ -188,7 +189,7 @@ func TestPostSignupEmailPassword(t *testing.T) { //nolint:maintidx CreatedAt: time.Now(), DefaultRole: "me", DisplayName: "Jane Doe", - Email: "jane@acme.com", + Email: ptr(types.Email("jane@acme.com")), EmailVerified: false, Id: "db477732-48fa-4289-b694-2886a646b6eb", IsAnonymous: false, @@ -643,7 +644,7 @@ func TestPostSignupEmailPassword(t *testing.T) { //nolint:maintidx CreatedAt: time.Now(), DefaultRole: "user", DisplayName: "jane@acme.com", - Email: "jane@acme.com", + Email: ptr(types.Email("jane@acme.com")), EmailVerified: false, Id: "db477732-48fa-4289-b694-2886a646b6eb", IsAnonymous: false, @@ -779,7 +780,7 @@ func TestPostSignupEmailPassword(t *testing.T) { //nolint:maintidx CreatedAt: time.Now(), DefaultRole: "user", DisplayName: "jane@acme.com", - Email: "jane@acme.com", + Email: ptr(types.Email("jane@acme.com")), EmailVerified: false, Id: "db477732-48fa-4289-b694-2886a646b6eb", IsAnonymous: false, @@ -874,7 +875,7 @@ func TestPostSignupEmailPassword(t *testing.T) { //nolint:maintidx CreatedAt: time.Now(), DefaultRole: "user", DisplayName: "jane@acme.com", - Email: "jane@acme.com", + Email: ptr(types.Email("jane@acme.com")), EmailVerified: false, Id: "db477732-48fa-4289-b694-2886a646b6eb", IsAnonymous: false, diff --git a/go/controller/post_signup_webauthn_verify_test.go b/go/controller/post_signup_webauthn_verify_test.go index dc8645420..ad22f4605 100644 --- a/go/controller/post_signup_webauthn_verify_test.go +++ b/go/controller/post_signup_webauthn_verify_test.go @@ -18,6 +18,7 @@ import ( "github.com/nhost/hasura-auth/go/notifications" "github.com/nhost/hasura-auth/go/sql" "github.com/nhost/hasura-auth/go/testhelpers" + "github.com/oapi-codegen/runtime/types" "go.uber.org/mock/gomock" ) @@ -223,7 +224,7 @@ func TestPostSignupWebauthnVerify(t *testing.T) { //nolint:maintidx CreatedAt: time.Now(), DefaultRole: "user", DisplayName: "Jane Doe", - Email: "jane@acme.com", + Email: ptr(types.Email("jane@acme.com")), EmailVerified: false, Id: "cf91d1bc-875e-49bc-897f-fbccf32ede11", IsAnonymous: false, @@ -319,7 +320,7 @@ func TestPostSignupWebauthnVerify(t *testing.T) { //nolint:maintidx CreatedAt: time.Now(), DefaultRole: "user", DisplayName: "Jane Doe", - Email: "jane@acme.com", + Email: ptr(types.Email("jane@acme.com")), EmailVerified: false, Id: "cf91d1bc-875e-49bc-897f-fbccf32ede11", IsAnonymous: false, diff --git a/go/controller/post_token_test.go b/go/controller/post_token_test.go index 6f8453f2a..12ab4891e 100644 --- a/go/controller/post_token_test.go +++ b/go/controller/post_token_test.go @@ -14,10 +14,10 @@ import ( "github.com/nhost/hasura-auth/go/controller" "github.com/nhost/hasura-auth/go/controller/mock" "github.com/nhost/hasura-auth/go/sql" + "github.com/oapi-codegen/runtime/types" "go.uber.org/mock/gomock" ) -//nolint:dupl func getAnonymousUser(userID uuid.UUID) sql.AuthUser { //nolint:exhaustruct return sql.AuthUser{ @@ -31,9 +31,9 @@ func getAnonymousUser(userID uuid.UUID) sql.AuthUser { DisplayName: "Anonymous User", AvatarUrl: "", Locale: "en", - Email: sql.Text(""), + Email: pgtype.Text{}, PhoneNumber: pgtype.Text{}, - PasswordHash: sql.Text(""), + PasswordHash: pgtype.Text{}, EmailVerified: false, PhoneNumberVerified: false, NewEmail: pgtype.Text{}, @@ -105,7 +105,7 @@ func TestPostToken(t *testing.T) { //nolint:maintidx CreatedAt: time.Now(), DefaultRole: "user", DisplayName: "Jane Doe", - Email: "jane@acme.com", + Email: ptr(types.Email("jane@acme.com")), EmailVerified: true, Id: "db477732-48fa-4289-b694-2886a646b6eb", IsAnonymous: false, @@ -188,7 +188,7 @@ func TestPostToken(t *testing.T) { //nolint:maintidx CreatedAt: time.Now(), DefaultRole: "anonymous", DisplayName: "Anonymous User", - Email: "", + Email: nil, EmailVerified: false, Id: "db477732-48fa-4289-b694-2886a646b6eb", IsAnonymous: true, diff --git a/go/controller/workflows.go b/go/controller/workflows.go index acd0d5820..ad4cbda07 100644 --- a/go/controller/workflows.go +++ b/go/controller/workflows.go @@ -296,6 +296,14 @@ func (wf *Workflows) GetUserByRefreshTokenHash( return user, nil } +func pgtypeTextToOAPIEmail(pgemail pgtype.Text) *types.Email { + var email *types.Email + if pgemail.Valid { + email = ptr(types.Email(pgemail.String)) + } + return email +} + func (wf *Workflows) UpdateSession( //nolint:funlen ctx context.Context, user sql.AuthUser, @@ -350,7 +358,7 @@ func (wf *Workflows) UpdateSession( //nolint:funlen CreatedAt: user.CreatedAt.Time, DefaultRole: user.DefaultRole, DisplayName: user.DisplayName, - Email: types.Email(user.Email.String), + Email: pgtypeTextToOAPIEmail(user.Email), EmailVerified: user.EmailVerified, Id: user.ID.String(), IsAnonymous: user.IsAnonymous, @@ -413,7 +421,7 @@ func (wf *Workflows) NewSession( CreatedAt: user.CreatedAt.Time, DefaultRole: user.DefaultRole, DisplayName: user.DisplayName, - Email: types.Email(user.Email.String), + Email: pgtypeTextToOAPIEmail(user.Email), EmailVerified: user.EmailVerified, Id: user.ID.String(), IsAnonymous: false, @@ -729,7 +737,7 @@ func (wf *Workflows) SignupUserWithRefreshToken( //nolint:funlen CreatedAt: time.Now(), DefaultRole: *options.DefaultRole, DisplayName: deptr(options.DisplayName), - Email: types.Email(email), + Email: ptr(types.Email(email)), EmailVerified: false, Id: resp.UserID.String(), IsAnonymous: false, @@ -862,7 +870,7 @@ func (wf *Workflows) SignupUserWithSecurityKeyAndRefreshToken( //nolint:funlen CreatedAt: time.Now(), DefaultRole: *options.DefaultRole, DisplayName: deptr(options.DisplayName), - Email: types.Email(email), + Email: ptr(types.Email(email)), EmailVerified: false, Id: userID.String(), IsAnonymous: false, @@ -931,7 +939,7 @@ func (wf *Workflows) SignupUserWithSecurityKey( //nolint:funlen CreatedAt: time.Now(), DefaultRole: *options.DefaultRole, DisplayName: deptr(options.DisplayName), - Email: types.Email(email), + Email: ptr(types.Email(email)), EmailVerified: false, Id: userID.String(), IsAnonymous: false, diff --git a/package.json b/package.json index 7f81bb5be..d11005e54 100644 --- a/package.json +++ b/package.json @@ -170,7 +170,8 @@ "follow-redirects@<=1.15.5": ">=1.15.6", "express@<4.19.2": ">=4.19.2", "execa@<=0.10.0": ">=2.0.0", - "pug@<=3.0.2": ">=3.0.3" + "pug@<=3.0.2": ">=3.0.3", + "braces@<3.0.3": ">=3.0.3" } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f8633d18a..b20e3a636 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -21,6 +21,7 @@ overrides: express@<4.19.2: '>=4.19.2' execa@<=0.10.0: '>=2.0.0' pug@<=3.0.2: '>=3.0.3' + braces@<3.0.3: '>=3.0.3' dependencies: '@djgrant/postgres-migrations': @@ -3564,11 +3565,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /arr-flatten@1.1.0: - resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} - engines: {node: '>=0.10.0'} - dev: true - /arr-union@3.1.0: resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} engines: {node: '>=0.10.0'} @@ -3966,29 +3962,11 @@ packages: balanced-match: 1.0.2 concat-map: 0.0.1 - /braces@2.3.2: - resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} - engines: {node: '>=0.10.0'} - dependencies: - arr-flatten: 1.1.0 - array-unique: 0.3.2 - extend-shallow: 2.0.1 - fill-range: 4.0.0 - isobject: 3.0.1 - repeat-element: 1.1.4 - snapdragon: 0.8.2 - snapdragon-node: 2.1.1 - split-string: 3.1.0 - to-regex: 3.0.2 - transitivePeerDependencies: - - supports-color - dev: true - - /braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + /braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} dependencies: - fill-range: 7.0.1 + fill-range: 7.1.1 /breakword@1.0.6: resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} @@ -4285,7 +4263,7 @@ packages: engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.3 - braces: 3.0.2 + braces: 3.0.3 glob-parent: 5.1.2 is-binary-path: 2.1.0 is-glob: 4.0.3 @@ -6110,18 +6088,8 @@ packages: flat-cache: 2.0.1 dev: true - /fill-range@4.0.0: - resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} - engines: {node: '>=0.10.0'} - dependencies: - extend-shallow: 2.0.1 - is-number: 3.0.0 - repeat-string: 1.6.1 - to-regex-range: 2.1.1 - dev: true - - /fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + /fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 @@ -8990,7 +8958,7 @@ packages: dependencies: arr-diff: 4.0.0 array-unique: 0.3.2 - braces: 2.3.2 + braces: 3.0.3 define-property: 2.0.2 extend-shallow: 3.0.2 extglob: 2.0.4 @@ -9009,7 +8977,7 @@ packages: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} dependencies: - braces: 3.0.2 + braces: 3.0.3 picomatch: 2.3.1 /mime-db@1.52.0: @@ -10365,16 +10333,6 @@ packages: resolution: {integrity: sha512-O3vsMYfWighyFbTd8hk8VaSj9UAGENxAtX+//ugIst2RMk5e03h6RoIS+0ylsFxY1gvmPuAY/PO4It+gPEeySA==} dev: true - /repeat-element@1.1.4: - resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} - engines: {node: '>=0.10.0'} - dev: true - - /repeat-string@1.6.1: - resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} - engines: {node: '>=0.10'} - dev: true - /request-compose@2.1.6: resolution: {integrity: sha512-S07L+2VbJB32WddD/o/PnYGKym63zLVbymygVWXvt8L79VAngcjAxhHaGuFOICLxEV90EasEPzqPKKHPspXP8w==} engines: {node: '>=12.0.0'} @@ -10834,22 +10792,6 @@ packages: tslib: 2.4.1 dev: true - /snapdragon-node@2.1.1: - resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} - engines: {node: '>=0.10.0'} - dependencies: - define-property: 1.0.0 - isobject: 3.0.1 - snapdragon-util: 3.0.1 - dev: true - - /snapdragon-util@3.0.1: - resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} - engines: {node: '>=0.10.0'} - dependencies: - kind-of: 3.2.2 - dev: true - /snapdragon@0.8.2: resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} engines: {node: '>=0.10.0'} @@ -11418,14 +11360,6 @@ packages: kind-of: 3.2.2 dev: true - /to-regex-range@2.1.1: - resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} - engines: {node: '>=0.10.0'} - dependencies: - is-number: 3.0.0 - repeat-string: 1.6.1 - dev: true - /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -11930,7 +11864,7 @@ packages: /urlpattern-polyfill@6.0.2: resolution: {integrity: sha512-5vZjFlH9ofROmuWmXM9yj2wljYKgWstGwe8YTyiqM7hVum/g9LyCizPZtb3UqsuppVwety9QJmfc42VggLpTgg==} dependencies: - braces: 3.0.2 + braces: 3.0.3 dev: true /urlpattern-polyfill@8.0.2: