Versions in this module Expand all Collapse all v2 v2.7.1 Nov 12, 2023 Changes in this version + const DefaultUserPasswordBcryptCost + const DefaultUserStatsQueueWriterInterval + const Everyone + const RoleAdmin + const RoleAnonymous + const RoleUser + var ErrInvalidArgument = errors.New("invalid argument") + var ErrPhoneNumberExists = errors.New("phone number already exists") + var ErrPhoneNumberNotFound = errors.New("phone number not found") + var ErrTierNotFound = errors.New("tier not found") + var ErrTokenNotFound = errors.New("token not found") + var ErrTooManyReservations = errors.New("new tier has lower reservation limit") + var ErrUnauthenticated = errors.New("unauthenticated") + var ErrUnauthorized = errors.New("unauthorized") + var ErrUserExists = errors.New("user already exists") + var ErrUserNotFound = errors.New("user not found") + func AllowedRole(role Role) bool + func AllowedTier(tier string) bool + func AllowedTopic(topic string) bool + func AllowedTopicPattern(topic string) bool + func AllowedUsername(username string) bool + type Auther interface + Authenticate func(username, password string) (*User, error) + Authorize func(user *User, topic string, perm Permission) error + type Billing struct + StripeCustomerID string + StripeSubscriptionCancelAt time.Time + StripeSubscriptionID string + StripeSubscriptionInterval stripe.PriceRecurringInterval + StripeSubscriptionPaidUntil time.Time + StripeSubscriptionStatus stripe.SubscriptionStatus + type Grant struct + Allow Permission + TopicPattern string + type Manager struct + func NewManager(filename, startupQueries string, defaultAccess Permission, bcryptCost int, ...) (*Manager, error) + func (a *Manager) AddPhoneNumber(userID string, phoneNumber string) error + func (a *Manager) AddReservation(username string, topic string, everyone Permission) error + func (a *Manager) AddTier(tier *Tier) error + func (a *Manager) AddUser(username, password string, role Role) error + func (a *Manager) AllGrants() (map[string][]Grant, error) + func (a *Manager) AllowAccess(username string, topicPattern string, permission Permission) error + func (a *Manager) AllowReservation(username string, topic string) error + func (a *Manager) Authenticate(username, password string) (*User, error) + func (a *Manager) AuthenticateToken(token string) (*User, error) + func (a *Manager) Authorize(user *User, topic string, perm Permission) error + func (a *Manager) ChangeBilling(username string, billing *Billing) error + func (a *Manager) ChangePassword(username, password string) error + func (a *Manager) ChangeRole(username string, role Role) error + func (a *Manager) ChangeSettings(userID string, prefs *Prefs) error + func (a *Manager) ChangeTier(username, tier string) error + func (a *Manager) ChangeToken(userID, token string, label *string, expires *time.Time) (*Token, error) + func (a *Manager) Close() error + func (a *Manager) CreateToken(userID, label string, expires time.Time, origin netip.Addr) (*Token, error) + func (a *Manager) DefaultAccess() Permission + func (a *Manager) EnqueueTokenUpdate(tokenID string, update *TokenUpdate) + func (a *Manager) EnqueueUserStats(userID string, stats *Stats) + func (a *Manager) Grants(username string) ([]Grant, error) + func (a *Manager) HasReservation(username, topic string) (bool, error) + func (a *Manager) MarkUserRemoved(user *User) error + func (a *Manager) PhoneNumbers(userID string) ([]string, error) + func (a *Manager) RemoveDeletedUsers() error + func (a *Manager) RemoveExpiredTokens() error + func (a *Manager) RemovePhoneNumber(userID string, phoneNumber string) error + func (a *Manager) RemoveReservations(username string, topics ...string) error + func (a *Manager) RemoveTier(code string) error + func (a *Manager) RemoveToken(userID, token string) error + func (a *Manager) RemoveUser(username string) error + func (a *Manager) ReservationOwner(topic string) (string, error) + func (a *Manager) Reservations(username string) ([]Reservation, error) + func (a *Manager) ReservationsCount(username string) (int64, error) + func (a *Manager) ResetAccess(username string, topicPattern string) error + func (a *Manager) ResetStats() error + func (a *Manager) ResetTier(username string) error + func (a *Manager) Tier(code string) (*Tier, error) + func (a *Manager) TierByStripePrice(priceID string) (*Tier, error) + func (a *Manager) Tiers() ([]*Tier, error) + func (a *Manager) Token(userID, token string) (*Token, error) + func (a *Manager) Tokens(userID string) ([]*Token, error) + func (a *Manager) UpdateTier(tier *Tier) error + func (a *Manager) User(username string) (*User, error) + func (a *Manager) UserByID(id string) (*User, error) + func (a *Manager) UserByStripeCustomer(stripeCustomerID string) (*User, error) + func (a *Manager) Users() ([]*User, error) + func (a *Manager) UsersCount() (int64, error) + type NotificationPrefs struct + DeleteAfter *int + MinPriority *int + Sound *string + type Permission uint8 + const PermissionDenyAll + const PermissionRead + const PermissionReadWrite + const PermissionWrite + func NewPermission(read, write bool) Permission + func ParsePermission(s string) (Permission, error) + func (p Permission) IsRead() bool + func (p Permission) IsReadWrite() bool + func (p Permission) IsWrite() bool + func (p Permission) String() string + type Prefs struct + Language *string + Notification *NotificationPrefs + Subscriptions []*Subscription + type Reservation struct + Everyone Permission + Owner Permission + Topic string + type Role string + type Stats struct + Calls int64 + Emails int64 + Messages int64 + type Subscription struct + BaseURL string + DisplayName *string + Topic string + func (s *Subscription) Context() log.Context + type Tier struct + AttachmentBandwidthLimit int64 + AttachmentExpiryDuration time.Duration + AttachmentFileSizeLimit int64 + AttachmentTotalSizeLimit int64 + CallLimit int64 + Code string + EmailLimit int64 + ID string + MessageExpiryDuration time.Duration + MessageLimit int64 + Name string + ReservationLimit int64 + StripeMonthlyPriceID string + StripeYearlyPriceID string + func (t *Tier) Context() log.Context + type Token struct + Expires time.Time + Label string + LastAccess time.Time + LastOrigin netip.Addr + Value string + type TokenUpdate struct + LastAccess time.Time + LastOrigin netip.Addr + type User struct + Billing *Billing + Deleted bool + Hash string + ID string + Name string + Prefs *Prefs + Role Role + Stats *Stats + SyncTopic string + Tier *Tier + Token string + func (u *User) IsAdmin() bool + func (u *User) IsUser() bool + func (u *User) TierID() string