mirror of
https://github.com/gravitl/netmaker.git
synced 2025-10-05 00:43:58 +08:00
refactoring serverinfo logic
This commit is contained in:
@@ -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/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/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/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
|
//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"])
|
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) {
|
func getConfig(w http.ResponseWriter, r *http.Request) {
|
||||||
// Set header
|
// Set header
|
||||||
w.Header().Set("Content-Type", "application/json")
|
w.Header().Set("Content-Type", "application/json")
|
||||||
@@ -92,25 +115,6 @@ func getConfig(w http.ResponseWriter, r *http.Request) {
|
|||||||
//w.WriteHeader(http.StatusOK)
|
//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
|
// register - registers a client with the server and return the CA and cert
|
||||||
func register(w http.ResponseWriter, r *http.Request) {
|
func register(w http.ResponseWriter, r *http.Request) {
|
||||||
logger.Log(2, "processing registration 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
|
// ServerConfig - struct for dealing with the server information for a netclient
|
||||||
type ServerConfig struct {
|
type ServerConfig struct {
|
||||||
CoreDNSAddr string `yaml:"corednsaddr"`
|
CoreDNSAddr string `yaml:"corednsaddr"`
|
||||||
AccessKey string `yaml:"accesskey"`
|
API string `yaml:"apihost"`
|
||||||
Server string `yaml:"server"`
|
APIPort string `yaml:"apiport"`
|
||||||
BrokerPort string `yaml:"brokerport"`
|
ClientMode string `yaml:"clientmode"`
|
||||||
API string `yaml:"api"`
|
DNSMode string `yaml:"dnsmode"`
|
||||||
Version string `yaml:"version"`
|
Version string `yaml:"version"`
|
||||||
|
MQPort string `yaml:"mqport"`
|
||||||
|
Server string `yaml:"server"`
|
||||||
|
AccessKey string `yaml:"accesskey"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegisterRequest - struct for registation with netmaker server
|
// RegisterRequest - struct for registation with netmaker server
|
||||||
|
@@ -373,3 +373,39 @@ func Authenticate(cfg *config.ClientConfig) (string, error) {
|
|||||||
token := tokenData["AuthToken"]
|
token := tokenData["AuthToken"]
|
||||||
return token.(string), nil
|
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
|
// this function is primarily used to create a connection to publish to the broker
|
||||||
func setupMQTT(cfg *config.ClientConfig, publish bool) (mqtt.Client, error) {
|
func setupMQTT(cfg *config.ClientConfig, publish bool) (mqtt.Client, error) {
|
||||||
opts := mqtt.NewClientOptions()
|
opts := mqtt.NewClientOptions()
|
||||||
if cfg.Server.Server == "" || cfg.Server.BrokerPort == "" {
|
if cfg.Server.Server == "" || cfg.Server.MQPort == "" {
|
||||||
reRegisterWithServer(cfg)
|
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
|
server := cfg.Server.Server
|
||||||
port := cfg.Server.BrokerPort
|
port := cfg.Server.MQPort
|
||||||
opts.AddBroker("ssl://" + server + ":" + port)
|
opts.AddBroker("ssl://" + server + ":" + port)
|
||||||
opts.SetTLSConfig(NewTLSConfig(server))
|
opts.SetTLSConfig(NewTLSConfig(server))
|
||||||
opts.SetClientID(ncutils.MakeRandomString(23))
|
opts.SetClientID(ncutils.MakeRandomString(23))
|
||||||
@@ -251,7 +254,7 @@ func setupMQTT(cfg *config.ClientConfig, publish bool) (mqtt.Client, error) {
|
|||||||
} else {
|
} else {
|
||||||
err = token.Error()
|
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
|
return nil, err
|
||||||
}
|
}
|
||||||
logger.Log(0, "could not connect to broker", cfg.Server.Server, err.Error())
|
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 {
|
if bkupErr != nil {
|
||||||
logger.Log(0, "unable to update backup file")
|
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
|
return &resNode, err
|
||||||
}
|
}
|
||||||
|
@@ -16,12 +16,7 @@ import (
|
|||||||
|
|
||||||
// Register - the function responsible for registering with the server and acquiring certs
|
// Register - the function responsible for registering with the server and acquiring certs
|
||||||
func Register(cfg *config.ClientConfig, key string) error {
|
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
|
//generate new key if one doesn' exist
|
||||||
var private *ed25519.PrivateKey
|
var private *ed25519.PrivateKey
|
||||||
var err error
|
var err error
|
||||||
@@ -45,15 +40,14 @@ func Register(cfg *config.ClientConfig, key string) error {
|
|||||||
} else if err != nil {
|
} else if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if cfg.Server.Server == "" || cfg.Server.MQPort == "" {
|
||||||
|
return SetServerInfo(cfg)
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegisterWithServer calls the register endpoint with privatekey and commonname - api returns ca and client certificate
|
// RegisterWithServer calls the register endpoint with privatekey and commonname - api returns ca and client certificate
|
||||||
func RegisterWithServer(private *ed25519.PrivateKey, cfg *config.ClientConfig) error {
|
func RegisterWithServer(private *ed25519.PrivateKey, cfg *config.ClientConfig) error {
|
||||||
cfg, err := config.ReadConfig(cfg.Network)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
data := config.RegisterRequest{
|
data := config.RegisterRequest{
|
||||||
Key: *private,
|
Key: *private,
|
||||||
CommonName: tls.NewCName(cfg.Node.Name),
|
CommonName: tls.NewCName(cfg.Node.Name),
|
||||||
@@ -79,7 +73,7 @@ func RegisterWithServer(private *ed25519.PrivateKey, cfg *config.ClientConfig) e
|
|||||||
|
|
||||||
// set broker information on register
|
// set broker information on register
|
||||||
cfg.Server.Server = resp.Broker
|
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 {
|
if err = config.Write(cfg, cfg.Node.Network); err != nil {
|
||||||
logger.Log(0, "error overwriting config with broker information: "+err.Error())
|
logger.Log(0, "error overwriting config with broker information: "+err.Error())
|
||||||
}
|
}
|
||||||
|
@@ -33,14 +33,12 @@ func GetServerConfig() config.ServerConfig {
|
|||||||
cfg.CoreDNSAddr = GetCoreDNSAddr()
|
cfg.CoreDNSAddr = GetCoreDNSAddr()
|
||||||
cfg.APIHost = GetAPIHost()
|
cfg.APIHost = GetAPIHost()
|
||||||
cfg.APIPort = GetAPIPort()
|
cfg.APIPort = GetAPIPort()
|
||||||
cfg.APIPort = GetAPIPort()
|
|
||||||
cfg.MQPort = GetMQPort()
|
cfg.MQPort = GetMQPort()
|
||||||
cfg.MasterKey = "(hidden)"
|
cfg.MasterKey = "(hidden)"
|
||||||
cfg.DNSKey = "(hidden)"
|
cfg.DNSKey = "(hidden)"
|
||||||
cfg.AllowedOrigin = GetAllowedOrigin()
|
cfg.AllowedOrigin = GetAllowedOrigin()
|
||||||
cfg.RestBackend = "off"
|
cfg.RestBackend = "off"
|
||||||
cfg.NodeID = GetNodeID()
|
cfg.NodeID = GetNodeID()
|
||||||
cfg.MQPort = GetMQPort()
|
|
||||||
if IsRestBackend() {
|
if IsRestBackend() {
|
||||||
cfg.RestBackend = "on"
|
cfg.RestBackend = "on"
|
||||||
}
|
}
|
||||||
@@ -89,6 +87,24 @@ func GetServerConfig() config.ServerConfig {
|
|||||||
return cfg
|
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
|
// GetFrontendURL - gets the frontend url
|
||||||
func GetFrontendURL() string {
|
func GetFrontendURL() string {
|
||||||
var frontend = ""
|
var frontend = ""
|
||||||
|
Reference in New Issue
Block a user