backend/utils/constructors.go
2025-03-18 16:22:26 +02:00

42 lines
1.1 KiB
Go

package dbhandler
import (
"fmt"
"sync"
"git.acooldomain.co/server-manager/backend-kubernetes-go/db_handler/mongo"
"git.acooldomain.co/server-manager/backend-kubernetes-go/dbhandler"
"git.acooldomain.co/server-manager/backend-kubernetes-go/models"
)
var (
mu sync.Mutex
existingServerAuthHandlers = make(map[string]dbhandler.ServersAuthorizationDbHandler)
)
func configToKey(config any) (string, error) {
switch c := config.(type) {
case models.MongoDBConfig:
return fmt.Sprintf("mongo:%s:%s:%s:%s:%s", c.Url, c.Database, c.Collection, c.Username, c.Password), nil
default:
return "", fmt.Errorf("unknown config format")
}
}
func GetServersAuthDbHandler(config any) (dbhandler.ServersAuthorizationDbHandler, error) {
mu.Lock()
defer mu.Unlock()
key, err := configToKey(config)
if handler, exists := existingServerAuthHandlers[key]; err != nil && exists {
return handler, nil
}
switch c := config.(type) {
case models.MongoDBConfig:
handler, err := mongo.NewServersAuthorizationHandler(c)
return handler, err
}
return nil, fmt.Errorf("Unknown config format")
}