2026-02-20 23:22:10 +00:00
|
|
|
package middleware
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"strconv"
|
|
|
|
|
|
2026-02-27 23:39:08 +00:00
|
|
|
"emperror.dev/errors"
|
2026-02-20 23:22:10 +00:00
|
|
|
"github.com/gofiber/fiber/v3"
|
|
|
|
|
"lmika.dev/lmika/weiro/models"
|
|
|
|
|
"lmika.dev/lmika/weiro/providers/db"
|
2026-02-27 23:39:08 +00:00
|
|
|
"lmika.dev/lmika/weiro/services/sites"
|
2026-02-20 23:22:10 +00:00
|
|
|
)
|
|
|
|
|
|
2026-02-27 23:39:08 +00:00
|
|
|
func RequiresSite(sites *sites.Service) func(c fiber.Ctx) error {
|
2026-02-20 23:22:10 +00:00
|
|
|
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
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-27 23:39:08 +00:00
|
|
|
site, err := sites.GetSiteByID(c.Context(), siteID)
|
2026-02-20 23:22:10 +00:00
|
|
|
if err != nil {
|
2026-02-27 23:39:08 +00:00
|
|
|
if errors.Is(err, models.UserRequiredError) {
|
|
|
|
|
return fiber.ErrForbidden
|
|
|
|
|
} else if errors.Is(err, models.PermissionError) || db.ErrorIsNoRows(err) {
|
|
|
|
|
return fiber.ErrNotFound
|
|
|
|
|
} else if errors.Is(err, models.NotFoundError) || db.ErrorIsNoRows(err) {
|
|
|
|
|
return err
|
|
|
|
|
}
|
2026-02-20 23:22:10 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
c.Locals("site", site)
|
|
|
|
|
c.SetContext(models.WithSite(c.Context(), site))
|
|
|
|
|
return c.Next()
|
|
|
|
|
}
|
|
|
|
|
}
|