mirror of
https://github.com/yusing/godoxy.git
synced 2025-05-19 20:32:35 +02:00

- Updated Dockerfile and Makefile for socket-proxy build. - Modified go.mod to include necessary dependencies. - Updated CI workflows for socket-proxy integration. - Better module isolation - Code refactor
66 lines
1.8 KiB
Go
66 lines
1.8 KiB
Go
package config
|
|
|
|
import (
|
|
"slices"
|
|
|
|
"github.com/yusing/go-proxy/agent/pkg/agent"
|
|
"github.com/yusing/go-proxy/internal/gperr"
|
|
"github.com/yusing/go-proxy/internal/route/provider"
|
|
"github.com/yusing/go-proxy/internal/utils/functional"
|
|
)
|
|
|
|
var agentPool = functional.NewMapOf[string, *agent.AgentConfig]()
|
|
|
|
func addAgent(agent *agent.AgentConfig) {
|
|
agentPool.Store(agent.Addr, agent)
|
|
}
|
|
|
|
func removeAllAgents() {
|
|
agentPool.Clear()
|
|
}
|
|
|
|
func GetAgent(addr string) (agent *agent.AgentConfig, ok bool) {
|
|
agent, ok = agentPool.Load(addr)
|
|
return
|
|
}
|
|
|
|
func (cfg *Config) GetAgent(agentAddrOrDockerHost string) (*agent.AgentConfig, bool) {
|
|
if !agent.IsDockerHostAgent(agentAddrOrDockerHost) {
|
|
return GetAgent(agentAddrOrDockerHost)
|
|
}
|
|
return GetAgent(agent.GetAgentAddrFromDockerHost(agentAddrOrDockerHost))
|
|
}
|
|
|
|
func (cfg *Config) VerifyNewAgent(host string, ca agent.PEMPair, client agent.PEMPair) (int, gperr.Error) {
|
|
if slices.ContainsFunc(cfg.value.Providers.Agents, func(a *agent.AgentConfig) bool {
|
|
return a.Addr == host
|
|
}) {
|
|
return 0, gperr.New("agent already exists")
|
|
}
|
|
|
|
var agentCfg agent.AgentConfig
|
|
agentCfg.Addr = host
|
|
err := agentCfg.StartWithCerts(cfg.Task().Context(), ca.Cert, client.Cert, client.Key)
|
|
if err != nil {
|
|
return 0, gperr.Wrap(err, "failed to start agent")
|
|
}
|
|
addAgent(&agentCfg)
|
|
|
|
provider := provider.NewAgentProvider(&agentCfg)
|
|
if err := cfg.errIfExists(provider); err != nil {
|
|
return 0, err
|
|
}
|
|
err = provider.LoadRoutes()
|
|
if err != nil {
|
|
return 0, gperr.Wrap(err, "failed to load routes")
|
|
}
|
|
return provider.NumRoutes(), nil
|
|
}
|
|
|
|
func (cfg *Config) ListAgents() []*agent.AgentConfig {
|
|
agents := make([]*agent.AgentConfig, 0, agentPool.Size())
|
|
agentPool.RangeAll(func(key string, value *agent.AgentConfig) {
|
|
agents = append(agents, value)
|
|
})
|
|
return agents
|
|
}
|