Added github branch fetching

This commit is contained in:
2026-03-30 21:13:50 +02:00
parent a8a2b3f95a
commit e81286b394
6 changed files with 272 additions and 9 deletions
+84
View File
@@ -0,0 +1,84 @@
package handlers
import (
"path/filepath"
"quay/app/github"
"quay/app/models"
"quay/internal/config"
"strings"
"crypto/subtle"
"github.com/gofiber/fiber/v3"
)
func NewUpdateSiteHandler(cfg *config.Config) fiber.Handler {
return func(c fiber.Ctx) error {
sitename := c.Query("site")
if sitename == "" {
return c.Status(400).JSON(models.APIError{
Error: "Missing 'site' query parameter",
})
}
var siteConfig *config.SiteConfig
for _, site := range cfg.Sites {
if site.Name == sitename {
siteConfig = &site
break
}
}
if siteConfig == nil {
return c.Status(404).JSON(models.APIError{
Error: "Site not found",
})
}
deployToken := siteConfig.DeployToken
if deployToken == "" {
return c.Status(500).JSON(models.APIError{
Error: "Deploy token not configured for this site",
})
}
providedToken := c.Get("Authorization")
if strings.HasPrefix(providedToken, "Bearer ") {
providedToken = strings.TrimPrefix(providedToken, "Bearer ")
}
if providedToken == "" {
return c.Status(401).JSON(models.APIError{
Error: "Missing Authorization header",
})
}
if subtle.ConstantTimeCompare([]byte(providedToken), []byte(deployToken)) != 1 {
return c.Status(403).JSON(models.APIError{
Error: "Invalid deploy token",
})
}
sitePath := filepath.Join(cfg.Global.StoragePath, siteConfig.Name)
if _, err := filepath.Abs(sitePath); err != nil {
return c.Status(500).JSON(models.APIError{
Error: "Failed to resolve site path",
})
}
err := github.FetchAndDeployBranch(
siteConfig.Owner,
siteConfig.Repo,
siteConfig.Branch,
cfg.Global.GithubPat,
sitePath,
)
if err != nil {
return c.Status(500).JSON(models.APIError{
Error: "Failed to deploy site: " + err.Error(),
})
}
return c.SendStatus(201)
}
}