| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 | package controllerimport (	"encoding/json"	"net"	"net/http"	"github.com/gorilla/mux"	"github.com/gravitl/netmaker/logic")type RoutingNode struct {	NodeID      string `json:"node_id"`	RouteMetric uint32 `json:"route_metric"`}type RoutingGrp struct {	GrpID       string `json:"group_id"`	RouteMetric uint32 `json:"route_metric"`}type Egress struct {	Network      net.IPNet	RoutingNodes []RoutingNode	RoutingGrp   []RoutingGrp}func egressHandlers(r *mux.Router) {	r.HandleFunc("/api/v1/egress/{network}", logic.SecurityCheck(true, http.HandlerFunc(createEgressNetwork))).Methods(http.MethodPost)}func createEgressNetwork(w http.ResponseWriter, r *http.Request) {	var req Egress	err := json.NewDecoder(r.Body).Decode(&req)	if err != nil {		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))		return	}	if len(req.RoutingNodes) > 0 {		for _, routingNodeI := range req.RoutingNodes {			node, err := logic.GetNodeByID(routingNodeI.NodeID)			if err != nil {				continue			}			node.IsGw = true			if !logic.StringSliceContains(node.EgressGatewayRanges, req.Network.String()) {				node.EgressGatewayRanges = append(node.EgressGatewayRanges, req.Network.String())			}			logic.UpsertNode(&node)		}	}}
 |