@@ -36,24 +36,29 @@ func VerifyOtpResolver(ctx context.Context, params model.VerifyOTPRequest) (*mod
3636 return res , fmt .Errorf (`invalid session: %s` , err .Error ())
3737 }
3838
39- if refs .StringValue (params .Email ) == "" && refs .StringValue (params .PhoneNumber ) == "" {
39+ email := strings .TrimSpace (refs .StringValue (params .Email ))
40+ phoneNumber := strings .TrimSpace (refs .StringValue (params .PhoneNumber ))
41+ if email == "" && phoneNumber == "" {
4042 log .Debug ("Email or phone number is required" )
41- return res , fmt .Errorf (`email or phone_number is required` )
42- }
43- currentField := models .FieldNameEmail
44- if refs .StringValue (params .Email ) == "" {
45- currentField = models .FieldNamePhoneNumber
43+ return res , fmt .Errorf (`email or phone number is required` )
4644 }
45+ isEmailVerification := email != ""
46+ isMobileVerification := phoneNumber != ""
4747 // Get user by email or phone number
4848 var user * models.User
49- if currentField == models . FieldNameEmail {
49+ if isEmailVerification {
5050 user , err = db .Provider .GetUserByEmail (ctx , refs .StringValue (params .Email ))
51+ if err != nil {
52+ log .Debug ("Failed to get user by email: " , err )
53+ }
5154 } else {
5255 user , err = db .Provider .GetUserByPhoneNumber (ctx , refs .StringValue (params .PhoneNumber ))
56+ if err != nil {
57+ log .Debug ("Failed to get user by phone number: " , err )
58+ }
5359 }
5460 if user == nil || err != nil {
55- log .Debug ("Failed to get user by email or phone number: " , err )
56- return res , err
61+ return res , fmt .Errorf (`user not found` )
5762 }
5863 // Verify OTP based on TOPT or OTP
5964 if refs .BoolValue (params .IsTotp ) {
@@ -78,14 +83,19 @@ func VerifyOtpResolver(ctx context.Context, params model.VerifyOTPRequest) (*mod
7883 }
7984 } else {
8085 var otp * models.OTP
81- if currentField == models . FieldNameEmail {
86+ if isEmailVerification {
8287 otp , err = db .Provider .GetOTPByEmail (ctx , refs .StringValue (params .Email ))
88+ if err != nil {
89+ log .Debug (`Failed to get otp request for email: ` , err .Error ())
90+ }
8391 } else {
8492 otp , err = db .Provider .GetOTPByPhoneNumber (ctx , refs .StringValue (params .PhoneNumber ))
93+ if err != nil {
94+ log .Debug (`Failed to get otp request for phone number: ` , err .Error ())
95+ }
8596 }
8697 if otp == nil && err != nil {
87- log .Debugf ("Failed to get otp request for %s: %s" , currentField , err .Error ())
88- return res , fmt .Errorf (`invalid %s: %s` , currentField , err .Error ())
98+ return res , fmt .Errorf (`OTP not found` )
8999 }
90100 if params .Otp != otp .Otp {
91101 log .Debug ("Failed to verify otp request: Incorrect value" )
@@ -104,10 +114,26 @@ func VerifyOtpResolver(ctx context.Context, params model.VerifyOTPRequest) (*mod
104114 return res , fmt .Errorf (`invalid session: %s` , err .Error ())
105115 }
106116
107- isSignUp := user .EmailVerifiedAt == nil && user .PhoneNumberVerifiedAt == nil
108- // TODO - Add Login method in DB when we introduce OTP for social media login
117+ isSignUp := false
118+ if user .EmailVerifiedAt == nil && isEmailVerification {
119+ isSignUp = true
120+ now := time .Now ().Unix ()
121+ user .EmailVerifiedAt = & now
122+ }
123+ if user .PhoneNumberVerifiedAt == nil && isMobileVerification {
124+ isSignUp = true
125+ now := time .Now ().Unix ()
126+ user .PhoneNumberVerifiedAt = & now
127+ }
128+ if isSignUp {
129+ user , err = db .Provider .UpdateUser (ctx , user )
130+ if err != nil {
131+ log .Debug ("Failed to update user: " , err )
132+ return res , err
133+ }
134+ }
109135 loginMethod := constants .AuthRecipeMethodBasicAuth
110- if currentField == models . FieldNamePhoneNumber {
136+ if isMobileVerification {
111137 loginMethod = constants .AuthRecipeMethodMobileOTP
112138 }
113139 roles := strings .Split (user .Roles , "," )
0 commit comments