2026-02-18 11:07:18 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
import (
|
2026-02-21 23:09:34 +00:00
|
|
|
"html"
|
|
|
|
|
"html/template"
|
2026-02-18 11:07:18 +00:00
|
|
|
"log"
|
2026-02-21 23:09:34 +00:00
|
|
|
"strings"
|
2026-02-18 11:07:18 +00:00
|
|
|
|
2026-02-20 23:22:10 +00:00
|
|
|
"github.com/gofiber/fiber/v3"
|
|
|
|
|
"github.com/gofiber/fiber/v3/middleware/static"
|
2026-02-21 23:09:34 +00:00
|
|
|
fiber_html "github.com/gofiber/template/html/v3"
|
|
|
|
|
"github.com/yuin/goldmark"
|
|
|
|
|
"github.com/yuin/goldmark/extension"
|
2026-02-20 23:22:10 +00:00
|
|
|
"lmika.dev/lmika/weiro/handlers"
|
|
|
|
|
"lmika.dev/lmika/weiro/handlers/middleware"
|
2026-02-19 11:29:44 +00:00
|
|
|
"lmika.dev/lmika/weiro/providers/db"
|
2026-02-20 23:22:10 +00:00
|
|
|
"lmika.dev/lmika/weiro/services/posts"
|
2026-02-19 11:29:44 +00:00
|
|
|
"lmika.dev/lmika/weiro/services/publisher"
|
|
|
|
|
_ "modernc.org/sqlite"
|
2026-02-18 11:07:18 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func main() {
|
2026-02-19 11:29:44 +00:00
|
|
|
dbp, err := db.New("build/weiro.db")
|
2026-02-18 11:07:18 +00:00
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
2026-02-19 11:29:44 +00:00
|
|
|
defer dbp.Close()
|
2026-02-18 11:07:18 +00:00
|
|
|
|
2026-02-19 11:29:44 +00:00
|
|
|
publisherSvc := publisher.New(dbp)
|
|
|
|
|
|
2026-02-20 23:22:10 +00:00
|
|
|
postService := posts.New(dbp, publisherSvc)
|
2026-02-19 11:29:44 +00:00
|
|
|
|
2026-02-20 23:22:10 +00:00
|
|
|
//user, err := dbp.SelectUserByUsername(context.Background(), "testuser")
|
|
|
|
|
//if err != nil {
|
|
|
|
|
// user = models.User{
|
|
|
|
|
// Username: "testuser",
|
|
|
|
|
// PasswordHashed: []byte("changeme"),
|
|
|
|
|
// }
|
|
|
|
|
// if err := dbp.SaveUser(context.Background(), &user); err != nil {
|
|
|
|
|
// log.Fatal(err)
|
|
|
|
|
// }
|
|
|
|
|
//}
|
2026-02-18 11:07:18 +00:00
|
|
|
|
2026-02-21 23:09:34 +00:00
|
|
|
fiberTemplate := fiber_html.New("./views", ".html")
|
|
|
|
|
fiberTemplate.Funcmap["markdown"] = func() func(s string) template.HTML {
|
|
|
|
|
mdParser := goldmark.New(
|
|
|
|
|
goldmark.WithExtensions(extension.GFM),
|
|
|
|
|
)
|
|
|
|
|
return func(s string) template.HTML {
|
|
|
|
|
var sb strings.Builder
|
|
|
|
|
if err := mdParser.Convert([]byte(s), &sb); err != nil {
|
|
|
|
|
return template.HTML("Markdown error: " + html.EscapeString(err.Error()))
|
|
|
|
|
}
|
|
|
|
|
return template.HTML(sb.String())
|
|
|
|
|
}
|
|
|
|
|
}()
|
|
|
|
|
|
2026-02-20 23:22:10 +00:00
|
|
|
app := fiber.New(fiber.Config{
|
2026-02-21 23:09:34 +00:00
|
|
|
Views: fiberTemplate,
|
2026-02-20 23:22:10 +00:00
|
|
|
ViewsLayout: "layouts/main",
|
|
|
|
|
PassLocalsToViews: true,
|
|
|
|
|
})
|
2026-02-19 11:29:44 +00:00
|
|
|
|
2026-02-20 23:22:10 +00:00
|
|
|
siteGroup := app.Group("/sites/:siteID", middleware.AuthUser(), middleware.RequiresSite(dbp))
|
|
|
|
|
|
|
|
|
|
ph := handlers.PostsHandler{PostService: postService}
|
|
|
|
|
|
|
|
|
|
siteGroup.Get("/posts", ph.Index)
|
|
|
|
|
siteGroup.Get("/posts/new", ph.New)
|
2026-02-21 23:09:34 +00:00
|
|
|
siteGroup.Get("/posts/:postID/edit", ph.Edit)
|
2026-02-20 23:22:10 +00:00
|
|
|
siteGroup.Post("/posts", ph.Update)
|
|
|
|
|
|
|
|
|
|
app.Get("/", func(c fiber.Ctx) error {
|
|
|
|
|
return c.Redirect().To("/sites/1/posts")
|
|
|
|
|
})
|
|
|
|
|
app.Get("/static/*", static.New("./static"))
|
|
|
|
|
|
|
|
|
|
// TEMP
|
|
|
|
|
//
|
|
|
|
|
/*
|
|
|
|
|
dbp.SaveUser(context.Background(), &models.User{Username: "testuser"})
|
|
|
|
|
|
|
|
|
|
ctx := models.WithUser(context.Background(), models.User{ID: 1})
|
|
|
|
|
site, err := importer.New(dbp).Import(ctx, "_test-site")
|
|
|
|
|
if err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
target := models.SitePublishTarget{
|
|
|
|
|
SiteID: site.ID,
|
|
|
|
|
BaseURL: "https://jolly-boba-9e2486.netlify.app",
|
|
|
|
|
TargetType: "netlify",
|
|
|
|
|
TargetRef: "55c878a7-189e-42cf-aa02-5c60908143f3",
|
|
|
|
|
TargetKey: os.Getenv("NETLIFY_AUTH_TOKEN"),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := dbp.SavePublishTarget(ctx, &target); err != nil {
|
|
|
|
|
log.Fatal(err)
|
|
|
|
|
}
|
|
|
|
|
*/
|
|
|
|
|
//if err := publisherSvc.Publish(ctx, site.ID); err != nil {
|
|
|
|
|
// log.Fatal(err)
|
|
|
|
|
//}
|
2026-02-18 11:07:18 +00:00
|
|
|
|
2026-02-20 23:22:10 +00:00
|
|
|
log.Fatal(app.Listen(":3000"))
|
2026-02-18 11:07:18 +00:00
|
|
|
}
|