challenge

package
v0.24.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 11, 2026 License: MIT Imports: 24 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrChallengeExpired            = errors.New("challenge expired")
	ErrChallengeConsumed           = errors.New("challenge already consumed")
	ErrTooManyAttempts             = errors.New("too many verification attempts")
	ErrTooManyResends              = errors.New("too many resend attempts")
	ErrResendTooSoon               = errors.New("resend requested too soon")
	ErrInvalidVerificationCode     = errors.New("invalid verification code")
	ErrUnsupportedChallengePurpose = errors.New("unsupported challenge purpose")
	ErrPasswordResetUnavailable    = errors.New("password reset unavailable for account")
	ErrEmailChangeNotAuthorized    = errors.New("email change not authorized for session")
	ErrEmailAlreadyInUse           = errors.New("email already in use")
	ErrEmailVerificationRequired   = errors.New("email verification required")
	ErrEmailVerificationInvalid    = errors.New("email verification transaction is invalid or expired")
)
View Source
var ErrVerificationCodeSecretNotConfigured = errors.New("verification code secret is not configured")

Functions

This section is empty.

Types

type CompleteEmailChangeChallengeInput added in v0.22.0

type CompleteEmailChangeChallengeInput struct {
	ChallengeID uuid.UUID
	UserID      uuid.UUID
	SessionID   uuid.UUID
	Code        string
}

type Config

type Config struct {
	Store                  *store.Store
	Tx                     *tx.Manager
	AllowlistEnabled       bool
	ChallengeTTL           time.Duration
	MaxAttempts            int
	MaxResends             int
	MinResendInterval      time.Duration
	Policy                 config.ChallengePolicyReader
	AuthenticationPolicy   config.AuthenticationPolicyReader
	AllowlistPolicy        config.AllowlistPolicyReader
	WebhookPublisher       webhook.Publisher
	AccessTokenRevocations *token.AccessTokenRevocations
	SecurityEvents         securityevent.Recorder
}

type CreateEmailChangeChallengeInput added in v0.1.15

type CreateEmailChangeChallengeInput struct {
	UserID              uuid.UUID
	InitiatingSessionID uuid.UUID
	OldEmail            string
	NewEmail            string
}

type CreatePasswordResetChallengeInput added in v0.1.14

type CreatePasswordResetChallengeInput struct {
	UserID       uuid.UUID
	Email        string
	PasswordHash string
}

type CreateSignupChallengeInput

type CreateSignupChallengeInput struct {
	Email        string
	Username     string
	PasswordHash string
	InvitationID *uuid.UUID
}

type EmailTemplateRenderer added in v0.20.0

type EmailTemplateRenderer interface {
	Render(context.Context, domain.EmailTemplate, email.TemplateData) (email.Message, error)
}

type Service

type Service struct {
	// contains filtered or unexported fields
}

func New

func New(cfg Config) *Service

func (*Service) BeginRequiredEmailVerification added in v0.22.0

func (s *Service) BeginRequiredEmailVerification(
	ctx context.Context,
	userID uuid.UUID,
	sessionID uuid.UUID,
	audience string,
	returnTo string,
	now time.Time,
) (domain.EmailVerificationTransaction, error)

func (*Service) CompleteEmailChangeChallenge added in v0.22.0

func (s *Service) CompleteEmailChangeChallenge(
	ctx context.Context,
	in CompleteEmailChangeChallengeInput,
	verifier *VerificationCodeService,
	now time.Time,
) error

func (*Service) CompletePasswordResetChallenge added in v0.22.0

func (s *Service) CompletePasswordResetChallenge(
	ctx context.Context,
	challengeID uuid.UUID,
	code string,
	verifier *VerificationCodeService,
	now time.Time,
) error

func (*Service) CompleteRequiredEmailVerification added in v0.22.0

func (s *Service) CompleteRequiredEmailVerification(
	ctx context.Context,
	transactionID uuid.UUID,
	challengeID uuid.UUID,
	code string,
	verifier *VerificationCodeService,
	now time.Time,
) (domain.EmailVerificationTransaction, domain.User, error)

func (*Service) CreateEmailChangeChallenge added in v0.1.15

func (s *Service) CreateEmailChangeChallenge(
	ctx context.Context,
	in CreateEmailChangeChallengeInput,
	now time.Time,
) (uuid.UUID, error)

func (*Service) CreateOpaqueChallenge

func (s *Service) CreateOpaqueChallenge(
	ctx context.Context,
	now time.Time,
	purpose domain.ChallengePurpose,
	email string,
) (uuid.UUID, error)

func (*Service) CreatePasswordResetChallenge added in v0.1.14

func (s *Service) CreatePasswordResetChallenge(
	ctx context.Context,
	in CreatePasswordResetChallengeInput,
	now time.Time,
) (uuid.UUID, error)

func (*Service) CreateRequiredEmailVerificationChallenge added in v0.22.0

func (s *Service) CreateRequiredEmailVerificationChallenge(
	ctx context.Context,
	transactionID uuid.UUID,
	targetEmail string,
	now time.Time,
) (uuid.UUID, error)

func (*Service) CreateSignupChallenge

func (s *Service) CreateSignupChallenge(
	ctx context.Context,
	in CreateSignupChallengeInput,
	now time.Time,
) (uuid.UUID, error)

func (*Service) GetEmailVerificationTransaction added in v0.22.0

func (s *Service) GetEmailVerificationTransaction(ctx context.Context, id uuid.UUID, now time.Time) (domain.EmailVerificationTransaction, domain.User, error)

func (*Service) ResendChallenge

func (s *Service) ResendChallenge(
	ctx context.Context,
	challengeID uuid.UUID,
	now time.Time,
) error

func (*Service) VerifySignupChallenge

func (s *Service) VerifySignupChallenge(
	ctx context.Context,
	challengeID uuid.UUID,
	code string,
	verifier *VerificationCodeService,
	now time.Time,
	complete func(context.Context, domain.PendingSignupAction) error,
) (*VerifySignupChallengeResult, error)

type VerificationCodeService

type VerificationCodeService struct {
	// contains filtered or unexported fields
}

func NewVerificationCodeService

func NewVerificationCodeService(store *store.Store, ttl time.Duration, secrets ...[]byte) *VerificationCodeService

func NewVerificationCodeServiceWithPolicy added in v0.21.0

func NewVerificationCodeServiceWithPolicy(
	store *store.Store,
	policy config.ChallengePolicyReader,
	secrets ...[]byte,
) *VerificationCodeService

func (*VerificationCodeService) GenerateCode

func (s *VerificationCodeService) GenerateCode(
	ctx context.Context,
	challenge domain.Challenge,
	now time.Time,
) (string, error)

func (*VerificationCodeService) VerifyCode

func (s *VerificationCodeService) VerifyCode(
	ctx context.Context,
	challengeID uuid.UUID,
	code string,
	now time.Time,
) error

type VerifySignupChallengeResult

type VerifySignupChallengeResult struct {
	Challenge domain.Challenge
	Action    domain.PendingSignupAction
}

type Worker

type Worker struct {
	// contains filtered or unexported fields
}

func NewWorker

func NewWorker(
	store *store.Store,
	codeSvc *VerificationCodeService,
	templates EmailTemplateRenderer,
	sender email.Sender,
	logger *slog.Logger,
	cfg WorkerConfig,
) *Worker

func (*Worker) Done added in v0.22.0

func (w *Worker) Done() <-chan struct{}

func (*Worker) Run

func (w *Worker) Run(ctx context.Context)

func (*Worker) RunOnce

func (w *Worker) RunOnce(ctx context.Context, now time.Time) (bool, error)

func (*Worker) Shutdown added in v0.22.0

func (w *Worker) Shutdown(ctx context.Context) error

type WorkerConfig

type WorkerConfig struct {
	WorkerCount          int
	PollInterval         time.Duration
	JobMaxAttempts       int
	RetryBaseDelay       time.Duration
	RetryMaxDelay        time.Duration
	ProcessingStaleAfter time.Duration
	StaleReaperInterval  time.Duration
	MaintenanceBatchSize int
	CleanupSentAfter     time.Duration
	CleanupFailedAfter   time.Duration
	SendTimeout          time.Duration
	TransitionTimeout    time.Duration
	Policy               config.EmailPolicyReader
	Metrics              WorkerMetrics
	RandomFloat64        func() float64
}

type WorkerMetrics added in v0.19.0

type WorkerMetrics interface {
	ObserveBackgroundJob(worker, outcome string, duration time.Duration)
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL