| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- package controller
- import (
- "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)
- }
- }
- }
|