package middleware import ( "strconv" "github.com/gofiber/fiber/v3" "lmika.dev/lmika/weiro/models" "lmika.dev/lmika/weiro/providers/db" ) func RequiresSite(db *db.Provider) func(c fiber.Ctx) error { return func(c fiber.Ctx) error { siteIDStr := c.Params("siteID") if siteIDStr == "" { return fiber.ErrBadRequest } siteID, err := strconv.ParseInt(siteIDStr, 10, 64) if err != nil { return fiber.ErrBadRequest } user, ok := models.GetUser(c.Context()) if !ok { return fiber.ErrUnauthorized } site, err := db.SelectSiteByID(c.Context(), siteID) if err != nil { return fiber.ErrNotFound } if site.OwnerID != user.ID { return fiber.ErrForbidden } c.Locals("site", site) c.SetContext(models.WithSite(c.Context(), site)) return c.Next() } }