Skip to content

Commit 1a5b446

Browse files
authored
Merge pull request #353 from authorizerdev/add-get-user-by-email
[server] add ability to get user by email
2 parents 4e7074d + 930c934 commit 1a5b446

File tree

5 files changed

+63
-17
lines changed

5 files changed

+63
-17
lines changed

server/graph/generated/generated.go

Lines changed: 12 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

server/graph/model/models_gen.go

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

server/graph/schema.graphqls

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -537,7 +537,8 @@ input ResendOTPRequest {
537537
}
538538

539539
input GetUserRequest {
540-
id: String!
540+
id: String
541+
email: String
541542
}
542543

543544
type Mutation {

server/resolvers/user.go

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package resolvers
33
import (
44
"context"
55
"fmt"
6+
"strings"
67

78
log "github.com/sirupsen/logrus"
89

@@ -20,17 +21,28 @@ func UserResolver(ctx context.Context, params model.GetUserRequest) (*model.User
2021
log.Debug("Failed to get GinContext: ", err)
2122
return nil, err
2223
}
23-
2424
if !token.IsSuperAdmin(gc) {
2525
log.Debug("Not logged in as super admin.")
2626
return nil, fmt.Errorf("unauthorized")
2727
}
28-
29-
res, err := db.Provider.GetUserByID(ctx, params.ID)
30-
if err != nil {
31-
log.Debug("Failed to get users: ", err)
32-
return nil, err
28+
// Try getting user by ID
29+
if params.ID != nil && strings.Trim(*params.ID, " ") != "" {
30+
res, err := db.Provider.GetUserByID(ctx, *params.ID)
31+
if err != nil {
32+
log.Debug("Failed to get users by ID: ", err)
33+
return nil, err
34+
}
35+
return res.AsAPIUser(), nil
3336
}
34-
35-
return res.AsAPIUser(), nil
37+
// Try getting user by email
38+
if params.Email != nil && strings.Trim(*params.Email, " ") != "" {
39+
res, err := db.Provider.GetUserByEmail(ctx, *params.Email)
40+
if err != nil {
41+
log.Debug("Failed to get users by email: ", err)
42+
return nil, err
43+
}
44+
return res.AsAPIUser(), nil
45+
}
46+
// Return error if no params are provided
47+
return nil, fmt.Errorf("invalid params, user id or email is required")
3648
}

server/test/user_test.go

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"github.com/authorizerdev/authorizer/server/crypto"
99
"github.com/authorizerdev/authorizer/server/graph/model"
1010
"github.com/authorizerdev/authorizer/server/memorystore"
11+
"github.com/authorizerdev/authorizer/server/refs"
1112
"github.com/authorizerdev/authorizer/server/resolvers"
1213
"github.com/stretchr/testify/assert"
1314
)
@@ -26,7 +27,7 @@ func userTest(t *testing.T, s TestSetup) {
2627
assert.NotEmpty(t, res.User)
2728

2829
userRes, err := resolvers.UserResolver(ctx, model.GetUserRequest{
29-
ID: res.User.ID,
30+
ID: &res.User.ID,
3031
})
3132
assert.Nil(t, userRes)
3233
assert.NotNil(t, err, "unauthorized")
@@ -36,14 +37,36 @@ func userTest(t *testing.T, s TestSetup) {
3637
h, err := crypto.EncryptPassword(adminSecret)
3738
assert.Nil(t, err)
3839
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", constants.AdminCookieName, h))
39-
40+
// Should throw error for invalid params
41+
userRes, err = resolvers.UserResolver(ctx, model.GetUserRequest{})
42+
assert.Nil(t, userRes)
43+
assert.NotNil(t, err, "invalid params, user id or email is required")
44+
// Should throw error for invalid params with empty id
45+
userRes, err = resolvers.UserResolver(ctx, model.GetUserRequest{
46+
ID: refs.NewStringRef(" "),
47+
})
48+
assert.Nil(t, userRes)
49+
assert.NotNil(t, err, "invalid params, user id or email is required")
50+
// Should throw error for invalid params with empty email
51+
userRes, err = resolvers.UserResolver(ctx, model.GetUserRequest{
52+
Email: refs.NewStringRef(" "),
53+
})
54+
assert.Nil(t, userRes)
55+
assert.NotNil(t, err, "invalid params, user id or email is required")
56+
// Should get user by id
4057
userRes, err = resolvers.UserResolver(ctx, model.GetUserRequest{
41-
ID: res.User.ID,
58+
ID: &res.User.ID,
59+
})
60+
assert.Nil(t, err)
61+
assert.Equal(t, res.User.ID, userRes.ID)
62+
assert.Equal(t, email, userRes.Email)
63+
// Should get user by email
64+
userRes, err = resolvers.UserResolver(ctx, model.GetUserRequest{
65+
Email: &email,
4266
})
4367
assert.Nil(t, err)
4468
assert.Equal(t, res.User.ID, userRes.ID)
4569
assert.Equal(t, email, userRes.Email)
46-
4770
cleanData(email)
4871
})
4972
}

0 commit comments

Comments
 (0)