fixed client side for multinet and added group filter to query params server side.

This commit is contained in:
afeiszli
2021-04-05 11:06:30 -04:00
parent 0080e9a2ee
commit 1f377997cb
9 changed files with 229 additions and 127 deletions

View File

@@ -37,8 +37,12 @@ func Install(accesskey string, password string, server string, group string, noa
}
defer wgclient.Close()
nodecfg := config.Config.Node
servercfg := config.Config.Server
cfg, err := config.ReadConfig(group)
if err != nil {
log.Printf("No Config Yet. Will Write: %v", err)
}
nodecfg := cfg.Node
servercfg := cfg.Server
fmt.Println("SERVER SETTINGS:")
if server == "" {
@@ -58,7 +62,7 @@ func Install(accesskey string, password string, server string, group string, noa
}
}
fmt.Println(" AccessKey: " + accesskey)
err = config.WriteServer(server, accesskey)
err = config.WriteServer(server, accesskey, group)
if err != nil {
fmt.Println("Error encountered while writing Server Config.")
return err
@@ -278,13 +282,13 @@ func Install(accesskey string, password string, server string, group string, noa
fmt.Println("Awaiting approval from Admin before configuring WireGuard.")
if !noauto {
fmt.Println("Configuring Netmaker Service.")
err = ConfigureSystemD()
err = ConfigureSystemD(group)
return err
}
}
peers, err := getPeers(node.Macaddress, node.Nodegroup, server)
peers, err := getPeers(node.Macaddress, group, server)
if err != nil {
return err
@@ -299,7 +303,7 @@ func Install(accesskey string, password string, server string, group string, noa
return err
}
if !noauto {
err = ConfigureSystemD()
err = ConfigureSystemD(group)
}
if err != nil {
return err
@@ -336,8 +340,16 @@ func getPublicIP() (string, error) {
}
func modConfig(node *nodepb.Node) error{
modconfig := config.Config
modconfig.ReadConfig()
group := node.Nodegroup
if group == "" {
return errors.New("No Group Provided")
}
//modconfig := config.Config
modconfig, err := config.ReadConfig(group)
//modconfig.ReadConfig()
if err != nil {
return err
}
nodecfg := modconfig.Node
if node.Name != ""{
nodecfg.Name = node.Name
@@ -376,7 +388,7 @@ func modConfig(node *nodepb.Node) error{
nodecfg.PostChanges = node.Postchanges
}
modconfig.Node = nodecfg
err := config.Write(modconfig)
err = config.Write(modconfig, group)
return err
}
@@ -417,8 +429,14 @@ func initWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig
}
wgclient, err := wgctrl.New()
modcfg := config.Config
modcfg.ReadConfig()
//modcfg := config.Config
//modcfg.ReadConfig()
modcfg, err := config.ReadConfig(node.Nodegroup)
if err != nil {
return err
}
nodecfg := modcfg.Node
fmt.Println("beginning local WG config")
@@ -535,10 +553,15 @@ func initWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig
return err
}
func setWGConfig() error {
servercfg := config.Config.Server
nodecfg := config.Config.Node
node := getNode()
func setWGConfig(network string) error {
cfg, err := config.ReadConfig(network)
if err != nil {
return err
}
servercfg := cfg.Server
nodecfg := cfg.Node
node := getNode(network)
peers, err := getPeers(node.Macaddress, nodecfg.Group, servercfg.Address)
if err != nil {
@@ -612,10 +635,14 @@ func getPrivateAddr() (string, error) {
}
func CheckIn() error {
node := getNode()
nodecfg := config.Config.Node
servercfg := config.Config.Server
func CheckIn(network string) error {
node := getNode(network)
cfg, err := config.ReadConfig(network)
if err != nil {
return err
}
nodecfg := cfg.Node
servercfg := cfg.Server
fmt.Println("Checking into server: " + servercfg.Address)
setupcheck := true
@@ -661,13 +688,17 @@ func CheckIn() error {
return err
log.Fatalf("Error: %v", err)
}
err = setWGConfig()
err = setWGConfig(network)
if err != nil {
return err
log.Fatalf("Error: %v", err)
}
node = getNode()
nodecfg = config.Config.Node
node = getNode(network)
cfg, err := config.ReadConfig(network)
if err != nil {
return err
}
nodecfg = cfg.Node
}
@@ -683,7 +714,7 @@ func CheckIn() error {
ctx := context.Background()
fmt.Println("Authenticating with GRPC Server")
ctx, err = SetJWT(wcclient)
ctx, err = SetJWT(wcclient, network)
if err != nil {
fmt.Printf("Failed to authenticate: %v", err)
return err
@@ -702,7 +733,7 @@ func CheckIn() error {
)
if err != nil {
if checkinres != nil && checkinres.Checkinresponse.Ispending {
fmt.Println("Node is in pending status. Waiting for Admin approval of node before making furtherupdates.")
fmt.Println("Node is in pending status. Waiting for Admin approval of node before making further updates.")
return nil
}
fmt.Printf("Unable to process Check In request: %v", err)
@@ -710,11 +741,11 @@ func CheckIn() error {
}
fmt.Println("Checked in.")
if checkinres.Checkinresponse.Ispending {
fmt.Println("Node is in pending status. Waiting for Admin approval of node before making furtherupdates.")
fmt.Println("Node is in pending status. Waiting for Admin approval of node before making further updates.")
return err
}
newinterface := getNode().Interface
newinterface := getNode(network).Interface
readreq := &nodepb.ReadNodeReq{
Macaddress: node.Macaddress,
Group: node.Nodegroup,
@@ -736,7 +767,7 @@ func CheckIn() error {
fmt.Println("ERROR DELETING INTERFACE: " + currentiface)
}
}
err = setWGConfig()
err = setWGConfig(network)
}
if checkinres.Checkinresponse.Needconfigupdate {
@@ -756,7 +787,7 @@ func CheckIn() error {
return err
log.Fatalf("Error: %v", err)
}
err = setWGConfig()
err = setWGConfig(network)
if err != nil {
return err
log.Fatalf("Error: %v", err)
@@ -765,7 +796,7 @@ func CheckIn() error {
} else if nodecfg.PostChanges == "true" {
fmt.Println("Node has requested to update remote config.")
fmt.Println("Posting local config to remote server.")
postnode := getNode()
postnode := getNode(network)
req := &nodepb.UpdateNodeReq{
Node: &postnode,
@@ -781,7 +812,7 @@ func CheckIn() error {
return err
log.Fatalf("Error: %v", err)
}
err = setWGConfig()
err = setWGConfig(network)
if err != nil {
return err
log.Fatalf("Error: %v", err)
@@ -791,7 +822,7 @@ func CheckIn() error {
if checkinres.Checkinresponse.Needpeerupdate {
fmt.Println("Server has requested that node update peer list.")
fmt.Println("Updating peer list from remote server.")
err = setWGConfig()
err = setWGConfig(network)
if err != nil {
return err
log.Fatalf("Unable to process Set Peers request: %v", err)
@@ -803,7 +834,7 @@ func CheckIn() error {
_, err := net.InterfaceByName(iface)
if err != nil {
fmt.Println("interface " + iface + " does not currently exist. Setting up WireGuard.")
err = setWGConfig()
err = setWGConfig(network)
if err != nil {
return err
log.Fatalf("Error: %v", err)
@@ -829,9 +860,13 @@ func needInterfaceUpdate(ctx context.Context, mac string, group string, iface st
return iface != oldiface, oldiface, err
}
func getNode() nodepb.Node {
modcfg := config.Config
modcfg.ReadConfig()
func getNode(network string) nodepb.Node {
modcfg, err := config.ReadConfig(network)
if err != nil {
log.Fatalf("Error: %v", err)
}
nodecfg := modcfg.Node
var node nodepb.Node
@@ -856,10 +891,14 @@ func getNode() nodepb.Node {
func Remove() error {
func Remove(network string) error {
//need to implement checkin on server side
servercfg := config.Config.Server
node := config.Config.Node
cfg, err := config.ReadConfig(network)
if err != nil {
return err
}
servercfg := cfg.Server
node := cfg.Node
fmt.Println("Deleting remote node with MAC: " + node.MacAddress)
@@ -875,7 +914,7 @@ func Remove() error {
ctx := context.Background()
fmt.Println("Authenticating with GRPC Server")
ctx, err = SetJWT(wcclient)
ctx, err = SetJWT(wcclient, network)
if err != nil {
//return err
log.Printf("Failed to authenticate: %v", err)
@@ -900,11 +939,11 @@ func Remove() error {
}
}
}
err = WipeLocal()
err = WipeLocal(network)
if err != nil {
log.Printf("Unable to wipe local config: %v", err)
}
err = RemoveSystemDServices()
err = RemoveSystemDServices(network)
if err != nil {
return err
log.Printf("Unable to remove systemd services: %v", err)
@@ -915,17 +954,21 @@ func Remove() error {
return nil
}
func WipeLocal() error{
nodecfg := config.Config.Node
func WipeLocal(network string) error{
cfg, err := config.ReadConfig(network)
if err != nil {
return err
}
nodecfg := cfg.Node
ifacename := nodecfg.Interface
//home, err := homedir.Dir()
home := "/etc/netclient"
err := os.Remove(home + "/.netconfig")
err = os.Remove(home + "/netconfig-" + network)
if err != nil {
fmt.Println(err)
}
err = os.Remove(home + "/.nettoken")
err = os.Remove(home + "/nettoken")
if err != nil {
fmt.Println(err)
}
@@ -967,9 +1010,11 @@ func getPeers(macaddress string, group string, server string) ([]wgtypes.PeerCon
//need to implement checkin on server side
var peers []wgtypes.PeerConfig
var wcclient nodepb.NodeServiceClient
modcfg := config.Config
modcfg.ReadConfig()
nodecfg := modcfg.Node
cfg, err := config.ReadConfig(group)
if err != nil {
log.Fatalf("Issue retrieving config for network: " + group + ". Please investigate: %v", err)
}
nodecfg := cfg.Node
keepalive := nodecfg.KeepAlive
keepalivedur, err := time.ParseDuration(strconv.FormatInt(int64(keepalive), 10) + "s")
if err != nil {
@@ -992,7 +1037,7 @@ func getPeers(macaddress string, group string, server string) ([]wgtypes.PeerCon
}
ctx := context.Background()
fmt.Println("Authenticating with GRPC Server")
ctx, err = SetJWT(wcclient)
ctx, err = SetJWT(wcclient, group)
if err != nil {
fmt.Println("Failed to authenticate.")
return peers, err