...
1 package server
2
3 import (
4 "errors"
5 "fmt"
6 "net/http"
7
8 "github.com/gin-gonic/gin"
9
10 "edge-infra.dev/pkg/lib/fog"
11 rulesengine "edge-infra.dev/pkg/sds/emergencyaccess/rules"
12 )
13
14
15 func (res RulesEngineService) postPrivileges(c *gin.Context) {
16 log := fog.FromContext(c).WithName("rulesengineservice")
17 var payload []rulesengine.PostPrivilegePayload
18 if err := c.ShouldBindJSON(&payload); err != nil {
19 log.Error(err, "bind error")
20 c.Status(http.StatusBadRequest)
21 return
22 }
23 if len(payload) == 0 {
24 log.Error(errors.New("payload was nil"), "validation error")
25 c.Status(http.StatusBadRequest)
26 return
27 }
28 result, err := res.RulesEngine.AddPrivileges(c.Request.Context(), payload)
29 if err != nil {
30 log.Error(err, "AddPrivilege error")
31 c.Status(http.StatusInternalServerError)
32 return
33 }
34 if len(result.Conflicts) > 0 {
35 log.Info("Conflicts with query")
36 c.JSON(http.StatusConflict, result)
37 return
38 }
39 c.Status(http.StatusOK)
40 }
41
42 func (res RulesEngineService) deletePrivilege(c *gin.Context) {
43 log := fog.FromContext(c).WithName("rulesengineservice")
44 name := c.Param("name")
45
46 log = log.WithValues("privilegeName", name)
47 c.Request = c.Request.Clone(fog.IntoContext(c.Request.Context(), log))
48
49 result, err := res.RulesEngine.DeletePrivilege(c.Request.Context(), name)
50 if err != nil {
51 log.Error(err, "deletion error")
52 c.Status(http.StatusInternalServerError)
53 return
54 }
55 if len(result.Errors) > 0 {
56 for _, err := range result.Errors {
57 if err.Type == rulesengine.Conflict {
58 log.Error(fmt.Errorf("database query conflict"), "Conflict with database")
59 c.JSON(http.StatusConflict, result)
60 return
61 }
62 }
63
64 log.Error(fmt.Errorf("error deleting privilege"), "Requested data not found. No deletion performend")
65 c.JSON(http.StatusNotFound, result)
66 return
67 }
68 c.Status(http.StatusOK)
69 }
70
71 func (res RulesEngineService) readPrivileges(c *gin.Context) {
72 log := fog.FromContext(c).WithName("rulesengineservice")
73 vals, err := res.RulesEngine.ReadPrivileges(c.Request.Context())
74 if err != nil {
75 log.Error(err, "read error")
76 c.Status(http.StatusInternalServerError)
77 return
78 }
79 if len(vals) == 0 {
80 log.Info("No privileges returned")
81 c.JSON(http.StatusOK, nil)
82 return
83 }
84 c.JSON(http.StatusOK, vals)
85 }
86
87 func (res RulesEngineService) readPrivilege(c *gin.Context) {
88 log := fog.FromContext(c).WithName("rulesengineservice")
89 name := c.Param("name")
90 priv, err := res.RulesEngine.ReadPrivilege(c.Request.Context(), name)
91 if err != nil {
92 log.Error(err, "read error")
93 c.Status(http.StatusInternalServerError)
94 return
95 }
96 if priv.Name == "" || priv.ID == "" {
97 log.Info("No privilege returned")
98 c.JSON(http.StatusOK, nil)
99 return
100 }
101 c.JSON(http.StatusOK, priv)
102 }
103
View as plain text