package server import ( "errors" "fmt" "net/http" "github.com/gin-gonic/gin" "edge-infra.dev/pkg/lib/fog" rulesengine "edge-infra.dev/pkg/sds/emergencyaccess/rules" ) //nolint:dupl func (res RulesEngineService) postPrivileges(c *gin.Context) { log := fog.FromContext(c).WithName("rulesengineservice") var payload []rulesengine.PostPrivilegePayload if err := c.ShouldBindJSON(&payload); err != nil { log.Error(err, "bind error") c.Status(http.StatusBadRequest) return } if len(payload) == 0 { log.Error(errors.New("payload was nil"), "validation error") c.Status(http.StatusBadRequest) return } result, err := res.RulesEngine.AddPrivileges(c.Request.Context(), payload) if err != nil { log.Error(err, "AddPrivilege error") c.Status(http.StatusInternalServerError) return } if len(result.Conflicts) > 0 { log.Info("Conflicts with query") c.JSON(http.StatusConflict, result) return } c.Status(http.StatusOK) } func (res RulesEngineService) deletePrivilege(c *gin.Context) { log := fog.FromContext(c).WithName("rulesengineservice") name := c.Param("name") log = log.WithValues("privilegeName", name) c.Request = c.Request.Clone(fog.IntoContext(c.Request.Context(), log)) result, err := res.RulesEngine.DeletePrivilege(c.Request.Context(), name) if err != nil { log.Error(err, "deletion error") c.Status(http.StatusInternalServerError) return } if len(result.Errors) > 0 { for _, err := range result.Errors { if err.Type == rulesengine.Conflict { log.Error(fmt.Errorf("database query conflict"), "Conflict with database") c.JSON(http.StatusConflict, result) return } } log.Error(fmt.Errorf("error deleting privilege"), "Requested data not found. No deletion performend") c.JSON(http.StatusNotFound, result) return } c.Status(http.StatusOK) } func (res RulesEngineService) readPrivileges(c *gin.Context) { log := fog.FromContext(c).WithName("rulesengineservice") vals, err := res.RulesEngine.ReadPrivileges(c.Request.Context()) if err != nil { log.Error(err, "read error") c.Status(http.StatusInternalServerError) return } if len(vals) == 0 { log.Info("No privileges returned") c.JSON(http.StatusOK, nil) return } c.JSON(http.StatusOK, vals) } func (res RulesEngineService) readPrivilege(c *gin.Context) { log := fog.FromContext(c).WithName("rulesengineservice") name := c.Param("name") priv, err := res.RulesEngine.ReadPrivilege(c.Request.Context(), name) if err != nil { log.Error(err, "read error") c.Status(http.StatusInternalServerError) return } if priv.Name == "" || priv.ID == "" { log.Info("No privilege returned") c.JSON(http.StatusOK, nil) return } c.JSON(http.StatusOK, priv) }