summaryrefslogtreecommitdiff
path: root/internal/router/router.go
diff refs
from: back
to: back
| flip
diff options
context:
space:
mode:
Diffstat (limited to 'internal/router/router.go')
-rw-r--r--internal/router/router.go93
1 files changed, 25 insertions, 68 deletions
diff --git a/internal/router/router.go b/internal/router/router.go
index 65e35a4..3242759 100644
--- a/internal/router/router.go
+++ b/internal/router/router.go
@@ -7,16 +7,13 @@ import (
"fmt"
"html/template"
"log/slog"
- "net"
"net/url"
- "os"
"slices"
- "strconv"
"strings"
"time"
"github.com/SayaAndy/saya-today-web/config"
- "github.com/SayaAndy/saya-today-web/internal/blog"
+ "github.com/SayaAndy/saya-today-web/internal/b2"
"github.com/SayaAndy/saya-today-web/internal/blogtrigger"
"github.com/SayaAndy/saya-today-web/internal/factgiver"
"github.com/SayaAndy/saya-today-web/internal/glightbox"
@@ -81,7 +78,6 @@ type Route interface {
TemplatesToInject() []string
SitemapInfo(supplements *Supplements) []SitemapInfo
ContentType() string
- RateLimiter() *fiber.Handler
Render(c *fiber.Ctx, supplements *Supplements, lang string, templateMap fiber.Map) (statusCode int, err error)
AddMeta(c *fiber.Ctx, supplements *Supplements, lang string, templateMap fiber.Map) (meta []MetaField, err error)
AddLinkedData(c *fiber.Ctx, supplements *Supplements, lang string, templateMap fiber.Map) (ld map[string]any, err error)
@@ -94,7 +90,7 @@ type Route interface {
type Supplements struct {
DB *sql.DB
- BlogClient blog.Client
+ B2Client *b2.B2Client
Localization map[string]*locale.LocaleConfig
AvailableLanguages []config.AvailableLanguageConfig
ClientCache *ClientCache
@@ -105,8 +101,6 @@ type Supplements struct {
TemplateManager *templatemanager.TemplateManager
MarkdownRenderer goldmark.Markdown
Meta config.MetaConfig
- PhotoStorage config.PhotoStorageConfig
- StaticStorage config.PhotoTypeConfig
}
type Router struct {
@@ -115,7 +109,6 @@ type Router struct {
templatedRoutes map[string]map[string]Route
templatedPathMatcher *PathMatcher
canonicalEndpoint string
- endpoint config.EndpointConfig
}
func NewRouter(cfg *config.Config) (*Router, error) {
@@ -147,7 +140,7 @@ func NewRouter(cfg *config.Config) (*Router, error) {
}
slog.Debug("successfully applied migrations")
- supplements.BlogClient, err = blog.NewClientMap[cfg.BlogPages.Storage.Type](&cfg.BlogPages.Storage)
+ supplements.B2Client, err = b2.NewB2Client(&cfg.BlogPages.Storage.Config)
if err != nil {
return nil, fmt.Errorf("fail to initialize b2 client: %w", err)
}
@@ -163,7 +156,7 @@ func NewRouter(cfg *config.Config) (*Router, error) {
supplements.MarkdownRenderer = goldmark.New(
goldmark.WithExtensions(
- glightbox.NewGLightboxExtension(cfg.PhotoStorage),
+ glightbox.NewGLightboxExtension(),
tailwind.NewTailwindExtension(),
),
goldmark.WithParserOptions(
@@ -205,8 +198,8 @@ func NewRouter(cfg *config.Config) (*Router, error) {
return nil, fmt.Errorf("fail to initialize mailer: %w", err)
}
- supplements.BlogTrigger, err = blogtrigger.NewBlogTriggerScheduler(supplements.BlogClient, cfg.AvailableLanguages, cfg.Mail.Trigger.OnNewPost,
- func(bp []*blog.Page) error {
+ supplements.BlogTrigger, err = blogtrigger.NewBlogTriggerScheduler(supplements.B2Client, cfg.AvailableLanguages, cfg.Mail.Trigger.OnNewPost,
+ func(bp []*b2.BlogPage) error {
for _, post := range bp {
if err := supplements.Mailer.NewPost(post); err != nil {
return err
@@ -224,8 +217,6 @@ func NewRouter(cfg *config.Config) (*Router, error) {
}
supplements.Meta = cfg.Meta
- supplements.PhotoStorage = cfg.PhotoStorage
- supplements.StaticStorage = cfg.StaticStorage
enablePrintRoutes := false
if cfg.LogLevel <= slog.LevelDebug {
@@ -238,7 +229,7 @@ func NewRouter(cfg *config.Config) (*Router, error) {
})
app.Use(cors.New(cors.Config{
- AllowOrigins: strings.Join(cfg.AllowOrigins, ","),
+ AllowOrigins: "https://f003.backblazeb2.com",
AllowMethods: "GET,POST,OPTIONS",
AllowHeaders: "Origin, Content-Type, Accept",
}))
@@ -260,7 +251,7 @@ func NewRouter(cfg *config.Config) (*Router, error) {
templatedRoutes := make(map[string]map[string]Route)
templatedPathMatcher := NewPathMatcher()
- return &Router{supplements, app, templatedRoutes, templatedPathMatcher, cfg.CanonicalEndpoint, cfg.Endpoint}, nil
+ return &Router{supplements, app, templatedRoutes, templatedPathMatcher, cfg.CanonicalEndpoint}, nil
}
func (r *Router) InitRoutes() (err error) {
@@ -272,10 +263,6 @@ func (r *Router) InitRoutes() (err error) {
return fmt.Errorf("failed to add '%s %s' route into template manager: %w", method, match, err)
}
- if rateLimiter := route.RateLimiter(); rateLimiter != nil {
- r.app.Use(match, *rateLimiter)
- }
-
if route.IsTemplated() {
if _, ok := r.templatedRoutes[method]; !ok {
r.templatedRoutes[method] = make(map[string]Route)
@@ -309,18 +296,14 @@ func (r *Router) InitRoutes() (err error) {
cacheKey = fmt.Sprintf("%s.full-page.%s", method, trimmedPath)
case ByUrlAndQuery:
cacheKey = fmt.Sprintf("%s.full-page.%s.%s", method, trimmedPath, queryString)
- case Disabled:
- c.Set("Cache-Control", "no-store, no-cache, must-revalidate")
}
defaultMap := fiber.Map{
- "L": r.supplements.Localization[lang],
- "Lang": lang,
- "Path": trimmedPath,
- "QueryString": queryString,
- "CanonicalEndpoint": r.canonicalEndpoint,
- "StaticStorageBaseUrl": r.supplements.StaticStorage.BaseUrl,
- "ThumbnailBaseUrl": r.supplements.PhotoStorage.Thumbnail320p.BaseUrl,
+ "L": r.supplements.Localization[lang],
+ "Lang": lang,
+ "Path": trimmedPath,
+ "QueryString": queryString,
+ "CanonicalEndpoint": r.canonicalEndpoint,
}
statusCode, err := currentRoute.Render(c, r.supplements, lang, defaultMap)
@@ -373,7 +356,6 @@ func (r *Router) InitRoutes() (err error) {
c.Set(fiber.HeaderContentType, fiber.MIMETextPlainCharsetUTF8)
return c.Status(fiber.ErrBadRequest.Code).SendString(fmt.Sprintf("unknown segment '%s'", part))
}
- c.Set("Cache-Control", "no-store, no-cache, must-revalidate")
err := r.generalPageSegment(c, part)
return err
})
@@ -389,30 +371,10 @@ func (r *Router) InitRoutes() (err error) {
return nil
}
-func (r *Router) Listen() error {
- switch r.endpoint.Type {
- case "unix":
- unixConfig := r.endpoint.Config.(*config.UnixConfig)
- endpoint, _ := strings.CutPrefix(unixConfig.Path, "unix://")
- ln, err := net.Listen("unix", endpoint)
- if err != nil {
- return fmt.Errorf("error while initializing unix listener: %w", err)
- }
- chmod, _ := strconv.ParseUint(unixConfig.Chmod[1:], 8, 32)
- os.Chmod(unixConfig.Path, os.FileMode(chmod))
- if err := r.app.Listener(ln); err != nil {
- return fmt.Errorf("error while running fiber server: %w", err)
- }
- case "http":
- httpConfig := r.endpoint.Config.(*config.HttpConfig)
- fmt.Print(httpConfig)
- if err := r.app.Listen(httpConfig.ListenOn); err != nil {
- return fmt.Errorf("error while running fiber server: %w", err)
- }
- default:
- return fmt.Errorf("error with initializing fiber server: invalid endpoint type (supported are unix and http)")
+func (r *Router) Listen(endpoint string) error {
+ if err := r.app.Listen(endpoint); err != nil {
+ return fmt.Errorf("error while running fiber server: %w", err)
}
-
return nil
}
@@ -436,7 +398,6 @@ func (r *Router) Close() (err error) {
}
slog.Debug("closing page cache")
r.supplements.PageCache.Close()
-
return errors.Join(allErrors...)
}
@@ -462,12 +423,10 @@ func (r *Router) generalPage(c *fiber.Ctx, route Route, lang string) error {
}
valueMap := fiber.Map{
- "L": r.supplements.Localization[lang],
- "Lang": lang,
- "QueryString": queryString,
- "CanonicalEndpoint": r.canonicalEndpoint,
- "StaticStorageBaseUrl": r.supplements.StaticStorage.BaseUrl,
- "ThumbnailBaseUrl": r.supplements.PhotoStorage.Thumbnail320p.BaseUrl,
+ "L": r.supplements.Localization[lang],
+ "Lang": lang,
+ "QueryString": queryString,
+ "CanonicalEndpoint": r.canonicalEndpoint,
}
var err error
@@ -544,13 +503,11 @@ func (r *Router) generalPageSegment(c *fiber.Ctx, part string) error {
var statusCode int
defaultMap := fiber.Map{
- "L": r.supplements.Localization[lang],
- "Lang": lang,
- "Path": strings.Trim(path, "/"),
- "QueryString": queryString,
- "CanonicalEndpoint": r.canonicalEndpoint,
- "StaticStorageBaseUrl": r.supplements.StaticStorage.BaseUrl,
- "ThumbnailBaseUrl": r.supplements.PhotoStorage.Thumbnail320p.BaseUrl,
+ "L": r.supplements.Localization[lang],
+ "Lang": lang,
+ "Path": strings.Trim(path, "/"),
+ "QueryString": queryString,
+ "CanonicalEndpoint": r.canonicalEndpoint,
}
switch part {