|
|
@@ -0,0 +1,408 @@
|
|
|
|
|
|
|
|
package handlers
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
|
|
"database/sql"
|
|
|
|
|
|
|
|
"errors"
|
|
|
|
|
|
|
|
"log"
|
|
|
|
|
|
|
|
"quay/app/models"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"github.com/gofiber/fiber/v3"
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func validateForwardRule(rule *models.ForwardRule) error {
|
|
|
|
|
|
|
|
if rule == nil {
|
|
|
|
|
|
|
|
return errors.New("forward rule is required")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if rule.Source == "" {
|
|
|
|
|
|
|
|
return errors.New("forward rule source is required")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if rule.Destination == "" {
|
|
|
|
|
|
|
|
return errors.New("forward rule destination is required")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if rule.StatusCode < 300 || rule.StatusCode > 399 {
|
|
|
|
|
|
|
|
return errors.New("forward rule status code must be between 300 and 399")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func validateHeader(header *models.Header) error {
|
|
|
|
|
|
|
|
if header == nil {
|
|
|
|
|
|
|
|
return errors.New("header is required")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if header.Key == "" {
|
|
|
|
|
|
|
|
return errors.New("header key is required")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if header.Value == "" {
|
|
|
|
|
|
|
|
return errors.New("header value is required")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func validateCustomHeaders(customHeaders *models.CustomHeaders) error {
|
|
|
|
|
|
|
|
if customHeaders == nil {
|
|
|
|
|
|
|
|
return errors.New("custom headers are required")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if customHeaders.Source == "" {
|
|
|
|
|
|
|
|
return errors.New("custom header source required")
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if customHeaders.Headers == nil {
|
|
|
|
|
|
|
|
customHeaders.Headers = []models.Header{}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
for i := range customHeaders.Headers {
|
|
|
|
|
|
|
|
if err := validateHeader(&customHeaders.Headers[i]); err != nil {
|
|
|
|
|
|
|
|
return err
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (h *SiteHandler) GetSiteForwardRules(c fiber.Ctx) error {
|
|
|
|
|
|
|
|
siteID := c.Params("id")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
site, err := h.Repo.GetSite(siteID)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusNotFound).JSON(&models.APIError{Message: "Site not found"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.Println("Error getting site forward rules: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while listing forward rules"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if site.ForwardRules == nil {
|
|
|
|
|
|
|
|
site.ForwardRules = []models.ForwardRule{}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return c.JSON(site.ForwardRules)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (h *SiteHandler) GetForwardRule(c fiber.Ctx) error {
|
|
|
|
|
|
|
|
id := c.Params("id")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rule, err := h.Repo.GetForwardRule(id)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusNotFound).JSON(&models.APIError{Message: "Forward rule not found"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.Println("Error getting forward rule: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while getting forward rule"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return c.JSON(rule)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (h *SiteHandler) PostForwardRule(c fiber.Ctx) error {
|
|
|
|
|
|
|
|
siteID := c.Params("id")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if _, err := h.Repo.GetSite(siteID); err != nil {
|
|
|
|
|
|
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusNotFound).JSON(&models.APIError{Message: "Site not found"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.Println("Error checking site before creating forward rule: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while creating forward rule"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var rule models.ForwardRule
|
|
|
|
|
|
|
|
if err := c.Bind().Body(&rule); err != nil {
|
|
|
|
|
|
|
|
log.Println("Error parsing body: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusBadRequest).JSON(&models.APIError{Message: "Invalid request body"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if err := validateForwardRule(&rule); err != nil {
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusBadRequest).JSON(&models.APIError{Message: "Invalid request body: " + err.Error()})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if err := h.Repo.CreateForwardRule(siteID, &rule); err != nil {
|
|
|
|
|
|
|
|
log.Println("Error creating forward rule: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while creating forward rule"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return c.JSON(rule)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (h *SiteHandler) PutForwardRule(c fiber.Ctx) error {
|
|
|
|
|
|
|
|
id := c.Params("id")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if _, err := h.Repo.GetForwardRule(id); err != nil {
|
|
|
|
|
|
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusNotFound).JSON(&models.APIError{Message: "Forward rule not found"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.Println("Error checking forward rule before update: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while updating forward rule"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var rule models.ForwardRule
|
|
|
|
|
|
|
|
if err := c.Bind().Body(&rule); err != nil {
|
|
|
|
|
|
|
|
log.Println("Error parsing body: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusBadRequest).JSON(&models.APIError{Message: "Invalid request body"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if err := validateForwardRule(&rule); err != nil {
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusBadRequest).JSON(&models.APIError{Message: "Invalid request body: " + err.Error()})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rule.ID = id
|
|
|
|
|
|
|
|
if err := h.Repo.UpdateForwardRule(&rule); err != nil {
|
|
|
|
|
|
|
|
log.Println("Error updating forward rule: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while updating forward rule"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
updated, err := h.Repo.GetForwardRule(id)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
log.Println("Error getting updated forward rule: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Forward rule was updated but could not be retrieved"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return c.JSON(updated)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (h *SiteHandler) DeleteForwardRule(c fiber.Ctx) error {
|
|
|
|
|
|
|
|
id := c.Params("id")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if _, err := h.Repo.GetForwardRule(id); err != nil {
|
|
|
|
|
|
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusNotFound).JSON(&models.APIError{Message: "Forward rule not found"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.Println("Error checking forward rule before delete: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while deleting forward rule"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if err := h.Repo.DeleteForwardRule(id); err != nil {
|
|
|
|
|
|
|
|
log.Println("Error deleting forward rule: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while deleting forward rule"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return c.SendStatus(fiber.StatusNoContent)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (h *SiteHandler) GetSiteCustomHeaders(c fiber.Ctx) error {
|
|
|
|
|
|
|
|
siteID := c.Params("id")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
site, err := h.Repo.GetSite(siteID)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusNotFound).JSON(&models.APIError{Message: "Site not found"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.Println("Error getting site custom headers: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while listing custom headers"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if site.CustomHeaders == nil {
|
|
|
|
|
|
|
|
site.CustomHeaders = []models.CustomHeaders{}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return c.JSON(site.CustomHeaders)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (h *SiteHandler) GetCustomHeaders(c fiber.Ctx) error {
|
|
|
|
|
|
|
|
id := c.Params("id")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
customHeaders, err := h.Repo.GetCustomHeaders(id)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusNotFound).JSON(&models.APIError{Message: "Custom headers not found"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.Println("Error getting custom headers: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while getting custom headers"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return c.JSON(customHeaders)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (h *SiteHandler) PostCustomHeaders(c fiber.Ctx) error {
|
|
|
|
|
|
|
|
siteID := c.Params("id")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if _, err := h.Repo.GetSite(siteID); err != nil {
|
|
|
|
|
|
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusNotFound).JSON(&models.APIError{Message: "Site not found"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.Println("Error checking site before creating custom headers: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while creating custom headers"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var customHeaders models.CustomHeaders
|
|
|
|
|
|
|
|
if err := c.Bind().Body(&customHeaders); err != nil {
|
|
|
|
|
|
|
|
log.Println("Error parsing body: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusBadRequest).JSON(&models.APIError{Message: "Invalid request body"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if err := validateCustomHeaders(&customHeaders); err != nil {
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusBadRequest).JSON(&models.APIError{Message: "Invalid request body: " + err.Error()})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if err := h.Repo.CreateCustomHeaders(siteID, &customHeaders); err != nil {
|
|
|
|
|
|
|
|
log.Println("Error creating custom headers: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while creating custom headers"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return c.JSON(customHeaders)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (h *SiteHandler) PutCustomHeaders(c fiber.Ctx) error {
|
|
|
|
|
|
|
|
id := c.Params("id")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if _, err := h.Repo.GetCustomHeaders(id); err != nil {
|
|
|
|
|
|
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusNotFound).JSON(&models.APIError{Message: "Custom headers not found"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.Println("Error checking custom headers before update: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while updating custom headers"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var customHeaders models.CustomHeaders
|
|
|
|
|
|
|
|
if err := c.Bind().Body(&customHeaders); err != nil {
|
|
|
|
|
|
|
|
log.Println("Error parsing body: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusBadRequest).JSON(&models.APIError{Message: "Invalid request body"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if err := validateCustomHeaders(&customHeaders); err != nil {
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusBadRequest).JSON(&models.APIError{Message: "Invalid request body: " + err.Error()})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
customHeaders.ID = id
|
|
|
|
|
|
|
|
if err := h.Repo.UpdateCustomHeaders(&customHeaders); err != nil {
|
|
|
|
|
|
|
|
log.Println("Error updating custom headers: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while updating custom headers"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
updated, err := h.Repo.GetCustomHeaders(id)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
log.Println("Error getting updated custom headers: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Custom headers were updated but could not be retrieved"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return c.JSON(updated)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (h *SiteHandler) DeleteCustomHeaders(c fiber.Ctx) error {
|
|
|
|
|
|
|
|
id := c.Params("id")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if _, err := h.Repo.GetCustomHeaders(id); err != nil {
|
|
|
|
|
|
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusNotFound).JSON(&models.APIError{Message: "Custom headers not found"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.Println("Error checking custom headers before delete: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while deleting custom headers"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if err := h.Repo.DeleteCustomHeaders(id); err != nil {
|
|
|
|
|
|
|
|
log.Println("Error deleting custom headers: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while deleting custom headers"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return c.SendStatus(fiber.StatusNoContent)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (h *SiteHandler) GetCustomHeaderHeaders(c fiber.Ctx) error {
|
|
|
|
|
|
|
|
customHeaderID := c.Params("id")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
customHeaders, err := h.Repo.GetCustomHeaders(customHeaderID)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusNotFound).JSON(&models.APIError{Message: "Custom headers not found"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.Println("Error listing headers: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while listing headers"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if customHeaders.Headers == nil {
|
|
|
|
|
|
|
|
customHeaders.Headers = []models.Header{}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return c.JSON(customHeaders.Headers)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (h *SiteHandler) GetHeader(c fiber.Ctx) error {
|
|
|
|
|
|
|
|
id := c.Params("id")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
header, err := h.Repo.GetHeader(id)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusNotFound).JSON(&models.APIError{Message: "Header not found"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.Println("Error getting header: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while getting header"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return c.JSON(header)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (h *SiteHandler) PostHeader(c fiber.Ctx) error {
|
|
|
|
|
|
|
|
customHeaderID := c.Params("id")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if _, err := h.Repo.GetCustomHeaders(customHeaderID); err != nil {
|
|
|
|
|
|
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusNotFound).JSON(&models.APIError{Message: "Custom headers not found"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.Println("Error checking custom headers before creating header: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while creating header"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var header models.Header
|
|
|
|
|
|
|
|
if err := c.Bind().Body(&header); err != nil {
|
|
|
|
|
|
|
|
log.Println("Error parsing body: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusBadRequest).JSON(&models.APIError{Message: "Invalid request body"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if err := validateHeader(&header); err != nil {
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusBadRequest).JSON(&models.APIError{Message: "Invalid request body: " + err.Error()})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if err := h.Repo.CreateHeader(customHeaderID, &header); err != nil {
|
|
|
|
|
|
|
|
log.Println("Error creating header: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while creating header"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return c.JSON(header)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (h *SiteHandler) PutHeader(c fiber.Ctx) error {
|
|
|
|
|
|
|
|
id := c.Params("id")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if _, err := h.Repo.GetHeader(id); err != nil {
|
|
|
|
|
|
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusNotFound).JSON(&models.APIError{Message: "Header not found"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.Println("Error checking header before update: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while updating header"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var header models.Header
|
|
|
|
|
|
|
|
if err := c.Bind().Body(&header); err != nil {
|
|
|
|
|
|
|
|
log.Println("Error parsing body: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusBadRequest).JSON(&models.APIError{Message: "Invalid request body"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if err := validateHeader(&header); err != nil {
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusBadRequest).JSON(&models.APIError{Message: "Invalid request body: " + err.Error()})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
header.ID = id
|
|
|
|
|
|
|
|
if err := h.Repo.UpdateHeader(&header); err != nil {
|
|
|
|
|
|
|
|
log.Println("Error updating header: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while updating header"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
updated, err := h.Repo.GetHeader(id)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
|
|
log.Println("Error getting updated header: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Header was updated but could not be retrieved"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return c.JSON(updated)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (h *SiteHandler) DeleteHeader(c fiber.Ctx) error {
|
|
|
|
|
|
|
|
id := c.Params("id")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if _, err := h.Repo.GetHeader(id); err != nil {
|
|
|
|
|
|
|
|
if errors.Is(err, sql.ErrNoRows) {
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusNotFound).JSON(&models.APIError{Message: "Header not found"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
log.Println("Error checking header before delete: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while deleting header"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if err := h.Repo.DeleteHeader(id); err != nil {
|
|
|
|
|
|
|
|
log.Println("Error deleting header: ", err)
|
|
|
|
|
|
|
|
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{Message: "Unexpected error while deleting header"})
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return c.SendStatus(fiber.StatusNoContent)
|
|
|
|
|
|
|
|
}
|