peer update functionality

This commit is contained in:
afeiszli
2021-04-05 18:09:21 -04:00
parent 93d7219bf2
commit 3ca3a3e172
9 changed files with 207 additions and 64 deletions

View File

@@ -175,6 +175,7 @@ func UpdateNode(nodechange models.Node, node models.Node) (models.Node, error) {
} }
if nodechange.PublicKey != "" { if nodechange.PublicKey != "" {
node.PublicKey = nodechange.PublicKey node.PublicKey = nodechange.PublicKey
node.KeyUpdateTimeStamp = time.Now().Unix()
notifygroup = true notifygroup = true
} }
@@ -195,6 +196,7 @@ func UpdateNode(nodechange models.Node, node models.Node) (models.Node, error) {
{"password", node.Password}, {"password", node.Password},
{"listenport", node.ListenPort}, {"listenport", node.ListenPort},
{"publickey", node.PublicKey}, {"publickey", node.PublicKey},
{"keyupdatetimestamp", node.KeyUpdateTimeStamp},
{"endpoint", node.Endpoint}, {"endpoint", node.Endpoint},
{"postup", node.PostUp}, {"postup", node.PostUp},
{"preup", node.PreUp}, {"preup", node.PreUp},
@@ -307,7 +309,7 @@ func CreateNode(node models.Node, groupName string) (models.Node, error) {
node.SetDefaultName() node.SetDefaultName()
node.SetLastCheckIn() node.SetLastCheckIn()
node.SetLastPeerUpdate() node.SetLastPeerUpdate()
node.KeyUpdateTimeStamp = time.Now().Unix()
//Create a JWT for the node //Create a JWT for the node
tokenString, _ := functions.CreateJWT(node.MacAddress, groupName) tokenString, _ := functions.CreateJWT(node.MacAddress, groupName)
@@ -366,6 +368,8 @@ func NodeCheckIn(node models.Node, groupName string) (models.CheckInResponse, er
grouplm := parentgroup.GroupLastModified grouplm := parentgroup.GroupLastModified
peerslm := parentgroup.NodesLastModified peerslm := parentgroup.NodesLastModified
gkeyupdate := parentgroup.KeyUpdateTimeStamp
nkeyupdate := parentnode.KeyUpdateTimeStamp
peerlistlm := parentnode.LastPeerUpdate peerlistlm := parentnode.LastPeerUpdate
parentnodelm := parentnode.LastModified parentnodelm := parentnode.LastModified
parentnodelastcheckin := parentnode.LastCheckIn parentnodelastcheckin := parentnode.LastCheckIn
@@ -380,6 +384,9 @@ func NodeCheckIn(node models.Node, groupName string) (models.CheckInResponse, er
if peerlistlm < peerslm { if peerlistlm < peerslm {
response.NeedPeerUpdate = true response.NeedPeerUpdate = true
} }
if nkeyupdate < gkeyupdate {
response.NeedKeyUpdate = true
}
/* /*
if postchanges { if postchanges {
parentnode, err = UpdateNode(node, parentnode) parentnode, err = UpdateNode(node, parentnode)

View File

@@ -21,6 +21,7 @@ import (
func groupHandlers(r *mux.Router) { func groupHandlers(r *mux.Router) {
r.HandleFunc("/api/groups", securityCheck(http.HandlerFunc(getGroups))).Methods("GET") r.HandleFunc("/api/groups", securityCheck(http.HandlerFunc(getGroups))).Methods("GET")
r.HandleFunc("/api/groups", securityCheck(http.HandlerFunc(createGroup))).Methods("POST") r.HandleFunc("/api/groups", securityCheck(http.HandlerFunc(createGroup))).Methods("POST")
r.HandleFunc("/api/groups/{groupname}/keyupdate", securityCheck(http.HandlerFunc(keyUpdate))).Methods("POST")
r.HandleFunc("/api/groups/{groupname}", securityCheck(http.HandlerFunc(getGroup))).Methods("GET") r.HandleFunc("/api/groups/{groupname}", securityCheck(http.HandlerFunc(getGroup))).Methods("GET")
r.HandleFunc("/api/groups/{groupname}/numnodes", securityCheck(http.HandlerFunc(getGroupNodeNumber))).Methods("GET") r.HandleFunc("/api/groups/{groupname}/numnodes", securityCheck(http.HandlerFunc(getGroupNodeNumber))).Methods("GET")
r.HandleFunc("/api/groups/{groupname}", securityCheck(http.HandlerFunc(updateGroup))).Methods("PUT") r.HandleFunc("/api/groups/{groupname}", securityCheck(http.HandlerFunc(updateGroup))).Methods("PUT")
@@ -193,6 +194,59 @@ func getGroup(w http.ResponseWriter, r *http.Request) {
json.NewEncoder(w).Encode(group) json.NewEncoder(w).Encode(group)
} }
func keyUpdate(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
var params = mux.Vars(r)
var group models.Group
group, err := functions.GetParentGroup(params["groupname"])
if err != nil {
return
}
group.KeyUpdateTimeStamp = time.Now().Unix()
collection := mongoconn.Client.Database("netmaker").Collection("groups")
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
filter := bson.M{"nameid": params["groupname"]}
// prepare update model.
update := bson.D{
{"$set", bson.D{
{"addressrange", group.AddressRange},
{"displayname", group.DisplayName},
{"defaultlistenport", group.DefaultListenPort},
{"defaultpostup", group.DefaultPostUp},
{"defaultpreup", group.DefaultPreUp},
{"defaultkeepalive", group.DefaultKeepalive},
{"keyupdatetimestamp", group.KeyUpdateTimeStamp},
{"defaultsaveconfig", group.DefaultSaveConfig},
{"defaultinterface", group.DefaultInterface},
{"nodeslastmodified", group.NodesLastModified},
{"grouplastmodified", group.GroupLastModified},
{"allowmanualsignup", group.AllowManualSignUp},
{"defaultcheckininterval", group.DefaultCheckInInterval},
}},
}
errN := collection.FindOneAndUpdate(ctx, filter, update).Decode(&group)
defer cancel()
if errN != nil {
mongoconn.GetError(errN, w)
fmt.Println(errN)
return
}
json.NewEncoder(w).Encode(group)
}
//Update a group //Update a group
func updateGroup(w http.ResponseWriter, r *http.Request) { func updateGroup(w http.ResponseWriter, r *http.Request) {
@@ -405,6 +459,7 @@ func createGroup(w http.ResponseWriter, r *http.Request) {
group.SetDefaults() group.SetDefaults()
group.SetNodesLastModified() group.SetNodesLastModified()
group.SetGroupLastModified() group.SetGroupLastModified()
group.KeyUpdateTimeStamp = time.Now().Unix()
collection := mongoconn.Client.Database("netmaker").Collection("groups") collection := mongoconn.Client.Database("netmaker").Collection("groups")

View File

@@ -172,6 +172,7 @@ func (s *NodeServiceServer) CheckIn(ctx context.Context, req *nodepb.CheckInReq)
Success: checkinresponse.Success, Success: checkinresponse.Success,
Needpeerupdate: checkinresponse.NeedPeerUpdate, Needpeerupdate: checkinresponse.NeedPeerUpdate,
Needconfigupdate: checkinresponse.NeedConfigUpdate, Needconfigupdate: checkinresponse.NeedConfigUpdate,
Needkeyupdate: checkinresponse.NeedKeyUpdate,
Nodemessage: checkinresponse.NodeMessage, Nodemessage: checkinresponse.NodeMessage,
Ispending: checkinresponse.IsPending, Ispending: checkinresponse.IsPending,
}, },

View File

@@ -311,6 +311,7 @@ type CheckInResponse struct {
Needconfigupdate bool `protobuf:"varint,3,opt,name=needconfigupdate,proto3" json:"needconfigupdate,omitempty"` Needconfigupdate bool `protobuf:"varint,3,opt,name=needconfigupdate,proto3" json:"needconfigupdate,omitempty"`
Nodemessage string `protobuf:"bytes,4,opt,name=nodemessage,proto3" json:"nodemessage,omitempty"` Nodemessage string `protobuf:"bytes,4,opt,name=nodemessage,proto3" json:"nodemessage,omitempty"`
Ispending bool `protobuf:"varint,5,opt,name=ispending,proto3" json:"ispending,omitempty"` Ispending bool `protobuf:"varint,5,opt,name=ispending,proto3" json:"ispending,omitempty"`
Needkeyupdate bool `protobuf:"varint,6,opt,name=needkeyupdate,proto3" json:"needkeyupdate,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:"-"`
@@ -376,6 +377,13 @@ func (m *CheckInResponse) GetIspending() bool {
return false return false
} }
func (m *CheckInResponse) GetNeedkeyupdate() bool {
if m != nil {
return m.Needkeyupdate
}
return false
}
type PeersResponse struct { type PeersResponse struct {
Publickey string `protobuf:"bytes,5,opt,name=publickey,proto3" json:"publickey,omitempty"` Publickey string `protobuf:"bytes,5,opt,name=publickey,proto3" json:"publickey,omitempty"`
Endpoint string `protobuf:"bytes,6,opt,name=endpoint,proto3" json:"endpoint,omitempty"` Endpoint string `protobuf:"bytes,6,opt,name=endpoint,proto3" json:"endpoint,omitempty"`
@@ -970,56 +978,57 @@ 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{
// 813 bytes of a gzipped FileDescriptorProto // 827 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0x4d, 0x6f, 0xf3, 0x44, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x56, 0x5b, 0x6f, 0xe3, 0x44,
0x10, 0x56, 0xf2, 0x26, 0x4d, 0x32, 0x69, 0x9a, 0xbe, 0xdb, 0x16, 0xad, 0xac, 0xaa, 0x8a, 0x7c, 0x14, 0x56, 0xba, 0xb9, 0x9e, 0x34, 0x4d, 0x77, 0xda, 0x45, 0x23, 0x6b, 0xb5, 0x8a, 0x2c, 0x84,
0x40, 0x29, 0xa2, 0x49, 0x29, 0x12, 0xe2, 0x86, 0x44, 0x91, 0x10, 0x08, 0x2a, 0x64, 0xc4, 0x85, 0xb2, 0x88, 0x26, 0xa5, 0x48, 0x88, 0x37, 0x24, 0x8a, 0x84, 0x40, 0xb0, 0x42, 0x46, 0xbc, 0xf0,
0xdb, 0xc6, 0x9e, 0xb8, 0x56, 0x9c, 0xdd, 0x8d, 0xd7, 0x4e, 0xd5, 0x5f, 0xc7, 0x89, 0x7f, 0xc4, 0x36, 0xb1, 0x4f, 0xbc, 0x56, 0x9c, 0x99, 0x89, 0xc7, 0xce, 0xaa, 0x3f, 0x90, 0x9f, 0xc2, 0x3f,
0x91, 0x03, 0xda, 0x5d, 0x3b, 0xfe, 0x68, 0x48, 0xfb, 0xf6, 0x96, 0x79, 0x76, 0xbe, 0xe7, 0x99, 0xe0, 0x91, 0x07, 0x34, 0x17, 0xc7, 0x97, 0x86, 0x6c, 0xe9, 0x5b, 0xce, 0x37, 0xe7, 0x7e, 0xbe,
0x89, 0x61, 0x1c, 0x26, 0xd2, 0x9f, 0x73, 0x11, 0xe0, 0x4c, 0x26, 0x22, 0x15, 0xa4, 0xa3, 0x7f, 0x73, 0x62, 0x98, 0xc6, 0x99, 0x0c, 0x97, 0x5c, 0x44, 0xb8, 0x90, 0x99, 0xc8, 0x05, 0xe9, 0xea,
0xbb, 0x3f, 0xc3, 0xf1, 0x2f, 0x22, 0x8c, 0xb8, 0x87, 0x9b, 0x0c, 0x55, 0x4a, 0xae, 0x00, 0xd6, 0xdf, 0xfe, 0x4f, 0x70, 0xfe, 0xb3, 0x88, 0x13, 0x1e, 0xe0, 0xae, 0x40, 0x95, 0x93, 0x37, 0x00,
0xcc, 0x67, 0x41, 0x90, 0xa0, 0x52, 0xb4, 0x35, 0x69, 0x4d, 0x07, 0x5e, 0x05, 0x21, 0x0e, 0xf4, 0x5b, 0x16, 0xb2, 0x28, 0xca, 0x50, 0x29, 0xda, 0x99, 0x75, 0xe6, 0xa3, 0xa0, 0x86, 0x10, 0x0f,
0x25, 0x53, 0xea, 0x49, 0x24, 0x01, 0x6d, 0x9b, 0xd7, 0x9d, 0xec, 0x7e, 0x05, 0xa3, 0xdc, 0x97, 0x86, 0x92, 0x29, 0xf5, 0x41, 0x64, 0x11, 0x3d, 0x33, 0xaf, 0x07, 0xd9, 0xff, 0x12, 0x26, 0xce,
0x92, 0x82, 0x2b, 0x24, 0x13, 0x18, 0x32, 0xdf, 0x47, 0xa5, 0x52, 0xb1, 0x42, 0x9e, 0x7b, 0xab, 0x97, 0x92, 0x82, 0x2b, 0x24, 0x33, 0x18, 0xb3, 0x30, 0x44, 0xa5, 0x72, 0xb1, 0x41, 0xee, 0xbc,
0x42, 0xee, 0x3f, 0x1d, 0xe8, 0x3c, 0x88, 0x00, 0xc9, 0x09, 0xb4, 0xa3, 0x20, 0xd7, 0x68, 0x47, 0xd5, 0x21, 0xff, 0xef, 0x2e, 0x74, 0xdf, 0x89, 0x08, 0xc9, 0x05, 0x9c, 0x25, 0x91, 0xd3, 0x38,
0x01, 0x21, 0xd0, 0xe1, 0x6c, 0x8d, 0x79, 0x0c, 0xf3, 0x9b, 0x50, 0xe8, 0x15, 0x89, 0x7d, 0x30, 0x4b, 0x22, 0x42, 0xa0, 0xcb, 0xd9, 0x16, 0x5d, 0x0c, 0xf3, 0x9b, 0x50, 0x18, 0x94, 0x89, 0xbd,
0x70, 0x21, 0xea, 0xac, 0xe3, 0x48, 0xa5, 0xc8, 0xa5, 0x48, 0x52, 0xda, 0x99, 0xb4, 0xa6, 0x5d, 0x30, 0x70, 0x29, 0xea, 0xac, 0xd3, 0x44, 0xe5, 0xc8, 0xa5, 0xc8, 0x72, 0xda, 0x9d, 0x75, 0xe6,
0xaf, 0x82, 0x90, 0x4b, 0x18, 0xc8, 0x6c, 0x11, 0x47, 0xfe, 0x0a, 0x9f, 0x69, 0xd7, 0xd8, 0x96, 0xbd, 0xa0, 0x86, 0x90, 0xd7, 0x30, 0x92, 0xc5, 0x2a, 0x4d, 0xc2, 0x0d, 0x3e, 0xd0, 0x9e, 0xb1,
0x80, 0xae, 0x09, 0x79, 0x20, 0x45, 0xc4, 0x53, 0x7a, 0x64, 0x6b, 0x2a, 0xe4, 0x46, 0x3f, 0x7a, 0xad, 0x00, 0x5d, 0x13, 0xf2, 0x48, 0x8a, 0x84, 0xe7, 0xb4, 0x6f, 0x6b, 0x2a, 0xe5, 0x56, 0x3f,
0x07, 0xfb, 0xd1, 0xaf, 0xf7, 0x43, 0x47, 0xd5, 0x3d, 0x0e, 0x13, 0x91, 0x49, 0x3a, 0xb0, 0x51, 0x06, 0x27, 0xfb, 0x31, 0x6c, 0xf6, 0x43, 0x47, 0xd5, 0x3d, 0x8e, 0x33, 0x51, 0x48, 0x3a, 0xb2,
0x77, 0x80, 0x7e, 0x8d, 0x94, 0x44, 0x1e, 0x44, 0x3c, 0xa4, 0x30, 0x69, 0x4d, 0xfb, 0x5e, 0x09, 0x51, 0x0f, 0x80, 0x7e, 0x4d, 0x94, 0x44, 0x1e, 0x25, 0x3c, 0xa6, 0x30, 0xeb, 0xcc, 0x87, 0x41,
0x90, 0xcf, 0xe0, 0x48, 0x0a, 0x95, 0x66, 0x92, 0x0e, 0x8d, 0x61, 0x2e, 0x91, 0x73, 0xe8, 0xca, 0x05, 0x90, 0x4f, 0xa0, 0x2f, 0x85, 0xca, 0x0b, 0x49, 0xc7, 0xc6, 0xd0, 0x49, 0xe4, 0x1a, 0x7a,
0x04, 0x33, 0x49, 0x8f, 0x0d, 0x6c, 0x05, 0xed, 0x6b, 0x85, 0x28, 0x59, 0x1c, 0x6d, 0x91, 0x8e, 0x32, 0xc3, 0x42, 0xd2, 0x73, 0x03, 0x5b, 0x41, 0xfb, 0xda, 0x20, 0x4a, 0x96, 0x26, 0x7b, 0xa4,
0x4c, 0xf9, 0x25, 0xa0, 0x6b, 0x50, 0x6c, 0x8b, 0xbe, 0xe0, 0xcb, 0x28, 0xa4, 0x27, 0x26, 0x54, 0x13, 0x53, 0x7e, 0x05, 0xe8, 0x1a, 0x14, 0xdb, 0x63, 0x28, 0xf8, 0x3a, 0x89, 0xe9, 0x85, 0x09,
0x05, 0xd1, 0xd6, 0x76, 0x26, 0xba, 0x3b, 0x63, 0x9b, 0xe7, 0x0e, 0x30, 0x79, 0xf2, 0x14, 0x93, 0x55, 0x43, 0xb4, 0xb5, 0x9d, 0x89, 0xee, 0xce, 0xd4, 0xe6, 0x79, 0x00, 0x4c, 0x9e, 0x3c, 0xc7,
0x25, 0xf3, 0x91, 0x9e, 0xda, 0xd7, 0x1d, 0xa0, 0x47, 0x1c, 0x33, 0x95, 0xfa, 0x8f, 0xe8, 0xaf, 0x6c, 0xcd, 0x42, 0xa4, 0x97, 0xf6, 0xf5, 0x00, 0xe8, 0x11, 0xa7, 0x4c, 0xe5, 0xe1, 0x7b, 0x0c,
0x22, 0x4e, 0x3f, 0xda, 0x11, 0x57, 0x20, 0xe2, 0xc2, 0xb1, 0x16, 0xd7, 0x22, 0x88, 0x96, 0x11, 0x37, 0x09, 0xa7, 0x2f, 0xed, 0x88, 0x6b, 0x10, 0xf1, 0xe1, 0x5c, 0x8b, 0x5b, 0x11, 0x25, 0xeb,
0x06, 0x94, 0x18, 0x95, 0x1a, 0x46, 0xa6, 0x30, 0xce, 0xd5, 0x8d, 0xe7, 0x2d, 0x8b, 0xe9, 0x99, 0x04, 0x23, 0x4a, 0x8c, 0x4a, 0x03, 0x23, 0x73, 0x98, 0x3a, 0x75, 0xe3, 0x79, 0xcf, 0x52, 0x7a,
0xa9, 0xa2, 0x09, 0x1b, 0x6f, 0xc2, 0x67, 0x71, 0x31, 0x91, 0xf3, 0xdc, 0x5b, 0x05, 0xd3, 0x39, 0x65, 0xaa, 0x68, 0xc3, 0xc6, 0x9b, 0x08, 0x59, 0x5a, 0x4e, 0xe4, 0xda, 0x79, 0xab, 0x61, 0x3a,
0xe9, 0x6e, 0xf9, 0x8f, 0x8c, 0x87, 0xa8, 0xe8, 0x85, 0xcd, 0xa9, 0x02, 0xb9, 0x7f, 0xb5, 0x60, 0x27, 0xdd, 0xad, 0xf0, 0x3d, 0xe3, 0x31, 0x2a, 0xfa, 0xca, 0xe6, 0x54, 0x83, 0xfc, 0xbf, 0x3a,
0x7c, 0xaf, 0x3d, 0xff, 0x54, 0x92, 0x95, 0x42, 0x4f, 0x65, 0xa6, 0x6a, 0x43, 0xc3, 0xbe, 0x57, 0x30, 0xbd, 0xd7, 0x9e, 0x7f, 0xac, 0xc8, 0x4a, 0x61, 0xa0, 0x0a, 0x53, 0xb5, 0xa1, 0xe1, 0x30,
0x88, 0xe4, 0x73, 0x38, 0xe1, 0x88, 0x81, 0x44, 0x4c, 0x32, 0x19, 0xb0, 0xd4, 0xb2, 0xb2, 0xef, 0x28, 0x45, 0xf2, 0x19, 0x5c, 0x70, 0xc4, 0x48, 0x22, 0x66, 0x85, 0x8c, 0x58, 0x6e, 0x59, 0x39,
0x35, 0x50, 0xf2, 0x05, 0x9c, 0x6a, 0xc4, 0x76, 0x35, 0xd7, 0xfc, 0x60, 0x34, 0x5f, 0xe0, 0x3a, 0x0c, 0x5a, 0x28, 0xf9, 0x1c, 0x2e, 0x35, 0x62, 0xbb, 0xea, 0x34, 0x5f, 0x18, 0xcd, 0x47, 0xb8,
0x47, 0x4d, 0x85, 0x35, 0x2a, 0xc5, 0x42, 0x34, 0x94, 0x1d, 0x78, 0x55, 0xa8, 0xce, 0x8f, 0x6e, 0xce, 0x51, 0x53, 0x61, 0x8b, 0x4a, 0xb1, 0x18, 0x0d, 0x65, 0x47, 0x41, 0x1d, 0x6a, 0xf2, 0xa3,
0x83, 0x1f, 0xee, 0xdf, 0x2d, 0x18, 0xfd, 0x86, 0x98, 0xa8, 0x5d, 0xfe, 0xef, 0xe7, 0xf8, 0xfb, 0xd7, 0xe6, 0xc7, 0xa7, 0x30, 0xd1, 0x3e, 0x37, 0xf8, 0xe0, 0x02, 0xf5, 0x8d, 0x46, 0x13, 0xf4,
0xf7, 0xaa, 0x39, 0x8d, 0xde, 0x9e, 0x69, 0x1c, 0xe4, 0xa6, 0x3b, 0x87, 0xd1, 0x7d, 0x82, 0x2c, 0xff, 0xec, 0xc0, 0xe4, 0x57, 0xc4, 0x4c, 0x1d, 0xaa, 0x7c, 0xfe, 0x26, 0x3c, 0x7f, 0xfb, 0xda,
0x45, 0x7d, 0x05, 0x3c, 0xdc, 0x90, 0x2b, 0x30, 0x87, 0xc9, 0xcc, 0x60, 0x78, 0x07, 0x33, 0x73, 0x33, 0x1b, 0x1c, 0x99, 0xd9, 0x49, 0x06, 0xfb, 0x4b, 0x98, 0xdc, 0x67, 0xc8, 0x72, 0xd4, 0xb7,
0xb1, 0xcc, 0xa3, 0x3d, 0x58, 0x0d, 0x03, 0xf5, 0x16, 0x83, 0x3f, 0x4c, 0xcf, 0x3f, 0x21, 0x42, 0x22, 0xc0, 0x1d, 0x79, 0x03, 0xe6, 0x7c, 0x99, 0x49, 0x8d, 0xef, 0x60, 0x61, 0xee, 0x9a, 0x79,
0xd5, 0xe0, 0xf5, 0x08, 0xf7, 0x30, 0xf4, 0x90, 0x05, 0xa5, 0xff, 0xc3, 0x27, 0xf4, 0x1c, 0xba, 0xb4, 0x67, 0xad, 0x65, 0xa0, 0x9e, 0x62, 0xf0, 0xbb, 0xe9, 0xd9, 0xff, 0x88, 0x50, 0x37, 0xf8,
0xf6, 0x24, 0xd8, 0xdb, 0x66, 0x05, 0xf7, 0xa6, 0xea, 0xe4, 0xf5, 0x98, 0xbf, 0xc2, 0xe8, 0x07, 0x78, 0x84, 0x7b, 0x18, 0x07, 0xc8, 0xa2, 0xca, 0xff, 0xe9, 0x43, 0x7b, 0x0d, 0x3d, 0x7b, 0x38,
0x8c, 0xb1, 0x5a, 0xd5, 0xe1, 0xa8, 0x97, 0x30, 0x30, 0x81, 0x1e, 0xca, 0xab, 0x5a, 0x02, 0xee, 0xec, 0x05, 0xb4, 0x82, 0x7f, 0x53, 0x77, 0xf2, 0xf1, 0x98, 0xbf, 0xc0, 0xe4, 0x7b, 0x4c, 0xb1,
0x75, 0xdd, 0x9d, 0xfa, 0xff, 0x6d, 0xd0, 0xd5, 0xfe, 0x88, 0x69, 0xce, 0xbd, 0xf7, 0x56, 0xfb, 0x5e, 0xd5, 0xe9, 0xa8, 0xaf, 0x61, 0x64, 0x02, 0xbd, 0xab, 0x6e, 0x6f, 0x05, 0xf8, 0x6f, 0x9b,
0x6d, 0xd5, 0x89, 0x22, 0xd7, 0xd0, 0xd5, 0x7b, 0xa4, 0xf2, 0x72, 0xcf, 0x6c, 0xb9, 0x35, 0x7e, 0xee, 0xd4, 0x7f, 0xef, 0x8c, 0xae, 0xf6, 0x07, 0xcc, 0x1d, 0xf7, 0x9e, 0x5b, 0xed, 0x37, 0x75,
0x7b, 0x56, 0xc3, 0xfd, 0x12, 0x60, 0xb7, 0xb9, 0x9b, 0x37, 0xb4, 0xa9, 0xd4, 0x56, 0xe4, 0xbb, 0x27, 0x8a, 0xbc, 0x85, 0x9e, 0xde, 0x36, 0xe5, 0xca, 0xbd, 0xb2, 0xe5, 0x36, 0xf8, 0x1d, 0x58,
0xdd, 0x99, 0x49, 0x72, 0xaf, 0xb9, 0xe1, 0x85, 0x35, 0x6c, 0x9c, 0x04, 0xaf, 0xa9, 0x7d, 0xf7, 0x0d, 0xff, 0x0b, 0x80, 0xc3, 0x7e, 0xef, 0x9e, 0xd0, 0xa6, 0x4a, 0x5b, 0x91, 0x6f, 0x0f, 0xc7,
0x6f, 0x1b, 0x86, 0xda, 0xfb, 0xef, 0x98, 0x6c, 0x23, 0x1f, 0xc9, 0x2d, 0x74, 0xcd, 0x3f, 0x1e, 0x28, 0x73, 0x5e, 0x9d, 0xe1, 0x2b, 0x6b, 0xd8, 0x3a, 0x1c, 0x41, 0x5b, 0xfb, 0xee, 0x9f, 0x33,
0x21, 0xd6, 0x41, 0xf5, 0xaf, 0xd4, 0x39, 0xab, 0x61, 0xf9, 0x96, 0x7e, 0x03, 0x50, 0xd2, 0x97, 0x18, 0x6b, 0xef, 0xbf, 0x61, 0xb6, 0x4f, 0x42, 0x24, 0xb7, 0xd0, 0x33, 0xff, 0x8b, 0x84, 0x58,
0xe4, 0x2a, 0xb5, 0x0d, 0x70, 0xf6, 0x80, 0x8a, 0xdc, 0x42, 0xbf, 0xa0, 0x07, 0xf9, 0x68, 0x15, 0x07, 0xf5, 0x3f, 0x5c, 0xef, 0xaa, 0x81, 0xb9, 0x2d, 0xfd, 0x1a, 0xa0, 0xa2, 0x2f, 0x71, 0x2a,
0x2a, 0x9c, 0x73, 0x5e, 0x40, 0x4a, 0x47, 0x2a, 0x69, 0x5c, 0x44, 0xaa, 0x6d, 0x82, 0xb3, 0x07, 0x8d, 0x0d, 0xf0, 0x8e, 0x80, 0x8a, 0xdc, 0xc2, 0xb0, 0xa4, 0x07, 0x79, 0x69, 0x15, 0x6a, 0x9c,
0x34, 0x76, 0x25, 0x15, 0x0a, 0xbb, 0x1a, 0xd7, 0x9c, 0x3d, 0xa0, 0x22, 0x77, 0xd0, 0x2f, 0x46, 0xf3, 0x1e, 0x41, 0x4a, 0x47, 0xaa, 0x68, 0x5c, 0x46, 0x6a, 0x6c, 0x82, 0x77, 0x04, 0x34, 0x76,
0x5a, 0x64, 0x58, 0xe1, 0x89, 0xf3, 0x02, 0x52, 0xb7, 0x2d, 0x72, 0x03, 0xbd, 0xbc, 0xe7, 0xe4, 0x15, 0x15, 0x4a, 0xbb, 0x06, 0xd7, 0xbc, 0x23, 0xa0, 0x22, 0x77, 0x30, 0x2c, 0x47, 0x5a, 0x66,
0xb4, 0x31, 0x82, 0x8d, 0xd3, 0x44, 0xd4, 0xf7, 0xf3, 0x3f, 0x6f, 0x42, 0x21, 0xc2, 0x18, 0x67, 0x58, 0xe3, 0x89, 0xf7, 0x08, 0x52, 0xb7, 0x1d, 0x72, 0x03, 0x03, 0xd7, 0x73, 0x72, 0xd9, 0x1a,
0xa1, 0x88, 0x19, 0x0f, 0x67, 0x22, 0x09, 0xe7, 0xe6, 0x6b, 0x66, 0x91, 0x2d, 0xe7, 0xe9, 0xb3, 0xc1, 0xce, 0x6b, 0x23, 0xea, 0xbb, 0xe5, 0x1f, 0x37, 0xb1, 0x10, 0x71, 0x8a, 0x8b, 0x58, 0xa4,
0x44, 0x35, 0x5f, 0x71, 0xf1, 0xc4, 0xcd, 0x77, 0x8e, 0x5c, 0x2c, 0x8e, 0xcc, 0xe3, 0xd7, 0xff, 0x8c, 0xc7, 0x0b, 0x91, 0xc5, 0x4b, 0xf3, 0xcd, 0xb3, 0x2a, 0xd6, 0xcb, 0xfc, 0x41, 0xa2, 0x5a,
0x05, 0x00, 0x00, 0xff, 0xff, 0x04, 0x8b, 0xcd, 0xc5, 0xfd, 0x08, 0x00, 0x00, 0x6e, 0xb8, 0xf8, 0xc0, 0xcd, 0xd7, 0x90, 0x5c, 0xad, 0xfa, 0xe6, 0xf1, 0xab, 0x7f, 0x03, 0x00,
0x00, 0xff, 0xff, 0x32, 0x60, 0x03, 0x3b, 0x23, 0x09, 0x00, 0x00,
} }

View File

@@ -49,6 +49,7 @@ message CheckInResponse {
bool needconfigupdate = 3; bool needconfigupdate = 3;
string nodemessage = 4; string nodemessage = 4;
bool ispending = 5; bool ispending = 5;
bool needkeyupdate = 6;
} }
message PeersResponse { message PeersResponse {

View File

@@ -19,6 +19,7 @@ type Group struct {
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"`
DefaultPreUp string `json:"defaultpreup" bson:"defaultpreup"` DefaultPreUp string `json:"defaultpreup" bson:"defaultpreup"`
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"`
AccessKeys []AccessKey `json:"accesskeys" bson:"accesskeys"` AccessKeys []AccessKey `json:"accesskeys" bson:"accesskeys"`

View File

@@ -31,6 +31,7 @@ type Node struct {
AccessKey string `json:"accesskey" bson:"accesskey"` AccessKey string `json:"accesskey" bson:"accesskey"`
Interface string `json:"interface" bson:"interface"` Interface string `json:"interface" bson:"interface"`
LastModified int64 `json:"lastmodified" bson:"lastmodified"` LastModified int64 `json:"lastmodified" bson:"lastmodified"`
KeyUpdateTimeStamp int64 `json:"keyupdatetimestamp" bson:"keyupdatetimestamp"`
LastPeerUpdate int64 `json:"lastpeerupdate" bson:"lastpeerupdate"` LastPeerUpdate int64 `json:"lastpeerupdate" bson:"lastpeerupdate"`
LastCheckIn int64 `json:"lastcheckin" bson:"lastcheckin"` LastCheckIn int64 `json:"lastcheckin" bson:"lastcheckin"`
MacAddress string `json:"macaddress" bson:"macaddress" validate:"required,macaddress_valid,macaddress_unique"` MacAddress string `json:"macaddress" bson:"macaddress" validate:"required,macaddress_valid,macaddress_unique"`

View File

@@ -84,6 +84,7 @@ type CheckInResponse struct{
Success bool `json:"success" bson:"success"` Success bool `json:"success" bson:"success"`
NeedPeerUpdate bool `json:"needpeerupdate" bson:"needpeerupdate"` NeedPeerUpdate bool `json:"needpeerupdate" bson:"needpeerupdate"`
NeedConfigUpdate bool `json:"needconfigupdate" bson:"needconfigupdate"` NeedConfigUpdate bool `json:"needconfigupdate" bson:"needconfigupdate"`
NeedKeyUpdate bool `json:"needkeyupdate" bson:"needkeyupdate"`
NodeMessage string `json:"nodemessage" bson:"nodemessage"` NodeMessage string `json:"nodemessage" bson:"nodemessage"`
IsPending bool `json:"ispending" bson:"ispending"` IsPending bool `json:"ispending" bson:"ispending"`
} }

View File

@@ -440,15 +440,7 @@ func getMacAddr() ([]string, error) {
} }
return as, nil return as, nil
} }
/*
func read(macaddress string, group string) error {
//this would be used for retrieving state as set by the server.
}
func checkLocalConfigChange() error {
}
*/
func initWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig) error { func initWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig) error {
@@ -586,6 +578,71 @@ func initWireguard(node *nodepb.Node, privkey string, peers []wgtypes.PeerConfig
return err return err
} }
func setWGKeyConfig(network string, serveraddr string) error {
ctx := context.Background()
var header metadata.MD
var wcclient nodepb.NodeServiceClient
var requestOpts grpc.DialOption
requestOpts = grpc.WithInsecure()
conn, err := grpc.Dial(serveraddr, requestOpts)
if err != nil {
fmt.Printf("Cant dial GRPC server: %v", err)
return err
}
wcclient = nodepb.NewNodeServiceClient(conn)
fmt.Println("Authenticating with GRPC Server")
ctx, err = SetJWT(wcclient, network)
if err != nil {
fmt.Printf("Failed to authenticate: %v", err)
return err
}
fmt.Println("Authenticated")
node := getNode(network)
privatekey, err := wgtypes.GeneratePrivateKey()
if err != nil {
return err
}
privkeystring := privatekey.String()
publickey := privatekey.PublicKey()
node.Publickey = publickey.String()
err = storePrivKey(privkeystring)
if err != nil {
return err
}
err = modConfig(&node)
if err != nil {
return err
}
postnode := getNode(network)
req := &nodepb.UpdateNodeReq{
Node: &postnode,
}
_, err = wcclient.UpdateNode(ctx, req, grpc.Header(&header))
if err != nil {
return err
}
err = setWGConfig(network)
if err != nil {
return err
log.Fatalf("Error: %v", err)
}
return err
}
func setWGConfig(network string) error { func setWGConfig(network string) error {
cfg, err := config.ReadConfig(network) cfg, err := config.ReadConfig(network)
@@ -615,12 +672,12 @@ func setWGConfig(network string) error {
func storePrivKey(key string) error{ func storePrivKey(key string) error{
d1 := []byte(key) d1 := []byte(key)
err := ioutil.WriteFile("/root/.wckey", d1, 0644) err := ioutil.WriteFile("/etc/netclient/wgkey", d1, 0644)
return err return err
} }
func retrievePrivKey() (string, error) { func retrievePrivKey() (string, error) {
dat, err := ioutil.ReadFile("/root/.wckey") dat, err := ioutil.ReadFile("/etc/netclient/wgkey")
return string(dat), err return string(dat), err
} }
@@ -852,6 +909,16 @@ func CheckIn(network string) error {
} }
setupcheck = false setupcheck = false
} }
if checkinres.Checkinresponse.Needkeyupdate {
fmt.Println("Server has requested that node update key pairs.")
fmt.Println("Proceeding to re-generate key pairs for Wiregard.")
err = setWGKeyConfig(network, servercfg.Address)
if err != nil {
return err
log.Fatalf("Unable to process reset keys request: %v", err)
}
setupcheck = false
}
if checkinres.Checkinresponse.Needpeerupdate { if checkinres.Checkinresponse.Needpeerupdate {
fmt.Println("Server has requested that node update peer list.") fmt.Println("Server has requested that node update peer list.")
fmt.Println("Updating peer list from remote server.") fmt.Println("Updating peer list from remote server.")