88 lines
2.4 KiB
Go
88 lines
2.4 KiB
Go
package server
|
|
|
|
import (
|
|
"log"
|
|
|
|
"git.zom.bi/fanir/feedizer/cmd/feedizer/config"
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/gofiber/fiber/v2/middleware/logger"
|
|
"github.com/gofiber/template/html"
|
|
)
|
|
|
|
func Start(cfg *config.Config) {
|
|
htmlEngine := html.New(cfg.Server.TemplateDir, ".html")
|
|
app := fiber.New(fiber.Config{
|
|
Views: htmlEngine,
|
|
})
|
|
app.Use(logger.New())
|
|
|
|
registerRoutes(app, cfg)
|
|
|
|
log.Fatalln(app.Listen(cfg.Server.Address))
|
|
}
|
|
|
|
func registerRoutes(app *fiber.App, cfg *config.Config) {
|
|
app.Get(`/`, func(ctx *fiber.Ctx) error { return ctx.Render("home", nil) })
|
|
app.Get(`/about`, func(ctx *fiber.Ctx) error { return ctx.Render("about", nil) })
|
|
app.Get(`/bot`, func(ctx *fiber.Ctx) error { return ctx.Render("bot", nil) })
|
|
app.Get(`/tos`, func(ctx *fiber.Ctx) error { return ctx.Render("tos", nil) })
|
|
app.Get(`/imprint`, func(ctx *fiber.Ctx) error { return ctx.Render("imprint", nil) })
|
|
|
|
app.Static("/static", cfg.Server.StaticDir, fiber.Static{
|
|
Compress: true,
|
|
})
|
|
|
|
app.Get(`/announcement/(?'id'[0-9]+)(/.*)?`, func(c *fiber.Ctx) error { return fiber.ErrNotImplemented })
|
|
|
|
app.Post(`/feed`, func(c *fiber.Ctx) error { return fiber.ErrNotImplemented })
|
|
app.Get(`/feed/{slug}`, func(c *fiber.Ctx) error { return fiber.ErrNotImplemented })
|
|
app.Get(`/feed/{slug}/page/(?'feedType'atom|rss)`, func(c *fiber.Ctx) error { return fiber.ErrNotImplemented })
|
|
app.Get(`/feed/{slug}/diff/(?'feedType'atom|rss)`, func(c *fiber.Ctx) error { return fiber.ErrNotImplemented })
|
|
}
|
|
|
|
func SendAPIResponse(ctx fiber.Ctx, template string, data interface{}) error {
|
|
switch ctx.Accepts("text/html", "application/json") {
|
|
case "text/html":
|
|
return ctx.Render(template, data)
|
|
case "application/json":
|
|
return ctx.JSON(data)
|
|
}
|
|
return fiber.ErrNotAcceptable
|
|
}
|
|
|
|
const (
|
|
AtomFeed = "atom"
|
|
RSSFeed = "rss"
|
|
JSONFeed = "json"
|
|
)
|
|
|
|
func RequestedFeedType(ctx fiber.Ctx) string {
|
|
format := ctx.Query("format",
|
|
ctx.Accepts(
|
|
"application/atom+xml", // Atom
|
|
"application/rss+xml", "text/xml", // RSS
|
|
"application/feed+json", // JSON Feed
|
|
),
|
|
)
|
|
switch format {
|
|
case "atom", "application/atom+xml":
|
|
return AtomFeed
|
|
case "rss", "application/rss+xml", "text/xml":
|
|
return RSSFeed
|
|
case "json", "application/feed+json":
|
|
return JSONFeed
|
|
}
|
|
|
|
return ""
|
|
}
|
|
|
|
func SendFeedResponse(ctx fiber.Ctx, format string, data interface{}) error {
|
|
switch format {
|
|
case AtomFeed:
|
|
case RSSFeed:
|
|
case JSONFeed:
|
|
}
|
|
|
|
return fiber.ErrNotAcceptable
|
|
}
|