mirror of
https://github.com/Sagit-chu/flvx.git
synced 2026-10-07 02:06:38 +08:00
fix: preserve probe targets on legacy updates
This commit is contained in:
@@ -886,19 +886,28 @@ func (h *Handler) tunnelUpdate(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
typeVal := asInt(req["type"], 1)
|
typeVal := asInt(req["type"], 1)
|
||||||
ipPreference := asString(req["ipPreference"])
|
ipPreference := asString(req["ipPreference"])
|
||||||
probeTarget, probeTargetConfigured, err := parseTunnelProbeTargetFromRequest(req)
|
_, hasProbeTargetHost := req["probeTargetHost"]
|
||||||
if err != nil {
|
_, hasProbeTargetPort := req["probeTargetPort"]
|
||||||
response.WriteJSON(w, response.ErrDefault(err.Error()))
|
probeTargetFieldsPresent := hasProbeTargetHost || hasProbeTargetPort
|
||||||
return
|
|
||||||
}
|
|
||||||
probeTargetHost := ""
|
probeTargetHost := ""
|
||||||
probeTargetPort := 0
|
probeTargetPort := 0
|
||||||
if probeTargetConfigured {
|
if probeTargetFieldsPresent {
|
||||||
probeTargetHost = probeTarget.Host
|
probeTarget, probeTargetConfigured, err := parseTunnelProbeTargetFromRequest(req)
|
||||||
probeTargetPort = probeTarget.Port
|
if err != nil {
|
||||||
|
response.WriteJSON(w, response.ErrDefault(err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if probeTargetConfigured {
|
||||||
|
probeTargetHost = probeTarget.Host
|
||||||
|
probeTargetPort = probeTarget.Port
|
||||||
|
}
|
||||||
}
|
}
|
||||||
oldEntryNodeIDs, _ := h.tunnelEntryNodeIDs(id)
|
oldEntryNodeIDs, _ := h.tunnelEntryNodeIDs(id)
|
||||||
oldTunnel, _ := h.getTunnelRecord(id)
|
oldTunnel, _ := h.getTunnelRecord(id)
|
||||||
|
if !probeTargetFieldsPresent && oldTunnel != nil {
|
||||||
|
probeTargetHost = oldTunnel.ProbeTargetHost
|
||||||
|
probeTargetPort = oldTunnel.ProbeTargetPort
|
||||||
|
}
|
||||||
oldChainRows, _ := h.listChainNodesForTunnel(id)
|
oldChainRows, _ := h.listChainNodesForTunnel(id)
|
||||||
if oldTunnel != nil && oldTunnel.Type == 2 && typeVal != 2 {
|
if oldTunnel != nil && oldTunnel.Type == 2 && typeVal != 2 {
|
||||||
h.cleanupTunnelRuntime(id)
|
h.cleanupTunnelRuntime(id)
|
||||||
|
|||||||
@@ -74,6 +74,33 @@ func TestTunnelUpdatePersistsDefaultProbeTargetAsEmpty(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTunnelUpdateWithoutProbeTargetFieldsPreservesExistingTarget(t *testing.T) {
|
||||||
|
h := setupProbeTargetTunnelHandler(t)
|
||||||
|
seedProbeTargetTunnel(t, h, 79, "existing", "old.example.com", 9443)
|
||||||
|
body := bytes.NewReader([]byte(`{
|
||||||
|
"id":79,
|
||||||
|
"name":"existing",
|
||||||
|
"type":1,
|
||||||
|
"flow":1,
|
||||||
|
"trafficRatio":1,
|
||||||
|
"status":1,
|
||||||
|
"inNodeId":[{"nodeId":10,"protocol":"tls"}]
|
||||||
|
}`))
|
||||||
|
|
||||||
|
res := httptest.NewRecorder()
|
||||||
|
h.tunnelUpdate(res, httptest.NewRequest(http.MethodPost, "/api/v1/tunnel/update", body))
|
||||||
|
assertProbeTargetSuccess(t, res)
|
||||||
|
|
||||||
|
items, err := h.repo.ListTunnels()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("list tunnels: %v", err)
|
||||||
|
}
|
||||||
|
item := findProbeTargetTunnelItem(t, items, 79)
|
||||||
|
if item["probeTargetHost"] != "old.example.com" || item["probeTargetPort"] != 9443 {
|
||||||
|
t.Fatalf("expected omitted probe target fields to preserve existing target, got %+v", item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestTunnelCreateRejectsInvalidProbeTarget(t *testing.T) {
|
func TestTunnelCreateRejectsInvalidProbeTarget(t *testing.T) {
|
||||||
h := setupProbeTargetTunnelHandler(t)
|
h := setupProbeTargetTunnelHandler(t)
|
||||||
body := bytes.NewReader([]byte(`{
|
body := bytes.NewReader([]byte(`{
|
||||||
|
|||||||
Reference in New Issue
Block a user