Files
authorizer/server/db/providers/couchbase/verification_requests.go

131 lines
4.5 KiB
Go
Raw Normal View History

2022-10-10 00:24:14 +05:30
package couchbase
import (
"context"
2022-11-03 23:41:12 +05:30
"fmt"
"log"
2022-10-10 00:24:14 +05:30
"time"
"github.com/authorizerdev/authorizer/server/db/models"
"github.com/authorizerdev/authorizer/server/graph/model"
2022-11-03 23:41:12 +05:30
"github.com/couchbase/gocb/v2"
2022-10-10 00:24:14 +05:30
"github.com/google/uuid"
)
// AddVerification to save verification request in database
func (p *provider) AddVerificationRequest(ctx context.Context, verificationRequest models.VerificationRequest) (models.VerificationRequest, error) {
if verificationRequest.ID == "" {
verificationRequest.ID = uuid.New().String()
}
2022-11-26 17:43:39 +05:30
verificationRequest.Key = verificationRequest.ID
2022-10-10 00:24:14 +05:30
verificationRequest.CreatedAt = time.Now().Unix()
verificationRequest.UpdatedAt = time.Now().Unix()
2022-11-03 23:41:12 +05:30
insertOpt := gocb.InsertOptions{
Context: ctx,
}
_, err := p.db.Collection(models.Collections.VerificationRequest).Insert(verificationRequest.ID, verificationRequest, &insertOpt)
if err != nil {
return verificationRequest, err
}
2022-10-10 00:24:14 +05:30
return verificationRequest, nil
}
// GetVerificationRequestByToken to get verification request from database using token
func (p *provider) GetVerificationRequestByToken(ctx context.Context, token string) (models.VerificationRequest, error) {
2022-11-26 17:43:39 +05:30
verificationRequest := models.VerificationRequest{}
2022-11-03 23:41:12 +05:30
scope := p.db.Scope("_default")
2022-11-26 17:43:39 +05:30
params := make(map[string]interface{}, 1)
params["token"] = token
query := fmt.Sprintf("SELECT _id, token, identifier, expires_at, email, nonce, redirect_uri, created_at, updated_at FROM auth._default.%s WHERE token=$1 LIMIT 1", models.Collections.VerificationRequest)
queryResult, err := scope.Query(query, &gocb.QueryOptions{
Context: ctx,
PositionalParameters: []interface{}{token},
2022-12-01 14:58:35 +05:30
ScanConsistency: gocb.QueryScanConsistencyRequestPlus,
2022-11-26 17:43:39 +05:30
})
2022-10-10 00:24:14 +05:30
2022-11-03 23:41:12 +05:30
if err != nil {
return verificationRequest, err
}
err = queryResult.One(&verificationRequest)
2022-11-26 17:43:39 +05:30
2022-11-03 23:41:12 +05:30
if err != nil {
return verificationRequest, err
}
2022-10-10 00:24:14 +05:30
return verificationRequest, nil
}
// GetVerificationRequestByEmail to get verification request by email from database
func (p *provider) GetVerificationRequestByEmail(ctx context.Context, email string, identifier string) (models.VerificationRequest, error) {
2022-11-26 17:43:39 +05:30
query := fmt.Sprintf("SELECT _id, identifier, token, expires_at, email, nonce, redirect_uri, created_at, updated_at FROM auth._default.%s WHERE email=$1 AND identifier=$2 LIMIT 1", models.Collections.VerificationRequest)
queryResult, err := p.db.Scope("_default").Query(query, &gocb.QueryOptions{
2022-11-26 17:43:39 +05:30
Context: ctx,
PositionalParameters: []interface{}{email, identifier},
2022-12-01 14:58:35 +05:30
ScanConsistency: gocb.QueryScanConsistencyRequestPlus,
2022-11-26 17:43:39 +05:30
})
verificationRequest := models.VerificationRequest{}
2022-10-10 00:24:14 +05:30
2022-11-03 23:41:12 +05:30
if err != nil {
return verificationRequest, err
}
2022-11-26 17:43:39 +05:30
2022-11-03 23:41:12 +05:30
err = queryResult.One(&verificationRequest)
2022-11-26 17:43:39 +05:30
2022-11-03 23:41:12 +05:30
if err != nil {
return verificationRequest, err
}
2022-10-10 00:24:14 +05:30
return verificationRequest, nil
}
// ListVerificationRequests to get list of verification requests from database
func (p *provider) ListVerificationRequests(ctx context.Context, pagination model.Pagination) (*model.VerificationRequests, error) {
2022-11-03 23:41:12 +05:30
var verificationRequests []*model.VerificationRequest
scope := p.db.Scope("_default")
paginationClone := pagination
_, paginationClone.Total = GetTotalDocs(ctx, scope, models.Collections.VerificationRequest)
query := fmt.Sprintf("SELECT _id, env, created_at, updated_at FROM auth._default.%s OFFSET $1 LIMIT $2", models.Collections.VerificationRequest)
2022-12-01 14:58:35 +05:30
queryResult, err := scope.Query(query, &gocb.QueryOptions{
Context: ctx,
ScanConsistency: gocb.QueryScanConsistencyRequestPlus,
PositionalParameters: []interface{}{paginationClone.Offset, paginationClone.Limit},
2022-12-01 14:58:35 +05:30
})
2022-11-03 23:41:12 +05:30
if err != nil {
return nil, err
}
for queryResult.Next() {
var verificationRequest models.VerificationRequest
err := queryResult.Row(&verificationRequest)
if err != nil {
log.Fatal(err)
}
verificationRequests = append(verificationRequests, verificationRequest.AsAPIVerificationRequest())
}
if err := queryResult.Err(); err != nil {
return nil, err
}
return &model.VerificationRequests{
VerificationRequests: verificationRequests,
Pagination: &paginationClone,
}, nil
2022-10-10 00:24:14 +05:30
}
// DeleteVerificationRequest to delete verification request from database
func (p *provider) DeleteVerificationRequest(ctx context.Context, verificationRequest models.VerificationRequest) error {
2022-11-03 23:41:12 +05:30
removeOpt := gocb.RemoveOptions{
Context: ctx,
}
2022-11-26 17:43:39 +05:30
_, err := p.db.Collection(models.Collections.VerificationRequest).Remove(verificationRequest.ID, &removeOpt)
2022-11-03 23:41:12 +05:30
if err != nil {
return err
}
2022-10-10 00:24:14 +05:30
return nil
}