@@ -12,6 +12,7 @@ import (
1212 "github.com/authorizerdev/authorizer/server/db/models"
1313 "github.com/authorizerdev/authorizer/server/graph/model"
1414 "github.com/authorizerdev/authorizer/server/memorystore"
15+ "github.com/authorizerdev/authorizer/server/refs"
1516 "github.com/gocql/gocql"
1617 "github.com/google/uuid"
1718)
@@ -30,6 +31,12 @@ func (p *provider) AddUser(ctx context.Context, user models.User) (models.User,
3031 user .Roles = defaultRoles
3132 }
3233
34+ if user .PhoneNumber != nil && strings .TrimSpace (refs .StringValue (user .PhoneNumber )) != "" {
35+ if u , _ := p .GetUserByPhoneNumber (ctx , refs .StringValue (user .PhoneNumber )); u != nil && u .ID != user .ID {
36+ return user , fmt .Errorf ("user with given phone number already exists" )
37+ }
38+ }
39+
3340 user .CreatedAt = time .Now ().Unix ()
3441 user .UpdatedAt = time .Now ().Unix ()
3542
@@ -83,6 +90,12 @@ func (p *provider) AddUser(ctx context.Context, user models.User) (models.User,
8390func (p * provider ) UpdateUser (ctx context.Context , user models.User ) (models.User , error ) {
8491 user .UpdatedAt = time .Now ().Unix ()
8592
93+ if user .PhoneNumber != nil && strings .TrimSpace (refs .StringValue (user .PhoneNumber )) != "" {
94+ if u , _ := p .GetUserByPhoneNumber (ctx , refs .StringValue (user .PhoneNumber )); u != nil && u .ID != user .ID {
95+ return user , fmt .Errorf ("user with given phone number already exists" )
96+ }
97+ }
98+
8699 bytes , err := json .Marshal (user )
87100 if err != nil {
88101 return user , err
@@ -299,3 +312,14 @@ func (p *provider) UpdateUsers(ctx context.Context, data map[string]interface{},
299312
300313 return nil
301314}
315+
316+ // GetUserByPhoneNumber to get user information from database using phone number
317+ func (p * provider ) GetUserByPhoneNumber (ctx context.Context , phoneNumber string ) (* models.User , error ) {
318+ var user models.User
319+ query := fmt .Sprintf ("SELECT id, email, email_verified_at, password, signup_methods, given_name, family_name, middle_name, nickname, birthdate, phone_number, phone_number_verified_at, picture, roles, revoked_timestamp, is_multi_factor_auth_enabled, created_at, updated_at FROM %s WHERE phone_number = '%s' LIMIT 1 ALLOW FILTERING" , KeySpace + "." + models .Collections .User , phoneNumber )
320+ err := p .db .Query (query ).Consistency (gocql .One ).Scan (& user .ID , & user .Email , & user .EmailVerifiedAt , & user .Password , & user .SignupMethods , & user .GivenName , & user .FamilyName , & user .MiddleName , & user .Nickname , & user .Birthdate , & user .PhoneNumber , & user .PhoneNumberVerifiedAt , & user .Picture , & user .Roles , & user .RevokedTimestamp , & user .IsMultiFactorAuthEnabled , & user .CreatedAt , & user .UpdatedAt )
321+ if err != nil {
322+ return nil , err
323+ }
324+ return & user , nil
325+ }
0 commit comments