mirror of
https://github.com/yusing/godoxy.git
synced 2025-05-20 12:42:34 +02:00
improved add agent mechanism
This commit is contained in:
parent
2281c8ac39
commit
4f94a0f08a
4 changed files with 17 additions and 10 deletions
|
@ -84,7 +84,7 @@ func NewHandler(cfg config.ConfigInstance) http.Handler {
|
||||||
mux.HandleFunc("POST", "/v1/homepage/set", v1.SetHomePageOverrides, true)
|
mux.HandleFunc("POST", "/v1/homepage/set", v1.SetHomePageOverrides, true)
|
||||||
mux.HandleFunc("GET", "/v1/agents", v1.ListAgents, true)
|
mux.HandleFunc("GET", "/v1/agents", v1.ListAgents, true)
|
||||||
mux.HandleFunc("GET", "/v1/agents/new", v1.NewAgent, true)
|
mux.HandleFunc("GET", "/v1/agents/new", v1.NewAgent, true)
|
||||||
mux.HandleFunc("POST", "/v1/agents/add", v1.AddAgent, true)
|
mux.HandleFunc("POST", "/v1/agents/verify", v1.VerifyNewAgent, true)
|
||||||
mux.HandleFunc("GET", "/v1/metrics/system_info", v1.SystemInfo, true)
|
mux.HandleFunc("GET", "/v1/metrics/system_info", v1.SystemInfo, true)
|
||||||
mux.HandleFunc("GET", "/v1/metrics/uptime", uptime.Poller.ServeHTTP, true)
|
mux.HandleFunc("GET", "/v1/metrics/uptime", uptime.Poller.ServeHTTP, true)
|
||||||
mux.HandleFunc("GET", "/v1/cert/info", certapi.GetCertInfo, true)
|
mux.HandleFunc("GET", "/v1/cert/info", certapi.GetCertInfo, true)
|
||||||
|
|
|
@ -95,7 +95,7 @@ func NewAgent(w http.ResponseWriter, r *http.Request) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func AddAgent(w http.ResponseWriter, r *http.Request) {
|
func VerifyNewAgent(w http.ResponseWriter, r *http.Request) {
|
||||||
defer r.Body.Close()
|
defer r.Body.Close()
|
||||||
clientPEMData, err := io.ReadAll(r.Body)
|
clientPEMData, err := io.ReadAll(r.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -114,7 +114,7 @@ func AddAgent(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
nRoutesAdded, err := config.GetInstance().AddAgent(data.Host, data.CA, data.Client)
|
nRoutesAdded, err := config.GetInstance().VerifyNewAgent(data.Host, data.CA, data.Client)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
gphttp.ClientError(w, err)
|
gphttp.ClientError(w, err)
|
||||||
return
|
return
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
package config
|
package config
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"slices"
|
||||||
|
|
||||||
"github.com/yusing/go-proxy/agent/pkg/agent"
|
"github.com/yusing/go-proxy/agent/pkg/agent"
|
||||||
"github.com/yusing/go-proxy/internal/gperr"
|
"github.com/yusing/go-proxy/internal/gperr"
|
||||||
"github.com/yusing/go-proxy/internal/logging"
|
|
||||||
"github.com/yusing/go-proxy/internal/route/provider"
|
"github.com/yusing/go-proxy/internal/route/provider"
|
||||||
"github.com/yusing/go-proxy/internal/utils/functional"
|
"github.com/yusing/go-proxy/internal/utils/functional"
|
||||||
)
|
)
|
||||||
|
@ -30,7 +31,13 @@ func (cfg *Config) GetAgent(agentAddrOrDockerHost string) (*agent.AgentConfig, b
|
||||||
return GetAgent(agent.GetAgentAddrFromDockerHost(agentAddrOrDockerHost))
|
return GetAgent(agent.GetAgentAddrFromDockerHost(agentAddrOrDockerHost))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cfg *Config) AddAgent(host string, ca agent.PEMPair, client agent.PEMPair) (int, gperr.Error) {
|
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
|
var agentCfg agent.AgentConfig
|
||||||
agentCfg.Addr = host
|
agentCfg.Addr = host
|
||||||
err := agentCfg.StartWithCerts(cfg.Task(), ca.Cert, client.Cert, client.Key)
|
err := agentCfg.StartWithCerts(cfg.Task(), ca.Cert, client.Cert, client.Key)
|
||||||
|
@ -43,10 +50,10 @@ func (cfg *Config) AddAgent(host string, ca agent.PEMPair, client agent.PEMPair)
|
||||||
if err := cfg.errIfExists(provider); err != nil {
|
if err := cfg.errIfExists(provider); err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
provider.LoadRoutes()
|
err = provider.LoadRoutes()
|
||||||
provider.Start(cfg.Task())
|
if err != nil {
|
||||||
cfg.storeProvider(provider)
|
return 0, gperr.Wrap(err, "failed to load routes")
|
||||||
logging.Info().Msgf("Added agent %s with %d routes", host, provider.NumRoutes())
|
}
|
||||||
return provider.NumRoutes(), nil
|
return provider.NumRoutes(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ type (
|
||||||
RouteProviderList() []string
|
RouteProviderList() []string
|
||||||
Context() context.Context
|
Context() context.Context
|
||||||
GetAgent(agentAddrOrDockerHost string) (*agent.AgentConfig, bool)
|
GetAgent(agentAddrOrDockerHost string) (*agent.AgentConfig, bool)
|
||||||
AddAgent(host string, ca agent.PEMPair, client agent.PEMPair) (int, gperr.Error)
|
VerifyNewAgent(host string, ca agent.PEMPair, client agent.PEMPair) (int, gperr.Error)
|
||||||
ListAgents() []*agent.AgentConfig
|
ListAgents() []*agent.AgentConfig
|
||||||
AutoCertProvider() *autocert.Provider
|
AutoCertProvider() *autocert.Provider
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue