diff --git a/server/db/models/model.go b/server/db/models/model.go index a0d5763..5061c41 100644 --- a/server/db/models/model.go +++ b/server/db/models/model.go @@ -2,14 +2,14 @@ package models // Collections / Tables available for authorizer in the database type CollectionList struct { - User string - VerificationRequest string - Session string - Env string - Webhook string - WebhookLog string - EmailTemplate string - OTP string + User string + VerificationRequest string + Session string + Env string + Webhook string + WebhookLog string + EmailTemplate string + OTP string SMSVerificationRequest string } @@ -18,14 +18,14 @@ var ( Prefix = "authorizer_" // Collections / Tables available for authorizer in the database (used for dbs other than gorm) Collections = CollectionList{ - User: Prefix + "users", - VerificationRequest: Prefix + "verification_requests", - Session: Prefix + "sessions", - Env: Prefix + "env", - Webhook: Prefix + "webhooks", - WebhookLog: Prefix + "webhook_logs", - EmailTemplate: Prefix + "email_templates", - OTP: Prefix + "otps", - SMSVerificationRequest: Prefix + "sms_verification_requests", + User: Prefix + "users", + VerificationRequest: Prefix + "verification_requests", + Session: Prefix + "sessions", + Env: Prefix + "env", + Webhook: Prefix + "webhooks", + WebhookLog: Prefix + "webhook_logs", + EmailTemplate: Prefix + "email_templates", + OTP: Prefix + "otps", + SMSVerificationRequest: Prefix + "sms_verification_requests", } ) diff --git a/server/db/models/sms_verification_requests.go b/server/db/models/sms_verification_requests.go index 2a70d5e..a938298 100644 --- a/server/db/models/sms_verification_requests.go +++ b/server/db/models/sms_verification_requests.go @@ -2,10 +2,10 @@ package models // SMS verification requests model for database type SMSVerificationRequest struct { - ID string `gorm:"primaryKey;type:char(36)" json:"_id" bson:"_id" cql:"id" dynamo:"id,hash"` - PhoneNumber string `gorm:"unique" json:"phone_number" bson:"phone_number" cql:"phone_number" dynamo:"phone_number" index:"phone_number,hash"` - Code string `json:"code" bson:"code" cql:"code" dynamo:"code"` - CodeExpiresAt int64 `json:"code_expires_at" bson:"code_expires_at" cql:"code_expires_at" dynamo:"code_expires_at"` - CreatedAt int64 `json:"created_at" bson:"created_at" cql:"created_at" dynamo:"created_at"` - UpdatedAt int64 `json:"updated_at" bson:"updated_at" cql:"updated_at" dynamo:"updated_at"` + ID string `gorm:"primaryKey;type:char(36)" json:"_id" bson:"_id" cql:"id" dynamo:"id,hash"` + PhoneNumber string `gorm:"unique" json:"phone_number" bson:"phone_number" cql:"phone_number" dynamo:"phone_number" index:"phone_number,hash"` + Code string `json:"code" bson:"code" cql:"code" dynamo:"code"` + CodeExpiresAt int64 `json:"code_expires_at" bson:"code_expires_at" cql:"code_expires_at" dynamo:"code_expires_at"` + CreatedAt int64 `json:"created_at" bson:"created_at" cql:"created_at" dynamo:"created_at"` + UpdatedAt int64 `json:"updated_at" bson:"updated_at" cql:"updated_at" dynamo:"updated_at"` } diff --git a/server/db/providers/arangodb/sms_verification_requests.go b/server/db/providers/arangodb/sms_verification_requests.go index 4dee5bd..6eb97b8 100644 --- a/server/db/providers/arangodb/sms_verification_requests.go +++ b/server/db/providers/arangodb/sms_verification_requests.go @@ -4,20 +4,19 @@ import ( "context" "github.com/authorizerdev/authorizer/server/db/models" - ) -// SMS verification Request -func (p *provider) UpsertSMSRequest(ctx context.Context, sms_code *models.SMSVerificationRequest) (*models.SMSVerificationRequest, error) { - return sms_code, nil +// UpsertSMSRequest adds/updates SMS verification request +func (p *provider) UpsertSMSRequest(ctx context.Context, smsRequest *models.SMSVerificationRequest) (*models.SMSVerificationRequest, error) { + return nil, nil } +// GetCodeByPhone to get code for a given phone number func (p *provider) GetCodeByPhone(ctx context.Context, phoneNumber string) (*models.SMSVerificationRequest, error) { - var sms_verification_request models.SMSVerificationRequest - - return &sms_verification_request, nil + return nil, nil } -func(p *provider) DeleteSMSRequest(ctx context.Context, smsRequest *models.SMSVerificationRequest) error { +// DeleteSMSRequest to delete SMS verification request +func (p *provider) DeleteSMSRequest(ctx context.Context, smsRequest *models.SMSVerificationRequest) error { return nil } diff --git a/server/db/providers/cassandradb/sms_verification_requests.go b/server/db/providers/cassandradb/sms_verification_requests.go index 3c67c1b..ddead30 100644 --- a/server/db/providers/cassandradb/sms_verification_requests.go +++ b/server/db/providers/cassandradb/sms_verification_requests.go @@ -4,20 +4,19 @@ import ( "context" "github.com/authorizerdev/authorizer/server/db/models" - ) -// SMS verification Request -func (p *provider) UpsertSMSRequest(ctx context.Context, sms_code *models.SMSVerificationRequest) (*models.SMSVerificationRequest, error) { - return sms_code, nil +// UpsertSMSRequest adds/updates SMS verification request +func (p *provider) UpsertSMSRequest(ctx context.Context, smsRequest *models.SMSVerificationRequest) (*models.SMSVerificationRequest, error) { + return nil, nil } +// GetCodeByPhone to get code for a given phone number func (p *provider) GetCodeByPhone(ctx context.Context, phoneNumber string) (*models.SMSVerificationRequest, error) { - var sms_verification_request models.SMSVerificationRequest - - return &sms_verification_request, nil + return nil, nil } -func(p *provider) DeleteSMSRequest(ctx context.Context, smsRequest *models.SMSVerificationRequest) error { +// DeleteSMSRequest to delete SMS verification request +func (p *provider) DeleteSMSRequest(ctx context.Context, smsRequest *models.SMSVerificationRequest) error { return nil } diff --git a/server/db/providers/couchbase/sms_verification_requests.go b/server/db/providers/couchbase/sms_verification_requests.go index 9201d73..0639179 100644 --- a/server/db/providers/couchbase/sms_verification_requests.go +++ b/server/db/providers/couchbase/sms_verification_requests.go @@ -4,20 +4,19 @@ import ( "context" "github.com/authorizerdev/authorizer/server/db/models" - ) -// SMS verification Request -func (p *provider) UpsertSMSRequest(ctx context.Context, sms_code *models.SMSVerificationRequest) (*models.SMSVerificationRequest, error) { - return sms_code, nil +// UpsertSMSRequest adds/updates SMS verification request +func (p *provider) UpsertSMSRequest(ctx context.Context, smsRequest *models.SMSVerificationRequest) (*models.SMSVerificationRequest, error) { + return nil, nil } +// GetCodeByPhone to get code for a given phone number func (p *provider) GetCodeByPhone(ctx context.Context, phoneNumber string) (*models.SMSVerificationRequest, error) { - var sms_verification_request models.SMSVerificationRequest - - return &sms_verification_request, nil + return nil, nil } -func(p *provider) DeleteSMSRequest(ctx context.Context, smsRequest *models.SMSVerificationRequest) error { +// DeleteSMSRequest to delete SMS verification request +func (p *provider) DeleteSMSRequest(ctx context.Context, smsRequest *models.SMSVerificationRequest) error { return nil } diff --git a/server/db/providers/dynamodb/sms_verification_requests.go b/server/db/providers/dynamodb/sms_verification_requests.go index bd47bce..6569a54 100644 --- a/server/db/providers/dynamodb/sms_verification_requests.go +++ b/server/db/providers/dynamodb/sms_verification_requests.go @@ -4,20 +4,19 @@ import ( "context" "github.com/authorizerdev/authorizer/server/db/models" - ) -// SMS verification Request -func (p *provider) UpsertSMSRequest(ctx context.Context, sms_code *models.SMSVerificationRequest) (*models.SMSVerificationRequest, error) { - return sms_code, nil +// UpsertSMSRequest adds/updates SMS verification request +func (p *provider) UpsertSMSRequest(ctx context.Context, smsRequest *models.SMSVerificationRequest) (*models.SMSVerificationRequest, error) { + return nil, nil } +// GetCodeByPhone to get code for a given phone number func (p *provider) GetCodeByPhone(ctx context.Context, phoneNumber string) (*models.SMSVerificationRequest, error) { - var sms_verification_request models.SMSVerificationRequest - - return &sms_verification_request, nil + return nil, nil } -func(p *provider) DeleteSMSRequest(ctx context.Context, smsRequest *models.SMSVerificationRequest) error { +// DeleteSMSRequest to delete SMS verification request +func (p *provider) DeleteSMSRequest(ctx context.Context, smsRequest *models.SMSVerificationRequest) error { return nil } diff --git a/server/db/providers/mongodb/sms_verification_requests.go b/server/db/providers/mongodb/sms_verification_requests.go index b2d3a13..1183df1 100644 --- a/server/db/providers/mongodb/sms_verification_requests.go +++ b/server/db/providers/mongodb/sms_verification_requests.go @@ -10,41 +10,40 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -// SMS verification Request +// UpsertSMSRequest adds/updates SMS verification request func (p *provider) UpsertSMSRequest(ctx context.Context, smsRequest *models.SMSVerificationRequest) (*models.SMSVerificationRequest, error) { - smsVerificationRequest, _ := p.GetCodeByPhone(ctx, smsRequest.PhoneNumber) + smsVerificationRequest, err := p.GetCodeByPhone(ctx, smsRequest.PhoneNumber) + if err != nil { + return nil, err + } + // Boolean to check if we should create a new record or update the existing one shouldCreate := false - if smsVerificationRequest == nil { id := uuid.NewString() - smsVerificationRequest = &models.SMSVerificationRequest{ - ID: id, - CreatedAt: time.Now().Unix(), - Code: smsRequest.Code, - PhoneNumber: smsRequest.PhoneNumber, + ID: id, + CreatedAt: time.Now().Unix(), + Code: smsRequest.Code, + PhoneNumber: smsRequest.PhoneNumber, CodeExpiresAt: smsRequest.CodeExpiresAt, } shouldCreate = true } - + smsVerificationRequest.UpdatedAt = time.Now().Unix() smsRequestCollection := p.db.Collection(models.Collections.SMSVerificationRequest, options.Collection()) - - var err error if shouldCreate { _, err = smsRequestCollection.InsertOne(ctx, smsVerificationRequest) } else { _, err = smsRequestCollection.UpdateOne(ctx, bson.M{"phone_number": bson.M{"$eq": smsRequest.PhoneNumber}}, bson.M{"$set": smsVerificationRequest}, options.MergeUpdateOptions()) } - if err != nil { return nil, err } - return smsVerificationRequest, nil } +// GetCodeByPhone to get code for a given phone number func (p *provider) GetCodeByPhone(ctx context.Context, phoneNumber string) (*models.SMSVerificationRequest, error) { var smsVerificationRequest models.SMSVerificationRequest @@ -58,6 +57,7 @@ func (p *provider) GetCodeByPhone(ctx context.Context, phoneNumber string) (*mod return &smsVerificationRequest, nil } +// DeleteSMSRequest to delete SMS verification request func (p *provider) DeleteSMSRequest(ctx context.Context, smsRequest *models.SMSVerificationRequest) error { smsVerificationRequests := p.db.Collection(models.Collections.SMSVerificationRequest, options.Collection()) _, err := smsVerificationRequests.DeleteOne(nil, bson.M{"_id": smsRequest.ID}, options.Delete()) diff --git a/server/db/providers/provider_template/sms_verification_requests.go b/server/db/providers/provider_template/sms_verification_requests.go new file mode 100644 index 0000000..d238a80 --- /dev/null +++ b/server/db/providers/provider_template/sms_verification_requests.go @@ -0,0 +1,22 @@ +package provider_template + +import ( + "context" + + "github.com/authorizerdev/authorizer/server/db/models" +) + +// UpsertSMSRequest adds/updates SMS verification request +func (p *provider) UpsertSMSRequest(ctx context.Context, smsRequest *models.SMSVerificationRequest) (*models.SMSVerificationRequest, error) { + return nil, nil +} + +// GetCodeByPhone to get code for a given phone number +func (p *provider) GetCodeByPhone(ctx context.Context, phoneNumber string) (*models.SMSVerificationRequest, error) { + return nil, nil +} + +// DeleteSMSRequest to delete SMS verification request +func (p *provider) DeleteSMSRequest(ctx context.Context, smsRequest *models.SMSVerificationRequest) error { + return nil +} diff --git a/server/db/providers/providers.go b/server/db/providers/providers.go index 28fbf78..31c021c 100644 --- a/server/db/providers/providers.go +++ b/server/db/providers/providers.go @@ -85,10 +85,10 @@ type Provider interface { // DeleteOTP to delete otp DeleteOTP(ctx context.Context, otp *models.OTP) error - // Upsert SMS code request + // UpsertSMSRequest adds/updates SMS verification request UpsertSMSRequest(ctx context.Context, smsRequest *models.SMSVerificationRequest) (*models.SMSVerificationRequest, error) - // Get sms code by phone number + // GetCodeByPhone to get code for a given phone number GetCodeByPhone(ctx context.Context, phoneNumber string) (*models.SMSVerificationRequest, error) - // Delete sms + // DeleteSMSRequest to delete SMS verification request DeleteSMSRequest(ctx context.Context, smsRequest *models.SMSVerificationRequest) error } diff --git a/server/db/providers/sql/sms_verification_requests.go b/server/db/providers/sql/sms_verification_requests.go index 5035c54..387b5eb 100644 --- a/server/db/providers/sql/sms_verification_requests.go +++ b/server/db/providers/sql/sms_verification_requests.go @@ -9,27 +9,24 @@ import ( "gorm.io/gorm/clause" ) -// SMS verification Request +// UpsertSMSRequest adds/updates SMS verification request func (p *provider) UpsertSMSRequest(ctx context.Context, smsRequest *models.SMSVerificationRequest) (*models.SMSVerificationRequest, error) { if smsRequest.ID == "" { smsRequest.ID = uuid.New().String() } - smsRequest.CreatedAt = time.Now().Unix() smsRequest.UpdatedAt = time.Now().Unix() - res := p.db.Clauses(clause.OnConflict{ Columns: []clause.Column{{Name: "phone_number"}}, - DoUpdates: clause.AssignmentColumns([]string{"code", "code_expires_at"}), + DoUpdates: clause.AssignmentColumns([]string{"code", "code_expires_at", "updated_at"}), }).Create(smsRequest) if res.Error != nil { return nil, res.Error } - return smsRequest, nil } -// GetOTPByEmail to get otp for a given email address +// GetCodeByPhone to get code for a given phone number func (p *provider) GetCodeByPhone(ctx context.Context, phoneNumber string) (*models.SMSVerificationRequest, error) { var sms_verification_request models.SMSVerificationRequest @@ -40,7 +37,8 @@ func (p *provider) GetCodeByPhone(ctx context.Context, phoneNumber string) (*mod return &sms_verification_request, nil } -func(p *provider) DeleteSMSRequest(ctx context.Context, smsRequest *models.SMSVerificationRequest) error { +// DeleteSMSRequest to delete SMS verification request +func (p *provider) DeleteSMSRequest(ctx context.Context, smsRequest *models.SMSVerificationRequest) error { result := p.db.Delete(&models.SMSVerificationRequest{ ID: smsRequest.ID, })