mirror of
https://github.com/gravitl/netmaker.git
synced 2025-09-09 22:55:02 +08:00
configs mostly working. Need to add in public dns default check.
This commit is contained in:
parent
46a81c9767
commit
de3d81db3a
10 changed files with 163 additions and 210 deletions
|
@ -15,7 +15,7 @@ import (
|
||||||
//setting dev by default
|
//setting dev by default
|
||||||
func getEnv() string {
|
func getEnv() string {
|
||||||
|
|
||||||
env := os.Getenv("APP_ENV")
|
env := os.Getenv("NETMAKER_ENV")
|
||||||
|
|
||||||
if len(env) == 0 {
|
if len(env) == 0 {
|
||||||
return "dev"
|
return "dev"
|
||||||
|
@ -35,15 +35,17 @@ type EnvironmentConfig struct {
|
||||||
|
|
||||||
// ServerConfig :
|
// ServerConfig :
|
||||||
type ServerConfig struct {
|
type ServerConfig struct {
|
||||||
Host string `yaml:"host"`
|
APIHost string `yaml:"apihost"`
|
||||||
ApiPort string `yaml:"apiport"`
|
APIPort string `yaml:"apiport"`
|
||||||
GrpcPort string `yaml:"grpcport"`
|
GRPCHost string `yaml:"grpchost"`
|
||||||
|
GRPCPort string `yaml:"grpcport"`
|
||||||
MasterKey string `yaml:"masterkey"`
|
MasterKey string `yaml:"masterkey"`
|
||||||
AllowedOrigin string `yaml:"allowedorigin"`
|
AllowedOrigin string `yaml:"allowedorigin"`
|
||||||
RestBackend bool `yaml:"restbackend"`
|
RestBackend string `yaml:"restbackend"`
|
||||||
AgentBackend bool `yaml:"agentbackend"`
|
AgentBackend string `yaml:"agentbackend"`
|
||||||
DefaultNetName string `yaml:"defaultnetname"`
|
ClientMode string `yaml:"clientmode"`
|
||||||
DefaultNetRange string `yaml:"defaultnetrange"`
|
DNSMode string `yaml:"dnsmode"`
|
||||||
|
DisableRemoteIPCheck string `yaml:"disableremoteipcheck"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type MongoConnConfig struct {
|
type MongoConnConfig struct {
|
||||||
|
@ -59,13 +61,16 @@ type MongoConnConfig struct {
|
||||||
func readConfig() *EnvironmentConfig {
|
func readConfig() *EnvironmentConfig {
|
||||||
file := fmt.Sprintf("config/environments/%s.yaml", getEnv())
|
file := fmt.Sprintf("config/environments/%s.yaml", getEnv())
|
||||||
f, err := os.Open(file)
|
f, err := os.Open(file)
|
||||||
|
var cfg EnvironmentConfig
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
//log.Fatal(err)
|
||||||
os.Exit(2)
|
//os.Exit(2)
|
||||||
|
log.Println("Unable to open config file at config/environments/" + getEnv())
|
||||||
|
log.Println("Will proceed with defaults or enironment variables (no config file).")
|
||||||
|
return &cfg
|
||||||
}
|
}
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
|
|
||||||
var cfg EnvironmentConfig
|
|
||||||
decoder := yaml.NewDecoder(f)
|
decoder := yaml.NewDecoder(f)
|
||||||
err = decoder.Decode(&cfg)
|
err = decoder.Decode(&cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -2,6 +2,7 @@ package controller
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/gravitl/netmaker/mongoconn"
|
"github.com/gravitl/netmaker/mongoconn"
|
||||||
|
"github.com/gravitl/netmaker/servercfg"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"os"
|
"os"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
@ -10,7 +11,6 @@ import (
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/gorilla/handlers"
|
"github.com/gorilla/handlers"
|
||||||
"sync"
|
"sync"
|
||||||
"github.com/gravitl/netmaker/config"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ func HandleRESTRequests(wg *sync.WaitGroup) {
|
||||||
// Currently allowed dev origin is all. Should change in prod
|
// Currently allowed dev origin is all. Should change in prod
|
||||||
// should consider analyzing the allowed methods further
|
// should consider analyzing the allowed methods further
|
||||||
headersOk := handlers.AllowedHeaders([]string{"Access-Control-Allow-Origin", "X-Requested-With", "Content-Type", "authorization"})
|
headersOk := handlers.AllowedHeaders([]string{"Access-Control-Allow-Origin", "X-Requested-With", "Content-Type", "authorization"})
|
||||||
originsOk := handlers.AllowedOrigins([]string{config.Config.Server.AllowedOrigin})
|
originsOk := handlers.AllowedOrigins([]string{servercfg.GetAllowedOrigin()})
|
||||||
methodsOk := handlers.AllowedMethods([]string{"GET", "PUT", "POST", "DELETE"})
|
methodsOk := handlers.AllowedMethods([]string{"GET", "PUT", "POST", "DELETE"})
|
||||||
|
|
||||||
nodeHandlers(r)
|
nodeHandlers(r)
|
||||||
|
@ -32,10 +32,7 @@ func HandleRESTRequests(wg *sync.WaitGroup) {
|
||||||
fileHandlers(r)
|
fileHandlers(r)
|
||||||
serverHandlers(r)
|
serverHandlers(r)
|
||||||
|
|
||||||
port := config.Config.Server.ApiPort
|
port := servercfg.GetAPIPort()
|
||||||
if os.Getenv("API_PORT") != "" {
|
|
||||||
port = os.Getenv("API_PORT")
|
|
||||||
}
|
|
||||||
|
|
||||||
srv := &http.Server{Addr: ":" + port, Handler: handlers.CORS(originsOk, headersOk, methodsOk)(r)}
|
srv := &http.Server{Addr: ":" + port, Handler: handlers.CORS(originsOk, headersOk, methodsOk)(r)}
|
||||||
go func(){
|
go func(){
|
||||||
|
|
|
@ -9,9 +9,8 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
"os"
|
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/gravitl/netmaker/config"
|
"github.com/gravitl/netmaker/servercfg"
|
||||||
"github.com/gravitl/netmaker/functions"
|
"github.com/gravitl/netmaker/functions"
|
||||||
"github.com/gravitl/netmaker/models"
|
"github.com/gravitl/netmaker/models"
|
||||||
"github.com/gravitl/netmaker/mongoconn"
|
"github.com/gravitl/netmaker/mongoconn"
|
||||||
|
@ -83,7 +82,7 @@ func securityCheck(next http.Handler) http.HandlerFunc {
|
||||||
|
|
||||||
//Consider a more secure way of setting master key
|
//Consider a more secure way of setting master key
|
||||||
func authenticateMaster(tokenString string) bool {
|
func authenticateMaster(tokenString string) bool {
|
||||||
if tokenString == config.Config.Server.MasterKey || (tokenString == os.Getenv("MASTER_KEY") && tokenString != "") {
|
if tokenString == servercfg.GetMasterKey() {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
|
|
|
@ -3,7 +3,7 @@ package controller
|
||||||
import (
|
import (
|
||||||
"github.com/gravitl/netmaker/models"
|
"github.com/gravitl/netmaker/models"
|
||||||
"github.com/gravitl/netmaker/serverctl"
|
"github.com/gravitl/netmaker/serverctl"
|
||||||
"github.com/gravitl/netmaker/config"
|
"github.com/gravitl/netmaker/servercfg"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"strings"
|
"strings"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
@ -12,6 +12,7 @@ import (
|
||||||
|
|
||||||
func serverHandlers(r *mux.Router) {
|
func serverHandlers(r *mux.Router) {
|
||||||
r.HandleFunc("/api/server/addnetwork/{network}", securityCheckServer(http.HandlerFunc(addNetwork))).Methods("POST")
|
r.HandleFunc("/api/server/addnetwork/{network}", securityCheckServer(http.HandlerFunc(addNetwork))).Methods("POST")
|
||||||
|
r.HandleFunc("/api/server/getconfig", securityCheckServer(http.HandlerFunc(getConfig))).Methods("GET")
|
||||||
r.HandleFunc("/api/server/removenetwork/{network}", securityCheckServer(http.HandlerFunc(removeNetwork))).Methods("DELETE")
|
r.HandleFunc("/api/server/removenetwork/{network}", securityCheckServer(http.HandlerFunc(removeNetwork))).Methods("DELETE")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,7 +50,7 @@ func securityCheckServer(next http.Handler) http.HandlerFunc {
|
||||||
}
|
}
|
||||||
//Consider a more secure way of setting master key
|
//Consider a more secure way of setting master key
|
||||||
func authenticateMasterServer(tokenString string) bool {
|
func authenticateMasterServer(tokenString string) bool {
|
||||||
if tokenString == config.Config.Server.MasterKey {
|
if tokenString == servercfg.GetMasterKey() {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
|
@ -72,6 +73,18 @@ 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 getConfig(w http.ResponseWriter, r *http.Request) {
|
||||||
|
// Set header
|
||||||
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
|
||||||
|
// get params
|
||||||
|
|
||||||
|
scfg := servercfg.GetConfig()
|
||||||
|
|
||||||
|
w.WriteHeader(http.StatusOK)
|
||||||
|
json.NewEncoder(w).Encode(scfg)
|
||||||
|
}
|
||||||
|
|
||||||
func addNetwork(w http.ResponseWriter, r *http.Request) {
|
func addNetwork(w http.ResponseWriter, r *http.Request) {
|
||||||
// Set header
|
// Set header
|
||||||
w.Header().Set("Content-Type", "application/json")
|
w.Header().Set("Content-Type", "application/json")
|
||||||
|
|
|
@ -2,9 +2,8 @@ package functions
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"time"
|
"time"
|
||||||
"os"
|
|
||||||
"github.com/gravitl/netmaker/config"
|
|
||||||
"github.com/gravitl/netmaker/models"
|
"github.com/gravitl/netmaker/models"
|
||||||
|
"github.com/gravitl/netmaker/servercfg"
|
||||||
"github.com/dgrijalva/jwt-go"
|
"github.com/dgrijalva/jwt-go"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -51,7 +50,7 @@ func CreateUserJWT(username string, isadmin bool) (response string, err error) {
|
||||||
func VerifyUserToken(tokenString string) (username string, isadmin bool, err error) {
|
func VerifyUserToken(tokenString string) (username string, isadmin bool, err error) {
|
||||||
claims := &models.UserClaims{}
|
claims := &models.UserClaims{}
|
||||||
|
|
||||||
if tokenString == config.Config.Server.MasterKey || (tokenString == os.Getenv("MASTER_KEY") && tokenString != "") {
|
if tokenString == servercfg.GetMasterKey() {
|
||||||
return "masteradministrator", true, nil
|
return "masteradministrator", true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,7 +70,7 @@ func VerifyToken(tokenString string) (macaddress string, network string, err err
|
||||||
|
|
||||||
//this may be a stupid way of serving up a master key
|
//this may be a stupid way of serving up a master key
|
||||||
//TODO: look into a different method. Encryption?
|
//TODO: look into a different method. Encryption?
|
||||||
if tokenString == config.Config.Server.MasterKey || (tokenString == os.Getenv("MASTER_KEY") && tokenString != "") {
|
if tokenString == servercfg.GetMasterKey() {
|
||||||
return "mastermac", "", nil
|
return "mastermac", "", nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
23
main.go
23
main.go
|
@ -5,17 +5,11 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
"log"
|
||||||
"flag"
|
|
||||||
"github.com/gravitl/netmaker/models"
|
|
||||||
"github.com/gravitl/netmaker/controllers"
|
"github.com/gravitl/netmaker/controllers"
|
||||||
|
"github.com/gravitl/netmaker/servercfg"
|
||||||
"github.com/gravitl/netmaker/serverctl"
|
"github.com/gravitl/netmaker/serverctl"
|
||||||
"github.com/gravitl/netmaker/functions"
|
|
||||||
"github.com/gravitl/netmaker/mongoconn"
|
"github.com/gravitl/netmaker/mongoconn"
|
||||||
"github.com/gravitl/netmaker/config"
|
|
||||||
"go.mongodb.org/mongo-driver/bson"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
|
||||||
"strings"
|
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"net"
|
"net"
|
||||||
|
@ -23,7 +17,6 @@ import (
|
||||||
"strconv"
|
"strconv"
|
||||||
"sync"
|
"sync"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"go.mongodb.org/mongo-driver/mongo"
|
|
||||||
service "github.com/gravitl/netmaker/controllers"
|
service "github.com/gravitl/netmaker/controllers"
|
||||||
nodepb "github.com/gravitl/netmaker/grpc"
|
nodepb "github.com/gravitl/netmaker/grpc"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
|
@ -33,7 +26,7 @@ import (
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
//Client Mode Prereq Check
|
//Client Mode Prereq Check
|
||||||
if serverctl.IsClientMode() {
|
if servercfg.IsClientMode() {
|
||||||
cmd := exec.Command("id", "-u")
|
cmd := exec.Command("id", "-u")
|
||||||
output, err := cmd.Output()
|
output, err := cmd.Output()
|
||||||
|
|
||||||
|
@ -62,7 +55,7 @@ func main() {
|
||||||
fmt.Printf("Error creating default network: %v", err)
|
fmt.Printf("Error creating default network: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if created && serverctl.IsClientMode() {
|
if created && servercfg.IsClientMode() {
|
||||||
installserver = true
|
installserver = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,17 +67,17 @@ func main() {
|
||||||
var waitnetwork sync.WaitGroup
|
var waitnetwork sync.WaitGroup
|
||||||
|
|
||||||
//Run Agent Server
|
//Run Agent Server
|
||||||
if serverctl.IsAgentBackend() {
|
if servercfg.IsAgentBackend() {
|
||||||
waitnetwork.Add(1)
|
waitnetwork.Add(1)
|
||||||
go runGRPC(&waitnetwork, installserver)
|
go runGRPC(&waitnetwork, installserver)
|
||||||
}
|
}
|
||||||
|
|
||||||
//Run Rest Server
|
//Run Rest Server
|
||||||
if serverctl.IsRestBackend() {
|
if servercfg.IsRestBackend() {
|
||||||
waitnetwork.Add(1)
|
waitnetwork.Add(1)
|
||||||
controller.HandleRESTRequests(&waitnetwork)
|
controller.HandleRESTRequests(&waitnetwork)
|
||||||
}
|
}
|
||||||
if !serverctl.IsAgentBackend() && !serverctl.IsRestBackend {
|
if !servercfg.IsAgentBackend() && !servercfg.IsRestBackend() {
|
||||||
fmt.Println("Oops! No Server Mode selected. Nothing is being served! Set either Agent mode (AGENT_BACKEND) or Rest mode (REST_BACKEND) to 'true'.")
|
fmt.Println("Oops! No Server Mode selected. Nothing is being served! Set either Agent mode (AGENT_BACKEND) or Rest mode (REST_BACKEND) to 'true'.")
|
||||||
}
|
}
|
||||||
waitnetwork.Wait()
|
waitnetwork.Wait()
|
||||||
|
@ -101,9 +94,9 @@ func runGRPC(wg *sync.WaitGroup, installserver bool) {
|
||||||
// Pipe flags to one another (log.LstdFLags = log.Ldate | log.Ltime)
|
// Pipe flags to one another (log.LstdFLags = log.Ldate | log.Ltime)
|
||||||
log.SetFlags(log.LstdFlags | log.Lshortfile)
|
log.SetFlags(log.LstdFlags | log.Lshortfile)
|
||||||
|
|
||||||
grpcport := serverctl.GetGRPCPort()
|
grpcport := servercfg.GetGRPCPort()
|
||||||
|
|
||||||
listener, err := net.Listen("tcp", grpcport)
|
listener, err := net.Listen("tcp", ":"+grpcport)
|
||||||
// Handle errors if any
|
// Handle errors if any
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Unable to listen on port" + grpcport + ": %v", err)
|
log.Fatalf("Unable to listen on port" + grpcport + ": %v", err)
|
||||||
|
|
|
@ -3,10 +3,9 @@ package mongoconn
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
|
||||||
"go.mongodb.org/mongo-driver/mongo"
|
"go.mongodb.org/mongo-driver/mongo"
|
||||||
"go.mongodb.org/mongo-driver/mongo/options"
|
"go.mongodb.org/mongo-driver/mongo/options"
|
||||||
"github.com/gravitl/netmaker/config"
|
"github.com/gravitl/netmaker/servercfg"
|
||||||
)
|
)
|
||||||
|
|
||||||
var Client *mongo.Client
|
var Client *mongo.Client
|
||||||
|
@ -19,51 +18,13 @@ var port string
|
||||||
var opts string
|
var opts string
|
||||||
|
|
||||||
func setVars() {
|
func setVars() {
|
||||||
|
user = servercfg.GetMongoUser()
|
||||||
//defaults
|
pass = servercfg.GetMongoPass()
|
||||||
user = "admin"
|
host = servercfg.GetMongoHost()
|
||||||
pass = "password"
|
port = servercfg.GetMongoPort()
|
||||||
host = "localhost"
|
opts = servercfg.GetMongoOpts()
|
||||||
port = "27017"
|
|
||||||
opts = "/?authSource=admin"
|
|
||||||
|
|
||||||
//override with settings from config file
|
|
||||||
if config.Config.MongoConn.User != "" {
|
|
||||||
user = config.Config.MongoConn.User
|
|
||||||
}
|
|
||||||
if config.Config.MongoConn.Pass != "" {
|
|
||||||
pass = config.Config.MongoConn.Pass
|
|
||||||
}
|
|
||||||
if config.Config.MongoConn.Host != "" {
|
|
||||||
host = config.Config.MongoConn.Host
|
|
||||||
}
|
|
||||||
if config.Config.MongoConn.Port != "" {
|
|
||||||
port = config.Config.MongoConn.Port
|
|
||||||
}
|
|
||||||
if config.Config.MongoConn.Opts != "" {
|
|
||||||
opts = config.Config.MongoConn.Opts
|
|
||||||
}
|
|
||||||
|
|
||||||
//override with settings from env
|
|
||||||
if os.Getenv("MONGO_USER") != "" {
|
|
||||||
user = os.Getenv("MONGO_USER")
|
|
||||||
}
|
|
||||||
if os.Getenv("MONGO_PASS") != "" {
|
|
||||||
pass = os.Getenv("MONGO_PASS")
|
|
||||||
}
|
|
||||||
if os.Getenv("MONGO_HOST") != "" {
|
|
||||||
host = os.Getenv("MONGO_HOST")
|
|
||||||
}
|
|
||||||
if os.Getenv("MONGO_PORT") != "" {
|
|
||||||
port = os.Getenv("MONGO_PORT")
|
|
||||||
}
|
|
||||||
if os.Getenv("MONGO_OPTS") != "" {
|
|
||||||
opts = os.Getenv("MONGO_OPTS")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: are we even using this besides at startup? Is it truely necessary?
|
|
||||||
//TODO: Use config file instead of os.Getenv
|
|
||||||
func ConnectDatabase() {
|
func ConnectDatabase() {
|
||||||
// Set client options
|
// Set client options
|
||||||
|
|
||||||
|
|
53
servercfg/mongoconf.go
Normal file
53
servercfg/mongoconf.go
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
package servercfg
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gravitl/netmaker/config"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetMongoUser() string {
|
||||||
|
user := "mongoadmin"
|
||||||
|
if os.Getenv("MONGO_ADMIN") != "" {
|
||||||
|
user = os.Getenv("MONGO_ADMIN")
|
||||||
|
} else if config.Config.MongoConn.User != "" {
|
||||||
|
user = config.Config.MongoConn.User
|
||||||
|
}
|
||||||
|
return user
|
||||||
|
}
|
||||||
|
func GetMongoPass() string {
|
||||||
|
pass := "mongopass"
|
||||||
|
if os.Getenv("MONGO_PASS") != "" {
|
||||||
|
pass = os.Getenv("MONGO_PASS")
|
||||||
|
} else if config.Config.MongoConn.Pass != "" {
|
||||||
|
pass = config.Config.MongoConn.Pass
|
||||||
|
}
|
||||||
|
return pass
|
||||||
|
}
|
||||||
|
func GetMongoHost() string {
|
||||||
|
host := "127.0.0.1"
|
||||||
|
if os.Getenv("MONGO_HOST") != "" {
|
||||||
|
host = os.Getenv("MONGO_HOST")
|
||||||
|
} else if config.Config.MongoConn.Host != "" {
|
||||||
|
host = config.Config.MongoConn.Host
|
||||||
|
}
|
||||||
|
return host
|
||||||
|
}
|
||||||
|
func GetMongoPort() string {
|
||||||
|
port := "27017"
|
||||||
|
if os.Getenv("MONGO_PORT") != "" {
|
||||||
|
port = os.Getenv("MONGO_PORT")
|
||||||
|
} else if config.Config.MongoConn.Port != "" {
|
||||||
|
port = config.Config.MongoConn.Port
|
||||||
|
}
|
||||||
|
return port
|
||||||
|
}
|
||||||
|
func GetMongoOpts() string {
|
||||||
|
opts := "/?authSource=admin"
|
||||||
|
if os.Getenv("MONGO_OPTS") != "" {
|
||||||
|
opts = os.Getenv("MONGO_OPTS")
|
||||||
|
} else if config.Config.MongoConn.Opts != "" {
|
||||||
|
opts = config.Config.MongoConn.Opts
|
||||||
|
}
|
||||||
|
return opts
|
||||||
|
}
|
||||||
|
|
|
@ -1,4 +1,12 @@
|
||||||
package serverctl
|
package servercfg
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gravitl/netmaker/config"
|
||||||
|
"net/http"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"errors"
|
||||||
|
)
|
||||||
|
|
||||||
func SetHost() error {
|
func SetHost() error {
|
||||||
remoteip, err := GetPublicIP()
|
remoteip, err := GetPublicIP()
|
||||||
|
@ -6,9 +14,41 @@ func SetHost() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
os.Setenv("SERVER_HOST", remoteip)
|
os.Setenv("SERVER_HOST", remoteip)
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
func GetConfig() config.ServerConfig {
|
||||||
|
var cfg config.ServerConfig
|
||||||
|
cfg.APIHost = GetAPIHost()
|
||||||
|
cfg.APIPort = GetAPIPort()
|
||||||
|
cfg.GRPCHost = GetGRPCHost()
|
||||||
|
cfg.GRPCPort = GetGRPCPort()
|
||||||
|
cfg.MasterKey = "(hidden)"
|
||||||
|
cfg.AllowedOrigin = GetAllowedOrigin()
|
||||||
|
cfg.RestBackend = "off"
|
||||||
|
if IsRestBackend() {
|
||||||
|
cfg.RestBackend = "on"
|
||||||
|
}
|
||||||
|
cfg.AgentBackend = "off"
|
||||||
|
if IsAgentBackend() {
|
||||||
|
cfg.AgentBackend = "on"
|
||||||
|
}
|
||||||
|
cfg.ClientMode = "off"
|
||||||
|
if IsClientMode() {
|
||||||
|
cfg.ClientMode = "on"
|
||||||
|
}
|
||||||
|
cfg.DNSMode = "off"
|
||||||
|
if IsDNSMode() {
|
||||||
|
cfg.DNSMode = "on"
|
||||||
|
}
|
||||||
|
cfg.DisableRemoteIPCheck = "off"
|
||||||
|
if DisableRemoteIPCheck() {
|
||||||
|
cfg.DisableRemoteIPCheck = "on"
|
||||||
|
}
|
||||||
|
return cfg
|
||||||
|
}
|
||||||
|
|
||||||
func GetAPIHost() string {
|
func GetAPIHost() string {
|
||||||
serverhost := 127.0.0.1
|
serverhost := "127.0.0.1"
|
||||||
if os.Getenv("SERVER_HTTP_HOST") != "" {
|
if os.Getenv("SERVER_HTTP_HOST") != "" {
|
||||||
serverhost = os.Getenv("SERVER_HTTP_HOST")
|
serverhost = os.Getenv("SERVER_HTTP_HOST")
|
||||||
} else if config.Config.Server.APIHost != "" {
|
} else if config.Config.Server.APIHost != "" {
|
||||||
|
@ -28,7 +68,7 @@ func GetAPIPort() string {
|
||||||
return apiport
|
return apiport
|
||||||
}
|
}
|
||||||
func GetGRPCHost() string {
|
func GetGRPCHost() string {
|
||||||
serverhost := 127.0.0.1
|
serverhost := "127.0.0.1"
|
||||||
if os.Getenv("SERVER_GRPC_HOST") != "" {
|
if os.Getenv("SERVER_GRPC_HOST") != "" {
|
||||||
serverhost = os.Getenv("SERVER_GRPC_HOST")
|
serverhost = os.Getenv("SERVER_GRPC_HOST")
|
||||||
} else if config.Config.Server.GRPCHost != "" {
|
} else if config.Config.Server.GRPCHost != "" {
|
||||||
|
@ -68,7 +108,7 @@ func GetAllowedOrigin() string {
|
||||||
func IsRestBackend() bool {
|
func IsRestBackend() bool {
|
||||||
isrest := true
|
isrest := true
|
||||||
if os.Getenv("REST_BACKEND") != "" {
|
if os.Getenv("REST_BACKEND") != "" {
|
||||||
if os.Getenv("REST_BACKEND") == "off"
|
if os.Getenv("REST_BACKEND") == "off" {
|
||||||
isrest = false
|
isrest = false
|
||||||
}
|
}
|
||||||
} else if config.Config.Server.RestBackend != "" {
|
} else if config.Config.Server.RestBackend != "" {
|
||||||
|
@ -81,7 +121,7 @@ func IsRestBackend() bool {
|
||||||
func IsAgentBackend() bool {
|
func IsAgentBackend() bool {
|
||||||
isagent := true
|
isagent := true
|
||||||
if os.Getenv("AGENT_BACKEND") != "" {
|
if os.Getenv("AGENT_BACKEND") != "" {
|
||||||
if os.Getenv("AGENT_BACKEND") == "off"
|
if os.Getenv("AGENT_BACKEND") == "off" {
|
||||||
isagent = false
|
isagent = false
|
||||||
}
|
}
|
||||||
} else if config.Config.Server.AgentBackend != "" {
|
} else if config.Config.Server.AgentBackend != "" {
|
||||||
|
@ -94,7 +134,7 @@ func IsAgentBackend() bool {
|
||||||
func IsClientMode() bool {
|
func IsClientMode() bool {
|
||||||
isclient := true
|
isclient := true
|
||||||
if os.Getenv("CLIENT_MODE") != "" {
|
if os.Getenv("CLIENT_MODE") != "" {
|
||||||
if os.Getenv("CLIENT_MODE") == "off"
|
if os.Getenv("CLIENT_MODE") == "off" {
|
||||||
isclient = false
|
isclient = false
|
||||||
}
|
}
|
||||||
} else if config.Config.Server.ClientMode != "" {
|
} else if config.Config.Server.ClientMode != "" {
|
||||||
|
@ -107,7 +147,7 @@ func IsClientMode() bool {
|
||||||
func IsDNSMode() bool {
|
func IsDNSMode() bool {
|
||||||
isdns := true
|
isdns := true
|
||||||
if os.Getenv("DNS_MODE") != "" {
|
if os.Getenv("DNS_MODE") != "" {
|
||||||
if os.Getenv("DNS_MODE") == "off"
|
if os.Getenv("DNS_MODE") == "off" {
|
||||||
isdns = false
|
isdns = false
|
||||||
}
|
}
|
||||||
} else if config.Config.Server.DNSMode != "" {
|
} else if config.Config.Server.DNSMode != "" {
|
||||||
|
@ -120,11 +160,11 @@ func IsDNSMode() bool {
|
||||||
func DisableRemoteIPCheck() bool {
|
func DisableRemoteIPCheck() bool {
|
||||||
disabled := false
|
disabled := false
|
||||||
if os.Getenv("DISABLE_REMOTE_IP_CHECK") != "" {
|
if os.Getenv("DISABLE_REMOTE_IP_CHECK") != "" {
|
||||||
if os.Getenv("DISABLE_REMOTE_IP_CHECK") == "on"
|
if os.Getenv("DISABLE_REMOTE_IP_CHECK") == "on" {
|
||||||
disabled = true
|
disabled = true
|
||||||
}
|
}
|
||||||
} else if config.Config.Server.DisableRemoteIpCheck != "" {
|
} else if config.Config.Server.DisableRemoteIPCheck != "" {
|
||||||
if config.Config.Server.DisableRemoteIpCheck == "on" {
|
if config.Config.Server.DisableRemoteIPCheck == "on" {
|
||||||
disabled= true
|
disabled= true
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -2,10 +2,13 @@ package serverctl
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
|
||||||
"io/ioutil"
|
|
||||||
"github.com/gravitl/netmaker/functions"
|
"github.com/gravitl/netmaker/functions"
|
||||||
|
"github.com/gravitl/netmaker/models"
|
||||||
|
"github.com/gravitl/netmaker/mongoconn"
|
||||||
|
"github.com/gravitl/netmaker/servercfg"
|
||||||
"io"
|
"io"
|
||||||
|
"time"
|
||||||
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
@ -16,7 +19,7 @@ func CreateDefaultNetwork() (bool, error) {
|
||||||
fmt.Println("Creating default network...")
|
fmt.Println("Creating default network...")
|
||||||
|
|
||||||
iscreated := false
|
iscreated := false
|
||||||
exists, err := functions.NetworkExists(config.Config.Server.DefaultNetName)
|
exists, err := functions.NetworkExists("default")
|
||||||
|
|
||||||
if exists || err != nil {
|
if exists || err != nil {
|
||||||
fmt.Println("Default network already exists. Skipping...")
|
fmt.Println("Default network already exists. Skipping...")
|
||||||
|
@ -56,116 +59,6 @@ func CreateDefaultNetwork() (bool, error) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetHTTPPort() (string, error) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetGRPCPort() (string, error) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetServerDomain() (string, error) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func modConfig(node *nodepb.Node) error{
|
|
||||||
network := node.Nodenetwork
|
|
||||||
if network == "" {
|
|
||||||
return errors.New("No Network Provided")
|
|
||||||
}
|
|
||||||
modconfig, err := config.ReadConfig(network)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
nodecfg := modconfig.Node
|
|
||||||
if node.Name != ""{
|
|
||||||
nodecfg.Name = node.Name
|
|
||||||
}
|
|
||||||
if node.Interface != ""{
|
|
||||||
nodecfg.Interface = node.Interface
|
|
||||||
}
|
|
||||||
if node.Nodenetwork != ""{
|
|
||||||
nodecfg.Network = node.Nodenetwork
|
|
||||||
}
|
|
||||||
if node.Macaddress != ""{
|
|
||||||
nodecfg.MacAddress = node.Macaddress
|
|
||||||
}
|
|
||||||
if node.Localaddress != ""{
|
|
||||||
nodecfg.LocalAddress = node.Localaddress
|
|
||||||
}
|
|
||||||
if node.Postup != ""{
|
|
||||||
nodecfg.PostUp = node.Postup
|
|
||||||
}
|
|
||||||
if node.Postdown != ""{
|
|
||||||
nodecfg.PostDown = node.Postdown
|
|
||||||
}
|
|
||||||
if node.Listenport != 0{
|
|
||||||
nodecfg.Port = node.Listenport
|
|
||||||
}
|
|
||||||
if node.Keepalive != 0{
|
|
||||||
nodecfg.KeepAlive = node.Keepalive
|
|
||||||
}
|
|
||||||
if node.Publickey != ""{
|
|
||||||
nodecfg.PublicKey = node.Publickey
|
|
||||||
}
|
|
||||||
if node.Endpoint != ""{
|
|
||||||
nodecfg.Endpoint = node.Endpoint
|
|
||||||
}
|
|
||||||
if node.Password != ""{
|
|
||||||
nodecfg.Password = node.Password
|
|
||||||
}
|
|
||||||
if node.Address != ""{
|
|
||||||
nodecfg.WGAddress = node.Address
|
|
||||||
}
|
|
||||||
if node.Postchanges != "" {
|
|
||||||
nodecfg.PostChanges = node.Postchanges
|
|
||||||
}
|
|
||||||
if node.Localrange != "" && node.Islocal {
|
|
||||||
nodecfg.IsLocal = true
|
|
||||||
nodecfg.LocalRange = node.Localrange
|
|
||||||
}
|
|
||||||
modconfig.Node = nodecfg
|
|
||||||
err = config.Write(modconfig, network)
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func SetGlobalConfig(globalconf models.GlobalConfig) (error) {
|
|
||||||
|
|
||||||
if err != nil && err != mongo.ErrNoDocuments{
|
|
||||||
log.Fatalf("Unable to set global config: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
collection := mongoconn.Client.Database("netmaker").Collection("config")
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
|
||||||
|
|
||||||
create, _, err := functions.GetGlobalConfig()
|
|
||||||
if create {
|
|
||||||
_, err := collection.InsertOne(ctx, globalconf)
|
|
||||||
defer cancel()
|
|
||||||
if err != nil {
|
|
||||||
if err == mongo.ErrNoDocuments || strings.Contains(err.Error(), "no documents in result"){
|
|
||||||
return nil
|
|
||||||
} else {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
filter := bson.M{"name": "netmaker"}
|
|
||||||
update := bson.D{
|
|
||||||
{"$set", bson.D{
|
|
||||||
{"servergrpc", globalconf.ServerGRPC},
|
|
||||||
{"portgrpc", globalconf.PortGRPC},
|
|
||||||
}},
|
|
||||||
}
|
|
||||||
err := collection.FindOneAndUpdate(ctx, filter, update).Decode(&globalconf)
|
|
||||||
if err == mongo.ErrNoDocuments {
|
|
||||||
//if err == mongo.ErrNoDocuments || strings.Contains(err.Error(), "no documents in result"){
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func DownloadNetclient() error {
|
func DownloadNetclient() error {
|
||||||
/*
|
/*
|
||||||
// Get the data
|
// Get the data
|
||||||
|
@ -247,7 +140,7 @@ func RemoveNetwork(network string) (bool, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func AddNetwork(network string) (bool, error) {
|
func AddNetwork(network string) (bool, error) {
|
||||||
pubip, err := GetPublicIP()
|
pubip, err := servercfg.GetPublicIP()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println("could not get public IP.")
|
fmt.Println("could not get public IP.")
|
||||||
return false, err
|
return false, err
|
||||||
|
|
Loading…
Add table
Reference in a new issue