...

Source file src/edge-infra.dev/pkg/sds/emergencyaccess/rules/server/validation.go

Documentation: edge-infra.dev/pkg/sds/emergencyaccess/rules/server

     1  package server
     2  
     3  import (
     4  	"net/http"
     5  
     6  	"github.com/gin-gonic/gin"
     7  
     8  	"edge-infra.dev/pkg/lib/fog"
     9  	rulesengine "edge-infra.dev/pkg/sds/emergencyaccess/rules"
    10  )
    11  
    12  // identity, command, target
    13  
    14  func (res RulesEngineService) validateCommand(c *gin.Context) {
    15  	log := fog.FromContext(c).WithName("rulesengineservice")
    16  
    17  	// Parse JSON
    18  	var payload rulesengine.ValidateCommandPayload
    19  	if err := c.BindJSON(&payload); err != nil {
    20  		log.Error(err, "Failed to parse payload")
    21  		c.Status(http.StatusBadRequest)
    22  		return
    23  	}
    24  	if err := payload.Validate(); err != nil {
    25  		log.Error(err, "Invalid payload")
    26  		c.Status(http.StatusBadRequest)
    27  		return
    28  	}
    29  	log = log.WithValues("userID", payload.Identity.UserID, "command", payload.Command, "bannerID", payload.Target.BannerID)
    30  	c.Request = c.Request.Clone(fog.IntoContext(c.Request.Context(), log))
    31  
    32  	var eaRoles []string
    33  	var err error
    34  
    35  	// if len eaRoles is nil we want to avoid checking the database unecessarily.
    36  	if len(payload.Identity.EAroles) > 0 {
    37  		eaRoles, err = res.RulesEngine.GetEARolesForCommand(c, payload.Command, payload.Target.BannerID)
    38  	} else {
    39  		log.Info("eaRoles was nil - returning false by default")
    40  	}
    41  	if err != nil {
    42  		log.Error(err, "No corresponding EA roles returned")
    43  		c.JSON(http.StatusInternalServerError, nil)
    44  		return
    45  	}
    46  
    47  	valid := res.RulesEngine.UserHasRoles(payload.Identity.UserID, eaRoles, payload.Identity.EAroles)
    48  	c.JSON(http.StatusOK, rulesengine.ValidateCommandResponse{Valid: valid})
    49  }
    50  

View as plain text