...
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
13
14 func (res RulesEngineService) validateCommand(c *gin.Context) {
15 log := fog.FromContext(c).WithName("rulesengineservice")
16
17
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
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