[server] add ability to get user by email
This commit is contained in:
parent
4e7074d75b
commit
930c934fdb
|
@ -2630,7 +2630,8 @@ input ResendOTPRequest {
|
||||||
}
|
}
|
||||||
|
|
||||||
input GetUserRequest {
|
input GetUserRequest {
|
||||||
id: String!
|
id: String
|
||||||
|
email: String
|
||||||
}
|
}
|
||||||
|
|
||||||
type Mutation {
|
type Mutation {
|
||||||
|
@ -15369,7 +15370,7 @@ func (ec *executionContext) unmarshalInputGetUserRequest(ctx context.Context, ob
|
||||||
asMap[k] = v
|
asMap[k] = v
|
||||||
}
|
}
|
||||||
|
|
||||||
fieldsInOrder := [...]string{"id"}
|
fieldsInOrder := [...]string{"id", "email"}
|
||||||
for _, k := range fieldsInOrder {
|
for _, k := range fieldsInOrder {
|
||||||
v, ok := asMap[k]
|
v, ok := asMap[k]
|
||||||
if !ok {
|
if !ok {
|
||||||
|
@ -15380,7 +15381,15 @@ func (ec *executionContext) unmarshalInputGetUserRequest(ctx context.Context, ob
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("id"))
|
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("id"))
|
||||||
it.ID, err = ec.unmarshalNString2string(ctx, v)
|
it.ID, err = ec.unmarshalOString2ᚖstring(ctx, v)
|
||||||
|
if err != nil {
|
||||||
|
return it, err
|
||||||
|
}
|
||||||
|
case "email":
|
||||||
|
var err error
|
||||||
|
|
||||||
|
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("email"))
|
||||||
|
it.Email, err = ec.unmarshalOString2ᚖstring(ctx, v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return it, err
|
return it, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -144,7 +144,8 @@ type GenerateJWTKeysResponse struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
type GetUserRequest struct {
|
type GetUserRequest struct {
|
||||||
ID string `json:"id"`
|
ID *string `json:"id"`
|
||||||
|
Email *string `json:"email"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type InviteMemberInput struct {
|
type InviteMemberInput struct {
|
||||||
|
|
|
@ -537,7 +537,8 @@ input ResendOTPRequest {
|
||||||
}
|
}
|
||||||
|
|
||||||
input GetUserRequest {
|
input GetUserRequest {
|
||||||
id: String!
|
id: String
|
||||||
|
email: String
|
||||||
}
|
}
|
||||||
|
|
||||||
type Mutation {
|
type Mutation {
|
||||||
|
|
|
@ -3,6 +3,7 @@ package resolvers
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
|
|
||||||
|
@ -20,17 +21,28 @@ func UserResolver(ctx context.Context, params model.GetUserRequest) (*model.User
|
||||||
log.Debug("Failed to get GinContext: ", err)
|
log.Debug("Failed to get GinContext: ", err)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if !token.IsSuperAdmin(gc) {
|
if !token.IsSuperAdmin(gc) {
|
||||||
log.Debug("Not logged in as super admin.")
|
log.Debug("Not logged in as super admin.")
|
||||||
return nil, fmt.Errorf("unauthorized")
|
return nil, fmt.Errorf("unauthorized")
|
||||||
}
|
}
|
||||||
|
// Try getting user by ID
|
||||||
res, err := db.Provider.GetUserByID(ctx, params.ID)
|
if params.ID != nil && strings.Trim(*params.ID, " ") != "" {
|
||||||
if err != nil {
|
res, err := db.Provider.GetUserByID(ctx, *params.ID)
|
||||||
log.Debug("Failed to get users: ", err)
|
if err != nil {
|
||||||
return nil, err
|
log.Debug("Failed to get users by ID: ", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return res.AsAPIUser(), nil
|
||||||
}
|
}
|
||||||
|
// Try getting user by email
|
||||||
return res.AsAPIUser(), nil
|
if params.Email != nil && strings.Trim(*params.Email, " ") != "" {
|
||||||
|
res, err := db.Provider.GetUserByEmail(ctx, *params.Email)
|
||||||
|
if err != nil {
|
||||||
|
log.Debug("Failed to get users by email: ", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return res.AsAPIUser(), nil
|
||||||
|
}
|
||||||
|
// Return error if no params are provided
|
||||||
|
return nil, fmt.Errorf("invalid params, user id or email is required")
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ import (
|
||||||
"github.com/authorizerdev/authorizer/server/crypto"
|
"github.com/authorizerdev/authorizer/server/crypto"
|
||||||
"github.com/authorizerdev/authorizer/server/graph/model"
|
"github.com/authorizerdev/authorizer/server/graph/model"
|
||||||
"github.com/authorizerdev/authorizer/server/memorystore"
|
"github.com/authorizerdev/authorizer/server/memorystore"
|
||||||
|
"github.com/authorizerdev/authorizer/server/refs"
|
||||||
"github.com/authorizerdev/authorizer/server/resolvers"
|
"github.com/authorizerdev/authorizer/server/resolvers"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
@ -26,7 +27,7 @@ func userTest(t *testing.T, s TestSetup) {
|
||||||
assert.NotEmpty(t, res.User)
|
assert.NotEmpty(t, res.User)
|
||||||
|
|
||||||
userRes, err := resolvers.UserResolver(ctx, model.GetUserRequest{
|
userRes, err := resolvers.UserResolver(ctx, model.GetUserRequest{
|
||||||
ID: res.User.ID,
|
ID: &res.User.ID,
|
||||||
})
|
})
|
||||||
assert.Nil(t, userRes)
|
assert.Nil(t, userRes)
|
||||||
assert.NotNil(t, err, "unauthorized")
|
assert.NotNil(t, err, "unauthorized")
|
||||||
|
@ -36,14 +37,36 @@ func userTest(t *testing.T, s TestSetup) {
|
||||||
h, err := crypto.EncryptPassword(adminSecret)
|
h, err := crypto.EncryptPassword(adminSecret)
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", constants.AdminCookieName, h))
|
req.Header.Set("Cookie", fmt.Sprintf("%s=%s", constants.AdminCookieName, h))
|
||||||
|
// Should throw error for invalid params
|
||||||
|
userRes, err = resolvers.UserResolver(ctx, model.GetUserRequest{})
|
||||||
|
assert.Nil(t, userRes)
|
||||||
|
assert.NotNil(t, err, "invalid params, user id or email is required")
|
||||||
|
// Should throw error for invalid params with empty id
|
||||||
userRes, err = resolvers.UserResolver(ctx, model.GetUserRequest{
|
userRes, err = resolvers.UserResolver(ctx, model.GetUserRequest{
|
||||||
ID: res.User.ID,
|
ID: refs.NewStringRef(" "),
|
||||||
|
})
|
||||||
|
assert.Nil(t, userRes)
|
||||||
|
assert.NotNil(t, err, "invalid params, user id or email is required")
|
||||||
|
// Should throw error for invalid params with empty email
|
||||||
|
userRes, err = resolvers.UserResolver(ctx, model.GetUserRequest{
|
||||||
|
Email: refs.NewStringRef(" "),
|
||||||
|
})
|
||||||
|
assert.Nil(t, userRes)
|
||||||
|
assert.NotNil(t, err, "invalid params, user id or email is required")
|
||||||
|
// Should get user by id
|
||||||
|
userRes, err = resolvers.UserResolver(ctx, model.GetUserRequest{
|
||||||
|
ID: &res.User.ID,
|
||||||
|
})
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.Equal(t, res.User.ID, userRes.ID)
|
||||||
|
assert.Equal(t, email, userRes.Email)
|
||||||
|
// Should get user by email
|
||||||
|
userRes, err = resolvers.UserResolver(ctx, model.GetUserRequest{
|
||||||
|
Email: &email,
|
||||||
})
|
})
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
assert.Equal(t, res.User.ID, userRes.ID)
|
assert.Equal(t, res.User.ID, userRes.ID)
|
||||||
assert.Equal(t, email, userRes.Email)
|
assert.Equal(t, email, userRes.Email)
|
||||||
|
|
||||||
cleanData(email)
|
cleanData(email)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user