diff --git a/server/graph/schema.graphqls b/server/graph/schema.graphqls index fdb2f50..9fc5919 100644 --- a/server/graph/schema.graphqls +++ b/server/graph/schema.graphqls @@ -610,6 +610,7 @@ input GetUserRequest { } type Mutation { + is_registered(email: String): AuthResponse! # custom api signup(params: SignUpInput!): AuthResponse! # Deprecated from v1.2.0 mobile_signup(params: MobileSignUpInput): AuthResponse! diff --git a/server/graph/schema.resolvers.go b/server/graph/schema.resolvers.go index a90930b..bec4ae3 100644 --- a/server/graph/schema.resolvers.go +++ b/server/graph/schema.resolvers.go @@ -12,6 +12,11 @@ import ( "github.com/authorizerdev/authorizer/server/resolvers" ) +// Signup is the resolver for the signup field. +func (r *queryResolver) IsRegistered(ctx context.Context, email string) (*model.AuthResponse, error) { + return resolvers.IsRegisteredResolver(ctx, email) +} + // Signup is the resolver for the signup field. func (r *mutationResolver) Signup(ctx context.Context, params model.SignUpInput) (*model.AuthResponse, error) { return resolvers.SignupResolver(ctx, params) diff --git a/server/resolvers/is_registered.go b/server/resolvers/is_registered.go new file mode 100644 index 0000000..92bd8ec --- /dev/null +++ b/server/resolvers/is_registered.go @@ -0,0 +1,44 @@ +package resolvers + +import ( + "context" + "fmt" + "github.com/authorizerdev/authorizer/server/db" + "github.com/authorizerdev/authorizer/server/graph/model" + "github.com/authorizerdev/authorizer/server/refs" + log "github.com/sirupsen/logrus" + "strings" +) + +// IsRegisteredResolver is a resolver for registered checkup query +func IsRegisteredResolver(ctx context.Context, email string) (*model.AuthResponse, error) { + var res *model.AuthResponse + email = strings.TrimSpace(refs.StringValue(&email)) + if email == "" { + log.Debug("Email is required") + return res, fmt.Errorf(`email is required`) + } + + log := log.WithField("email", email) + + // find user with email + existingUser, err := db.Provider.GetUserByEmail(ctx, email) + if err != nil { + log.Debug("Failed to get user by email: ", err) + } + + if existingUser != nil { + res.Message = "registered" + if existingUser.EmailVerifiedAt != nil { + res.Message = "verified" + log.Debug("Email is already verified and signed up.") + return res, fmt.Errorf(`%s has already signed up`, email) + } else if existingUser.ID != "" && existingUser.EmailVerifiedAt == nil { + res.Message = "not verified" + log.Debug("Email is already signed up. Verification pending...") + return res, fmt.Errorf("%s has already signed up. please complete the email verification process or reset the password", email) + } + } + + return res, nil +}