mirror of
https://github.com/luscis/openlan.git
synced 2025-10-06 09:06:54 +08:00
fea: support list/add/del/save output (#48)
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
@@ -17,6 +18,8 @@ type Output struct {
|
||||
func (h Output) Router(router *mux.Router) {
|
||||
router.HandleFunc("/api/network/{id}/output", h.Get).Methods("GET")
|
||||
router.HandleFunc("/api/network/{id}/output", h.Post).Methods("POST")
|
||||
router.HandleFunc("/api/network/{id}/output", h.Delete).Methods("DELETE")
|
||||
router.HandleFunc("/api/network/{id}/output", h.Save).Methods("PUT")
|
||||
}
|
||||
|
||||
func (h Output) Get(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -35,5 +38,65 @@ func (h Output) Get(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
func (h Output) Post(w http.ResponseWriter, r *http.Request) {
|
||||
ResponseJson(w, "outputs")
|
||||
output := &schema.Output{}
|
||||
if err := GetData(r, output); err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
cs := h.Switcher.Config()
|
||||
if cs.Network == nil {
|
||||
http.Error(w, "switch has no network can not add output", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
network := cs.GetNetwork(output.Network)
|
||||
if network == nil {
|
||||
http.Error(w, fmt.Sprintf("switch has no network with %s can not add output", output.Network), http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
worker := GetWorker(output.Network)
|
||||
if worker == nil {
|
||||
http.Error(w, "Network not found", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
worker.AddOutput(output.Segment, output.Protocol, output.Remote)
|
||||
ResponseMsg(w, 0, "")
|
||||
}
|
||||
|
||||
func (h Output) Delete(w http.ResponseWriter, r *http.Request) {
|
||||
output := &schema.Output{}
|
||||
if err := GetData(r, output); err != nil {
|
||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
cs := h.Switcher.Config()
|
||||
if cs.Network == nil {
|
||||
http.Error(w, "switch has no network can not del output", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
network := cs.GetNetwork(output.Network)
|
||||
if network == nil {
|
||||
http.Error(w, fmt.Sprintf("switch has no network with %s can not del output", output.Network), http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
worker := GetWorker(output.Network)
|
||||
if worker == nil {
|
||||
http.Error(w, "Network not found", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
worker.DelOutput(output.Device)
|
||||
ResponseMsg(w, 0, "")
|
||||
}
|
||||
|
||||
func (h Output) Save(w http.ResponseWriter, r *http.Request) {
|
||||
vars := mux.Vars(r)
|
||||
id := vars["id"]
|
||||
|
||||
worker := GetWorker(id)
|
||||
if worker == nil {
|
||||
http.Error(w, "Network not found", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
worker.SaveOutput()
|
||||
|
||||
ResponseJson(w, "success")
|
||||
}
|
||||
|
Reference in New Issue
Block a user