71 lines
1.7 KiB
Go
71 lines
1.7 KiB
Go
package privilege
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/gofiber/fiber/v2"
|
|
"penahub.gitlab.yandexcloud.net/backend/penahub_common/privilege/config"
|
|
)
|
|
|
|
type Handler struct {
|
|
serviceName string
|
|
url string
|
|
arrPrivilege []config.Privilege
|
|
}
|
|
|
|
func NewPrivilegeHandler(serviceName string, url string, arrPrivilege []config.Privilege) *Handler {
|
|
return &Handler{
|
|
serviceName: serviceName,
|
|
url: url,
|
|
arrPrivilege: arrPrivilege,
|
|
}
|
|
}
|
|
|
|
func (handler *Handler) GetPrivilege(c *fiber.Ctx) error {
|
|
agent := fiber.Get(handler.url)
|
|
statusCode, body, errs := agent.Bytes()
|
|
if len(errs) > 0 {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
|
"errs": errs,
|
|
})
|
|
}
|
|
|
|
var privileges []config.Privilege
|
|
err := json.Unmarshal(body, &privileges)
|
|
if err != nil {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
|
"err": err,
|
|
})
|
|
}
|
|
|
|
return c.Status(statusCode).JSON(privileges)
|
|
}
|
|
|
|
func (handler *Handler) PostPrivilege(c *fiber.Ctx) error {
|
|
agent := fiber.Post(handler.url).JSON(handler.arrPrivilege)
|
|
statusCode, _, errs := agent.Bytes()
|
|
|
|
if len(errs) > 0 {
|
|
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{
|
|
"errs": errs,
|
|
})
|
|
}
|
|
|
|
return c.SendStatus(statusCode)
|
|
}
|
|
|
|
func ComparePrivileges(existing []config.Privilege, incoming []config.Privilege) []config.Privilege {
|
|
existingMap := make(map[string]config.Privilege)
|
|
result := make([]config.Privilege, 0)
|
|
for _, privilege := range existing {
|
|
existingMap[privilege.ID] = privilege
|
|
}
|
|
|
|
for _, privilege := range incoming {
|
|
if _, found := existingMap[privilege.ID]; !found {
|
|
result = append(existing, existingMap[privilege.ID])
|
|
}
|
|
}
|
|
|
|
return result
|
|
}
|