From 60461e49af4e6f541ba14f2b9f171c349446b459 Mon Sep 17 00:00:00 2001 From: KartoffelChips <104089082+KartoffelChipss@users.noreply.github.com> Date: Fri, 3 Apr 2026 10:58:41 +0200 Subject: [PATCH] Updated update route to use db sites --- app/handlers/update.go | 53 ++++++++++++++++++++++++------------------ app/routes/routes.go | 2 +- 2 files changed, 32 insertions(+), 23 deletions(-) diff --git a/app/handlers/update.go b/app/handlers/update.go index 2b633a9..b197601 100644 --- a/app/handlers/update.go +++ b/app/handlers/update.go @@ -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, ) diff --git a/app/routes/routes.go b/app/routes/routes.go index f1d0d71..5316ad4 100644 --- a/app/routes/routes.go +++ b/app/routes/routes.go @@ -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))