Merge branch 'develop' into fix-tests

This commit is contained in:
Matthew R Kasun 2021-04-19 12:02:01 -04:00 committed by GitHub
commit 3ec0505a57
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 298 additions and 154 deletions

View file

@ -204,7 +204,7 @@ func UpdateNode(nodechange models.Node, node models.Node) (models.Node, error) {
{"expdatetime", node.ExpirationDateTime}, {"expdatetime", node.ExpirationDateTime},
{"endpoint", node.Endpoint}, {"endpoint", node.Endpoint},
{"postup", node.PostUp}, {"postup", node.PostUp},
{"preup", node.PostDown}, {"postdown", node.PostDown},
{"macaddress", node.MacAddress}, {"macaddress", node.MacAddress},
{"localaddress", node.LocalAddress}, {"localaddress", node.LocalAddress},
{"persistentkeepalive", node.PersistentKeepalive}, {"persistentkeepalive", node.PersistentKeepalive},

View file

@ -218,25 +218,25 @@ func keyUpdate(w http.ResponseWriter, r *http.Request) {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
filter := bson.M{"netid": params["networkname"]} filter := bson.M{"netid": params["networkname"]}
// prepare update model. // prepare update model.
update := bson.D{ update := bson.D{
{"$set", bson.D{ {"$set", bson.D{
{"addressrange", network.AddressRange}, {"addressrange", network.AddressRange},
{"displayname", network.DisplayName}, {"displayname", network.DisplayName},
{"defaultlistenport", network.DefaultListenPort}, {"defaultlistenport", network.DefaultListenPort},
{"defaultpostup", network.DefaultPostUp}, {"defaultpostup", network.DefaultPostUp},
{"defaultpreup", network.DefaultPostDown}, {"defaultpostdown", network.DefaultPostDown},
{"defaultkeepalive", network.DefaultKeepalive}, {"defaultkeepalive", network.DefaultKeepalive},
{"keyupdatetimestamp", network.KeyUpdateTimeStamp}, {"keyupdatetimestamp", network.KeyUpdateTimeStamp},
{"defaultsaveconfig", network.DefaultSaveConfig}, {"defaultsaveconfig", network.DefaultSaveConfig},
{"defaultinterface", network.DefaultInterface}, {"defaultinterface", network.DefaultInterface},
{"nodeslastmodified", network.NodesLastModified}, {"nodeslastmodified", network.NodesLastModified},
{"networklastmodified", network.NetworkLastModified}, {"networklastmodified", network.NetworkLastModified},
{"allowmanualsignup", network.AllowManualSignUp}, {"allowmanualsignup", network.AllowManualSignUp},
{"checkininterval", network.DefaultCheckInInterval}, {"checkininterval", network.DefaultCheckInInterval},
}}, }},
} }
err = collection.FindOneAndUpdate(ctx, filter, update).Decode(&network) err = collection.FindOneAndUpdate(ctx, filter, update).Decode(&network)
@ -390,25 +390,24 @@ func updateNetwork(w http.ResponseWriter, r *http.Request) {
if haschange { if haschange {
network.SetNetworkLastModified() network.SetNetworkLastModified()
} }
// prepare update model.
// prepare update model. update := bson.D{
update := bson.D{ {"$set", bson.D{
{"$set", bson.D{ {"addressrange", network.AddressRange},
{"addressrange", network.AddressRange}, {"displayname", network.DisplayName},
{"displayname", network.DisplayName}, {"defaultlistenport", network.DefaultListenPort},
{"defaultlistenport", network.DefaultListenPort}, {"defaultpostup", network.DefaultPostUp},
{"defaultpostup", network.DefaultPostUp}, {"defaultpostdown", network.DefaultPostDown},
{"defaultpreup", network.DefaultPostDown}, {"defaultkeepalive", network.DefaultKeepalive},
{"defaultkeepalive", network.DefaultKeepalive}, {"defaultsaveconfig", network.DefaultSaveConfig},
{"defaultsaveconfig", network.DefaultSaveConfig}, {"defaultinterface", network.DefaultInterface},
{"defaultinterface", network.DefaultInterface}, {"nodeslastmodified", network.NodesLastModified},
{"nodeslastmodified", network.NodesLastModified}, {"networklastmodified", network.NetworkLastModified},
{"networklastmodified", network.NetworkLastModified}, {"allowmanualsignup", network.AllowManualSignUp},
{"allowmanualsignup", network.AllowManualSignUp}, {"localrange", network.LocalRange},
{"localrange", network.LocalRange}, {"islocal", network.IsLocal},
{"islocal", network.IsLocal}, {"checkininterval", network.DefaultCheckInInterval},
{"checkininterval", network.DefaultCheckInInterval}, }},
}},
} }
err = collection.FindOneAndUpdate(ctx, filter, update).Decode(&network) err = collection.FindOneAndUpdate(ctx, filter, update).Decode(&network)

View file

@ -3,6 +3,7 @@ package controller
import ( import (
"context" "context"
"fmt" "fmt"
"strconv"
nodepb "github.com/gravitl/netmaker/grpc" nodepb "github.com/gravitl/netmaker/grpc"
"github.com/gravitl/netmaker/models" "github.com/gravitl/netmaker/models"
"github.com/gravitl/netmaker/functions" "github.com/gravitl/netmaker/functions"
@ -20,6 +21,7 @@ func (s *NodeServiceServer) ReadNode(ctx context.Context, req *nodepb.ReadNodeRe
// convert string id (from proto) to mongoDB ObjectId // convert string id (from proto) to mongoDB ObjectId
macaddress := req.GetMacaddress() macaddress := req.GetMacaddress()
networkName := req.GetNetwork() networkName := req.GetNetwork()
network, _ := functions.GetParentNetwork(networkName)
node, err := GetNode(macaddress, networkName) node, err := GetNode(macaddress, networkName)
@ -50,6 +52,9 @@ func (s *NodeServiceServer) ReadNode(ctx context.Context, req *nodepb.ReadNodeRe
Publickey: node.PublicKey, Publickey: node.PublicKey,
Listenport: node.ListenPort, Listenport: node.ListenPort,
Keepalive: node.PersistentKeepalive, Keepalive: node.PersistentKeepalive,
Islocal: *network.IsLocal,
Localrange: network.LocalRange,
}, },
} }
return response, nil return response, nil
@ -87,9 +92,18 @@ func (s *NodeServiceServer) CreateNode(ctx context.Context, req *nodepb.CreateNo
//Check to see if key is valid //Check to see if key is valid
//TODO: Triple inefficient!!! This is the third call to the DB we make for networks //TODO: Triple inefficient!!! This is the third call to the DB we make for networks
validKey := functions.IsKeyValid(node.Network, node.AccessKey) validKey := functions.IsKeyValid(node.Network, node.AccessKey)
network, err := functions.GetParentNetwork(node.Network)
if err != nil {
return nil, status.Errorf(codes.NotFound, fmt.Sprintf("Could not find network: %v", err))
} else {
fmt.Println("Creating node in network " + network.NetID)
fmt.Println("Network is local? " + strconv.FormatBool(*network.IsLocal))
fmt.Println("Range if local: " + network.LocalRange)
}
if !validKey { if !validKey {
network, _ := functions.GetParentNetwork(node.Network)
//Check to see if network will allow manual sign up //Check to see if network will allow manual sign up
//may want to switch this up with the valid key check and avoid a DB call that way. //may want to switch this up with the valid key check and avoid a DB call that way.
if *network.AllowManualSignUp { if *network.AllowManualSignUp {
@ -126,6 +140,8 @@ func (s *NodeServiceServer) CreateNode(ctx context.Context, req *nodepb.CreateNo
Publickey: node.PublicKey, Publickey: node.PublicKey,
Listenport: node.ListenPort, Listenport: node.ListenPort,
Keepalive: node.PersistentKeepalive, Keepalive: node.PersistentKeepalive,
Islocal: *network.IsLocal,
Localrange: network.LocalRange,
}, },
} }
err = SetNetworkNodesLastModified(node.Network) err = SetNetworkNodesLastModified(node.Network)
@ -208,6 +224,8 @@ func (s *NodeServiceServer) UpdateNode(ctx context.Context, req *nodepb.UpdateNo
// Convert the Id string to a MongoDB ObjectId // Convert the Id string to a MongoDB ObjectId
macaddress := nodechange.MacAddress macaddress := nodechange.MacAddress
networkName := nodechange.Network networkName := nodechange.Network
network, _ := functions.GetParentNetwork(networkName)
err := ValidateNode("update", networkName, nodechange) err := ValidateNode("update", networkName, nodechange)
if err != nil { if err != nil {
@ -247,6 +265,8 @@ func (s *NodeServiceServer) UpdateNode(ctx context.Context, req *nodepb.UpdateNo
Publickey: newnode.PublicKey, Publickey: newnode.PublicKey,
Listenport: newnode.ListenPort, Listenport: newnode.ListenPort,
Keepalive: newnode.PersistentKeepalive, Keepalive: newnode.PersistentKeepalive,
Islocal: *network.IsLocal,
Localrange: network.LocalRange,
}, },
}, nil }, nil

View file

@ -686,7 +686,7 @@ func deleteGateway(w http.ResponseWriter, r *http.Request) {
update := bson.D{ update := bson.D{
{"$set", bson.D{ {"$set", bson.D{
{"postup", nodechange.PostUp}, {"postup", nodechange.PostUp},
{"preup", nodechange.PostDown}, {"postdown", nodechange.PostDown},
{"isgateway", nodechange.IsGateway}, {"isgateway", nodechange.IsGateway},
{"gatewayrange", nodechange.GatewayRange}, {"gatewayrange", nodechange.GatewayRange},
{"lastmodified", nodechange.LastModified}, {"lastmodified", nodechange.LastModified},
@ -703,7 +703,7 @@ func deleteGateway(w http.ResponseWriter, r *http.Request) {
return return
} }
err = SetNetworkNodesLastModified(params["networkname"]) err = SetNetworkNodesLastModified(params["network"])
if err != nil { if err != nil {
returnErrorResponse(w,r,formatError(err, "internal")) returnErrorResponse(w,r,formatError(err, "internal"))
return return

View file

@ -495,19 +495,19 @@ func TestUpdateNetwork(t *testing.T) {
assert.Nil(t, err, err) assert.Nil(t, err, err)
assert.Equal(t, network.DefaultPostUp, returnedNetwork.DefaultPostUp) assert.Equal(t, network.DefaultPostUp, returnedNetwork.DefaultPostUp)
}) })
t.Run("UpdatePreUP", func(t *testing.T) { t.Run("UpdatePostDown", func(t *testing.T) {
type Network struct { type Network struct {
DefaultPreUp string DefaultPostDown string
} }
var network Network var network Network
network.DefaultPreUp = "test string" network.DefaultPostDown = "test string"
response, err := api(t, network, http.MethodPut, "http://localhost:8081/api/networks/skynet", "secretkey") response, err := api(t, network, http.MethodPut, "http://localhost:8081/api/networks/skynet", "secretkey")
assert.Nil(t, err, err) assert.Nil(t, err, err)
assert.Equal(t, http.StatusOK, response.StatusCode) assert.Equal(t, http.StatusOK, response.StatusCode)
defer response.Body.Close() defer response.Body.Close()
err = json.NewDecoder(response.Body).Decode(&returnedNetwork) err = json.NewDecoder(response.Body).Decode(&returnedNetwork)
assert.Nil(t, err, err) assert.Nil(t, err, err)
assert.Equal(t, network.DefaultPreUp, returnedNetwork.DefaultPreUp) assert.Equal(t, network.DefaultPostDown, returnedNetwork.DefaultPostDown)
}) })
t.Run("UpdateKeepAlive", func(t *testing.T) { t.Run("UpdateKeepAlive", func(t *testing.T) {
type Network struct { type Network struct {

View file

@ -137,6 +137,8 @@ type Node struct {
Localaddress string `protobuf:"bytes,20,opt,name=localaddress,proto3" json:"localaddress,omitempty"` Localaddress string `protobuf:"bytes,20,opt,name=localaddress,proto3" json:"localaddress,omitempty"`
Postchanges string `protobuf:"bytes,21,opt,name=postchanges,proto3" json:"postchanges,omitempty"` Postchanges string `protobuf:"bytes,21,opt,name=postchanges,proto3" json:"postchanges,omitempty"`
Allowedips string `protobuf:"bytes,22,opt,name=allowedips,proto3" json:"allowedips,omitempty"` Allowedips string `protobuf:"bytes,22,opt,name=allowedips,proto3" json:"allowedips,omitempty"`
Islocal bool `protobuf:"varint,23,opt,name=islocal,proto3" json:"islocal,omitempty"`
Localrange string `protobuf:"bytes,24,opt,name=localrange,proto3" json:"localrange,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
@ -321,6 +323,20 @@ func (m *Node) GetAllowedips() string {
return "" return ""
} }
func (m *Node) GetIslocal() bool {
if m != nil {
return m.Islocal
}
return false
}
func (m *Node) GetLocalrange() string {
if m != nil {
return m.Localrange
}
return ""
}
type CheckInResponse struct { type CheckInResponse struct {
Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"` Success bool `protobuf:"varint,1,opt,name=success,proto3" json:"success,omitempty"`
Needpeerupdate bool `protobuf:"varint,2,opt,name=needpeerupdate,proto3" json:"needpeerupdate,omitempty"` Needpeerupdate bool `protobuf:"varint,2,opt,name=needpeerupdate,proto3" json:"needpeerupdate,omitempty"`
@ -1018,61 +1034,62 @@ func init() {
func init() { proto.RegisterFile("grpc/node.proto", fileDescriptor_d13bd996b67da4ef) } func init() { proto.RegisterFile("grpc/node.proto", fileDescriptor_d13bd996b67da4ef) }
var fileDescriptor_d13bd996b67da4ef = []byte{ var fileDescriptor_d13bd996b67da4ef = []byte{
// 882 bytes of a gzipped FileDescriptorProto // 903 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0x5d, 0x6f, 0xe4, 0x34, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x56, 0x5f, 0x6f, 0xe4, 0x34,
0x14, 0xd5, 0xcc, 0x76, 0x3a, 0xd3, 0x3b, 0x9d, 0xb6, 0xeb, 0xb2, 0x2b, 0x2b, 0x42, 0xd5, 0x28, 0x10, 0x57, 0xf7, 0xba, 0xdd, 0xed, 0x6c, 0xb7, 0xed, 0xb9, 0xdc, 0x61, 0xad, 0x50, 0xb5, 0x8a,
0x42, 0xa8, 0x8b, 0x68, 0xa7, 0x14, 0x09, 0xf1, 0x86, 0xc4, 0x22, 0xad, 0x90, 0x60, 0x05, 0x41, 0x10, 0xea, 0x21, 0xda, 0x2d, 0x45, 0x42, 0xbc, 0x21, 0x71, 0x48, 0x27, 0x24, 0x38, 0x41, 0x10,
0xbc, 0xf0, 0xe6, 0xc6, 0xb7, 0xd9, 0x68, 0x52, 0xdb, 0x8d, 0x3d, 0x1d, 0xf5, 0x07, 0x20, 0xfe, 0x2f, 0xbc, 0xb9, 0xf1, 0x34, 0x17, 0x6d, 0x6a, 0xa7, 0xb1, 0xb7, 0xab, 0x7e, 0x00, 0xc4, 0x57,
0x05, 0xbf, 0x94, 0x07, 0xe4, 0x8f, 0x4c, 0x9c, 0x74, 0x68, 0x97, 0xdd, 0xb7, 0xf8, 0xe4, 0xde, 0xe4, 0xc3, 0xf0, 0x80, 0x3c, 0x76, 0x36, 0x4e, 0x5a, 0xda, 0x83, 0x7b, 0x8b, 0x7f, 0x9e, 0x3f,
0x7b, 0x7c, 0x8f, 0x8f, 0x6f, 0x02, 0x87, 0x45, 0xad, 0xf2, 0x85, 0x90, 0x1c, 0xcf, 0x55, 0x2d, 0x9e, 0x9f, 0x7f, 0x33, 0x0e, 0x1c, 0xe4, 0x75, 0x95, 0x2d, 0x94, 0x96, 0x78, 0x56, 0xd5, 0xda,
0x8d, 0x24, 0x3b, 0xf6, 0x39, 0xe5, 0xb0, 0xff, 0x93, 0x2c, 0x4a, 0x91, 0xe1, 0xed, 0x0a, 0xb5, 0x6a, 0xb6, 0xed, 0xbe, 0x13, 0x09, 0x7b, 0x3f, 0xea, 0xbc, 0x50, 0x29, 0xde, 0xac, 0xd0, 0x58,
0x21, 0x27, 0x00, 0x37, 0x2c, 0x67, 0x9c, 0xd7, 0xa8, 0x35, 0x1d, 0xcc, 0x07, 0xa7, 0x7b, 0x59, 0x76, 0x0c, 0x70, 0x2d, 0x32, 0x21, 0x65, 0x8d, 0xc6, 0xf0, 0xad, 0xf9, 0xd6, 0xc9, 0x6e, 0x1a,
0x84, 0x90, 0x04, 0x26, 0x8a, 0x69, 0xbd, 0x96, 0x35, 0xa7, 0x43, 0xf7, 0x76, 0xb3, 0x26, 0x14, 0x21, 0x6c, 0x06, 0xe3, 0x4a, 0x18, 0xb3, 0xd6, 0xb5, 0xe4, 0x03, 0xda, 0xdd, 0xac, 0x19, 0x87,
0xc6, 0x02, 0xcd, 0x5a, 0xd6, 0x4b, 0xfa, 0xcc, 0xbd, 0x6a, 0x96, 0xe9, 0x57, 0x30, 0x0b, 0x2c, 0x91, 0x42, 0xbb, 0xd6, 0xf5, 0x92, 0x3f, 0xa3, 0xad, 0x66, 0x99, 0x7c, 0x09, 0xd3, 0x90, 0xc5,
0x5a, 0x49, 0xa1, 0x91, 0xcc, 0x61, 0xca, 0xf2, 0x1c, 0xb5, 0x36, 0x72, 0x89, 0x22, 0xf0, 0xc4, 0x54, 0x5a, 0x19, 0x64, 0x73, 0x98, 0x88, 0x2c, 0x43, 0x63, 0xac, 0x5e, 0xa2, 0x0a, 0x79, 0x62,
0x50, 0xfa, 0xf7, 0x08, 0x76, 0xde, 0x4a, 0x8e, 0xe4, 0x00, 0x86, 0x25, 0x0f, 0x11, 0xc3, 0x92, 0x28, 0xf9, 0x6b, 0x08, 0xdb, 0x6f, 0xb5, 0x44, 0xb6, 0x0f, 0x83, 0x42, 0x06, 0x8b, 0x41, 0x21,
0x13, 0x02, 0x3b, 0x82, 0xdd, 0x60, 0x60, 0x77, 0xcf, 0x96, 0xb9, 0xd9, 0x72, 0x60, 0x6e, 0xf6, 0x19, 0x83, 0x6d, 0x25, 0xae, 0x31, 0x64, 0xa7, 0x6f, 0x97, 0xb9, 0x39, 0x72, 0xc8, 0xdc, 0x9c,
0x7b, 0x02, 0x50, 0x95, 0xda, 0xa0, 0x50, 0xb2, 0x36, 0x74, 0x67, 0x3e, 0x38, 0x1d, 0x65, 0x11, 0xf7, 0x18, 0xa0, 0x2c, 0x8c, 0x45, 0x55, 0xe9, 0xda, 0xf2, 0xed, 0xf9, 0xd6, 0xc9, 0x30, 0x8d,
0x42, 0x3e, 0x85, 0x3d, 0xb5, 0xba, 0xaa, 0xca, 0x7c, 0x89, 0xf7, 0x74, 0xe4, 0x72, 0x5b, 0xc0, 0x10, 0xf6, 0x09, 0xec, 0x56, 0xab, 0xcb, 0xb2, 0xc8, 0x96, 0x78, 0xc7, 0x87, 0xe4, 0xdb, 0x02,
0x76, 0x8b, 0x82, 0x2b, 0x59, 0x0a, 0x43, 0x77, 0x7d, 0xb7, 0xcd, 0xba, 0xa7, 0xd4, 0xf8, 0x51, 0xae, 0x5a, 0x54, 0xb2, 0xd2, 0x85, 0xb2, 0x7c, 0xc7, 0x57, 0xdb, 0xac, 0x7b, 0x4c, 0x8d, 0x1e,
0xa5, 0x26, 0x3d, 0xa5, 0xe6, 0x30, 0xb5, 0xea, 0x37, 0x6a, 0xed, 0xf9, 0xf6, 0x23, 0xc8, 0xee, 0x65, 0x6a, 0xdc, 0x63, 0x6a, 0x0e, 0x13, 0xc7, 0x7e, 0xc3, 0xd6, 0xae, 0x2f, 0x3f, 0x82, 0xdc,
0xab, 0xd4, 0x0a, 0x05, 0x2f, 0x45, 0x41, 0x61, 0x3e, 0x38, 0x9d, 0x64, 0x2d, 0x40, 0x5e, 0xc2, 0xb9, 0x0a, 0x53, 0xa1, 0x92, 0x85, 0xca, 0x39, 0xcc, 0xb7, 0x4e, 0xc6, 0x69, 0x0b, 0xb0, 0x97,
0xae, 0x92, 0xda, 0xac, 0x14, 0x9d, 0xba, 0xd4, 0xb0, 0x72, 0x9c, 0x52, 0x1b, 0x2e, 0xd7, 0x82, 0xb0, 0x53, 0x69, 0x63, 0x57, 0x15, 0x9f, 0x90, 0x6b, 0x58, 0x51, 0x4e, 0x6d, 0xac, 0xd4, 0x6b,
0xee, 0x07, 0xce, 0xb0, 0xb6, 0x15, 0x97, 0x88, 0x8a, 0x55, 0xe5, 0x1d, 0xd2, 0x99, 0x13, 0xa2, 0xc5, 0xf7, 0x42, 0xce, 0xb0, 0x76, 0x11, 0x97, 0x88, 0x95, 0x28, 0x8b, 0x5b, 0xe4, 0x53, 0x22,
0x05, 0x6c, 0x37, 0x9a, 0xdd, 0x61, 0x2e, 0xc5, 0x75, 0x59, 0xd0, 0x03, 0x47, 0x18, 0x21, 0x36, 0xa2, 0x05, 0x5c, 0x35, 0x46, 0xdc, 0x62, 0xa6, 0xd5, 0x55, 0x91, 0xf3, 0x7d, 0x4a, 0x18, 0x21,
0xdb, 0x9f, 0x8e, 0xd5, 0xe9, 0xd0, 0xeb, 0xb4, 0x01, 0xdc, 0x6e, 0x85, 0xc1, 0xfa, 0x9a, 0xe5, 0xce, 0xdb, 0xdf, 0x8e, 0xe3, 0xe9, 0xc0, 0xf3, 0xb4, 0x01, 0xe8, 0xb4, 0xca, 0x62, 0x7d, 0x25,
0x48, 0x8f, 0xfc, 0xdb, 0x0d, 0x60, 0xbb, 0xad, 0x98, 0x36, 0xf9, 0x3b, 0xcc, 0x97, 0xa5, 0xa0, 0x32, 0xe4, 0x87, 0x7e, 0x77, 0x03, 0xb8, 0x6a, 0x4b, 0x61, 0x6c, 0xf6, 0x0e, 0xb3, 0x65, 0xa1,
0xcf, 0x7d, 0xb7, 0x11, 0x44, 0x52, 0xd8, 0xb7, 0xcb, 0x1b, 0xc9, 0xcb, 0xeb, 0x12, 0x39, 0x25, 0xf8, 0x73, 0x5f, 0x6d, 0x04, 0xb1, 0x04, 0xf6, 0xdc, 0xf2, 0x5a, 0xcb, 0xe2, 0xaa, 0x40, 0xc9,
0x2e, 0xa4, 0x83, 0x91, 0x53, 0x38, 0x0c, 0xe1, 0xae, 0xf2, 0x1d, 0xab, 0xe8, 0xb1, 0xeb, 0xa2, 0x19, 0x99, 0x74, 0x30, 0x76, 0x02, 0x07, 0xc1, 0x9c, 0x22, 0xdf, 0x8a, 0x92, 0x1f, 0x51, 0x15,
0x0f, 0xbb, 0x6a, 0x32, 0x67, 0x55, 0x73, 0x36, 0x9f, 0x84, 0x6a, 0x11, 0x66, 0xf7, 0x64, 0x95, 0x7d, 0x98, 0xa2, 0xe9, 0x4c, 0x94, 0xcd, 0xdd, 0x7c, 0x14, 0xa2, 0x45, 0x98, 0x3b, 0x93, 0x63,
0xc9, 0xdf, 0x31, 0x51, 0xa0, 0xa6, 0x2f, 0xfc, 0x9e, 0x22, 0xc8, 0x2a, 0xc2, 0xaa, 0x4a, 0xae, 0x26, 0x7b, 0x27, 0x54, 0x8e, 0x86, 0xbf, 0xf0, 0x67, 0x8a, 0x20, 0xc7, 0x88, 0x28, 0x4b, 0xbd,
0x91, 0x97, 0x4a, 0xd3, 0x97, 0xfe, 0x7c, 0x5b, 0x24, 0xfd, 0x73, 0x08, 0x87, 0xaf, 0x2d, 0xf3, 0x46, 0x59, 0x54, 0x86, 0xbf, 0xf4, 0xf7, 0xdb, 0x22, 0x4e, 0x73, 0x85, 0xa1, 0x98, 0xfc, 0x63,
0x8f, 0xad, 0xad, 0x29, 0x8c, 0xf5, 0xca, 0xa9, 0xe2, 0x0c, 0x3b, 0xc9, 0x9a, 0x25, 0xf9, 0x1c, 0xa2, 0xab, 0x59, 0x92, 0xe6, 0xdc, 0x47, 0xed, 0x02, 0x71, 0xee, 0x3d, 0x5b, 0x24, 0xf9, 0x63,
0x0e, 0x04, 0x22, 0x57, 0x88, 0xf5, 0x4a, 0x71, 0x66, 0xbc, 0x7f, 0x27, 0x59, 0x0f, 0x25, 0x5f, 0x00, 0x07, 0xaf, 0xdd, 0x99, 0x7f, 0x68, 0x1b, 0x82, 0xc3, 0xc8, 0xac, 0x88, 0x4f, 0x92, 0xfa,
0xc0, 0x91, 0x45, 0xbc, 0xea, 0x21, 0xf2, 0x99, 0x8b, 0x7c, 0x80, 0x37, 0x2e, 0xba, 0x41, 0xad, 0x38, 0x6d, 0x96, 0xec, 0x33, 0xd8, 0x57, 0x88, 0xb2, 0x42, 0xac, 0x57, 0x95, 0x14, 0xd6, 0x2b,
0x59, 0x81, 0xce, 0xdc, 0xc1, 0x45, 0x01, 0xea, 0xba, 0x68, 0xd4, 0x77, 0xd1, 0x67, 0x30, 0xb3, 0x7f, 0x9c, 0xf6, 0x50, 0xf6, 0x39, 0x1c, 0x3a, 0xc4, 0xdf, 0x57, 0xb0, 0x7c, 0x46, 0x96, 0xf7,
0x35, 0x97, 0x78, 0x1f, 0x88, 0x76, 0x5d, 0x44, 0x17, 0xb4, 0x3a, 0x58, 0x80, 0x63, 0x85, 0x06, 0xf0, 0x46, 0x7f, 0xd7, 0x68, 0x8c, 0xc8, 0x91, 0xda, 0x22, 0xe8, 0x2f, 0x40, 0x5d, 0xfd, 0x0d,
0x9d, 0xcf, 0x27, 0x59, 0x84, 0xa4, 0x7f, 0x0d, 0x61, 0xf6, 0x0b, 0x62, 0xad, 0x37, 0x2a, 0x38, 0xfb, 0xfa, 0xfb, 0x14, 0xa6, 0x2e, 0xe6, 0x12, 0xef, 0x42, 0xa2, 0x1d, 0xb2, 0xe8, 0x82, 0x8e,
0xd6, 0x82, 0x19, 0x5c, 0xb3, 0xfb, 0xa0, 0x43, 0x0b, 0xd8, 0xd3, 0x09, 0x8f, 0xb5, 0x15, 0x3a, 0x07, 0x07, 0x48, 0x2c, 0xd1, 0x22, 0x75, 0xc8, 0x38, 0x8d, 0x90, 0xe4, 0xcf, 0x01, 0x4c, 0x7f,
0xdc, 0xe3, 0x0e, 0xf6, 0x11, 0xb7, 0xf2, 0xc3, 0x27, 0x41, 0xdf, 0x35, 0xe3, 0x2d, 0xae, 0x79, 0x46, 0xac, 0xcd, 0x86, 0x05, 0xca, 0x9a, 0x0b, 0x8b, 0x6b, 0x71, 0x17, 0x78, 0x68, 0x01, 0x77,
0xf4, 0x0e, 0xa5, 0x0b, 0x98, 0xbd, 0xae, 0x91, 0x19, 0xb4, 0x73, 0x2b, 0xc3, 0x5b, 0x72, 0x02, 0xaf, 0xe1, 0xd3, 0x33, 0xeb, 0x27, 0x40, 0x07, 0xfb, 0x80, 0x7e, 0xfe, 0xff, 0x33, 0xa4, 0xaf,
0x6e, 0xc8, 0x3a, 0x0d, 0xa6, 0x97, 0x70, 0xee, 0xa6, 0xaf, 0x7b, 0xe9, 0x87, 0x6f, 0x2f, 0x41, 0xb7, 0xd1, 0x03, 0x7a, 0x7b, 0xb4, 0xfb, 0x92, 0x05, 0x4c, 0x5f, 0xd7, 0x28, 0x2c, 0xba, 0x89,
0xbf, 0x4f, 0xc2, 0xef, 0xee, 0x54, 0xfe, 0x07, 0x43, 0x9c, 0xf0, 0x34, 0xc3, 0x1b, 0x98, 0x66, 0x97, 0xe2, 0x0d, 0x3b, 0x06, 0x1a, 0xcf, 0xc4, 0xc1, 0xe4, 0x02, 0xce, 0x68, 0x6e, 0xd3, 0xa6,
0xc8, 0x78, 0x5b, 0xff, 0xf1, 0xcf, 0x41, 0x34, 0xf2, 0x87, 0xdd, 0x91, 0x7f, 0x16, 0x17, 0x7a, 0x1f, 0xdb, 0x3d, 0x07, 0xf3, 0x3e, 0x0e, 0xbf, 0xd1, 0xad, 0xfc, 0x87, 0x0c, 0xb1, 0xc3, 0xd3,
0x9a, 0xf7, 0x57, 0x98, 0xfd, 0xe0, 0xfc, 0xf4, 0xbe, 0xcc, 0xd6, 0xfc, 0x9e, 0xea, 0x6d, 0xfb, 0x19, 0xde, 0xc0, 0x24, 0x45, 0x21, 0xdb, 0xf8, 0x8f, 0x3f, 0x24, 0xd1, 0x63, 0x31, 0xe8, 0x3e,
0x35, 0x88, 0xa1, 0xf4, 0x55, 0xb7, 0xa4, 0xfe, 0xef, 0xdb, 0x69, 0xbb, 0x7e, 0x83, 0x26, 0xb8, 0x16, 0xa7, 0x71, 0xa0, 0xa7, 0xf3, 0xfe, 0x02, 0xd3, 0xef, 0x49, 0x4f, 0xef, 0x9b, 0xd9, 0x89,
0xf8, 0x63, 0xba, 0xfe, 0x36, 0x2e, 0xa4, 0xc9, 0x2b, 0x18, 0xd9, 0xbb, 0xad, 0x43, 0xdb, 0xc7, 0xdf, 0xa7, 0x7a, 0xdb, 0xbe, 0x23, 0x31, 0x94, 0xbc, 0xea, 0x86, 0x34, 0xff, 0xde, 0x9d, 0xae,
0xbe, 0xed, 0xce, 0x6d, 0xc9, 0x7c, 0x44, 0xfa, 0x25, 0xc0, 0x66, 0x9a, 0x3c, 0x7d, 0xae, 0x3f, 0xea, 0x37, 0x68, 0x83, 0x8a, 0x3f, 0xa4, 0xea, 0x6f, 0xe2, 0x40, 0x86, 0xbd, 0x82, 0xa1, 0xeb,
0x47, 0xd1, 0x9a, 0x7c, 0xb7, 0x19, 0x8d, 0x75, 0xa8, 0x1a, 0x12, 0x5f, 0xf8, 0xc4, 0xde, 0x98, 0x6d, 0x13, 0xca, 0x3e, 0xf2, 0x65, 0x77, 0xba, 0x25, 0xf5, 0x16, 0xc9, 0x17, 0x00, 0x9b, 0x69,
0xca, 0xfa, 0xd1, 0x97, 0xff, 0x0c, 0x61, 0x6a, 0xab, 0xff, 0x86, 0xf5, 0x5d, 0x99, 0x23, 0xb9, 0xf2, 0xf4, 0xbd, 0xfe, 0x14, 0x59, 0x1b, 0xf6, 0xed, 0x66, 0xa8, 0xd6, 0x21, 0x6a, 0x70, 0x7c,
0x80, 0x91, 0xfb, 0x5e, 0x13, 0xe2, 0x0b, 0xc4, 0xbf, 0x08, 0xc9, 0x71, 0x07, 0x0b, 0x77, 0xfe, 0xe1, 0x1d, 0x7b, 0x63, 0x2a, 0xed, 0x5b, 0x5f, 0xfc, 0x3d, 0x80, 0x89, 0x8b, 0xfe, 0x2b, 0xd6,
0x1b, 0x80, 0xd6, 0xca, 0x24, 0x84, 0x74, 0x6e, 0x43, 0xb2, 0x05, 0xd4, 0xe4, 0x02, 0x26, 0x8d, 0xb7, 0x45, 0x86, 0xec, 0x1c, 0x86, 0xf4, 0xd2, 0x33, 0xe6, 0x03, 0xc4, 0x3f, 0x17, 0xb3, 0xa3,
0x4d, 0xc8, 0x73, 0x1f, 0x10, 0xf9, 0x2f, 0x79, 0x00, 0x69, 0xcb, 0xd4, 0x5a, 0xba, 0x61, 0xea, 0x0e, 0x16, 0x7a, 0xfe, 0x6b, 0x80, 0x56, 0xca, 0x2c, 0x98, 0x74, 0xba, 0x61, 0xf6, 0x00, 0x68,
0xdc, 0x8a, 0x64, 0x0b, 0xe8, 0xf2, 0x5a, 0x3b, 0x34, 0x79, 0x1d, 0xcf, 0x25, 0x5b, 0x40, 0x4d, 0xd8, 0x39, 0x8c, 0x1b, 0x99, 0xb0, 0xe7, 0xde, 0x20, 0xd2, 0xdf, 0xec, 0x1e, 0x64, 0x5c, 0xa6,
0x2e, 0x61, 0xd2, 0x1c, 0x69, 0xb3, 0xc3, 0xc8, 0x2b, 0xc9, 0x03, 0x48, 0x5f, 0x0c, 0xc8, 0x19, 0x56, 0xd2, 0x4d, 0xa6, 0x4e, 0x57, 0xcc, 0x1e, 0x00, 0xc9, 0xaf, 0x95, 0x43, 0xe3, 0xd7, 0xd1,
0x8c, 0x83, 0xe6, 0xe4, 0xa8, 0x77, 0x04, 0xb7, 0x49, 0x1f, 0xd1, 0xdf, 0x2f, 0xfe, 0x38, 0x2b, 0xdc, 0xec, 0x01, 0xd0, 0xb0, 0x0b, 0x18, 0x37, 0x57, 0xda, 0x9c, 0x30, 0xd2, 0xca, 0xec, 0x1e,
0xa4, 0x2c, 0x2a, 0x3c, 0x2f, 0x64, 0xc5, 0x44, 0x71, 0x2e, 0xeb, 0x62, 0xe1, 0xfe, 0xd2, 0xae, 0x64, 0xce, 0xb7, 0xd8, 0x29, 0x8c, 0x02, 0xe7, 0xec, 0xb0, 0x77, 0x05, 0x37, 0xb3, 0x3e, 0x62,
0x56, 0xd7, 0x0b, 0x73, 0xaf, 0x50, 0x2f, 0x96, 0x42, 0xae, 0x85, 0xfb, 0x7f, 0x53, 0x57, 0x57, 0xbe, 0x5b, 0xfc, 0x7e, 0x9a, 0x6b, 0x9d, 0x97, 0x78, 0x96, 0xeb, 0x52, 0xa8, 0xfc, 0x4c, 0xd7,
0xbb, 0xee, 0xe5, 0xd7, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x4d, 0x2e, 0x68, 0x98, 0xd5, 0x09, 0xf9, 0x82, 0xfe, 0xef, 0x2e, 0x57, 0x57, 0x0b, 0x7b, 0x57, 0xa1, 0x59, 0x2c, 0x95, 0x5e, 0x2b,
0x00, 0x00, 0xfa, 0xf3, 0xab, 0x2e, 0x2f, 0x77, 0x68, 0xf3, 0xab, 0x7f, 0x02, 0x00, 0x00, 0xff, 0xff, 0x44,
0xc2, 0xe7, 0x07, 0x0f, 0x0a, 0x00, 0x00,
} }

View file

@ -43,6 +43,8 @@ message Node {
string localaddress = 20; string localaddress = 20;
string postchanges = 21; string postchanges = 21;
string allowedips = 22; string allowedips = 22;
bool islocal = 23;
string localrange = 24;
} }
message CheckInResponse { message CheckInResponse {

View file

@ -164,12 +164,15 @@ func runGRPC(wg *sync.WaitGroup, installserver bool) {
if installserver { if installserver {
fmt.Println("Adding server to " + config.Config.Server.DefaultNetName) fmt.Println("Adding server to " + config.Config.Server.DefaultNetName)
success, err := serverctl.AddNetwork(config.Config.Server.DefaultNetName) success, err := serverctl.AddNetwork(config.Config.Server.DefaultNetName)
if err != nil || !success { if err != nil {
fmt.Printf("Error adding to default network: %v", err) fmt.Printf("Error adding to default network: %v", err)
fmt.Println("") fmt.Println("")
fmt.Println("Unable to add server to network. Continuing.") fmt.Println("Unable to add server to network. Continuing.")
fmt.Println("Please investigate client installation on server.") fmt.Println("Please investigate client installation on server.")
} else { } else if !success {
fmt.Println("Unable to add server to network. Continuing.")
fmt.Println("Please investigate client installation on server.")
} else{
fmt.Println("Server successfully added to default network.") fmt.Println("Server successfully added to default network.")
} }
} }

View file

@ -18,7 +18,7 @@ type Network struct {
DefaultInterface string `json:"defaultinterface" bson:"defaultinterface"` DefaultInterface string `json:"defaultinterface" bson:"defaultinterface"`
DefaultListenPort int32 `json:"defaultlistenport,omitempty" bson:"defaultlistenport,omitempty" validate:"omitempty,numeric,min=1024,max=65535"` DefaultListenPort int32 `json:"defaultlistenport,omitempty" bson:"defaultlistenport,omitempty" validate:"omitempty,numeric,min=1024,max=65535"`
DefaultPostUp string `json:"defaultpostup" bson:"defaultpostup"` DefaultPostUp string `json:"defaultpostup" bson:"defaultpostup"`
DefaultPostDown string `json:"defaultpreup" bson:"defaultpreup"` DefaultPostDown string `json:"defaultpostdown" bson:"defaultpostdown"`
KeyUpdateTimeStamp int64 `json:"keyupdatetimestamp" bson:"keyupdatetimestamp"` KeyUpdateTimeStamp int64 `json:"keyupdatetimestamp" bson:"keyupdatetimestamp"`
DefaultKeepalive int32 `json:"defaultkeepalive" bson:"defaultkeepalive" validate: "omitempty,numeric,max=1000"` DefaultKeepalive int32 `json:"defaultkeepalive" bson:"defaultkeepalive" validate: "omitempty,numeric,max=1000"`
DefaultSaveConfig *bool `json:"defaultsaveconfig" bson:"defaultsaveconfig"` DefaultSaveConfig *bool `json:"defaultsaveconfig" bson:"defaultsaveconfig"`

View file

@ -12,7 +12,7 @@ type ReturnNode struct {
PublicKey string `json:"publickey" bson:"publickey" validate:"base64"` PublicKey string `json:"publickey" bson:"publickey" validate:"base64"`
Endpoint string `json:"endpoint" bson:"endpoint" validate:"required,ipv4"` Endpoint string `json:"endpoint" bson:"endpoint" validate:"required,ipv4"`
PostUp string `json:"postup" bson:"postup"` PostUp string `json:"postup" bson:"postup"`
PostDown string `json:"preup" bson:"preup"` PostDown string `json:"postdown" bson:"postdown"`
PersistentKeepalive int32 `json:"persistentkeepalive" bson:"persistentkeepalive"` PersistentKeepalive int32 `json:"persistentkeepalive" bson:"persistentkeepalive"`
SaveConfig *bool `json:"saveconfig" bson:"saveconfig"` SaveConfig *bool `json:"saveconfig" bson:"saveconfig"`
Interface string `json:"interface" bson:"interface"` Interface string `json:"interface" bson:"interface"`

View file

@ -32,7 +32,9 @@ type NodeConfig struct {
LocalAddress string `yaml:"localaddress"` LocalAddress string `yaml:"localaddress"`
WGAddress string `yaml:"wgaddress"` WGAddress string `yaml:"wgaddress"`
RoamingOff bool `yaml:"roamingoff"` RoamingOff bool `yaml:"roamingoff"`
IsLocal bool `yaml:"islocal"`
AllowedIPs string `yaml:"allowedips"` AllowedIPs string `yaml:"allowedips"`
LocalRange string `yaml:"localrange"`
PostUp string `yaml:"postup"` PostUp string `yaml:"postup"`
PostDown string `yaml:"postdown"` PostDown string `yaml:"postdown"`
Port int32 `yaml:"port"` Port int32 `yaml:"port"`

View file

@ -1,7 +1,6 @@
package functions package functions
import ( import (
"github.com/davecgh/go-spew/spew"
"fmt" "fmt"
"time" "time"
"errors" "errors"
@ -110,6 +109,7 @@ func Install(accesskey string, password string, server string, network string, n
} }
fmt.Println(trange) fmt.Println(trange)
if trange != "" { if trange != "" {
fmt.Println("This is a local network. Proceeding with local address as endpoint.")
islocal = true islocal = true
_, localrange, err = net.ParseCIDR(trange) _, localrange, err = net.ParseCIDR(trange)
if err == nil { if err == nil {
@ -201,16 +201,6 @@ func Install(accesskey string, password string, server string, network string, n
var name string var name string
var wginterface string var wginterface string
if nodecfg.Endpoint == "" {
endpoint, err = getPublicIP()
if err != nil {
return err
}
} else {
endpoint = nodecfg.Endpoint
}
fmt.Println(" Public Endpoint: " + endpoint)
if nodecfg.LocalAddress == "" { if nodecfg.LocalAddress == "" {
ifaces, err := net.Interfaces() ifaces, err := net.Interfaces()
if err != nil { if err != nil {
@ -262,6 +252,26 @@ func Install(accesskey string, password string, server string, network string, n
} }
fmt.Println(" Local Address: " + localaddress) fmt.Println(" Local Address: " + localaddress)
if nodecfg.Endpoint == "" {
if islocal && localaddress != "" {
endpoint = localaddress
fmt.Println("Endpoint is local. Setting to address: " + endpoint)
} else {
endpoint, err = getPublicIP()
if err != nil {
fmt.Println("Error setting endpoint.")
return err
}
fmt.Println("Endpoint is public. Setting to address: " + endpoint)
}
} else {
endpoint = nodecfg.Endpoint
fmt.Println("Endpoint set in config. Setting to address: " + endpoint)
}
fmt.Println(" Endpoint: " + endpoint)
if nodecfg.Name != "" { if nodecfg.Name != "" {
name = nodecfg.Name name = nodecfg.Name
} }
@ -405,6 +415,17 @@ func Install(accesskey string, password string, server string, network string, n
fmt.Println(" KeepAlive: " + strconv.FormatInt(int64(node.Keepalive), 10)) fmt.Println(" KeepAlive: " + strconv.FormatInt(int64(node.Keepalive), 10))
fmt.Println(" Public Key: " + node.Publickey) fmt.Println(" Public Key: " + node.Publickey)
fmt.Println(" Mac Address: " + node.Macaddress) fmt.Println(" Mac Address: " + node.Macaddress)
fmt.Println(" Is Local?: " + strconv.FormatBool(node.Islocal))
fmt.Println(" Local Range: " + node.Localrange)
if !islocal && node.Islocal && node.Localrange != "" {
fmt.Println("Resetting local settings for local network.")
node.Localaddress, err = getLocalIP(node.Localrange)
if err != nil {
return err
}
node.Endpoint = node.Localaddress
}
err = modConfig(node) err = modConfig(node)
if err != nil { if err != nil {
@ -419,10 +440,9 @@ func Install(accesskey string, password string, server string, network string, n
err = ConfigureSystemD(network) err = ConfigureSystemD(network)
return err return err
} }
} }
peers, err := getPeers(node.Macaddress, network, server) peers, hasGateway, gateways, err := getPeers(node.Macaddress, network, server)
if err != nil { if err != nil {
return err return err
@ -432,7 +452,7 @@ func Install(accesskey string, password string, server string, network string, n
if err != nil { if err != nil {
return err return err
} }
err = initWireguard(node, privkeystring, peers) err = initWireguard(node, privkeystring, peers, hasGateway, gateways)
if err != nil { if err != nil {
return err return err
} }
@ -446,6 +466,52 @@ func Install(accesskey string, password string, server string, network string, n
return err return err
} }
func getLocalIP(localrange string) (string, error) {
_, localRange, err := net.ParseCIDR(localrange)
if err != nil {
return "", err
}
ifaces, err := net.Interfaces()
if err != nil {
return "", err
}
var local string
found := false
for _, i := range ifaces {
if i.Flags&net.FlagUp == 0 {
continue // interface down
}
if i.Flags&net.FlagLoopback != 0 {
continue // loopback interface
}
addrs, err := i.Addrs()
if err != nil {
return "", err
}
for _, addr := range addrs {
var ip net.IP
switch v := addr.(type) {
case *net.IPNet:
if !found {
ip = v.IP
local = ip.String()
found = localRange.Contains(ip)
}
case *net.IPAddr:
if !found {
ip = v.IP
local = ip.String()
found = localRange.Contains(ip)
}
}
}
}
if !found || local == "" {
return "", errors.New("Failed to find local IP in range " + localrange)
}
return local, nil
}
func getPublicIP() (string, error) { func getPublicIP() (string, error) {
iplist := []string{"https://ifconfig.me", "http://api.ipify.org", "http://ipinfo.io/ip"} iplist := []string{"https://ifconfig.me", "http://api.ipify.org", "http://ipinfo.io/ip"}
@ -478,9 +544,7 @@ func modConfig(node *nodepb.Node) error{
if network == "" { if network == "" {
return errors.New("No Network Provided") return errors.New("No Network Provided")
} }
//modconfig := config.Config
modconfig, err := config.ReadConfig(network) modconfig, err := config.ReadConfig(network)
//modconfig.ReadConfig()
if err != nil { if err != nil {
return err return err
} }
@ -527,6 +591,10 @@ func modConfig(node *nodepb.Node) error{
if node.Postchanges != "" { if node.Postchanges != "" {
nodecfg.PostChanges = node.Postchanges nodecfg.PostChanges = node.Postchanges
} }
if node.Localrange != "" && node.Islocal {
nodecfg.IsLocal = true
nodecfg.LocalRange = node.Localrange
}
modconfig.Node = nodecfg modconfig.Node = nodecfg
err = config.Write(modconfig, network) err = config.Write(modconfig, network)
return err return err
@ -549,7 +617,7 @@ func getMacAddr() ([]string, error) {
} }
func initWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig) error { func initWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig, hasGateway bool, gateways []string) error {
ipExec, err := exec.LookPath("ip") ipExec, err := exec.LookPath("ip")
if err != nil { if err != nil {
@ -687,16 +755,26 @@ func initWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig
} }
err = cmdIPLinkUp.Run() err = cmdIPLinkUp.Run()
if nodecfg.PostUp != "" { if err != nil {
return err
}
if nodecfg.PostUp != "" {
runcmds := strings.Split(nodecfg.PostUp, "; ") runcmds := strings.Split(nodecfg.PostUp, "; ")
err = runCmds(runcmds) err = runCmds(runcmds)
if err != nil { if err != nil {
fmt.Println("Error encountered running PostUp: " + err.Error()) fmt.Println("Error encountered running PostUp: " + err.Error())
} }
} }
if err != nil { if (hasGateway) {
return err for _, gateway := range gateways {
} out, err := exec.Command(ipExec,"-4","route","add",gateway,"dev",ifacename).Output()
fmt.Println(string(out))
if err != nil {
fmt.Println("Error encountered adding gateway: " + err.Error())
}
}
}
return err return err
} }
func runCmds(commands []string) error { func runCmds(commands []string) error {
@ -789,7 +867,7 @@ func setWGConfig(network string) error {
nodecfg := cfg.Node nodecfg := cfg.Node
node := getNode(network) node := getNode(network)
peers, err := getPeers(node.Macaddress, nodecfg.Network, servercfg.Address) peers, hasGateway, gateways, err := getPeers(node.Macaddress, nodecfg.Network, servercfg.Address)
if err != nil { if err != nil {
return err return err
} }
@ -798,7 +876,7 @@ func setWGConfig(network string) error {
return err return err
} }
err = initWireguard(&node, privkey, peers) err = initWireguard(&node, privkey, peers, hasGateway, gateways)
if err != nil { if err != nil {
return err return err
} }
@ -875,7 +953,8 @@ func CheckIn(network string) error {
ipchange := false ipchange := false
if !nodecfg.RoamingOff { if !nodecfg.RoamingOff {
fmt.Println("Checking to see if addresses have changed") if !nodecfg.IsLocal {
fmt.Println("Checking to see if public addresses have changed")
extIP, err := getPublicIP() extIP, err := getPublicIP()
if err != nil { if err != nil {
fmt.Printf("Error encountered checking ip addresses: %v", err) fmt.Printf("Error encountered checking ip addresses: %v", err)
@ -904,6 +983,25 @@ func CheckIn(network string) error {
node.Postchanges = "true" node.Postchanges = "true"
ipchange = true ipchange = true
} }
} else {
fmt.Println("Checking to see if local addresses have changed")
localIP, err := getLocalIP(nodecfg.LocalRange)
if err != nil {
fmt.Printf("Error encountered checking ip addresses: %v", err)
}
if nodecfg.Endpoint != localIP && localIP != "" {
fmt.Println("Endpoint has changed from " +
nodecfg.Endpoint + " to " + localIP)
fmt.Println("Updating address")
nodecfg.Endpoint = localIP
nodecfg.LocalAddress = localIP
nodecfg.PostChanges = "true"
node.Endpoint = localIP
node.Localaddress = localIP
node.Postchanges = "true"
ipchange = true
}
}
if node.Postchanges != "true" { if node.Postchanges != "true" {
fmt.Println("Addresses have not changed.") fmt.Println("Addresses have not changed.")
} }
@ -992,8 +1090,11 @@ func CheckIn(network string) error {
if err != nil { if err != nil {
fmt.Println("ERROR DELETING INTERFACE: " + currentiface) fmt.Println("ERROR DELETING INTERFACE: " + currentiface)
} }
}
err = setWGConfig(network) err = setWGConfig(network)
if err != nil {
log.Printf("Error updating interface: %v", err)
}
}
} }
if checkinres.Checkinresponse.Needconfigupdate { if checkinres.Checkinresponse.Needconfigupdate {
@ -1270,8 +1371,10 @@ func DeleteInterface(ifacename string, postdown string) error{
return err return err
} }
func getPeers(macaddress string, network string, server string) ([]wgtypes.PeerConfig, error) { func getPeers(macaddress string, network string, server string) ([]wgtypes.PeerConfig, bool, []string, error) {
//need to implement checkin on server side //need to implement checkin on server side
hasGateway := false
var gateways []string
var peers []wgtypes.PeerConfig var peers []wgtypes.PeerConfig
var wcclient nodepb.NodeServiceClient var wcclient nodepb.NodeServiceClient
cfg, err := config.ReadConfig(network) cfg, err := config.ReadConfig(network)
@ -1304,7 +1407,7 @@ func getPeers(macaddress string, network string, server string) ([]wgtypes.PeerC
ctx, err = SetJWT(wcclient, network) ctx, err = SetJWT(wcclient, network)
if err != nil { if err != nil {
fmt.Println("Failed to authenticate.") fmt.Println("Failed to authenticate.")
return peers, err return peers, hasGateway, gateways, err
} }
var header metadata.MD var header metadata.MD
@ -1312,44 +1415,41 @@ func getPeers(macaddress string, network string, server string) ([]wgtypes.PeerC
if err != nil { if err != nil {
fmt.Println("Error retrieving peers") fmt.Println("Error retrieving peers")
fmt.Println(err) fmt.Println(err)
return nil, err return nil, hasGateway, gateways, err
} }
fmt.Println("Parsing peers response") fmt.Println("Parsing peers response")
for { for {
res, err := stream.Recv() res, err := stream.Recv()
// If end of stream, break the loop // If end of stream, break the loop
if err == io.EOF { if err == io.EOF {
fmt.Println("ERROR ENCOUNTERED WITH peer")
fmt.Println(res)
fmt.Println(err)
break break
} }
spew.Dump(res)
// if err, return an error // if err, return an error
if err != nil { if err != nil {
if strings.Contains(err.Error(), "mongo: no documents in result") { if strings.Contains(err.Error(), "mongo: no documents in result") {
break continue
} else { } else {
fmt.Println("ERROR ENCOUNTERED WITH RESPONSE") fmt.Println("ERROR ENCOUNTERED WITH RESPONSE")
fmt.Println(res) fmt.Println(res)
return peers, err return peers, hasGateway, gateways, err
} }
} }
fmt.Println("Got Peer: " + res.Peers.Publickey)
fmt.Println(" Address: " +res.Peers.Address)
fmt.Printf(" ListenPort: ",res.Peers.Listenport)
fmt.Println("")
fmt.Printf(" Gateway?: ",res.Peers.Isgateway)
fmt.Println("")
fmt.Println(" Gate Range: " + res.Peers.Gatewayrange)
pubkey, err := wgtypes.ParseKey(res.Peers.Publickey) pubkey, err := wgtypes.ParseKey(res.Peers.Publickey)
if err != nil { if err != nil {
fmt.Println("error parsing key") fmt.Println("error parsing key")
return peers, err return peers, hasGateway, gateways, err
} }
if nodecfg.PublicKey == res.Peers.Publickey {
fmt.Println("Peer is self. Skipping")
continue
}
if nodecfg.Endpoint == res.Peers.Endpoint {
fmt.Println("Peer is self. Skipping")
continue
}
var peer wgtypes.PeerConfig var peer wgtypes.PeerConfig
var peeraddr = net.IPNet{ var peeraddr = net.IPNet{
IP: net.ParseIP(res.Peers.Address), IP: net.ParseIP(res.Peers.Address),
@ -1357,8 +1457,9 @@ func getPeers(macaddress string, network string, server string) ([]wgtypes.PeerC
} }
var allowedips []net.IPNet var allowedips []net.IPNet
allowedips = append(allowedips, peeraddr) allowedips = append(allowedips, peeraddr)
if res.Peers.Isgateway { if res.Peers.Isgateway {
hasGateway = true
gateways = append(gateways,res.Peers.Gatewayrange)
_, ipnet, err := net.ParseCIDR(res.Peers.Gatewayrange) _, ipnet, err := net.ParseCIDR(res.Peers.Gatewayrange)
if err != nil { if err != nil {
fmt.Println("ERROR ENCOUNTERED SETTING GATEWAY") fmt.Println("ERROR ENCOUNTERED SETTING GATEWAY")
@ -1395,5 +1496,5 @@ func getPeers(macaddress string, network string, server string) ([]wgtypes.PeerC
} }
fmt.Println("Finished parsing peers response") fmt.Println("Finished parsing peers response")
return peers, err return peers, hasGateway, gateways, err
} }

View file

@ -472,7 +472,7 @@ func TestUpdateNetwork(t *testing.T) {
assert.Nil(t, err, err) assert.Nil(t, err, err)
assert.Equal(t, network.DefaultPostUp, returnedNetwork.DefaultPostUp) assert.Equal(t, network.DefaultPostUp, returnedNetwork.DefaultPostUp)
}) })
t.Run("UpdatePreUp", func(t *testing.T) { t.Run("UpdatePostDown", func(t *testing.T) {
// -------needs fixing ------ // -------needs fixing ------
// mismatch in models.Network between struc name and json/bson name // mismatch in models.Network between struc name and json/bson name
// does not get updated. // does not get updated.