Started working on the frontend
- Added the new post frontend - Hooked up publishing of posts to the site publisher - Added an site exporter as a publishing target
This commit is contained in:
parent
a59008b3e8
commit
e77cac2fd5
40 changed files with 1427 additions and 84 deletions
26
handlers/importexport/models.go
Normal file
26
handlers/importexport/models.go
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
package importexport
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"lmika.dev/lmika/weiro/models"
|
||||
)
|
||||
|
||||
type ReadSiteModels struct {
|
||||
Site models.Site
|
||||
Posts []*models.Post
|
||||
}
|
||||
|
||||
type Site struct {
|
||||
Title string `yaml:"title"`
|
||||
Tagline string `yaml:"tagline"`
|
||||
BaseURL string `yaml:"base_url"`
|
||||
}
|
||||
|
||||
type Post struct {
|
||||
ID string `yaml:"id"`
|
||||
Title string `yaml:"title"`
|
||||
Date time.Time `yaml:"date"`
|
||||
Tags []string `yaml:"tags"`
|
||||
Slug string `yaml:"slug"`
|
||||
}
|
||||
41
handlers/middleware/site.go
Normal file
41
handlers/middleware/site.go
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
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()
|
||||
}
|
||||
}
|
||||
24
handlers/middleware/user.go
Normal file
24
handlers/middleware/user.go
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
package middleware
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"github.com/gofiber/fiber/v3"
|
||||
"lmika.dev/lmika/weiro/models"
|
||||
)
|
||||
|
||||
func AuthUser() func(c fiber.Ctx) error {
|
||||
return func(c fiber.Ctx) error {
|
||||
// TEMP - Actually do the auth here
|
||||
user := models.User{
|
||||
ID: 1,
|
||||
Username: "testuser",
|
||||
}
|
||||
|
||||
c.Locals("user", user)
|
||||
c.SetContext(models.WithUser(c.Context(), user))
|
||||
log.Printf("User %s authenticated", user.Username)
|
||||
|
||||
return c.Next()
|
||||
}
|
||||
}
|
||||
37
handlers/posts.go
Normal file
37
handlers/posts.go
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
package handlers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/gofiber/fiber/v3"
|
||||
"lmika.dev/lmika/weiro/models"
|
||||
"lmika.dev/lmika/weiro/services/posts"
|
||||
)
|
||||
|
||||
type PostsHandler struct {
|
||||
PostService *posts.Service
|
||||
}
|
||||
|
||||
func (ph PostsHandler) Index(c fiber.Ctx) error {
|
||||
return c.Render("posts/index", fiber.Map{})
|
||||
}
|
||||
|
||||
func (ph PostsHandler) New(c fiber.Ctx) error {
|
||||
return c.Render("posts/new", fiber.Map{
|
||||
"guid": models.NewNanoID(),
|
||||
})
|
||||
}
|
||||
|
||||
func (ph PostsHandler) Update(c fiber.Ctx) error {
|
||||
var req posts.CreatePostParams
|
||||
if err := c.Bind().Body(&req); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
post, err := ph.PostService.PublishPost(c.Context(), req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return c.Redirect().To(fmt.Sprintf("/sites/%v/posts", post.SiteID))
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue