Updated update route to use db sites

This commit is contained in:
2026-04-03 10:58:41 +02:00
parent 2931729f97
commit 60461e49af
2 changed files with 32 additions and 23 deletions
+31 -22
View File
@@ -1,49 +1,58 @@
package handlers
import (
"crypto/subtle"
"database/sql"
"errors"
"log"
"path/filepath"
"quay/app/github"
"quay/app/models"
"quay/internal/config"
"quay/app/repository"
"quay/internal/envconfig"
"quay/internal/security"
"strings"
"github.com/gofiber/fiber/v3"
)
type UpdateSiteHandler struct {
Cfg *config.Config
EnvCfg *envconfig.EnvConfig
EnvCfg *envconfig.EnvConfig
SiteRepo repository.SiteRepository
}
func NewUpdateSiteHandler(cfg *config.Config, envCfg *envconfig.EnvConfig) *UpdateSiteHandler {
return &UpdateSiteHandler{Cfg: cfg, EnvCfg: envCfg}
func NewUpdateSiteHandler(envCfg *envconfig.EnvConfig, siteRepo repository.SiteRepository) *UpdateSiteHandler {
return &UpdateSiteHandler{EnvCfg: envCfg, SiteRepo: siteRepo}
}
func (h *UpdateSiteHandler) PostUpdate(c fiber.Ctx) error {
sitename := c.Query("site")
if sitename == "" {
siteId := c.Query("site")
if siteId == "" {
return c.Status(400).JSON(models.APIError{
Message: "Missing 'site' query parameter",
})
}
var siteConfig *config.SiteConfig
for _, site := range h.Cfg.Sites {
if site.Name == sitename {
siteConfig = &site
break
site, err := h.SiteRepo.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("Message getting site: ", err)
return c.Status(fiber.StatusInternalServerError).JSON(&models.APIError{
Message: "Unexpected error while getting site",
})
}
if siteConfig == nil {
return c.Status(404).JSON(models.APIError{
if site == nil {
return c.Status(fiber.StatusNotFound).JSON(&models.APIError{
Message: "Site not found",
})
}
deployToken := siteConfig.DeployToken
deployToken := site.DeployToken
if deployToken == "" {
return c.Status(500).JSON(models.APIError{
Message: "Deploy token not configured for this site",
@@ -60,23 +69,23 @@ func (h *UpdateSiteHandler) PostUpdate(c fiber.Ctx) error {
})
}
if subtle.ConstantTimeCompare([]byte(providedToken), []byte(deployToken)) != 1 {
if security.CompareDeployTokens(providedToken, deployToken) == false {
return c.Status(403).JSON(models.APIError{
Message: "Invalid deploy token",
})
}
sitePath := filepath.Join(h.EnvCfg.StoragePath, siteConfig.Name)
sitePath := filepath.Join(h.EnvCfg.StoragePath, site.ID)
if _, err := filepath.Abs(sitePath); err != nil {
return c.Status(500).JSON(models.APIError{
Message: "Failed to resolve site path",
})
}
err := github.FetchAndDeployBranch(
siteConfig.Owner,
siteConfig.Repo,
siteConfig.Branch,
err = github.FetchAndDeployBranch(
site.Owner,
site.Repository,
site.Branch,
h.EnvCfg.GithubPat,
sitePath,
)
+1 -1
View File
@@ -18,7 +18,7 @@ import (
func Register(app *fiber.App, cfg *config.Config, envCfg *envconfig.EnvConfig, db *sql.DB) {
siteRepository := cachedrepo.NewCachedSiteRepository(database.NewSQLiteSiteRepository(db))
updateSiteHandler := handlers.NewUpdateSiteHandler(cfg, envCfg)
updateSiteHandler := handlers.NewUpdateSiteHandler(envCfg, siteRepository)
siteHandler := handlers.NewSiteHandler(siteRepository)
api := app.Group("/api/v1", middleware.APIHostGuard(envCfg.DashboardHost))