...

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

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

     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  //nolint:dupl
    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