|
@@ -88,7 +88,7 @@ func (s *Server) handleSetSDWANGroupState(w http.ResponseWriter, r *http.Request
|
|
|
writeJSON(w, http.StatusOK, map[string]any{"success": true, "id": id, "disabled": req.Disabled})
|
|
writeJSON(w, http.StatusOK, map[string]any{"success": true, "id": id, "disabled": req.Disabled})
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func (s *Server) handleAddSDWANMember(w http.ResponseWriter, r *http.Request) {
|
|
|
|
|
|
|
+func (s *Server) handleSaveSDWANMember(w http.ResponseWriter, r *http.Request) {
|
|
|
if s.sdwanMgr == nil {
|
|
if s.sdwanMgr == nil {
|
|
|
writeError(w, http.StatusServiceUnavailable, "sd-wan subsystem unavailable")
|
|
writeError(w, http.StatusServiceUnavailable, "sd-wan subsystem unavailable")
|
|
|
return
|
|
return
|
|
@@ -100,10 +100,38 @@ func (s *Server) handleAddSDWANMember(w http.ResponseWriter, r *http.Request) {
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
if mem.Interface == "" {
|
|
if mem.Interface == "" {
|
|
|
|
|
+ if iface := r.PathValue("iface"); iface != "" {
|
|
|
|
|
+ mem.Interface = iface
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ if mem.Interface == "" && mem.ID == "" {
|
|
|
writeError(w, http.StatusBadRequest, "interface is required")
|
|
writeError(w, http.StatusBadRequest, "interface is required")
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
|
- if err := s.sdwanMgr.AddMember(id, &mem); err != nil {
|
|
|
|
|
|
|
+
|
|
|
|
|
+ isUpdate := r.Method == http.MethodPut
|
|
|
|
|
+ if !isUpdate {
|
|
|
|
|
+ if g, ok := s.sdwanMgr.Get(id); ok && g != nil {
|
|
|
|
|
+ for _, existing := range g.Members {
|
|
|
|
|
+ if (mem.ID != "" && existing.ID == mem.ID) || (mem.Interface != "" && existing.Interface == mem.Interface) {
|
|
|
|
|
+ isUpdate = true
|
|
|
|
|
+ if mem.ID == "" {
|
|
|
|
|
+ mem.ID = existing.ID
|
|
|
|
|
+ }
|
|
|
|
|
+ break
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ var err error
|
|
|
|
|
+ if isUpdate {
|
|
|
|
|
+ err = s.sdwanMgr.UpdateMember(id, &mem)
|
|
|
|
|
+ } else {
|
|
|
|
|
+ err = s.sdwanMgr.AddMember(id, &mem)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if err != nil {
|
|
|
writeError(w, http.StatusBadRequest, err.Error())
|
|
writeError(w, http.StatusBadRequest, err.Error())
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
@@ -113,6 +141,7 @@ func (s *Server) handleAddSDWANMember(w http.ResponseWriter, r *http.Request) {
|
|
|
"interface": mem.Interface,
|
|
"interface": mem.Interface,
|
|
|
"weight": mem.Weight,
|
|
"weight": mem.Weight,
|
|
|
"priority": mem.Priority,
|
|
"priority": mem.Priority,
|
|
|
|
|
+ "disabled": mem.Disabled,
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
|
|
|