42 lines
1.1 KiB
Go
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")
|
|
}
|