summaryrefslogtreecommitdiff
path: root/main.go
diff refs
from: back
to: back
| flip
diff options
context:
space:
mode:
Diffstat (limited to 'main.go')
-rw-r--r--main.go62
1 files changed, 44 insertions, 18 deletions
diff --git a/main.go b/main.go
index 72eca3d..39fa0ab 100644
--- a/main.go
+++ b/main.go
@@ -11,17 +11,21 @@ import (
"github.com/SayaAndy/saya-today-web/config"
"github.com/SayaAndy/saya-today-web/internal/b2"
- "github.com/SayaAndy/saya-today-web/internal/lightgallery"
+ "github.com/SayaAndy/saya-today-web/internal/factgiver"
+ "github.com/SayaAndy/saya-today-web/internal/glightbox"
"github.com/SayaAndy/saya-today-web/internal/router"
"github.com/SayaAndy/saya-today-web/internal/tailwind"
"github.com/SayaAndy/saya-today-web/locale"
+ "github.com/dgraph-io/ristretto/v2"
"github.com/gofiber/fiber/v2"
- "github.com/gofiber/fiber/v2/middleware/redirect"
+ "github.com/gofiber/fiber/v2/middleware/cors"
"github.com/golang-migrate/migrate/v4"
"github.com/golang-migrate/migrate/v4/database/sqlite3"
"github.com/yuin/goldmark"
"github.com/yuin/goldmark/parser"
- gmhtml "github.com/yuin/goldmark/renderer/html"
+ "github.com/yuin/goldmark/renderer"
+ "github.com/yuin/goldmark/renderer/html"
+ "github.com/yuin/goldmark/util"
_ "github.com/golang-migrate/migrate/v4/source/file"
_ "github.com/mattn/go-sqlite3"
@@ -30,19 +34,25 @@ import (
var (
md = goldmark.New(
goldmark.WithExtensions(
- lightgallery.NewLightGalleryExtension(),
+ glightbox.NewGLightboxExtension(),
tailwind.NewTailwindExtension(),
),
goldmark.WithParserOptions(
parser.WithAutoHeadingID(),
+ parser.WithAttribute(),
),
- goldmark.WithRendererOptions(
- gmhtml.WithXHTML(),
+ goldmark.WithRenderer(
+ renderer.NewRenderer(
+ renderer.WithNodeRenderers(
+ util.Prioritized(tailwind.NewCustomLinkRenderer(html.WithUnsafe(), html.WithXHTML()), 50),
+ util.Prioritized(html.NewRenderer(html.WithXHTML()), 100),
+ ),
+ ),
),
)
b2Client *b2.B2Client
configPath = flag.String("c", "config.yaml", "Path to the configuration file (in YAML format)")
- availableLanguages = make([]string, 0)
+ availableLanguages = make([]config.AvailableLanguageConfig, 0)
localization = make(map[string]*locale.LocaleConfig)
)
@@ -98,7 +108,7 @@ func main() {
slog.Warn("fail to initialize a locale", slog.String("locale", lang.Name), slog.String("error", err.Error()))
continue
}
- availableLanguages = append(availableLanguages, lang.Name)
+ availableLanguages = append(availableLanguages, lang)
localization[lang.Name] = localeCfg
}
@@ -106,24 +116,39 @@ func main() {
ProxyHeader: "X-Forwarded-For",
})
- app.Use(redirect.New(redirect.Config{
- Rules: map[string]string{
- "/ru": "/",
- "/en": "/",
- },
- StatusCode: 301,
+ app.Use(cors.New(cors.Config{
+ AllowOrigins: "https://f003.backblazeb2.com",
+ AllowMethods: "GET,POST,OPTIONS",
+ AllowHeaders: "Origin, Content-Type, Accept",
}))
router.CCache, err = router.NewClientCache(db, []byte(cfg.Auth.Salt))
if err != nil {
- slog.Error("fail to initialize cache", slog.String("error", err.Error()))
+ slog.Error("fail to initialize client cache", slog.String("error", err.Error()))
os.Exit(1)
}
- app.Get("/", router.Root(cfg.AvailableLanguages))
+ router.PCache, err = ristretto.NewCache(&ristretto.Config[string, []byte]{
+ NumCounters: 1e6, // 1,000,000
+ MaxCost: 1 << 29, // 512 MB
+ BufferItems: 64, // number of keys per Get buffer.
+ })
+ if err != nil {
+ slog.Error("fail to initialize page cache", slog.String("error", err.Error()))
+ os.Exit(1)
+ }
+
+ router.FactGiver, err = factgiver.NewFactGiver(&cfg.FactGiver, availableLanguages)
+ if err != nil {
+ slog.Error("fail to initialize fact giver", slog.String("error", err.Error()))
+ os.Exit(1)
+ }
+
+ app.Get("/", router.Api_V1_GeneralPage(localization, availableLanguages))
+ app.Get("/:lang<len(2)>", router.Api_V1_GeneralPage(localization, availableLanguages))
app.Get("/:lang/map", router.Lang_Map(localization, availableLanguages, b2Client))
- app.Get("/:lang/blog", router.Lang_Blog(localization, availableLanguages, b2Client))
- app.Get("/:lang/blog/:title", router.Lang_Blog_Title(localization, availableLanguages, b2Client, md))
+ app.Get("/:lang/blog", router.Api_V1_GeneralPage(localization, availableLanguages))
+ app.Get("/:lang/blog/:title", router.Api_V1_GeneralPage(localization, availableLanguages))
app.Get("/api/v1/tz", router.Api_V1_TZ())
app.Get("/api/v1/blog-search", router.Api_V1_BlogSearch(localization, availableLanguages, b2Client))
@@ -158,5 +183,6 @@ func main() {
if err = db.Close(); err != nil {
slog.Error("fail to close db connection", slog.String("error", err.Error()))
}
+ router.PCache.Close()
db.Close()
}