Răsfoiți Sursa

add server settings apis, add db table for settigs

abhishek9686 5 luni în urmă
părinte
comite
d6487d8b98
5 a modificat fișierele cu 182 adăugiri și 36 ștergeri
  1. 3 0
      database/database.go
  2. 1 1
      logic/peers.go
  3. 141 0
      logic/settings.go
  4. 34 0
      models/settings.go
  5. 3 35
      servercfg/serverconf.go

+ 3 - 0
database/database.go

@@ -73,6 +73,8 @@ const (
 	TAG_TABLE_NAME = "tags"
 	// PEER_ACK_TABLE - table for failover peer ack
 	PEER_ACK_TABLE = "peer_ack"
+	// SERVER_SETTINGS - table for server settings
+	SERVER_SETTINGS = "server_settings"
 	// == ERROR CONSTS ==
 	// NO_RECORD - no singular result found
 	NO_RECORD = "no result found"
@@ -161,6 +163,7 @@ func createTables() {
 	CreateTable(TAG_TABLE_NAME)
 	CreateTable(ACLS_TABLE_NAME)
 	CreateTable(PEER_ACK_TABLE)
+	CreateTable(SERVER_SETTINGS)
 }
 
 func CreateTable(tableName string) error {

+ 1 - 1
logic/peers.go

@@ -157,7 +157,7 @@ func GetPeerUpdateForHost(network string, host *models.Host, allNodes []models.N
 		Peers:           []wgtypes.PeerConfig{},
 		NodePeers:       []wgtypes.PeerConfig{},
 		HostNetworkInfo: models.HostInfoMap{},
-		ServerConfig:    servercfg.ServerInfo,
+		ServerConfig:    ServerInfo,
 	}
 	defer func() {
 		if !hostPeerUpdate.FwUpdate.AllowAll {

+ 141 - 0
logic/settings.go

@@ -0,0 +1,141 @@
+package logic
+
+import (
+	"encoding/json"
+
+	"github.com/gravitl/netmaker/config"
+	"github.com/gravitl/netmaker/database"
+	"github.com/gravitl/netmaker/models"
+	"github.com/gravitl/netmaker/servercfg"
+)
+
+var ServerInfo = GetServerInfo()
+var serverSettingsDBKey = "server_cfg"
+
+func GetServerSettings() (s models.ServerSettings) {
+	data, err := database.FetchRecord(database.SERVER_SETTINGS, serverSettingsDBKey)
+	if err != nil {
+		return
+	}
+	json.Unmarshal([]byte(data), &s)
+	return
+}
+
+func UpsertServerSettings(s models.ServerSettings) error {
+	data, err := json.Marshal(s)
+	if err != nil {
+		return err
+	}
+	err = database.Insert(database.SERVER_SETTINGS, string(data), serverSettingsDBKey)
+	if err != nil {
+		return err
+	}
+	setServerInfo()
+	return nil
+}
+
+func ValidateNewSettings(req models.ServerSettings) bool {
+	return true
+}
+
+func ConvertServerCfgToSettings(c config.ServerConfig) (s models.ServerSettings) {
+	s.NetclientAutoUpdate = c.NetclientAutoUpdate
+	s.AllowedEmailDomains = c.AllowedEmailDomains
+	s.AuthProvider = c.AuthProvider
+	s.AzureTenant = c.AzureTenant
+	s.BasicAuth = c.BasicAuth
+	s.ClientID = c.ClientID
+	s.ClientSecret = c.ClientSecret
+	s.OIDCIssuer = c.OIDCIssuer
+	s.EmailSenderAddr = c.EmailSenderAddr
+	s.EmailSenderPassword = c.EmailSenderPassword
+	s.EmailSenderUser = c.EmailSenderUser
+	s.EndpointDetection = c.EndpointDetection
+	s.SmtpHost = c.SmtpHost
+	s.SmtpPort = c.SmtpPort
+	s.Stun = c.Stun
+	s.StunServers = c.StunServers
+	s.FrontendURL = c.FrontendURL
+	s.JwtValidityDuration = c.JwtValidityDuration
+	s.AllowedEmailDomains = c.AllowedEmailDomains
+	s.LicenseValue = c.LicenseValue
+	s.NetmakerTenantID = c.NetmakerTenantID
+	s.ManageDNS = c.ManageDNS
+	s.MetricInterval = c.MetricInterval
+	s.MetricsPort = c.MetricsPort
+	s.NetclientAutoUpdate = c.NetclientAutoUpdate
+	s.Telemetry = c.Telemetry
+	s.RacAutoDisable = c.RacAutoDisable
+	s.RacRestrictToSingleNetwork = c.RacRestrictToSingleNetwork
+	return
+}
+
+func MergeServerSettingsToServerConfig(s *config.ServerConfig) {
+	c := GetServerSettings()
+
+	s.NetclientAutoUpdate = c.NetclientAutoUpdate
+	s.AllowedEmailDomains = c.AllowedEmailDomains
+	s.AuthProvider = c.AuthProvider
+	s.AzureTenant = c.AzureTenant
+	s.BasicAuth = c.BasicAuth
+	s.ClientID = c.ClientID
+	s.ClientSecret = c.ClientSecret
+	s.OIDCIssuer = c.OIDCIssuer
+	s.EmailSenderAddr = c.EmailSenderAddr
+	s.EmailSenderPassword = c.EmailSenderPassword
+	s.EmailSenderUser = c.EmailSenderUser
+	s.EndpointDetection = c.EndpointDetection
+	s.SmtpHost = c.SmtpHost
+	s.SmtpPort = c.SmtpPort
+	s.Stun = c.Stun
+	s.StunServers = c.StunServers
+	s.FrontendURL = c.FrontendURL
+	s.JwtValidityDuration = c.JwtValidityDuration
+	s.AllowedEmailDomains = c.AllowedEmailDomains
+	s.LicenseValue = c.LicenseValue
+	s.NetmakerTenantID = c.NetmakerTenantID
+	s.ManageDNS = c.ManageDNS
+	s.MetricInterval = c.MetricInterval
+	s.MetricsPort = c.MetricsPort
+	s.NetclientAutoUpdate = c.NetclientAutoUpdate
+	s.Telemetry = c.Telemetry
+	s.RacAutoDisable = c.RacAutoDisable
+	s.RacRestrictToSingleNetwork = c.RacRestrictToSingleNetwork
+}
+
+func setServerInfo() {
+	ServerInfo = GetServerInfo()
+}
+
+// GetServerInfo - gets the server config into memory from file or env
+func GetServerInfo() models.ServerConfig {
+	var cfg models.ServerConfig
+	serverSettings := GetServerSettings()
+	cfg.Server = servercfg.GetServer()
+	if servercfg.GetBrokerType() == servercfg.EmqxBrokerType {
+		cfg.MQUserName = "HOST_ID"
+		cfg.MQPassword = "HOST_PASS"
+	} else {
+		cfg.MQUserName = servercfg.GetMqUserName()
+		cfg.MQPassword = servercfg.GetMqPassword()
+	}
+	cfg.API = servercfg.GetAPIConnString()
+	cfg.CoreDNSAddr = servercfg.GetCoreDNSAddr()
+	cfg.APIPort = servercfg.GetAPIPort()
+	cfg.DNSMode = "off"
+	cfg.Broker = servercfg.GetPublicBrokerEndpoint()
+	cfg.BrokerType = servercfg.GetBrokerType()
+	if servercfg.IsDNSMode() {
+		cfg.DNSMode = "on"
+	}
+	cfg.Version = servercfg.GetVersion()
+	cfg.IsPro = servercfg.IsPro
+	cfg.MetricInterval = serverSettings.MetricInterval
+	cfg.MetricsPort = serverSettings.MetricsPort
+	cfg.ManageDNS = serverSettings.ManageDNS
+	cfg.Stun = serverSettings.Stun
+	cfg.StunServers = serverSettings.StunServers
+	cfg.DefaultDomain = servercfg.GetDefaultDomain()
+	cfg.EndpointDetection = serverSettings.EndpointDetection
+	return cfg
+}

+ 34 - 0
models/settings.go

@@ -0,0 +1,34 @@
+package models
+
+import "time"
+
+type ServerSettings struct {
+	NetclientAutoUpdate        string        `json:"netclientautoupdate"`
+	Verbosity                  int32         `json:"verbosity"`
+	AuthProvider               string        `json:"authprovider"`
+	OIDCIssuer                 string        `json:"oidcissuer"`
+	ClientID                   string        `json:"client_id"`
+	ClientSecret               string        `json:"client_secret"`
+	FrontendURL                string        `json:"frontend_url"`
+	AzureTenant                string        `json:"azure_tenant"`
+	Telemetry                  string        `json:"telemetry"`
+	BasicAuth                  string        `json:"basic_auth"`
+	LicenseValue               string        `json:"license_value"`
+	NetmakerTenantID           string        `json:"netmaker_tenant_id"`
+	StunPort                   int           `json:"stun_port"`
+	JwtValidityDuration        time.Duration `json:"jwt_validity_duration" swaggertype:"primitive,integer" format:"int64"`
+	RacAutoDisable             bool          `json:"rac_auto_disable"`
+	RacRestrictToSingleNetwork bool          `json:"rac_restrict_to_single_network"`
+	EndpointDetection          bool          `json:"endpoint_detection"`
+	AllowedEmailDomains        string        `json:"allowed_email_domains"`
+	EmailSenderAddr            string        `json:"email_sender_addr"`
+	EmailSenderUser            string        `json:"email_sender_user"`
+	EmailSenderPassword        string        `json:"email_sender_password"`
+	SmtpHost                   string        `json:"smtp_host"`
+	SmtpPort                   int           `json:"smtp_port"`
+	MetricInterval             string        `json:"metric_interval"`
+	MetricsPort                int           `json:"metrics_port"`
+	ManageDNS                  bool          `json:"manage_dns"`
+	Stun                       bool          `json:"stun"`
+	StunServers                string        `json:"stun_servers"`
+}

+ 3 - 35
servercfg/serverconf.go

@@ -11,11 +11,8 @@ import (
 	"time"
 
 	"github.com/gravitl/netmaker/config"
-	"github.com/gravitl/netmaker/models"
 )
 
-var ServerInfo = GetServerInfo()
-
 // EmqxBrokerType denotes the broker type for EMQX MQTT
 const EmqxBrokerType = "emqx"
 
@@ -85,6 +82,7 @@ func GetServerConfig() config.ServerConfig {
 	cfg.ClientID = authInfo[1]
 	cfg.ClientSecret = authInfo[2]
 	cfg.FrontendURL = GetFrontendURL()
+	cfg.AzureTenant = GetAzureTenant()
 	cfg.Telemetry = Telemetry()
 	cfg.Server = GetServer()
 	cfg.Verbosity = GetVerbosity()
@@ -100,6 +98,8 @@ func GetServerConfig() config.ServerConfig {
 	cfg.Stun = IsStunEnabled()
 	cfg.StunServers = GetStunServers()
 	cfg.DefaultDomain = GetDefaultDomain()
+	cfg.LicenseValue = GetLicenseKey()
+	cfg.NetmakerTenantID = GetNetmakerTenantID()
 	return cfg
 }
 
@@ -126,38 +126,6 @@ func GetRacRestrictToSingleNetwork() bool {
 	return os.Getenv("RAC_RESTRICT_TO_SINGLE_NETWORK") == "true"
 }
 
-// GetServerInfo - gets the server config into memory from file or env
-func GetServerInfo() models.ServerConfig {
-	var cfg models.ServerConfig
-	cfg.Server = GetServer()
-	if GetBrokerType() == EmqxBrokerType {
-		cfg.MQUserName = "HOST_ID"
-		cfg.MQPassword = "HOST_PASS"
-	} else {
-		cfg.MQUserName = GetMqUserName()
-		cfg.MQPassword = GetMqPassword()
-	}
-	cfg.API = GetAPIConnString()
-	cfg.CoreDNSAddr = GetCoreDNSAddr()
-	cfg.APIPort = GetAPIPort()
-	cfg.DNSMode = "off"
-	cfg.Broker = GetPublicBrokerEndpoint()
-	cfg.BrokerType = GetBrokerType()
-	if IsDNSMode() {
-		cfg.DNSMode = "on"
-	}
-	cfg.Version = GetVersion()
-	cfg.IsPro = IsPro
-	cfg.MetricInterval = GetMetricInterval()
-	cfg.MetricsPort = GetMetricsPort()
-	cfg.ManageDNS = GetManageDNS()
-	cfg.Stun = IsStunEnabled()
-	cfg.StunServers = GetStunServers()
-	cfg.DefaultDomain = GetDefaultDomain()
-	cfg.EndpointDetection = IsEndpointDetectionEnabled()
-	return cfg
-}
-
 // GetFrontendURL - gets the frontend url
 func GetFrontendURL() string {
 	var frontend = ""