mirror of
https://github.com/binwiederhier/ntfy.git
synced 2026-03-18 21:30:44 +01:00
Refine again
This commit is contained in:
@@ -103,7 +103,7 @@ var pgQueries = queries{
|
|||||||
|
|
||||||
// NewPostgresStore creates a new PostgreSQL-backed message cache store using an existing database connection pool.
|
// NewPostgresStore creates a new PostgreSQL-backed message cache store using an existing database connection pool.
|
||||||
func NewPostgresStore(db *sql.DB, batchSize int, batchTimeout time.Duration) (*Cache, error) {
|
func NewPostgresStore(db *sql.DB, batchSize int, batchTimeout time.Duration) (*Cache, error) {
|
||||||
if err := setupPostgresDB(db); err != nil {
|
if err := setupPostgres(db); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return newCache(db, pgQueries, nil, batchSize, batchTimeout, false), nil
|
return newCache(db, pgQueries, nil, batchSize, batchTimeout, false), nil
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ const (
|
|||||||
postgresSelectSchemaVersionQuery = `SELECT version FROM schema_version WHERE store = 'message'`
|
postgresSelectSchemaVersionQuery = `SELECT version FROM schema_version WHERE store = 'message'`
|
||||||
)
|
)
|
||||||
|
|
||||||
func setupPostgresDB(db *sql.DB) error {
|
func setupPostgres(db *sql.DB) error {
|
||||||
var schemaVersion int
|
var schemaVersion int
|
||||||
err := db.QueryRow(postgresSelectSchemaVersionQuery).Scan(&schemaVersion)
|
err := db.QueryRow(postgresSelectSchemaVersionQuery).Scan(&schemaVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -57,19 +57,25 @@ type Manager struct {
|
|||||||
|
|
||||||
var _ Auther = (*Manager)(nil)
|
var _ Auther = (*Manager)(nil)
|
||||||
|
|
||||||
// initManager sets defaults and runs startup tasks common to all backends
|
func newManager(db *sql.DB, queries queries, config *Config) (*Manager, error) {
|
||||||
func initManager(manager *Manager) error {
|
if config.BcryptCost <= 0 {
|
||||||
if manager.config.BcryptCost <= 0 {
|
config.BcryptCost = DefaultUserPasswordBcryptCost
|
||||||
manager.config.BcryptCost = DefaultUserPasswordBcryptCost
|
|
||||||
}
|
}
|
||||||
if manager.config.QueueWriterInterval.Seconds() <= 0 {
|
if config.QueueWriterInterval.Seconds() <= 0 {
|
||||||
manager.config.QueueWriterInterval = DefaultUserStatsQueueWriterInterval
|
config.QueueWriterInterval = DefaultUserStatsQueueWriterInterval
|
||||||
|
}
|
||||||
|
manager := &Manager{
|
||||||
|
config: config,
|
||||||
|
db: db,
|
||||||
|
statsQueue: make(map[string]*Stats),
|
||||||
|
tokenQueue: make(map[string]*TokenUpdate),
|
||||||
|
queries: queries,
|
||||||
}
|
}
|
||||||
if err := manager.maybeProvisionUsersAccessAndTokens(); err != nil {
|
if err := manager.maybeProvisionUsersAccessAndTokens(); err != nil {
|
||||||
return err
|
return nil, err
|
||||||
}
|
}
|
||||||
go manager.asyncQueueWriter(manager.config.QueueWriterInterval)
|
go manager.asyncQueueWriter(manager.config.QueueWriterInterval)
|
||||||
return nil
|
return manager, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Authenticate checks username and password and returns a User if correct, and the user has not been
|
// Authenticate checks username and password and returns a User if correct, and the user has not been
|
||||||
|
|||||||
@@ -204,85 +204,67 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// NewPostgresManager creates a new Manager backed by a PostgreSQL database using an existing connection pool.
|
// NewPostgresManager creates a new Manager backed by a PostgreSQL database using an existing connection pool.
|
||||||
|
var postgresQueries = queries{
|
||||||
|
selectUserByID: postgresSelectUserByIDQuery,
|
||||||
|
selectUserByName: postgresSelectUserByNameQuery,
|
||||||
|
selectUserByToken: postgresSelectUserByTokenQuery,
|
||||||
|
selectUserByStripeCustomerID: postgresSelectUserByStripeCustomerIDQuery,
|
||||||
|
selectUsernames: postgresSelectUsernamesQuery,
|
||||||
|
selectUserCount: postgresSelectUserCountQuery,
|
||||||
|
selectUserIDFromUsername: postgresSelectUserIDFromUsernameQuery,
|
||||||
|
insertUser: postgresInsertUserQuery,
|
||||||
|
updateUserPass: postgresUpdateUserPassQuery,
|
||||||
|
updateUserRole: postgresUpdateUserRoleQuery,
|
||||||
|
updateUserProvisioned: postgresUpdateUserProvisionedQuery,
|
||||||
|
updateUserPrefs: postgresUpdateUserPrefsQuery,
|
||||||
|
updateUserStats: postgresUpdateUserStatsQuery,
|
||||||
|
updateUserStatsResetAll: postgresUpdateUserStatsResetAllQuery,
|
||||||
|
updateUserTier: postgresUpdateUserTierQuery,
|
||||||
|
updateUserDeleted: postgresUpdateUserDeletedQuery,
|
||||||
|
deleteUser: postgresDeleteUserQuery,
|
||||||
|
deleteUserTier: postgresDeleteUserTierQuery,
|
||||||
|
deleteUsersMarked: postgresDeleteUsersMarkedQuery,
|
||||||
|
selectTopicPerms: postgresSelectTopicPermsQuery,
|
||||||
|
selectUserAllAccess: postgresSelectUserAllAccessQuery,
|
||||||
|
selectUserAccess: postgresSelectUserAccessQuery,
|
||||||
|
selectUserReservations: postgresSelectUserReservationsQuery,
|
||||||
|
selectUserReservationsCount: postgresSelectUserReservationsCountQuery,
|
||||||
|
selectUserReservationsOwner: postgresSelectUserReservationsOwnerQuery,
|
||||||
|
selectUserHasReservation: postgresSelectUserHasReservationQuery,
|
||||||
|
selectOtherAccessCount: postgresSelectOtherAccessCountQuery,
|
||||||
|
upsertUserAccess: postgresUpsertUserAccessQuery,
|
||||||
|
deleteUserAccess: postgresDeleteUserAccessQuery,
|
||||||
|
deleteUserAccessProvisioned: postgresDeleteUserAccessProvisionedQuery,
|
||||||
|
deleteTopicAccess: postgresDeleteTopicAccessQuery,
|
||||||
|
deleteAllAccess: postgresDeleteAllAccessQuery,
|
||||||
|
selectToken: postgresSelectTokenQuery,
|
||||||
|
selectTokens: postgresSelectTokensQuery,
|
||||||
|
selectTokenCount: postgresSelectTokenCountQuery,
|
||||||
|
selectAllProvisionedTokens: postgresSelectAllProvisionedTokensQuery,
|
||||||
|
upsertToken: postgresUpsertTokenQuery,
|
||||||
|
updateToken: postgresUpdateTokenQuery,
|
||||||
|
updateTokenLastAccess: postgresUpdateTokenLastAccessQuery,
|
||||||
|
deleteToken: postgresDeleteTokenQuery,
|
||||||
|
deleteProvisionedToken: postgresDeleteProvisionedTokenQuery,
|
||||||
|
deleteAllToken: postgresDeleteAllTokenQuery,
|
||||||
|
deleteExpiredTokens: postgresDeleteExpiredTokensQuery,
|
||||||
|
deleteExcessTokens: postgresDeleteExcessTokensQuery,
|
||||||
|
insertTier: postgresInsertTierQuery,
|
||||||
|
selectTiers: postgresSelectTiersQuery,
|
||||||
|
selectTierByCode: postgresSelectTierByCodeQuery,
|
||||||
|
selectTierByPriceID: postgresSelectTierByPriceIDQuery,
|
||||||
|
updateTier: postgresUpdateTierQuery,
|
||||||
|
deleteTier: postgresDeleteTierQuery,
|
||||||
|
selectPhoneNumbers: postgresSelectPhoneNumbersQuery,
|
||||||
|
insertPhoneNumber: postgresInsertPhoneNumberQuery,
|
||||||
|
deletePhoneNumber: postgresDeletePhoneNumberQuery,
|
||||||
|
updateBilling: postgresUpdateBillingQuery,
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewPostgresManager creates a new Manager backed by a PostgreSQL database
|
||||||
func NewPostgresManager(db *sql.DB, config *Config) (*Manager, error) {
|
func NewPostgresManager(db *sql.DB, config *Config) (*Manager, error) {
|
||||||
if err := setupPostgres(db); err != nil {
|
if err := setupPostgres(db); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
manager := &Manager{
|
return newManager(db, postgresQueries, config)
|
||||||
config: config,
|
|
||||||
db: db,
|
|
||||||
statsQueue: make(map[string]*Stats),
|
|
||||||
tokenQueue: make(map[string]*TokenUpdate),
|
|
||||||
queries: queries{
|
|
||||||
// User queries
|
|
||||||
selectUserByID: postgresSelectUserByIDQuery,
|
|
||||||
selectUserByName: postgresSelectUserByNameQuery,
|
|
||||||
selectUserByToken: postgresSelectUserByTokenQuery,
|
|
||||||
selectUserByStripeCustomerID: postgresSelectUserByStripeCustomerIDQuery,
|
|
||||||
selectUsernames: postgresSelectUsernamesQuery,
|
|
||||||
selectUserCount: postgresSelectUserCountQuery,
|
|
||||||
selectUserIDFromUsername: postgresSelectUserIDFromUsernameQuery,
|
|
||||||
insertUser: postgresInsertUserQuery,
|
|
||||||
updateUserPass: postgresUpdateUserPassQuery,
|
|
||||||
updateUserRole: postgresUpdateUserRoleQuery,
|
|
||||||
updateUserProvisioned: postgresUpdateUserProvisionedQuery,
|
|
||||||
updateUserPrefs: postgresUpdateUserPrefsQuery,
|
|
||||||
updateUserStats: postgresUpdateUserStatsQuery,
|
|
||||||
updateUserStatsResetAll: postgresUpdateUserStatsResetAllQuery,
|
|
||||||
updateUserTier: postgresUpdateUserTierQuery,
|
|
||||||
updateUserDeleted: postgresUpdateUserDeletedQuery,
|
|
||||||
deleteUser: postgresDeleteUserQuery,
|
|
||||||
deleteUserTier: postgresDeleteUserTierQuery,
|
|
||||||
deleteUsersMarked: postgresDeleteUsersMarkedQuery,
|
|
||||||
|
|
||||||
// Access queries
|
|
||||||
selectTopicPerms: postgresSelectTopicPermsQuery,
|
|
||||||
selectUserAllAccess: postgresSelectUserAllAccessQuery,
|
|
||||||
selectUserAccess: postgresSelectUserAccessQuery,
|
|
||||||
selectUserReservations: postgresSelectUserReservationsQuery,
|
|
||||||
selectUserReservationsCount: postgresSelectUserReservationsCountQuery,
|
|
||||||
selectUserReservationsOwner: postgresSelectUserReservationsOwnerQuery,
|
|
||||||
selectUserHasReservation: postgresSelectUserHasReservationQuery,
|
|
||||||
selectOtherAccessCount: postgresSelectOtherAccessCountQuery,
|
|
||||||
upsertUserAccess: postgresUpsertUserAccessQuery,
|
|
||||||
deleteUserAccess: postgresDeleteUserAccessQuery,
|
|
||||||
deleteUserAccessProvisioned: postgresDeleteUserAccessProvisionedQuery,
|
|
||||||
deleteTopicAccess: postgresDeleteTopicAccessQuery,
|
|
||||||
deleteAllAccess: postgresDeleteAllAccessQuery,
|
|
||||||
|
|
||||||
// Token queries
|
|
||||||
selectToken: postgresSelectTokenQuery,
|
|
||||||
selectTokens: postgresSelectTokensQuery,
|
|
||||||
selectTokenCount: postgresSelectTokenCountQuery,
|
|
||||||
selectAllProvisionedTokens: postgresSelectAllProvisionedTokensQuery,
|
|
||||||
upsertToken: postgresUpsertTokenQuery,
|
|
||||||
updateToken: postgresUpdateTokenQuery,
|
|
||||||
updateTokenLastAccess: postgresUpdateTokenLastAccessQuery,
|
|
||||||
deleteToken: postgresDeleteTokenQuery,
|
|
||||||
deleteProvisionedToken: postgresDeleteProvisionedTokenQuery,
|
|
||||||
deleteAllToken: postgresDeleteAllTokenQuery,
|
|
||||||
deleteExpiredTokens: postgresDeleteExpiredTokensQuery,
|
|
||||||
deleteExcessTokens: postgresDeleteExcessTokensQuery,
|
|
||||||
|
|
||||||
// Tier queries
|
|
||||||
insertTier: postgresInsertTierQuery,
|
|
||||||
selectTiers: postgresSelectTiersQuery,
|
|
||||||
selectTierByCode: postgresSelectTierByCodeQuery,
|
|
||||||
selectTierByPriceID: postgresSelectTierByPriceIDQuery,
|
|
||||||
updateTier: postgresUpdateTierQuery,
|
|
||||||
deleteTier: postgresDeleteTierQuery,
|
|
||||||
|
|
||||||
// Phone queries
|
|
||||||
selectPhoneNumbers: postgresSelectPhoneNumbersQuery,
|
|
||||||
insertPhoneNumber: postgresInsertPhoneNumberQuery,
|
|
||||||
deletePhoneNumber: postgresDeletePhoneNumberQuery,
|
|
||||||
|
|
||||||
// Billing queries
|
|
||||||
updateBilling: postgresUpdateBillingQuery,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
if err := initManager(manager); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return manager, nil
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -201,6 +201,63 @@ const (
|
|||||||
`
|
`
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var sqliteQueries = queries{
|
||||||
|
selectUserByID: sqliteSelectUserByIDQuery,
|
||||||
|
selectUserByName: sqliteSelectUserByNameQuery,
|
||||||
|
selectUserByToken: sqliteSelectUserByTokenQuery,
|
||||||
|
selectUserByStripeCustomerID: sqliteSelectUserByStripeCustomerIDQuery,
|
||||||
|
selectUsernames: sqliteSelectUsernamesQuery,
|
||||||
|
selectUserCount: sqliteSelectUserCountQuery,
|
||||||
|
selectUserIDFromUsername: sqliteSelectUserIDFromUsernameQuery,
|
||||||
|
insertUser: sqliteInsertUserQuery,
|
||||||
|
updateUserPass: sqliteUpdateUserPassQuery,
|
||||||
|
updateUserRole: sqliteUpdateUserRoleQuery,
|
||||||
|
updateUserProvisioned: sqliteUpdateUserProvisionedQuery,
|
||||||
|
updateUserPrefs: sqliteUpdateUserPrefsQuery,
|
||||||
|
updateUserStats: sqliteUpdateUserStatsQuery,
|
||||||
|
updateUserStatsResetAll: sqliteUpdateUserStatsResetAllQuery,
|
||||||
|
updateUserTier: sqliteUpdateUserTierQuery,
|
||||||
|
updateUserDeleted: sqliteUpdateUserDeletedQuery,
|
||||||
|
deleteUser: sqliteDeleteUserQuery,
|
||||||
|
deleteUserTier: sqliteDeleteUserTierQuery,
|
||||||
|
deleteUsersMarked: sqliteDeleteUsersMarkedQuery,
|
||||||
|
selectTopicPerms: sqliteSelectTopicPermsQuery,
|
||||||
|
selectUserAllAccess: sqliteSelectUserAllAccessQuery,
|
||||||
|
selectUserAccess: sqliteSelectUserAccessQuery,
|
||||||
|
selectUserReservations: sqliteSelectUserReservationsQuery,
|
||||||
|
selectUserReservationsCount: sqliteSelectUserReservationsCountQuery,
|
||||||
|
selectUserReservationsOwner: sqliteSelectUserReservationsOwnerQuery,
|
||||||
|
selectUserHasReservation: sqliteSelectUserHasReservationQuery,
|
||||||
|
selectOtherAccessCount: sqliteSelectOtherAccessCountQuery,
|
||||||
|
upsertUserAccess: sqliteUpsertUserAccessQuery,
|
||||||
|
deleteUserAccess: sqliteDeleteUserAccessQuery,
|
||||||
|
deleteUserAccessProvisioned: sqliteDeleteUserAccessProvisionedQuery,
|
||||||
|
deleteTopicAccess: sqliteDeleteTopicAccessQuery,
|
||||||
|
deleteAllAccess: sqliteDeleteAllAccessQuery,
|
||||||
|
selectToken: sqliteSelectTokenQuery,
|
||||||
|
selectTokens: sqliteSelectTokensQuery,
|
||||||
|
selectTokenCount: sqliteSelectTokenCountQuery,
|
||||||
|
selectAllProvisionedTokens: sqliteSelectAllProvisionedTokensQuery,
|
||||||
|
upsertToken: sqliteUpsertTokenQuery,
|
||||||
|
updateToken: sqliteUpdateTokenQuery,
|
||||||
|
updateTokenLastAccess: sqliteUpdateTokenLastAccessQuery,
|
||||||
|
deleteToken: sqliteDeleteTokenQuery,
|
||||||
|
deleteProvisionedToken: sqliteDeleteProvisionedTokenQuery,
|
||||||
|
deleteAllToken: sqliteDeleteAllTokenQuery,
|
||||||
|
deleteExpiredTokens: sqliteDeleteExpiredTokensQuery,
|
||||||
|
deleteExcessTokens: sqliteDeleteExcessTokensQuery,
|
||||||
|
insertTier: sqliteInsertTierQuery,
|
||||||
|
selectTiers: sqliteSelectTiersQuery,
|
||||||
|
selectTierByCode: sqliteSelectTierByCodeQuery,
|
||||||
|
selectTierByPriceID: sqliteSelectTierByPriceIDQuery,
|
||||||
|
updateTier: sqliteUpdateTierQuery,
|
||||||
|
deleteTier: sqliteDeleteTierQuery,
|
||||||
|
selectPhoneNumbers: sqliteSelectPhoneNumbersQuery,
|
||||||
|
insertPhoneNumber: sqliteInsertPhoneNumberQuery,
|
||||||
|
deletePhoneNumber: sqliteDeletePhoneNumberQuery,
|
||||||
|
updateBilling: sqliteUpdateBillingQuery,
|
||||||
|
}
|
||||||
|
|
||||||
// NewSQLiteManager creates a new Manager backed by a SQLite database
|
// NewSQLiteManager creates a new Manager backed by a SQLite database
|
||||||
func NewSQLiteManager(filename, startupQueries string, config *Config) (*Manager, error) {
|
func NewSQLiteManager(filename, startupQueries string, config *Config) (*Manager, error) {
|
||||||
parentDir := filepath.Dir(filename)
|
parentDir := filepath.Dir(filename)
|
||||||
@@ -217,70 +274,5 @@ func NewSQLiteManager(filename, startupQueries string, config *Config) (*Manager
|
|||||||
if err := runSQLiteStartupQueries(db, startupQueries); err != nil {
|
if err := runSQLiteStartupQueries(db, startupQueries); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
manager := &Manager{
|
return newManager(db, sqliteQueries, config)
|
||||||
config: config,
|
|
||||||
db: db,
|
|
||||||
statsQueue: make(map[string]*Stats),
|
|
||||||
tokenQueue: make(map[string]*TokenUpdate),
|
|
||||||
queries: queries{
|
|
||||||
selectUserByID: sqliteSelectUserByIDQuery,
|
|
||||||
selectUserByName: sqliteSelectUserByNameQuery,
|
|
||||||
selectUserByToken: sqliteSelectUserByTokenQuery,
|
|
||||||
selectUserByStripeCustomerID: sqliteSelectUserByStripeCustomerIDQuery,
|
|
||||||
selectUsernames: sqliteSelectUsernamesQuery,
|
|
||||||
selectUserCount: sqliteSelectUserCountQuery,
|
|
||||||
selectUserIDFromUsername: sqliteSelectUserIDFromUsernameQuery,
|
|
||||||
insertUser: sqliteInsertUserQuery,
|
|
||||||
updateUserPass: sqliteUpdateUserPassQuery,
|
|
||||||
updateUserRole: sqliteUpdateUserRoleQuery,
|
|
||||||
updateUserProvisioned: sqliteUpdateUserProvisionedQuery,
|
|
||||||
updateUserPrefs: sqliteUpdateUserPrefsQuery,
|
|
||||||
updateUserStats: sqliteUpdateUserStatsQuery,
|
|
||||||
updateUserStatsResetAll: sqliteUpdateUserStatsResetAllQuery,
|
|
||||||
updateUserTier: sqliteUpdateUserTierQuery,
|
|
||||||
updateUserDeleted: sqliteUpdateUserDeletedQuery,
|
|
||||||
deleteUser: sqliteDeleteUserQuery,
|
|
||||||
deleteUserTier: sqliteDeleteUserTierQuery,
|
|
||||||
deleteUsersMarked: sqliteDeleteUsersMarkedQuery,
|
|
||||||
selectTopicPerms: sqliteSelectTopicPermsQuery,
|
|
||||||
selectUserAllAccess: sqliteSelectUserAllAccessQuery,
|
|
||||||
selectUserAccess: sqliteSelectUserAccessQuery,
|
|
||||||
selectUserReservations: sqliteSelectUserReservationsQuery,
|
|
||||||
selectUserReservationsCount: sqliteSelectUserReservationsCountQuery,
|
|
||||||
selectUserReservationsOwner: sqliteSelectUserReservationsOwnerQuery,
|
|
||||||
selectUserHasReservation: sqliteSelectUserHasReservationQuery,
|
|
||||||
selectOtherAccessCount: sqliteSelectOtherAccessCountQuery,
|
|
||||||
upsertUserAccess: sqliteUpsertUserAccessQuery,
|
|
||||||
deleteUserAccess: sqliteDeleteUserAccessQuery,
|
|
||||||
deleteUserAccessProvisioned: sqliteDeleteUserAccessProvisionedQuery,
|
|
||||||
deleteTopicAccess: sqliteDeleteTopicAccessQuery,
|
|
||||||
deleteAllAccess: sqliteDeleteAllAccessQuery,
|
|
||||||
selectToken: sqliteSelectTokenQuery,
|
|
||||||
selectTokens: sqliteSelectTokensQuery,
|
|
||||||
selectTokenCount: sqliteSelectTokenCountQuery,
|
|
||||||
selectAllProvisionedTokens: sqliteSelectAllProvisionedTokensQuery,
|
|
||||||
upsertToken: sqliteUpsertTokenQuery,
|
|
||||||
updateToken: sqliteUpdateTokenQuery,
|
|
||||||
updateTokenLastAccess: sqliteUpdateTokenLastAccessQuery,
|
|
||||||
deleteToken: sqliteDeleteTokenQuery,
|
|
||||||
deleteProvisionedToken: sqliteDeleteProvisionedTokenQuery,
|
|
||||||
deleteAllToken: sqliteDeleteAllTokenQuery,
|
|
||||||
deleteExpiredTokens: sqliteDeleteExpiredTokensQuery,
|
|
||||||
deleteExcessTokens: sqliteDeleteExcessTokensQuery,
|
|
||||||
insertTier: sqliteInsertTierQuery,
|
|
||||||
selectTiers: sqliteSelectTiersQuery,
|
|
||||||
selectTierByCode: sqliteSelectTierByCodeQuery,
|
|
||||||
selectTierByPriceID: sqliteSelectTierByPriceIDQuery,
|
|
||||||
updateTier: sqliteUpdateTierQuery,
|
|
||||||
deleteTier: sqliteDeleteTierQuery,
|
|
||||||
selectPhoneNumbers: sqliteSelectPhoneNumbersQuery,
|
|
||||||
insertPhoneNumber: sqliteInsertPhoneNumberQuery,
|
|
||||||
deletePhoneNumber: sqliteDeletePhoneNumberQuery,
|
|
||||||
updateBilling: sqliteUpdateBillingQuery,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
if err := initManager(manager); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return manager, nil
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1958,26 +1958,6 @@ func TestStoreTokenRemoveExpired(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestStoreTokenCreatePrunesExcess(t *testing.T) {
|
|
||||||
forEachStoreBackend(t, func(t *testing.T, manager *Manager) {
|
|
||||||
require.Nil(t, manager.AddUser("phil", "mypass", RoleUser, false))
|
|
||||||
u, err := manager.User("phil")
|
|
||||||
require.Nil(t, err)
|
|
||||||
|
|
||||||
// Create several tokens
|
|
||||||
var tokenValues []string
|
|
||||||
for i := 0; i < 3; i++ {
|
|
||||||
tk, err := manager.CreateToken(u.ID, "label", time.Now().Add(time.Duration(i+1)*time.Hour), netip.MustParseAddr("1.2.3.4"), false)
|
|
||||||
require.Nil(t, err)
|
|
||||||
tokenValues = append(tokenValues, tk.Value)
|
|
||||||
}
|
|
||||||
|
|
||||||
tokens, err := manager.Tokens(u.ID)
|
|
||||||
require.Nil(t, err)
|
|
||||||
require.True(t, len(tokens) >= 3)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestStoreTokenUpdateLastAccess(t *testing.T) {
|
func TestStoreTokenUpdateLastAccess(t *testing.T) {
|
||||||
forEachStoreBackend(t, func(t *testing.T, manager *Manager) {
|
forEachStoreBackend(t, func(t *testing.T, manager *Manager) {
|
||||||
require.Nil(t, manager.AddUser("phil", "mypass", RoleUser, false))
|
require.Nil(t, manager.AddUser("phil", "mypass", RoleUser, false))
|
||||||
|
|||||||
Reference in New Issue
Block a user