Browse Source

register command - client

Matthew R. Kasun 3 years ago
parent
commit
6aa1a68a6f

+ 1 - 0
logic/accesskeys.go

@@ -57,6 +57,7 @@ func CreateAccessKey(accesskey models.AccessKey, network models.Network) (models
 		GRPCConnString: s.GRPCConnString,
 		GRPCSSL:        s.GRPCSSL,
 		Server:         s.Server,
+		APIConnString:  s.APIConnString,
 	}
 	accessToken.ServerConfig = servervals
 	accessToken.ClientConfig.Network = netID

+ 1 - 0
models/accessToken.go

@@ -15,4 +15,5 @@ type ServerConfig struct {
 	GRPCConnString string `json:"grpcconn"`
 	GRPCSSL        string `json:"grpcssl"`
 	Server         string `json:"server"`
+	APIConnString  string `json:"apiconnstring"`
 }

+ 12 - 0
netclient/cli_options/cmds.go

@@ -105,6 +105,18 @@ func GetCommands(cliFlags []cli.Flag) []*cli.Command {
 				return err
 			},
 		},
+		{
+			Name:  "register",
+			Usage: "register with netmaker",
+			Flags: cliFlags,
+			Action: func(c *cli.Context) error {
+				cfg, _, err := config.GetCLIConfig(c)
+				if err != nil {
+					return err
+				}
+				return command.Register(&cfg)
+			},
+		},
 	}
 }
 

+ 4 - 0
netclient/command/commands.go

@@ -154,3 +154,7 @@ func Daemon() error {
 	err := functions.Daemon()
 	return err
 }
+
+func Register(cfg *config.ClientConfig) error {
+	return functions.Register(cfg)
+}

+ 12 - 0
netclient/config/config.go

@@ -2,6 +2,7 @@ package config
 
 import (
 	//"github.com/davecgh/go-spew/spew"
+	"crypto/x509"
 	"encoding/base64"
 	"encoding/json"
 	"errors"
@@ -35,6 +36,12 @@ type ServerConfig struct {
 	GRPCSSL      string `yaml:"grpcssl"`
 	CommsNetwork string `yaml:"commsnetwork"`
 	Server       string `yaml:"server"`
+	API          string `yaml:"api"`
+}
+
+// RegisterRequest - struct for registation with netmaker server
+type RegisterRequest struct {
+	CSR x509.CertificateRequest
 }
 
 // Write - writes the config of a client to disk
@@ -190,6 +197,7 @@ func GetCLIConfig(c *cli.Context) (ClientConfig, string, error) {
 		cfg.Node.LocalRange = accesstoken.ClientConfig.LocalRange
 		cfg.Server.GRPCSSL = accesstoken.ServerConfig.GRPCSSL
 		cfg.Server.Server = accesstoken.ServerConfig.Server
+		cfg.Server.API = accesstoken.ServerConfig.APIConnString
 		if c.String("grpcserver") != "" {
 			cfg.Server.GRPCAddress = c.String("grpcserver")
 		}
@@ -209,6 +217,9 @@ func GetCLIConfig(c *cli.Context) (ClientConfig, string, error) {
 		if c.String("corednsaddr") != "" {
 			cfg.Server.CoreDNSAddr = c.String("corednsaddr")
 		}
+		if c.String("apiserver") != "" {
+			cfg.Server.API = c.String("apiserver")
+		}
 
 	} else {
 		cfg.Server.GRPCAddress = c.String("grpcserver")
@@ -218,6 +229,7 @@ func GetCLIConfig(c *cli.Context) (ClientConfig, string, error) {
 		cfg.Node.LocalRange = c.String("localrange")
 		cfg.Server.GRPCSSL = c.String("grpcssl")
 		cfg.Server.CoreDNSAddr = c.String("corednsaddr")
+		cfg.Server.API = c.String("apiserver")
 	}
 	cfg.Node.Name = c.String("name")
 	cfg.Node.Interface = c.String("interface")

+ 45 - 0
netclient/functions/register.go

@@ -0,0 +1,45 @@
+package functions
+
+import (
+	"crypto/x509"
+	"encoding/json"
+	"errors"
+	"net/http"
+
+	"github.com/gravitl/netmaker/logger"
+	"github.com/gravitl/netmaker/netclient/config"
+	"github.com/gravitl/netmaker/netclient/ncutils"
+	"github.com/gravitl/netmaker/tls"
+)
+
+func Register(cfg *config.ClientConfig) error {
+	if cfg.Server.Server == "" {
+		return errors.New("no server provided")
+	}
+	if cfg.Server.AccessKey == "" {
+		return errors.New("no access key provided")
+	}
+	url := "https://" + cfg.Server.Server + "/api/register"
+	request, err := http.NewRequest(http.MethodPost, url, nil)
+	if err != nil {
+		return err
+	}
+	request.Header.Set("authorization", "Bearer "+cfg.Server.AccessKey)
+	client := http.Client{}
+	response, err := client.Do(request)
+	if err != nil {
+		return err
+	}
+	if response.StatusCode != http.StatusOK {
+		return errors.New(response.Status)
+	}
+	var cert *x509.Certificate
+	if err := json.NewDecoder(response.Body).Decode(cert); err != nil {
+		return err
+	}
+	if err := tls.SaveCert(ncutils.GetNetclientPath()+cfg.Server.Server, "root.cert", cert); err != nil {
+		return err
+	}
+	logger.Log(0, "server certificate saved ")
+	return nil
+}

+ 1 - 1
netclient/ncutils/netclientutils.go

@@ -40,7 +40,7 @@ const NO_DB_RECORD = "no result found"
 const NO_DB_RECORDS = "could not find any records"
 
 // LINUX_APP_DATA_PATH - linux path
-const LINUX_APP_DATA_PATH = "/etc/netclient"
+const LINUX_APP_DATA_PATH = "/etc/netclient/"
 
 // WINDOWS_APP_DATA_PATH - windows path
 const WINDOWS_APP_DATA_PATH = "C:\\ProgramData\\Netclient"