egress.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package controller
  2. import (
  3. "encoding/json"
  4. "net"
  5. "net/http"
  6. "github.com/gorilla/mux"
  7. "github.com/gravitl/netmaker/logic"
  8. )
  9. type RoutingNode struct {
  10. NodeID string `json:"node_id"`
  11. RouteMetric uint32 `json:"route_metric"`
  12. }
  13. type RoutingGrp struct {
  14. GrpID string `json:"group_id"`
  15. RouteMetric uint32 `json:"route_metric"`
  16. }
  17. type Egress struct {
  18. Network net.IPNet
  19. RoutingNodes []RoutingNode
  20. RoutingGrp []RoutingGrp
  21. }
  22. func egressHandlers(r *mux.Router) {
  23. r.HandleFunc("/api/v1/egress/{network}", logic.SecurityCheck(true, http.HandlerFunc(createEgressNetwork))).Methods(http.MethodPost)
  24. }
  25. func createEgressNetwork(w http.ResponseWriter, r *http.Request) {
  26. var req Egress
  27. err := json.NewDecoder(r.Body).Decode(&req)
  28. if err != nil {
  29. logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
  30. return
  31. }
  32. if len(req.RoutingNodes) > 0 {
  33. for _, routingNodeI := range req.RoutingNodes {
  34. node, err := logic.GetNodeByID(routingNodeI.NodeID)
  35. if err != nil {
  36. continue
  37. }
  38. node.IsGw = true
  39. if !logic.StringSliceContains(node.EgressGatewayRanges, req.Network.String()) {
  40. node.EgressGatewayRanges = append(node.EgressGatewayRanges, req.Network.String())
  41. }
  42. logic.UpsertNode(&node)
  43. }
  44. }
  45. }