42 lines
797 B
Go
42 lines
797 B
Go
|
|
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()
|
||
|
|
}
|
||
|
|
}
|