added TODO comment and allowed using enrollment key more than once

This commit is contained in:
0xdcarns 2023-02-24 12:08:32 -05:00
parent e759637750
commit 0335e258ad
2 changed files with 24 additions and 14 deletions

View file

@ -152,9 +152,10 @@ func handleHostRegister(w http.ResponseWriter, r *http.Request) {
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
return
}
hostExists := false
// check if host already exists
if ok := logic.HostExists(&newHost); ok {
logger.Log(0, "host", newHost.ID.String(), newHost.Name, "attempted to re-register")
if hostExists = logic.HostExists(&newHost); hostExists && len(enrollmentKey.Networks) == 0 {
logger.Log(0, "host", newHost.ID.String(), newHost.Name, "attempted to re-register with no networks")
logic.ReturnErrorResponse(w, r, logic.FormatError(fmt.Errorf("host already exists"), "badrequest"))
return
}
@ -176,13 +177,27 @@ func handleHostRegister(w http.ResponseWriter, r *http.Request) {
logic.ReturnErrorResponse(w, r, logic.FormatError(fmt.Errorf("invalid enrollment key"), "badrequest"))
return
}
// register host
logic.CheckHostPorts(&newHost)
if err = logic.CreateHost(&newHost); err != nil {
logger.Log(0, "host", newHost.ID.String(), newHost.Name, "failed registration -", err.Error())
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
return
if !hostExists {
// register host
logic.CheckHostPorts(&newHost)
if err = logic.CreateHost(&newHost); err != nil {
logger.Log(0, "host", newHost.ID.String(), newHost.Name, "failed registration -", err.Error())
logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
return
}
} else {
// need to revise the list of networks from key
// based on the ones host currently has
var networksToAdd = []string{}
currentNets := logic.GetHostNetworks(newHost.ID.String())
for _, newNet := range enrollmentKey.Networks {
if !logic.StringSliceContains(currentNets, newNet) {
networksToAdd = append(networksToAdd, newNet)
}
}
enrollmentKey.Networks = networksToAdd
}
// ready the response
server := servercfg.GetServerInfo()
server.TrafficKey = key

View file

@ -22,6 +22,7 @@ func AddAction(hu models.HostUpdate) {
}
// GetAction - gets an action if exists
// TODO: may need to move to DB rather than sync map for HA
func GetAction(id string) *models.HostUpdate {
currentRecords, ok := nodeActionHandler.Load(id)
if !ok {
@ -35,9 +36,3 @@ func GetAction(id string) *models.HostUpdate {
}
return nil
}
// [hostID][NodeAction1, NodeAction2]
// host receives nodeaction1
// host responds with ACK or something
// mq then sends next action in list, NodeAction2
// host responds, list is empty, finished