Browse Source

add egress acl API

abhishek9686 3 months ago
parent
commit
9e0cba05d7
2 changed files with 48 additions and 0 deletions
  1. 31 0
      controllers/acls.go
  2. 17 0
      logic/acls.go

+ 31 - 0
controllers/acls.go

@@ -9,10 +9,12 @@ import (
 
 	"github.com/google/uuid"
 	"github.com/gorilla/mux"
+	"github.com/gravitl/netmaker/db"
 	"github.com/gravitl/netmaker/logger"
 	"github.com/gravitl/netmaker/logic"
 	"github.com/gravitl/netmaker/models"
 	"github.com/gravitl/netmaker/mq"
+	"github.com/gravitl/netmaker/schema"
 )
 
 func aclHandlers(r *mux.Router) {
@@ -218,6 +220,35 @@ func getAcls(w http.ResponseWriter, r *http.Request) {
 	logic.ReturnSuccessResponseWithJson(w, r, acls, "fetched all acls in the network "+netID)
 }
 
+// @Summary     List Egress Acls in a network
+// @Router      /api/v1/acls [get]
+// @Tags        ACL
+// @Accept      json
+// @Success     200 {array} models.SuccessResponse
+// @Failure     500 {object} models.ErrorResponse
+func getEgressAcls(w http.ResponseWriter, r *http.Request) {
+	eID := r.URL.Query().Get("egress_id")
+	if eID == "" {
+		logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("egress id param is missing"), "badrequest"))
+		return
+	}
+	e := schema.Egress{ID: eID}
+	// check if network exists
+	err := e.Get(db.WithContext(r.Context()))
+	if err != nil {
+		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "badrequest"))
+		return
+	}
+	acls, err := logic.ListEgressAcls(eID)
+	if err != nil {
+		logger.Log(0, r.Header.Get("user"), "failed to get all network acl entries: ", err.Error())
+		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
+		return
+	}
+	logic.SortAclEntrys(acls[:])
+	logic.ReturnSuccessResponseWithJson(w, r, acls, "fetched acls for egress"+e.Name)
+}
+
 // @Summary     Create Acl
 // @Router      /api/v1/acls [post]
 // @Tags        ACL

+ 17 - 0
logic/acls.go

@@ -868,6 +868,23 @@ func ListAclsByNetwork(netID models.NetworkID) ([]models.Acl, error) {
 	return netAcls, nil
 }
 
+// ListEgressAcls - list egress acl policies
+func ListEgressAcls(eID string) ([]models.Acl, error) {
+	allAcls := ListAcls()
+	egressAcls := []models.Acl{}
+	for _, acl := range allAcls {
+		if !servercfg.IsPro && acl.RuleType == models.UserPolicy {
+			continue
+		}
+		for _, dst := range acl.Dst {
+			if dst.ID == models.EgressID && dst.Value == eID {
+				egressAcls = append(egressAcls, acl)
+			}
+		}
+	}
+	return egressAcls, nil
+}
+
 // ListDevicePolicies - lists all device policies in a network
 func ListDevicePolicies(netID models.NetworkID) []models.Acl {
 	allAcls := ListAcls()