42 lines
917 B
Go
42 lines
917 B
Go
package verificationimp
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/tech/sendico/pkg/db/verification"
|
|
"github.com/tech/sendico/pkg/merrors"
|
|
"github.com/tech/sendico/pkg/model"
|
|
"go.mongodb.org/mongo-driver/v2/bson"
|
|
)
|
|
|
|
type ConfirmationStore struct {
|
|
db verification.DB
|
|
}
|
|
|
|
func NewStore(db verification.DB) *ConfirmationStore {
|
|
return &ConfirmationStore{db: db}
|
|
}
|
|
|
|
func (s *ConfirmationStore) Create(
|
|
ctx context.Context,
|
|
request *verification.Request,
|
|
) (verificationCode string, err error) {
|
|
return s.db.Create(ctx, request)
|
|
}
|
|
|
|
func (s *ConfirmationStore) Verify(
|
|
ctx context.Context,
|
|
accountRef bson.ObjectID,
|
|
purpose model.VerificationPurpose,
|
|
code string,
|
|
) (target string, err error) {
|
|
t, err := s.db.Consume(ctx, accountRef, purpose, code)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
if t.Purpose != purpose {
|
|
return "", merrors.DataConflict("token has different verificaton purpose")
|
|
}
|
|
return t.Target, nil
|
|
}
|