register command - client

This commit is contained in:
Matthew R. Kasun
2022-04-13 15:25:35 -04:00
parent 199ea15b1d
commit 6aa1a68a6f
7 changed files with 76 additions and 1 deletions

View File

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

View File

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

View File

@@ -105,6 +105,18 @@ func GetCommands(cliFlags []cli.Flag) []*cli.Command {
return err 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)
},
},
} }
} }

View File

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

View File

@@ -2,6 +2,7 @@ package config
import ( import (
//"github.com/davecgh/go-spew/spew" //"github.com/davecgh/go-spew/spew"
"crypto/x509"
"encoding/base64" "encoding/base64"
"encoding/json" "encoding/json"
"errors" "errors"
@@ -35,6 +36,12 @@ type ServerConfig struct {
GRPCSSL string `yaml:"grpcssl"` GRPCSSL string `yaml:"grpcssl"`
CommsNetwork string `yaml:"commsnetwork"` CommsNetwork string `yaml:"commsnetwork"`
Server string `yaml:"server"` 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 // 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.Node.LocalRange = accesstoken.ClientConfig.LocalRange
cfg.Server.GRPCSSL = accesstoken.ServerConfig.GRPCSSL cfg.Server.GRPCSSL = accesstoken.ServerConfig.GRPCSSL
cfg.Server.Server = accesstoken.ServerConfig.Server cfg.Server.Server = accesstoken.ServerConfig.Server
cfg.Server.API = accesstoken.ServerConfig.APIConnString
if c.String("grpcserver") != "" { if c.String("grpcserver") != "" {
cfg.Server.GRPCAddress = 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") != "" { if c.String("corednsaddr") != "" {
cfg.Server.CoreDNSAddr = c.String("corednsaddr") cfg.Server.CoreDNSAddr = c.String("corednsaddr")
} }
if c.String("apiserver") != "" {
cfg.Server.API = c.String("apiserver")
}
} else { } else {
cfg.Server.GRPCAddress = c.String("grpcserver") 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.Node.LocalRange = c.String("localrange")
cfg.Server.GRPCSSL = c.String("grpcssl") cfg.Server.GRPCSSL = c.String("grpcssl")
cfg.Server.CoreDNSAddr = c.String("corednsaddr") cfg.Server.CoreDNSAddr = c.String("corednsaddr")
cfg.Server.API = c.String("apiserver")
} }
cfg.Node.Name = c.String("name") cfg.Node.Name = c.String("name")
cfg.Node.Interface = c.String("interface") cfg.Node.Interface = c.String("interface")

View File

@@ -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
}

View File

@@ -40,7 +40,7 @@ const NO_DB_RECORD = "no result found"
const NO_DB_RECORDS = "could not find any records" const NO_DB_RECORDS = "could not find any records"
// LINUX_APP_DATA_PATH - linux path // 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 // WINDOWS_APP_DATA_PATH - windows path
const WINDOWS_APP_DATA_PATH = "C:\\ProgramData\\Netclient" const WINDOWS_APP_DATA_PATH = "C:\\ProgramData\\Netclient"