Some checks failed
Build and Push Docker Image / Build image (push) Has been cancelled
175 lines
4.3 KiB
Go
175 lines
4.3 KiB
Go
package factories
|
|
|
|
import (
|
|
"errors"
|
|
"sync"
|
|
|
|
"git.acooldomain.co/server-manager/backend/dbhandler"
|
|
"git.acooldomain.co/server-manager/backend/dbhandler/mongo"
|
|
"git.acooldomain.co/server-manager/backend/models"
|
|
)
|
|
|
|
var (
|
|
serversDbHandlers = make(map[string]dbhandler.ServersDbHandler)
|
|
serversAuthDbHandlers = make(map[string]dbhandler.ServersAuthorizationDbHandler)
|
|
userPassAuthDbHandlers = make(map[string]dbhandler.UserPassAuthanticationDbHandler)
|
|
inviteTokenDbHandlers = make(map[string]dbhandler.InviteTokenDbHandler)
|
|
|
|
serversDbMutex sync.Mutex
|
|
serversAuthDbMutex sync.Mutex
|
|
userPassAuthDbMutex sync.Mutex
|
|
inviteTokenDbMutex sync.Mutex
|
|
)
|
|
|
|
func getMongoCacheKey(config *models.MongoDBConfig) string {
|
|
return "Mongo/" + config.Username + "/" + config.Password + "/" + config.Url + "/" + config.Database + "/" + config.Collection
|
|
}
|
|
|
|
func GetServersDbHandler(config models.ServersDatabaseConfig) (dbhandler.ServersDbHandler, error) {
|
|
var key string
|
|
var handler dbhandler.ServersDbHandler
|
|
var err error
|
|
var exists bool
|
|
|
|
switch config.Type {
|
|
case models.MONGO:
|
|
if config.Mongo == nil {
|
|
return nil, errors.New("missing MongoDB configuration")
|
|
}
|
|
key = getMongoCacheKey(config.Mongo)
|
|
default:
|
|
return nil, errors.New("unsupported database type")
|
|
}
|
|
|
|
serversDbMutex.Lock()
|
|
defer serversDbMutex.Unlock()
|
|
|
|
if handler, exists = serversDbHandlers[key]; exists {
|
|
return handler, nil
|
|
}
|
|
|
|
switch config.Type {
|
|
case models.MONGO:
|
|
handler, err = mongo.NewServersDbHandler(*config.Mongo)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
default:
|
|
return nil, errors.New("unsupported database type")
|
|
}
|
|
|
|
serversDbHandlers[key] = handler
|
|
return handler, nil
|
|
}
|
|
|
|
func GetServersAuthorizationDbHandler(config models.ServersAuthorizationDatabaseConfig) (dbhandler.ServersAuthorizationDbHandler, error) {
|
|
var key string
|
|
var handler dbhandler.ServersAuthorizationDbHandler
|
|
var err error
|
|
var exists bool
|
|
|
|
switch config.Type {
|
|
case models.MONGO:
|
|
if config.Mongo == nil {
|
|
return nil, errors.New("missing MongoDB configuration")
|
|
}
|
|
key = getMongoCacheKey(config.Mongo)
|
|
default:
|
|
return nil, errors.New("unsupported database type")
|
|
}
|
|
|
|
serversAuthDbMutex.Lock()
|
|
defer serversAuthDbMutex.Unlock()
|
|
|
|
if handler, exists = serversAuthDbHandlers[key]; exists {
|
|
return handler, nil
|
|
}
|
|
|
|
switch config.Type {
|
|
case models.MONGO:
|
|
handler, err = mongo.NewServersAuthorizationHandler(*config.Mongo)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
default:
|
|
return nil, errors.New("unsupported database type")
|
|
}
|
|
|
|
serversAuthDbHandlers[key] = handler
|
|
return handler, nil
|
|
}
|
|
|
|
func GetUserPassAuthDbHandler(config models.UserPassAuthConfig) (dbhandler.UserPassAuthanticationDbHandler, error) {
|
|
var key string
|
|
var handler dbhandler.UserPassAuthanticationDbHandler
|
|
var err error
|
|
var exists bool
|
|
|
|
switch config.Type {
|
|
case models.MONGO:
|
|
if config.Mongo == nil {
|
|
return nil, errors.New("missing MongoDB configuration")
|
|
}
|
|
key = getMongoCacheKey(config.Mongo)
|
|
default:
|
|
return nil, errors.New("unsupported database type")
|
|
}
|
|
|
|
userPassAuthDbMutex.Lock()
|
|
defer userPassAuthDbMutex.Unlock()
|
|
|
|
if handler, exists = userPassAuthDbHandlers[key]; exists {
|
|
return handler, nil
|
|
}
|
|
|
|
switch config.Type {
|
|
case models.MONGO:
|
|
handler, err = mongo.NewUserPassAuthHandler(*config.Mongo)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
default:
|
|
return nil, errors.New("unsupported database type")
|
|
}
|
|
|
|
userPassAuthDbHandlers[key] = handler
|
|
return handler, nil
|
|
}
|
|
|
|
func GetInviteTokenDbHandler(config models.InviteTokenDatabaseConfig) (dbhandler.InviteTokenDbHandler, error) {
|
|
var key string
|
|
var handler dbhandler.InviteTokenDbHandler
|
|
var err error
|
|
var exists bool
|
|
|
|
switch config.Type {
|
|
case models.MONGO:
|
|
if config.Mongo == nil {
|
|
return nil, errors.New("missing MongoDB configuration")
|
|
}
|
|
key = getMongoCacheKey(config.Mongo)
|
|
default:
|
|
return nil, errors.New("unsupported database type")
|
|
}
|
|
|
|
inviteTokenDbMutex.Lock()
|
|
defer inviteTokenDbMutex.Unlock()
|
|
|
|
if handler, exists = inviteTokenDbHandlers[key]; exists {
|
|
return handler, nil
|
|
}
|
|
|
|
switch config.Type {
|
|
case models.MONGO:
|
|
handler, err = mongo.NewInviteTokenDbHandler(*config.Mongo)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
default:
|
|
return nil, errors.New("unsupported database type")
|
|
}
|
|
|
|
inviteTokenDbHandlers[key] = handler
|
|
return handler, nil
|
|
}
|