diff --git a/controllers/hosts.go b/controllers/hosts.go index 77334f06..d4d0adb6 100644 --- a/controllers/hosts.go +++ b/controllers/hosts.go @@ -140,7 +140,33 @@ func deleteHost(w http.ResponseWriter, r *http.Request) { logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal")) return } - + if currHost.IsRelay { + if _, _, err := logic.DeleteHostRelay(hostid); err != nil { + logger.Log(0, r.Header.Get("user"), "failed to dissociate host from relays:", err.Error()) + logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal")) + return + } + } + if currHost.IsRelayed { + relayHost, err := logic.GetHost(currHost.RelayedBy) + if err != nil { + logger.Log(0, r.Header.Get("user"), "failed to fetch relay host:", err.Error()) + logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal")) + return + } + newRelayedHosts := make([]string, 0) + for _, relayedHostID := range relayHost.RelayedHosts { + if relayedHostID != hostid { + newRelayedHosts = append(newRelayedHosts, relayedHostID) + } + } + relayHost.RelayedHosts = newRelayedHosts + if err := logic.UpsertHost(relayHost); err != nil { + logger.Log(0, r.Header.Get("user"), "failed to update host relays:", err.Error()) + logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal")) + return + } + } if err = logic.RemoveHost(currHost); err != nil { logger.Log(0, r.Header.Get("user"), "failed to delete a host:", err.Error()) logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))