domain

package
v1.1.0 Latest Latest
Warning

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

Go to latest
Published: Dec 14, 2025 License: Apache-2.0 Imports: 10 Imported by: 0

Documentation

Index

Constants

View Source
const (
	RateLimitAlgorithmFixedWindow = "fixed_window"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Account

type Account struct {
	ID                    string       `json:"id" gorm:"primaryKey"`
	UserID                string       `json:"user_id" gorm:"index"`
	AccountID             string       `json:"account_id"`
	ProviderID            ProviderType `json:"provider_id"`
	AccessToken           *string      `json:"access_token,omitempty"`
	RefreshToken          *string      `json:"refresh_token,omitempty"`
	IDToken               *string      `json:"id_token,omitempty"`
	AccessTokenExpiresAt  *time.Time   `json:"access_token_expires_at,omitempty"`
	RefreshTokenExpiresAt *time.Time   `json:"refresh_token_expires_at,omitempty"`
	Scope                 *string      `json:"scope,omitempty"`
	Password              *string      `json:"password,omitempty"` // for email/password auth
	CreatedAt             time.Time    `json:"created_at"`
	UpdatedAt             time.Time    `json:"updated_at"`
	User                  User         `gorm:"foreignKey:UserID"`
}

type AccountDatabaseHooksConfig

type AccountDatabaseHooksConfig struct {
	BeforeCreate func(account *Account) error
	AfterCreate  func(account Account) error
	BeforeUpdate func(account *Account) error
	AfterUpdate  func(account Account) error
}

type CSRFConfig added in v1.0.4

type CSRFConfig struct {
	Enabled    bool
	CookieName string
	HeaderName string
	ExpiresIn  time.Duration
}

type ChangeEmailConfig

type ChangeEmailConfig struct {
	Enabled                          bool
	SendEmailChangeVerificationEmail func(user User, newEmail string, url string, token string) error
}

type Config

type Config struct {
	AppName           string
	BaseURL           string
	BasePath          string
	Secret            string
	DB                *gorm.DB
	Database          DatabaseConfig
	SecondaryStorage  SecondaryStorageConfig
	EmailPassword     EmailPasswordConfig
	EmailVerification EmailVerificationConfig
	User              UserConfig
	Session           SessionConfig
	CSRF              CSRFConfig
	SocialProviders   SocialProvidersConfig
	TrustedOrigins    TrustedOriginsConfig
	RateLimit         RateLimitConfig
	EndpointHooks     EndpointHooksConfig
	DatabaseHooks     DatabaseHooksConfig
	EventHooks        EventHooksConfig
}

Config holds all configurable options for the GoBetterAuth library.

func NewConfig

func NewConfig(opts ...ConfigOption) *Config

NewConfig builds a Config using functional options with sensible defaults.

type ConfigOption added in v1.0.1

type ConfigOption func(*Config)

func WithAppName added in v1.0.1

func WithAppName(name string) ConfigOption

func WithBasePath added in v1.0.1

func WithBasePath(path string) ConfigOption

func WithBaseURL added in v1.0.1

func WithBaseURL(url string) ConfigOption

func WithCSRF added in v1.0.4

func WithCSRF(csrfConfig CSRFConfig) ConfigOption

func WithDB added in v1.1.0

func WithDB(db *gorm.DB) ConfigOption

func WithDatabase added in v1.0.1

func WithDatabase(db DatabaseConfig) ConfigOption

func WithDatabaseHooks added in v1.0.1

func WithDatabaseHooks(databaseHooksConfig DatabaseHooksConfig) ConfigOption

func WithEmailPassword added in v1.0.1

func WithEmailPassword(config EmailPasswordConfig) ConfigOption

func WithEmailVerification added in v1.0.1

func WithEmailVerification(config EmailVerificationConfig) ConfigOption

func WithEndpointHooks added in v1.0.3

func WithEndpointHooks(endpointHooksConfig EndpointHooksConfig) ConfigOption

func WithEventHooks added in v1.0.3

func WithEventHooks(eventHooksConfig EventHooksConfig) ConfigOption

func WithRateLimit added in v1.0.4

func WithRateLimit(rateLimitConfig RateLimitConfig) ConfigOption

func WithSecondaryStorage added in v1.0.4

func WithSecondaryStorage(storage SecondaryStorageConfig) ConfigOption

func WithSecret added in v1.0.1

func WithSecret(secret string) ConfigOption

func WithSession added in v1.0.1

func WithSession(sessionConfig SessionConfig) ConfigOption

func WithSocialProviders added in v1.0.4

func WithSocialProviders(socialProvidersConfig SocialProvidersConfig) ConfigOption

func WithTrustedOrigins added in v1.0.1

func WithTrustedOrigins(trustedOriginsConfig TrustedOriginsConfig) ConfigOption

func WithUser added in v1.0.1

func WithUser(userConfig UserConfig) ConfigOption

type CustomRoute added in v1.0.10

type CustomRoute struct {
	Method     string
	Path       string
	Middleware []CustomRouteMiddleware
	Handler    CustomRouteHandler
}

type CustomRouteHandler added in v1.0.10

type CustomRouteHandler func(config *Config) http.Handler

type CustomRouteMiddleware added in v1.0.10

type CustomRouteMiddleware func(http.Handler) http.Handler

type DatabaseConfig

type DatabaseConfig struct {
	Provider         string
	ConnectionString string
	MaxOpenConns     int
	MaxIdleConns     int
	ConnMaxLifetime  time.Duration
}

type DatabaseHooksConfig

type DatabaseHooksConfig struct {
	Users         *UserDatabaseHooksConfig
	Accounts      *AccountDatabaseHooksConfig
	Sessions      *SessionDatabaseHooksConfig
	Verifications *VerificationDatabaseHooksConfig
}

type DefaultOAuth2ProvidersConfig added in v1.0.4

type DefaultOAuth2ProvidersConfig struct {
	Google  *OAuth2Config
	GitHub  *OAuth2Config
	Discord *OAuth2Config
}

type EmailPasswordConfig

type EmailPasswordConfig struct {
	Enabled                  bool
	MinPasswordLength        int
	MaxPasswordLength        int
	DisableSignUp            bool
	RequireEmailVerification bool
	AutoSignIn               bool
	SendResetPasswordEmail   func(user User, url string, token string) error
	ResetTokenExpiry         time.Duration
	Password                 *PasswordConfig
}

type EmailVerificationConfig

type EmailVerificationConfig struct {
	SendVerificationEmail func(user User, url string, token string) error
	AutoSignIn            bool
	SendOnSignUp          bool
	SendOnSignIn          bool
	ExpiresIn             time.Duration
}

type EndpointHookContext added in v1.0.3

type EndpointHookContext struct {
	Path            string
	Method          string
	Body            map[string]any
	Headers         map[string][]string
	Query           map[string][]string
	Request         *http.Request
	User            *User
	ResponseStatus  int
	ResponseBody    []byte
	ResponseHeaders map[string][]string
	ResponseCookies []*http.Cookie
}

type EndpointHooksConfig added in v1.0.3

type EndpointHooksConfig struct {
	Before   func(ctx *EndpointHookContext) error
	Response func(ctx *EndpointHookContext) error
	After    func(ctx *EndpointHookContext) error
}

type EventHooksConfig added in v1.0.3

type EventHooksConfig struct {
	OnUserSignedUp    func(user User) error
	OnUserLoggedIn    func(user User) error
	OnEmailVerified   func(user User) error
	OnPasswordChanged func(user User) error
	OnEmailChanged    func(user User) error
}

type GenericOAuth2Config added in v1.0.4

type GenericOAuth2Config struct {
	OAuth2Config
	Endpoint GenericOAuth2EndpointConfig
}

type GenericOAuth2EndpointConfig added in v1.0.4

type GenericOAuth2EndpointConfig struct {
	AuthURL     string
	TokenURL    string
	UserInfoURL string
}

type IPConfig added in v1.0.4

type IPConfig struct {
	Headers []string
}

type KeyValueStore added in v1.0.4

type KeyValueStore struct {
	Key       string     `json:"key" gorm:"primaryKey"`
	Value     string     `json:"value"`
	ExpiresAt *time.Time `json:"expires_at,omitempty"`
	CreatedAt time.Time  `json:"created_at"`
	UpdatedAt time.Time  `json:"updated_at"`
}

KeyValueStore represents the persistent key-value store table in the database. This is a domain model used for secondary storage operations.

type OAuth2Config added in v1.0.4

type OAuth2Config struct {
	ClientID     string
	ClientSecret string
	RedirectURL  string
	Scopes       []string
}

type PasswordConfig

type PasswordConfig struct {
	Hash   func(password string) (string, error)
	Verify func(hashedPassword, password string) bool
}

type ProviderType

type ProviderType string
const (
	ProviderEmail   ProviderType = "email"
	ProviderDiscord ProviderType = "discord"
	ProviderGitHub  ProviderType = "github"
	ProviderGoogle  ProviderType = "google"
)

type RateLimitConfig added in v1.0.4

type RateLimitConfig struct {
	Enabled     bool
	Window      time.Duration
	Max         int
	Algorithm   string
	Prefix      string
	CustomRules map[string]RateLimitCustomRuleFunc
	IP          IPConfig
}

type RateLimitCustomRule added in v1.0.4

type RateLimitCustomRule struct {
	Disabled bool
	Window   time.Duration
	Max      int
}

type RateLimitCustomRuleFunc added in v1.0.4

type RateLimitCustomRuleFunc func(req *http.Request) RateLimitCustomRule

type SecondaryStorage added in v1.0.4

type SecondaryStorage interface {
	Get(ctx context.Context, key string) (any, error)
	Set(ctx context.Context, key string, value any, ttl *time.Duration) error
	Delete(ctx context.Context, key string) error
	Incr(ctx context.Context, key string, ttl *time.Duration) (int, error)
}

SecondaryStorage defines an interface for secondary storage operations.

type SecondaryStorageConfig added in v1.0.4

type SecondaryStorageConfig struct {
	Type            SecondaryStorageType
	MemoryOptions   *SecondaryStorageMemoryOptions
	DatabaseOptions *SecondaryStorageDatabaseOptions
	Storage         SecondaryStorage
}

type SecondaryStorageDatabaseOptions added in v1.0.5

type SecondaryStorageDatabaseOptions struct {
	// CleanupInterval controls how often expired entries are cleaned up.
	// If zero, the implementation should use a default.
	CleanupInterval time.Duration
}

SecondaryStorageDatabaseOptions holds settings specific to the database storage.

type SecondaryStorageMemoryOptions added in v1.0.5

type SecondaryStorageMemoryOptions struct {
	// CleanupInterval controls how often expired entries are cleaned up.
	// If zero, the implementation should use a default.
	CleanupInterval time.Duration
}

SecondaryStorageMemoryOptions holds settings specific to the in-memory storage.

type SecondaryStorageType added in v1.0.5

type SecondaryStorageType string
const (
	SecondaryStorageTypeMemory   SecondaryStorageType = "memory"
	SecondaryStorageTypeDatabase SecondaryStorageType = "database"
	SecondaryStorageTypeCustom   SecondaryStorageType = "custom"
)

type Session

type Session struct {
	ID        string    `json:"id" gorm:"primaryKey"`
	UserID    string    `json:"user_id" gorm:"index"`
	Token     string    `json:"token" gorm:"uniqueIndex"`
	ExpiresAt time.Time `json:"expires_at"`
	IPAddress *string   `json:"ip_address,omitempty"`
	UserAgent *string   `json:"user_agent,omitempty"`
	CreatedAt time.Time `json:"created_at"`
	UpdatedAt time.Time `json:"updated_at"`
}

type SessionConfig

type SessionConfig struct {
	CookieName string
	ExpiresIn  time.Duration
	UpdateAge  time.Duration
}

type SessionDatabaseHooksConfig

type SessionDatabaseHooksConfig struct {
	BeforeCreate func(session *Session) error
	AfterCreate  func(session Session) error
}

type SocialProvidersConfig added in v1.0.4

type SocialProvidersConfig struct {
	Default DefaultOAuth2ProvidersConfig
	Generic map[string]GenericOAuth2Config
}

type TrustedOriginsConfig

type TrustedOriginsConfig struct {
	Origins []string
}

type User

type User struct {
	ID            string    `json:"id" gorm:"primaryKey"`
	Name          string    `json:"name"`
	Email         string    `json:"email" gorm:"uniqueIndex"`
	EmailVerified bool      `json:"email_verified"`
	Image         *string   `json:"image,omitempty"`
	CreatedAt     time.Time `json:"created_at"`
	UpdatedAt     time.Time `json:"updated_at"`
}

type UserConfig

type UserConfig struct {
	ChangeEmail ChangeEmailConfig
}

type UserDatabaseHooksConfig

type UserDatabaseHooksConfig struct {
	BeforeCreate func(user *User) error
	AfterCreate  func(user User) error
	BeforeUpdate func(user *User) error
	AfterUpdate  func(user User) error
}

type Verification

type Verification struct {
	ID         string           `json:"id" gorm:"primaryKey"`
	UserID     *string          `json:"user_id,omitempty"`
	Identifier string           `json:"identifier"` // email or other identifier
	Token      string           `json:"token"`
	Type       VerificationType `json:"type"`
	ExpiresAt  time.Time        `json:"expires_at"`
	CreatedAt  time.Time        `json:"created_at"`
	UpdatedAt  time.Time        `json:"updated_at"`
}

type VerificationDatabaseHooksConfig

type VerificationDatabaseHooksConfig struct {
	BeforeCreate func(verification *Verification) error
	AfterCreate  func(verification Verification) error
}

type VerificationType

type VerificationType string
const (
	TypeEmailVerification VerificationType = "email_verification"
	TypePasswordReset     VerificationType = "password_reset"
	TypeEmailChange       VerificationType = "email_change"
)

Jump to

Keyboard shortcuts

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