diff --git a/server/db/user.go b/server/db/user.go index e6668d0..48c03f8 100644 --- a/server/db/user.go +++ b/server/db/user.go @@ -18,7 +18,7 @@ type User struct { ID string `gorm:"primaryKey;type:char(36)" json:"_id" bson:"_id"` Email string `gorm:"unique" json:"email" bson:"email"` - EmailVerifiedAt int64 `json:"email_verified_at" bson:"email_verified_at"` + EmailVerifiedAt *int64 `json:"email_verified_at" bson:"email_verified_at"` Password *string `gorm:"type:text" json:"password" bson:"password"` SignupMethods string `json:"signup_methods" bson:"signup_methods"` GivenName *string `json:"given_name" bson:"given_name"` diff --git a/server/handlers/oauth_callback.go b/server/handlers/oauth_callback.go index 2b0d96f..e7cddc3 100644 --- a/server/handlers/oauth_callback.go +++ b/server/handlers/oauth_callback.go @@ -206,7 +206,8 @@ func OAuthCallbackHandler() gin.HandlerFunc { } user.Roles = strings.Join(inputRoles, ",") - user.EmailVerifiedAt = time.Now().Unix() + now := time.Now().Unix() + user.EmailVerifiedAt = &now user, _ = db.Mgr.AddUser(user) } else { // user exists in db, check if method was google diff --git a/server/handlers/verify_email.go b/server/handlers/verify_email.go index fecdbe3..bdba17f 100644 --- a/server/handlers/verify_email.go +++ b/server/handlers/verify_email.go @@ -46,8 +46,9 @@ func VerifyEmailHandler() gin.HandlerFunc { } // update email_verified_at in users table - if user.EmailVerifiedAt <= 0 { - user.EmailVerifiedAt = time.Now().Unix() + if user.EmailVerifiedAt == nil { + now := time.Now().Unix() + user.EmailVerifiedAt = &now db.Mgr.UpdateUser(user) } // delete from verification table diff --git a/server/resolvers/login.go b/server/resolvers/login.go index 3ca8112..d01bcb5 100644 --- a/server/resolvers/login.go +++ b/server/resolvers/login.go @@ -36,7 +36,7 @@ func Login(ctx context.Context, params model.LoginInput) (*model.AuthResponse, e return res, fmt.Errorf(`user has not signed up email & password`) } - if user.EmailVerifiedAt <= 0 { + if user.EmailVerifiedAt == nil { return res, fmt.Errorf(`email not verified`) } diff --git a/server/resolvers/signup.go b/server/resolvers/signup.go index 6312007..436f997 100644 --- a/server/resolvers/signup.go +++ b/server/resolvers/signup.go @@ -54,10 +54,10 @@ func Signup(ctx context.Context, params model.SignUpInput) (*model.AuthResponse, log.Println("user with email " + params.Email + " not found") } - if existingUser.EmailVerifiedAt > 0 { + if existingUser.EmailVerifiedAt != nil { // email is verified return res, fmt.Errorf(`%s has already signed up`, params.Email) - } else if existingUser.ID != "" && existingUser.EmailVerifiedAt <= 0 { + } else if existingUser.ID != "" && existingUser.EmailVerifiedAt == nil { return res, fmt.Errorf("%s has already signed up. please complete the email verification process or reset the password", params.Email) } @@ -104,7 +104,8 @@ func Signup(ctx context.Context, params model.SignUpInput) (*model.AuthResponse, user.SignupMethods = enum.BasicAuth.String() if constants.DISABLE_EMAIL_VERIFICATION { - user.EmailVerifiedAt = time.Now().Unix() + now := time.Now().Unix() + user.EmailVerifiedAt = &now } user, err = db.Mgr.AddUser(user) if err != nil { diff --git a/server/resolvers/update_profile.go b/server/resolvers/update_profile.go index 6b832c0..a943422 100644 --- a/server/resolvers/update_profile.go +++ b/server/resolvers/update_profile.go @@ -123,7 +123,7 @@ func UpdateProfile(ctx context.Context, params model.UpdateProfileInput) (*model utils.DeleteCookie(gc) user.Email = newEmail - user.EmailVerifiedAt = 0 + user.EmailVerifiedAt = nil hasEmailChanged = true // insert verification request verificationType := enum.UpdateEmail.String() diff --git a/server/resolvers/update_user.go b/server/resolvers/update_user.go index 0446f21..93222de 100644 --- a/server/resolvers/update_user.go +++ b/server/resolvers/update_user.go @@ -84,7 +84,7 @@ func UpdateUser(ctx context.Context, params model.UpdateUserInput) (*model.User, utils.DeleteCookie(gc) user.Email = newEmail - user.EmailVerifiedAt = 0 + user.EmailVerifiedAt = nil // insert verification request verificationType := enum.UpdateEmail.String() token, err := utils.CreateVerificationToken(newEmail, verificationType) diff --git a/server/resolvers/verify_email.go b/server/resolvers/verify_email.go index 0a15e38..60bf4e1 100644 --- a/server/resolvers/verify_email.go +++ b/server/resolvers/verify_email.go @@ -37,7 +37,8 @@ func VerifyEmail(ctx context.Context, params model.VerifyEmailInput) (*model.Aut } // update email_verified_at in users table - user.EmailVerifiedAt = time.Now().Unix() + now := time.Now().Unix() + user.EmailVerifiedAt = &now db.Mgr.UpdateUser(user) // delete from verification table db.Mgr.DeleteVerificationRequest(verificationRequest) diff --git a/server/utils/get_res_user.go b/server/utils/get_res_user.go index 8b1d062..d235887 100644 --- a/server/utils/get_res_user.go +++ b/server/utils/get_res_user.go @@ -8,7 +8,7 @@ import ( ) func GetResUser(user db.User) *model.User { - isEmailVerified := user.EmailVerifiedAt > 0 + isEmailVerified := user.EmailVerifiedAt != nil isPhoneVerified := user.PhoneNumberVerifiedAt != nil return &model.User{ ID: user.ID,