Added token modal after creating site

This commit is contained in:
2026-04-06 18:22:25 +02:00
parent 38fcdbf391
commit a95c76ce7e
3 changed files with 114 additions and 5 deletions
+100
View File
@@ -0,0 +1,100 @@
package handlers
import (
"database/sql"
"errors"
"log"
"path/filepath"
"quay/app/github"
"quay/app/models"
"quay/app/repository"
"quay/internal/envconfig"
"quay/internal/security"
"strings"
"github.com/gofiber/fiber/v3"
)
type UpdateSiteHandler struct {
EnvCfg *envconfig.EnvConfig
SiteRepo repository.SiteRepository
}
func NewUpdateSiteHandler(envCfg *envconfig.EnvConfig, siteRepo repository.SiteRepository) *UpdateSiteHandler {
return &UpdateSiteHandler{EnvCfg: envCfg, SiteRepo: siteRepo}
}
func (h *UpdateSiteHandler) PostDeploy(c fiber.Ctx) error {
siteId := c.Query("site")
if siteId == "" {
return c.Status(400).JSON(models.APIError{
Message: "Missing 'site' query parameter",
})
}
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 site == nil {
return c.Status(fiber.StatusNotFound).JSON(&models.APIError{
Message: "Site not found",
})
}
deployToken := site.DeployToken
if deployToken == "" {
return c.Status(500).JSON(models.APIError{
Message: "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{
Message: "Missing Authorization header",
})
}
if security.CompareDeployTokens(providedToken, deployToken) == false {
return c.Status(403).JSON(models.APIError{
Message: "Invalid deploy token",
})
}
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(
site.Owner,
site.Repository,
site.Branch,
h.EnvCfg.GithubPat,
sitePath,
)
if err != nil {
return c.Status(500).JSON(models.APIError{
Message: "Failed to deploy site: " + err.Error(),
})
}
return c.SendStatus(201)
}