mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-03 02:14:24 +08:00
refactoring serverinfo logic
This commit is contained in:
parent
46b2cfef1c
commit
e4189ad8bd
7 changed files with 100 additions and 40 deletions
|
@ -23,6 +23,7 @@ func serverHandlers(r *mux.Router) {
|
|||
r.HandleFunc("/api/server/getconfig", securityCheckServer(false, http.HandlerFunc(getConfig))).Methods("GET")
|
||||
r.HandleFunc("/api/server/removenetwork/{network}", securityCheckServer(true, http.HandlerFunc(removeNetwork))).Methods("DELETE")
|
||||
r.HandleFunc("/api/server/register", authorize(true, false, "node", http.HandlerFunc(register))).Methods("POST")
|
||||
r.HandleFunc("/api/server/getserverinfo", authorize(true, false, "node", http.HandlerFunc(getServerInfo))).Methods("GET")
|
||||
}
|
||||
|
||||
//Security check is middleware for every function and just checks to make sure that its the master calling
|
||||
|
@ -81,6 +82,28 @@ func removeNetwork(w http.ResponseWriter, r *http.Request) {
|
|||
json.NewEncoder(w).Encode("Server removed from network " + params["network"])
|
||||
}
|
||||
|
||||
func getServerInfo(w http.ResponseWriter, r *http.Request) {
|
||||
// Set header
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
|
||||
// get params
|
||||
|
||||
scfg := servercfg.GetServerInfo()
|
||||
returnConf := config.ServerConfig{
|
||||
CoreDNSAddr: scfg.CoreDNSAddr,
|
||||
API: scfg.APIConnString,
|
||||
APIPort: scfg.APIPort,
|
||||
ClientMode: scfg.ClientMode,
|
||||
DNSMode: scfg.DNSMode,
|
||||
Version: scfg.Version,
|
||||
MQPort: scfg.MQPort,
|
||||
Server: scfg.Server,
|
||||
}
|
||||
|
||||
json.NewEncoder(w).Encode(returnConf)
|
||||
//w.WriteHeader(http.StatusOK)
|
||||
}
|
||||
|
||||
func getConfig(w http.ResponseWriter, r *http.Request) {
|
||||
// Set header
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
|
@ -92,25 +115,6 @@ func getConfig(w http.ResponseWriter, r *http.Request) {
|
|||
//w.WriteHeader(http.StatusOK)
|
||||
}
|
||||
|
||||
// func addNetwork(w http.ResponseWriter, r *http.Request) {
|
||||
// // Set header
|
||||
// w.Header().Set("Content-Type", "application/json")
|
||||
|
||||
// // get params
|
||||
// var params = mux.Vars(r)
|
||||
// var networkName = params["network"]
|
||||
// var networkSettings, err := logic.GetNetwork(netwnetworkName)
|
||||
|
||||
// success, err := serverctl.AddNetwork(params["network"])
|
||||
|
||||
// if err != nil || !success {
|
||||
// json.NewEncoder(w).Encode("Could not add server to network " + params["network"])
|
||||
// return
|
||||
// }
|
||||
|
||||
// json.NewEncoder(w).Encode("Server added to network " + params["network"])
|
||||
// }
|
||||
|
||||
// register - registers a client with the server and return the CA and cert
|
||||
func register(w http.ResponseWriter, r *http.Request) {
|
||||
logger.Log(2, "processing registration request")
|
||||
|
|
|
@ -36,11 +36,14 @@ type ClientConfig struct {
|
|||
// ServerConfig - struct for dealing with the server information for a netclient
|
||||
type ServerConfig struct {
|
||||
CoreDNSAddr string `yaml:"corednsaddr"`
|
||||
AccessKey string `yaml:"accesskey"`
|
||||
Server string `yaml:"server"`
|
||||
BrokerPort string `yaml:"brokerport"`
|
||||
API string `yaml:"api"`
|
||||
API string `yaml:"apihost"`
|
||||
APIPort string `yaml:"apiport"`
|
||||
ClientMode string `yaml:"clientmode"`
|
||||
DNSMode string `yaml:"dnsmode"`
|
||||
Version string `yaml:"version"`
|
||||
MQPort string `yaml:"mqport"`
|
||||
Server string `yaml:"server"`
|
||||
AccessKey string `yaml:"accesskey"`
|
||||
}
|
||||
|
||||
// RegisterRequest - struct for registation with netmaker server
|
||||
|
|
|
@ -373,3 +373,39 @@ func Authenticate(cfg *config.ClientConfig) (string, error) {
|
|||
token := tokenData["AuthToken"]
|
||||
return token.(string), nil
|
||||
}
|
||||
|
||||
// RegisterWithServer calls the register endpoint with privatekey and commonname - api returns ca and client certificate
|
||||
func SetServerInfo(cfg *config.ClientConfig) error {
|
||||
cfg, err := config.ReadConfig(cfg.Network)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
url := "https://" + cfg.Server.API + "/api/server/getserverinfo"
|
||||
logger.Log(1, "server at "+url)
|
||||
|
||||
token, err := Authenticate(cfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
response, err := API("", http.MethodGet, url, token)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if response.StatusCode != http.StatusOK {
|
||||
return errors.New(response.Status)
|
||||
}
|
||||
var resp config.ServerConfig
|
||||
if err := json.NewDecoder(response.Body).Decode(&resp); err != nil {
|
||||
return errors.New("unmarshal cert error " + err.Error())
|
||||
}
|
||||
|
||||
// set broker information on register
|
||||
cfg.Server.Server = resp.Server
|
||||
cfg.Server.MQPort = resp.MQPort
|
||||
|
||||
if err = config.Write(cfg, cfg.Node.Network); err != nil {
|
||||
logger.Log(0, "error overwriting config with broker information: "+err.Error())
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -208,11 +208,14 @@ func NewTLSConfig(server string) *tls.Config {
|
|||
// this function is primarily used to create a connection to publish to the broker
|
||||
func setupMQTT(cfg *config.ClientConfig, publish bool) (mqtt.Client, error) {
|
||||
opts := mqtt.NewClientOptions()
|
||||
if cfg.Server.Server == "" || cfg.Server.BrokerPort == "" {
|
||||
reRegisterWithServer(cfg)
|
||||
if cfg.Server.Server == "" || cfg.Server.MQPort == "" {
|
||||
logger.Log(0, "server info looks incomplete - broker="+cfg.Server.Server+", port="+cfg.Server.MQPort+" - pulling latest server details")
|
||||
if err := SetServerInfo(cfg); err != nil {
|
||||
logger.Log(0, "error pulling server info: "+err.Error())
|
||||
}
|
||||
}
|
||||
server := cfg.Server.Server
|
||||
port := cfg.Server.BrokerPort
|
||||
port := cfg.Server.MQPort
|
||||
opts.AddBroker("ssl://" + server + ":" + port)
|
||||
opts.SetTLSConfig(NewTLSConfig(server))
|
||||
opts.SetClientID(ncutils.MakeRandomString(23))
|
||||
|
@ -251,7 +254,7 @@ func setupMQTT(cfg *config.ClientConfig, publish bool) (mqtt.Client, error) {
|
|||
} else {
|
||||
err = token.Error()
|
||||
}
|
||||
if err := checkBroker(cfg.Server.Server, cfg.Server.BrokerPort); err != nil {
|
||||
if err := checkBroker(cfg.Server.Server, cfg.Server.MQPort); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
logger.Log(0, "could not connect to broker", cfg.Server.Server, err.Error())
|
||||
|
|
|
@ -78,5 +78,9 @@ func Pull(network string, iface bool) (*models.Node, error) {
|
|||
if bkupErr != nil {
|
||||
logger.Log(0, "unable to update backup file")
|
||||
}
|
||||
if err = SetServerInfo(cfg); err != nil {
|
||||
logger.Log(0, "error pulling server info: "+err.Error())
|
||||
}
|
||||
|
||||
return &resNode, err
|
||||
}
|
||||
|
|
|
@ -16,12 +16,7 @@ import (
|
|||
|
||||
// Register - the function responsible for registering with the server and acquiring certs
|
||||
func Register(cfg *config.ClientConfig, key string) error {
|
||||
if cfg.Server.Server == "" {
|
||||
return errors.New("no server provided")
|
||||
}
|
||||
if cfg.Server.AccessKey == "" {
|
||||
return errors.New("no access key provided")
|
||||
}
|
||||
|
||||
//generate new key if one doesn' exist
|
||||
var private *ed25519.PrivateKey
|
||||
var err error
|
||||
|
@ -45,15 +40,14 @@ func Register(cfg *config.ClientConfig, key string) error {
|
|||
} else if err != nil {
|
||||
return err
|
||||
}
|
||||
if cfg.Server.Server == "" || cfg.Server.MQPort == "" {
|
||||
return SetServerInfo(cfg)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// RegisterWithServer calls the register endpoint with privatekey and commonname - api returns ca and client certificate
|
||||
func RegisterWithServer(private *ed25519.PrivateKey, cfg *config.ClientConfig) error {
|
||||
cfg, err := config.ReadConfig(cfg.Network)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
data := config.RegisterRequest{
|
||||
Key: *private,
|
||||
CommonName: tls.NewCName(cfg.Node.Name),
|
||||
|
@ -79,7 +73,7 @@ func RegisterWithServer(private *ed25519.PrivateKey, cfg *config.ClientConfig) e
|
|||
|
||||
// set broker information on register
|
||||
cfg.Server.Server = resp.Broker
|
||||
cfg.Server.BrokerPort = resp.Port
|
||||
cfg.Server.MQPort = resp.Port
|
||||
if err = config.Write(cfg, cfg.Node.Network); err != nil {
|
||||
logger.Log(0, "error overwriting config with broker information: "+err.Error())
|
||||
}
|
||||
|
|
|
@ -33,14 +33,12 @@ func GetServerConfig() config.ServerConfig {
|
|||
cfg.CoreDNSAddr = GetCoreDNSAddr()
|
||||
cfg.APIHost = GetAPIHost()
|
||||
cfg.APIPort = GetAPIPort()
|
||||
cfg.APIPort = GetAPIPort()
|
||||
cfg.MQPort = GetMQPort()
|
||||
cfg.MasterKey = "(hidden)"
|
||||
cfg.DNSKey = "(hidden)"
|
||||
cfg.AllowedOrigin = GetAllowedOrigin()
|
||||
cfg.RestBackend = "off"
|
||||
cfg.NodeID = GetNodeID()
|
||||
cfg.MQPort = GetMQPort()
|
||||
if IsRestBackend() {
|
||||
cfg.RestBackend = "on"
|
||||
}
|
||||
|
@ -89,6 +87,24 @@ func GetServerConfig() config.ServerConfig {
|
|||
return cfg
|
||||
}
|
||||
|
||||
// GetServerConfig - gets the server config into memory from file or env
|
||||
func GetServerInfo() config.ServerConfig {
|
||||
var cfg config.ServerConfig
|
||||
cfg.APIConnString = GetAPIConnString()
|
||||
cfg.CoreDNSAddr = GetCoreDNSAddr()
|
||||
cfg.APIHost = GetAPIHost()
|
||||
cfg.APIPort = GetAPIPort()
|
||||
cfg.MQPort = GetMQPort()
|
||||
cfg.DNSMode = "off"
|
||||
if IsDNSMode() {
|
||||
cfg.DNSMode = "on"
|
||||
}
|
||||
cfg.Version = GetVersion()
|
||||
cfg.Server = GetServer()
|
||||
|
||||
return cfg
|
||||
}
|
||||
|
||||
// GetFrontendURL - gets the frontend url
|
||||
func GetFrontendURL() string {
|
||||
var frontend = ""
|
||||
|
|
Loading…
Add table
Reference in a new issue