mfa

package
v0.0.0-...-c4f7e29 Latest Latest
Warning

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

Go to latest
Published: Apr 26, 2024 License: Apache-2.0 Imports: 21 Imported by: 0

Documentation

Index

Constants

View Source
const (
	VerifyDeviceTokenPerUserPerIP  ratelimit.BucketName = "VerifyDeviceTokenPerUserPerIP"
	VerifyDeviceTokenPerIP         ratelimit.BucketName = "VerifyDeviceTokenPerIP"
	VerifyRecoveryCodePerUserPerIP ratelimit.BucketName = "VerifyRecoveryCodePerUserPerIP"
	VerifyRecoveryCodePerIP        ratelimit.BucketName = "VerifyRecoveryCodePerIP"
)

Variables

View Source
var ErrDeviceTokenNotFound = errors.New("bearer token not found")
View Source
var ErrRecoveryCodeConsumed = errors.New("recovery code consumed")
View Source
var ErrRecoveryCodeNotFound = errors.New("recovery code not found")

Functions

func GenerateDeviceToken

func GenerateDeviceToken() string

Types

type CookieDef

type CookieDef struct {
	Def *httputil.CookieDef
}

func NewDeviceTokenCookieDef

func NewDeviceTokenCookieDef(cfg *config.AuthenticationConfig) CookieDef

type DeviceToken

type DeviceToken struct {
	UserID    string    `json:"-"`
	Token     string    `json:"-"`
	CreatedAt time.Time `json:"created_at"`
	ExpireAt  time.Time `json:"expire_at"`
}

type Lockout

type Lockout struct {
	Config   *config.AuthenticationLockoutConfig
	RemoteIP httputil.RemoteIP
	Provider LockoutProvider
}

func (*Lockout) Check

func (l *Lockout) Check(userID string) error

func (*Lockout) MakeRecoveryCodeAttempt

func (l *Lockout) MakeRecoveryCodeAttempt(userID string, attempts int) error

type LockoutProvider

type LockoutProvider interface {
	MakeAttempts(spec lockout.LockoutSpec, contributor string, attempts int) (result *lockout.MakeAttemptResult, err error)
}

type RateLimiter

type RateLimiter interface {
	Reserve(spec ratelimit.BucketSpec) *ratelimit.Reservation
	Cancel(r *ratelimit.Reservation)
}

type RecoveryCode

type RecoveryCode struct {
	ID        string    `json:"id"`
	UserID    string    `json:"user_id"`
	Code      string    `json:"code"`
	CreatedAt time.Time `json:"created_at"`
	UpdatedAt time.Time `json:"updated_at"`
	Consumed  bool      `json:"consumed"`
}

type Service

type Service struct {
	IP            httputil.RemoteIP
	DeviceTokens  StoreDeviceToken
	RecoveryCodes StoreRecoveryCode
	Clock         clock.Clock
	Config        *config.AuthenticationConfig
	RateLimiter   RateLimiter
	Lockout       Lockout
}

func (*Service) ConsumeRecoveryCode

func (s *Service) ConsumeRecoveryCode(rc *RecoveryCode) error

func (*Service) CreateDeviceToken

func (s *Service) CreateDeviceToken(userID string, token string) (*DeviceToken, error)

func (*Service) GenerateDeviceToken

func (s *Service) GenerateDeviceToken() string

func (*Service) GenerateRecoveryCodes

func (s *Service) GenerateRecoveryCodes() []string

func (*Service) HasDeviceTokens

func (s *Service) HasDeviceTokens(userID string) (bool, error)

func (*Service) InvalidateAllDeviceTokens

func (s *Service) InvalidateAllDeviceTokens(userID string) error

func (*Service) InvalidateAllRecoveryCode

func (s *Service) InvalidateAllRecoveryCode(userID string) error

func (*Service) ListRecoveryCodes

func (s *Service) ListRecoveryCodes(userID string) ([]*RecoveryCode, error)

func (*Service) ReplaceRecoveryCodes

func (s *Service) ReplaceRecoveryCodes(userID string, codes []string) ([]*RecoveryCode, error)

func (*Service) VerifyDeviceToken

func (s *Service) VerifyDeviceToken(userID string, token string) error

func (*Service) VerifyRecoveryCode

func (s *Service) VerifyRecoveryCode(userID string, code string) (*RecoveryCode, error)

type StoreDeviceToken

type StoreDeviceToken interface {
	Get(userID string, token string) (*DeviceToken, error)
	Create(token *DeviceToken) error
	DeleteAll(userID string) error
	HasTokens(userID string) (bool, error)
}

type StoreDeviceTokenRedis

type StoreDeviceTokenRedis struct {
	Redis *appredis.Handle
	AppID config.AppID
	Clock clock.Clock
}

func (*StoreDeviceTokenRedis) Create

func (s *StoreDeviceTokenRedis) Create(token *DeviceToken) error

func (*StoreDeviceTokenRedis) DeleteAll

func (s *StoreDeviceTokenRedis) DeleteAll(userID string) error

func (*StoreDeviceTokenRedis) Get

func (s *StoreDeviceTokenRedis) Get(userID string, token string) (*DeviceToken, error)

func (*StoreDeviceTokenRedis) HasTokens

func (s *StoreDeviceTokenRedis) HasTokens(userID string) (bool, error)

type StoreRecoveryCode

type StoreRecoveryCode interface {
	List(userID string) ([]*RecoveryCode, error)
	Get(userID string, code string) (*RecoveryCode, error)
	DeleteAll(userID string) error
	CreateAll(codes []*RecoveryCode) error
	UpdateConsumed(code *RecoveryCode) error
}

type StoreRecoveryCodePQ

type StoreRecoveryCodePQ struct {
	SQLBuilder  *appdb.SQLBuilderApp
	SQLExecutor *appdb.SQLExecutor
}

func (*StoreRecoveryCodePQ) CreateAll

func (s *StoreRecoveryCodePQ) CreateAll(codes []*RecoveryCode) error

func (*StoreRecoveryCodePQ) DeleteAll

func (s *StoreRecoveryCodePQ) DeleteAll(userID string) error

func (*StoreRecoveryCodePQ) Get

func (s *StoreRecoveryCodePQ) Get(userID string, code string) (*RecoveryCode, error)

func (*StoreRecoveryCodePQ) List

func (s *StoreRecoveryCodePQ) List(userID string) ([]*RecoveryCode, error)

func (*StoreRecoveryCodePQ) UpdateConsumed

func (s *StoreRecoveryCodePQ) UpdateConsumed(code *RecoveryCode) error

Jump to

Keyboard shortcuts

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