Diffstat (limited to 'internal/router/handlers')
| -rw-r--r-- | internal/router/handlers/api-v1-blog-search.go | 12 | ||||
| -rw-r--r-- | internal/router/handlers/api-v1-email-send-verification-code.go | 4 | ||||
| -rw-r--r-- | internal/router/handlers/api-v1-email-verify.go | 4 | ||||
| -rw-r--r-- | internal/router/handlers/api-v1-like-get.go | 2 | ||||
| -rw-r--r-- | internal/router/handlers/api-v1-like-put.go | 6 | ||||
| -rw-r--r-- | internal/router/handlers/api-v1-subs-put.go | 4 | ||||
| -rw-r--r-- | internal/router/handlers/lang-blog-title.go | 61 | ||||
| -rw-r--r-- | internal/router/handlers/lang-blog.go | 25 | ||||
| -rw-r--r-- | internal/router/handlers/lang-map.go | 22 | ||||
| -rw-r--r-- | internal/router/handlers/lang-user.go | 12 | ||||
| -rw-r--r-- | internal/router/handlers/lang.go | 26 | ||||
| -rw-r--r-- | internal/router/handlers/robots.txt.go | 48 | ||||
| -rw-r--r-- | internal/router/handlers/root.go | 21 | ||||
| -rw-r--r-- | internal/router/handlers/sitemap.xml.go | 79 |
14 files changed, 20 insertions, 306 deletions
diff --git a/internal/router/handlers/api-v1-blog-search.go b/internal/router/handlers/api-v1-blog-search.go index 38004a1..a0316e2 100644 --- a/internal/router/handlers/api-v1-blog-search.go +++ b/internal/router/handlers/api-v1-blog-search.go @@ -10,7 +10,7 @@ import ( "strings" "time" - "github.com/SayaAndy/saya-today-web/internal/blog" + "github.com/SayaAndy/saya-today-web/internal/b2" "github.com/SayaAndy/saya-today-web/internal/router" "github.com/gofiber/fiber/v2" ) @@ -44,10 +44,6 @@ func (r *BlogSearchHandler) ToValidateLang() router.LangSetting { return router.InForm } -func (r *BlogSearchHandler) RateLimiter() *fiber.Handler { - return &router.RateLimiterLoose -} - func (r *BlogSearchHandler) Render(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) { sort := c.Query("sort") tz := c.Query("tz") @@ -60,11 +56,11 @@ func (r *BlogSearchHandler) Render(c *fiber.Ctx, supplements *router.Supplements cacheKey := "blog-search." + lang + ".pages-list" - var pages []*blog.Page + var pages []*b2.BlogPage if pagesBytes, ok := supplements.PageCache.Get(cacheKey); pagesBytes != nil || ok { json.Unmarshal(pagesBytes, &pages) } else { - pages, err = supplements.BlogClient.Scan(lang + "/") + pages, err = supplements.B2Client.Scan(lang + "/") if err != nil { return fiber.StatusInternalServerError, fmt.Errorf("failed to scan pages for '%s' lang: %w", lang, err) } @@ -95,9 +91,7 @@ func (r *BlogSearchHandler) Render(c *fiber.Ctx, supplements *router.Supplements "Thumbnail": page.Metadata.Thumbnail, "Tags": page.Metadata.Tags, "LikeCount": supplements.ClientCache.GetLikeCount(page.FileName), - "Liked": supplements.ClientCache.GetLikeStatus(c.IP(), page.FileName), "ViewCount": supplements.ClientCache.GetViewCount(page.FileName), - "Viewed": supplements.ClientCache.GetViewStatus(c.IP(), page.FileName), }) break } diff --git a/internal/router/handlers/api-v1-email-send-verification-code.go b/internal/router/handlers/api-v1-email-send-verification-code.go index 0b53efa..20c5fb6 100644 --- a/internal/router/handlers/api-v1-email-send-verification-code.go +++ b/internal/router/handlers/api-v1-email-send-verification-code.go @@ -38,10 +38,6 @@ func (r *SendVerificationCodeHandler) ToValidateLang() router.LangSetting { return router.InReferer } -func (r *SendVerificationCodeHandler) RateLimiter() *fiber.Handler { - return &router.RateLimiterStrict -} - func (r *SendVerificationCodeHandler) Render(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) { id := c.IP() templateMap["StatusId"] = "email-message" diff --git a/internal/router/handlers/api-v1-email-verify.go b/internal/router/handlers/api-v1-email-verify.go index ace1870..c9ec969 100644 --- a/internal/router/handlers/api-v1-email-verify.go +++ b/internal/router/handlers/api-v1-email-verify.go @@ -36,10 +36,6 @@ func (r *VerifyCodeHandler) ToValidateLang() router.LangSetting { return router.InReferer } -func (r *VerifyCodeHandler) RateLimiter() *fiber.Handler { - return &router.RateLimiterStrict -} - func (r *VerifyCodeHandler) Render(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) { verificationCode := c.FormValue("email_code") templateMap["StatusId"] = "verification-message" diff --git a/internal/router/handlers/api-v1-like-get.go b/internal/router/handlers/api-v1-like-get.go index 0eaf5f6..e9c176e 100644 --- a/internal/router/handlers/api-v1-like-get.go +++ b/internal/router/handlers/api-v1-like-get.go @@ -48,7 +48,7 @@ func (r *GetLikeHandler) Render(c *fiber.Ctx, supplements *router.Supplements, l page := pathParts[2] pageLink := lang + "/" + page + ".md" - if pages, _ := supplements.BlogClient.Scan(pageLink); len(pages) == 0 { + if pages, _ := supplements.B2Client.Scan(pageLink); len(pages) == 0 { return fiber.StatusNotFound, fmt.Errorf("server did not find '%s' article", pageLink) } diff --git a/internal/router/handlers/api-v1-like-put.go b/internal/router/handlers/api-v1-like-put.go index 8305d2b..ea4ef4b 100644 --- a/internal/router/handlers/api-v1-like-put.go +++ b/internal/router/handlers/api-v1-like-put.go @@ -37,10 +37,6 @@ func (r *PutLikeHandler) ToValidateLang() router.LangSetting { return router.InReferer } -func (r *PutLikeHandler) RateLimiter() *fiber.Handler { - return &router.RateLimiterMedium -} - func (r *PutLikeHandler) Render(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) { path, pathParts, _, err := router.GetPathFromReferer(c) if err != nil { @@ -53,7 +49,7 @@ func (r *PutLikeHandler) Render(c *fiber.Ctx, supplements *router.Supplements, l page := pathParts[2] pageLink := lang + "/" + page + ".md" - if pages, _ := supplements.BlogClient.Scan(pageLink); len(pages) == 0 { + if pages, _ := supplements.B2Client.Scan(pageLink); len(pages) == 0 { return fiber.StatusNotFound, fmt.Errorf("server did not find '%s' article", pageLink) } diff --git a/internal/router/handlers/api-v1-subs-put.go b/internal/router/handlers/api-v1-subs-put.go index 32fba7e..144abe5 100644 --- a/internal/router/handlers/api-v1-subs-put.go +++ b/internal/router/handlers/api-v1-subs-put.go @@ -34,10 +34,6 @@ func (r *PutSubsHandler) ToValidateLang() router.LangSetting { return router.InReferer } -func (r *PutSubsHandler) RateLimiter() *fiber.Handler { - return &router.RateLimiterMedium -} - func (r *PutSubsHandler) Render(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) { templateMap["StatusId"] = "subs-message" diff --git a/internal/router/handlers/lang-blog-title.go b/internal/router/handlers/lang-blog-title.go index 49744c1..0f4f564 100644 --- a/internal/router/handlers/lang-blog-title.go +++ b/internal/router/handlers/lang-blog-title.go @@ -7,7 +7,7 @@ import ( "strings" "time" - "github.com/SayaAndy/saya-today-web/internal/blog" + "github.com/SayaAndy/saya-today-web/internal/b2" "github.com/SayaAndy/saya-today-web/internal/frontmatter" "github.com/SayaAndy/saya-today-web/internal/router" "github.com/gofiber/fiber/v2" @@ -46,64 +46,13 @@ func (r *BlogPageHandler) ToValidateLang() router.LangSetting { return router.InPath } -func (r *BlogPageHandler) SitemapInfo(supplements *router.Supplements) []router.SitemapInfo { - sitemapInfo := []router.SitemapInfo{} - - pages, err := supplements.BlogClient.Scan("") - if err != nil { - return sitemapInfo - } - - for _, page := range pages { - sitemapInfo = append(sitemapInfo, router.SitemapInfo{ - Loc: "/" + page.Lang + "/blog/" + page.FileName, - LastModified: page.ModifiedTime, - Priority: 1.0, - }) - } - - return sitemapInfo -} - -func (r *BlogPageHandler) AddMeta(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (meta []router.MetaField, err error) { - metadata, _, err := supplements.BlogClient.ReadFrontmatter(lang + "/" + c.Params("title") + ".md") - if err != nil { - return nil, fmt.Errorf("failed to read frontmatter of the desired blog post: %w", err) - } - - return []router.MetaField{ - {Property: "og:title", Content: metadata.Title}, - {Property: "og:description", Content: fmt.Sprintf("%s [%s]", metadata.ShortDescription, metadata.ActionDate)}, - {Property: "og:image", Content: fmt.Sprintf(supplements.PhotoStorage.Thumbnail320p.BaseUrl, metadata.Thumbnail)}, - {Property: "og:url", Content: fmt.Sprintf("%s/%s/blog/%s", templateMap["CanonicalEndpoint"], lang, c.Params("title"))}, - {Property: "og:type", Content: "website"}, - {Name: "twitter:card", Content: "summary_large_image"}, - }, nil -} - -func (r *BlogPageHandler) AddLinkedData(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (ld map[string]any, err error) { - metadata, _, err := supplements.BlogClient.ReadFrontmatter(lang + "/" + c.Params("title") + ".md") - if err != nil { - return nil, fmt.Errorf("failed to read frontmatter of the desired blog post: %w", err) - } - - return map[string]any{ - "@context": "https://schema.org", - "@type": "Article", - "headline": metadata.Title, - "description": fmt.Sprintf("%s [%s]", metadata.ShortDescription, metadata.ActionDate), - "author": map[string]string{"@type": "Person", "name": "Saya Andy"}, - "datePublished": metadata.PublishedTime.UTC().Format(time.RFC3339), - }, nil -} - func (r *BlogPageHandler) RenderBody(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) { _, pathParts, _, err := router.GetPathFromReferer(c) if err != nil { return fiber.StatusBadRequest, fmt.Errorf("failed to get path from referer: %w", err) } - metadata, parsedMarkdown, err := readBlogPost(supplements.MarkdownRenderer, supplements.BlogClient, lang+"/"+pathParts[2]) + metadata, parsedMarkdown, err := readBlogPost(supplements.MarkdownRenderer, supplements.B2Client, lang+"/"+pathParts[2]) if err != nil { return fiber.StatusNotFound, fmt.Errorf("failed to find '%s' post: %w", pathParts[2], err) } @@ -138,7 +87,7 @@ func (r *BlogPageHandler) RenderHeader(c *fiber.Ctx, supplements *router.Supplem return fiber.StatusBadRequest, fmt.Errorf("failed to get path from referer: %w", err) } - metadata, _, err := supplements.BlogClient.ReadFrontmatter(lang + "/" + pathParts[2] + ".md") + metadata, _, err := supplements.B2Client.ReadFrontmatter(lang + "/" + pathParts[2] + ".md") if err != nil { return fiber.StatusNotFound, fmt.Errorf("could not read '%s' for metadata: %w", path, err) } @@ -148,8 +97,8 @@ func (r *BlogPageHandler) RenderHeader(c *fiber.Ctx, supplements *router.Supplem return fiber.StatusOK, nil } -func readBlogPost(md goldmark.Markdown, blogClient blog.Client, sourceName string) (metadata *frontmatter.Metadata, html string, err error) { - metadata, markdown, err := blogClient.ReadFrontmatter(sourceName + ".md") +func readBlogPost(md goldmark.Markdown, b2Client *b2.B2Client, sourceName string) (metadata *frontmatter.Metadata, html string, err error) { + metadata, markdown, err := b2Client.ReadFrontmatter(sourceName + ".md") if err != nil { return nil, "", fmt.Errorf("failed to read a frontmatter file: %w", err) } diff --git a/internal/router/handlers/lang-blog.go b/internal/router/handlers/lang-blog.go index 79ec9f3..e4c20c6 100644 --- a/internal/router/handlers/lang-blog.go +++ b/internal/router/handlers/lang-blog.go @@ -9,7 +9,7 @@ import ( "strings" "time" - "github.com/SayaAndy/saya-today-web/internal/blog" + "github.com/SayaAndy/saya-today-web/internal/b2" "github.com/SayaAndy/saya-today-web/internal/router" "github.com/gofiber/fiber/v2" ) @@ -47,23 +47,6 @@ func (r *CatalogueHandler) ToValidateLang() router.LangSetting { return router.InPath } -func (r *CatalogueHandler) SitemapInfo(supplements *router.Supplements) []router.SitemapInfo { - sitemapInfo := []router.SitemapInfo{} - for _, lang := range supplements.AvailableLanguages { - sitemapInfo = append(sitemapInfo, router.SitemapInfo{Loc: "/" + lang.Name + "/blog", Priority: 0.3}) - } - return sitemapInfo -} - -func (r *CatalogueHandler) AddMeta(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (meta []router.MetaField, err error) { - return []router.MetaField{ - {Property: "og:title", Content: supplements.Localization[lang].BlogSearch.Header}, - {Property: "og:description", Content: supplements.Localization[lang].BlogSearch.Description}, - {Property: "og:url", Content: fmt.Sprintf("%s/%s/blog", templateMap["CanonicalEndpoint"], lang)}, - {Property: "og:type", Content: "website"}, - }, nil -} - func (r *CatalogueHandler) RenderBody(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) { querySort := c.Query("sort") if querySort == "" { @@ -79,7 +62,7 @@ func (r *CatalogueHandler) RenderBody(c *fiber.Ctx, supplements *router.Suppleme queryTags = append(queryTags, string(match[1])) } - tagsArray, err := getTags(supplements.BlogClient, lang) + tagsArray, err := getTags(supplements.B2Client, lang) if err != nil { return fiber.StatusInternalServerError, fmt.Errorf("failed to get the available tags") } @@ -102,8 +85,8 @@ type Tag struct { Count int `json:"Count" yaml:"count"` } -func getTags(blogClient blog.Client, lang string) (tags []Tag, err error) { - pages, err := blogClient.Scan(lang + "/") +func getTags(b2Client *b2.B2Client, lang string) (tags []Tag, err error) { + pages, err := b2Client.Scan(lang + "/") if err != nil { slog.Warn("failed to scan pages via b2", slog.String("error", err.Error())) return nil, fmt.Errorf("failed to scan pages via b2: %w", err) diff --git a/internal/router/handlers/lang-map.go b/internal/router/handlers/lang-map.go index d452bc7..dbf1437 100644 --- a/internal/router/handlers/lang-map.go +++ b/internal/router/handlers/lang-map.go @@ -3,11 +3,10 @@ package handlers import ( "fmt" "log/slog" - "slices" "strconv" "strings" - "github.com/SayaAndy/saya-today-web/internal/blog" + "github.com/SayaAndy/saya-today-web/internal/b2" "github.com/SayaAndy/saya-today-web/internal/router" "github.com/gofiber/fiber/v2" ) @@ -40,19 +39,8 @@ func (r *MapHandler) ToValidateLang() router.LangSetting { return router.InPath } -func (r *MapHandler) SitemapInfo(supplements *router.Supplements) []router.SitemapInfo { - sitemapInfo := []router.SitemapInfo{} - for _, lang := range supplements.AvailableLanguages { - sitemapInfo = append(sitemapInfo, router.SitemapInfo{Loc: "/" + lang.Name + "/map", Priority: 0.3}) - } - return sitemapInfo -} - func (r *MapHandler) Render(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) { - pages, err := supplements.BlogClient.Scan(lang + "/") - slices.SortFunc(pages, func(a *blog.Page, b *blog.Page) int { - return a.Metadata.PublishedTime.Compare(b.Metadata.PublishedTime) - }) + pages, err := supplements.B2Client.Scan(lang + "/") status := fiber.StatusOK if err != nil { slog.Error("received an error while scanning b2 pages", @@ -60,11 +48,10 @@ func (r *MapHandler) Render(c *fiber.Ctx, supplements *router.Supplements, lang slog.String("lang", lang), ) status = fiber.StatusPartialContent - pages = []*blog.Page{} + pages = []*b2.BlogPage{} } type MapMarker struct { - Index int `json:"Index"` Title string `json:"Title"` PageLink string `json:"PageLink"` Lat float64 `json:"Lat"` @@ -74,7 +61,7 @@ func (r *MapHandler) Render(c *fiber.Ctx, supplements *router.Supplements, lang } mapMarkers := make([]*MapMarker, 0, len(pages)) - for i, page := range pages { + for _, page := range pages { geolocationParts := strings.Split(page.Metadata.Geolocation, " ") if len(geolocationParts) < 2 { continue @@ -91,7 +78,6 @@ func (r *MapHandler) Render(c *fiber.Ctx, supplements *router.Supplements, lang } mapMarkers = append(mapMarkers, &MapMarker{ - Index: i, Title: page.Metadata.Title, PageLink: fmt.Sprintf("/%s/blog/%s", lang, page.FileName), Lat: x, diff --git a/internal/router/handlers/lang-user.go b/internal/router/handlers/lang-user.go index 0dda529..db566fe 100644 --- a/internal/router/handlers/lang-user.go +++ b/internal/router/handlers/lang-user.go @@ -37,16 +37,6 @@ func (r *UserHandler) ToValidateLang() router.LangSetting { return router.InPath } -func (r *UserHandler) AddMeta(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (meta []router.MetaField, err error) { - return []router.MetaField{ - {Name: "robots", Content: "noindex,nofollow"}, - {Property: "og:title", Content: supplements.Localization[lang].UserProfile.Header}, - {Property: "og:description", Content: supplements.Localization[lang].UserProfile.Description}, - {Property: "og:url", Content: fmt.Sprintf("%s/%s/user", templateMap["CanonicalEndpoint"], lang)}, - {Property: "og:type", Content: "website"}, - }, nil -} - func (r *UserHandler) RenderBody(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) { templateMap["Title"] = supplements.Localization[lang].UserProfile.Header @@ -55,7 +45,7 @@ func (r *UserHandler) RenderBody(c *fiber.Ctx, supplements *router.Supplements, slog.Error("get info from mailer about a client", slog.String("error", err.Error())) } - tagsArray, err := getTags(supplements.BlogClient, lang) + tagsArray, err := getTags(supplements.B2Client, lang) if err != nil { return fiber.ErrInternalServerError.Code, fmt.Errorf("failed to get the available tags") } diff --git a/internal/router/handlers/lang.go b/internal/router/handlers/lang.go index 25b5036..fc4deb6 100644 --- a/internal/router/handlers/lang.go +++ b/internal/router/handlers/lang.go @@ -41,35 +41,11 @@ func (r *HomeHandler) ToValidateLang() router.LangSetting { return router.InPath } -func (r *HomeHandler) SitemapInfo(supplements *router.Supplements) []router.SitemapInfo { - sitemapInfo := []router.SitemapInfo{} - for _, lang := range supplements.AvailableLanguages { - sitemapInfo = append(sitemapInfo, router.SitemapInfo{Loc: "/" + lang.Name, Priority: 0.7}) - } - return sitemapInfo -} - -func (r *HomeHandler) AddMeta(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (meta []router.MetaField, err error) { - return []router.MetaField{ - {Property: "og:title", Content: supplements.Localization[lang].HomePage.Header}, - {Property: "og:description", Content: supplements.Localization[lang].HomePage.HomePageDescription}, - {Property: "og:image", Content: fmt.Sprintf( - supplements.PhotoStorage.HomePageGifs.BaseUrl, - supplements.PhotoStorage.HomePageGifs.Indexes[rand.Int()%len(supplements.PhotoStorage.HomePageGifs.Indexes)], - )}, - {Property: "og:url", Content: fmt.Sprintf("%s/%s", templateMap["CanonicalEndpoint"], lang)}, - {Property: "og:type", Content: "website"}, - }, nil -} - func (r *HomeHandler) RenderBody(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) { templateMap["Title"] = supplements.Localization[lang].HomePage.Header templateMap["FilledHeartCount"] = uint(40) templateMap["OutlineHeartCount"] = uint(40) - templateMap["GifUrl"] = fmt.Sprintf( - supplements.PhotoStorage.HomePageGifs.BaseUrl, - supplements.PhotoStorage.HomePageGifs.Indexes[rand.Int()%len(supplements.PhotoStorage.HomePageGifs.Indexes)], - ) + templateMap["GifName"] = fmt.Sprintf("otter-%d.gif", rand.Int()%3+1) templateMap["FunFacts"] = supplements.FactGiver.Give(lang) return fiber.StatusOK, nil } diff --git a/internal/router/handlers/robots.txt.go b/internal/router/handlers/robots.txt.go deleted file mode 100644 index fc60af4..0000000 --- a/internal/router/handlers/robots.txt.go +++ /dev/null @@ -1,48 +0,0 @@ -package handlers - -import ( - "time" - - "github.com/SayaAndy/saya-today-web/internal/router" - "github.com/gofiber/fiber/v2" -) - -type RobotsTxtHandler struct { - router.BasicHandler -} - -func init() { - router.Routes = append(router.Routes, &RobotsTxtHandler{}) -} - -func (r *RobotsTxtHandler) Filter() (method string, path string) { - return "GET", "/robots.txt" -} - -func (r *RobotsTxtHandler) IsTemplated() bool { - return false -} - -func (r *RobotsTxtHandler) TemplatesToInject() []string { - return []string{"views/pages/robots.txt"} -} - -func (r *RobotsTxtHandler) ToCache() router.CacheSetting { - return router.ByUrlOnly -} - -func (r *RobotsTxtHandler) CacheDuration() time.Duration { - return time.Hour -} - -func (r *RobotsTxtHandler) ToValidateLang() router.LangSetting { - return router.NotRequired -} - -func (r *RobotsTxtHandler) ContentType() string { - return fiber.MIMETextPlainCharsetUTF8 -} - -func (r *RobotsTxtHandler) Render(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) { - return fiber.StatusOK, nil -} diff --git a/internal/router/handlers/root.go b/internal/router/handlers/root.go index 6a011e4..c8c4cd4 100644 --- a/internal/router/handlers/root.go +++ b/internal/router/handlers/root.go @@ -1,7 +1,6 @@ package handlers import ( - "fmt" "time" "github.com/SayaAndy/saya-today-web/internal/router" @@ -36,26 +35,6 @@ func (r *RootHandler) CacheDuration() time.Duration { return 24 * time.Hour } -func (r *RootHandler) SitemapInfo(_ *router.Supplements) []router.SitemapInfo { - return []router.SitemapInfo{{Loc: "/", Priority: 0.7}} -} - -func (r *RootHandler) AddMeta(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (meta []router.MetaField, err error) { - meta = []router.MetaField{ - {Property: "og:title", Content: "Saya Blog"}, - {Property: "og:description", Content: "The blog of a 25 years old, travelling God knows where, proud to be not mainstream // Личный блог 25-летки, странствующего по ебеням, зато не мейнстрим"}, - {Property: "og:url", Content: fmt.Sprint(templateMap["CanonicalEndpoint"]) + "/"}, - {Property: "og:type", Content: "website"}, - } - if supplements.Meta.GoogleSiteVerification != "" { - meta = append(meta, router.MetaField{Name: "google-site-verification", Content: supplements.Meta.GoogleSiteVerification}) - } - if supplements.Meta.YandexVerification != "" { - meta = append(meta, router.MetaField{Name: "yandex-verification", Content: supplements.Meta.YandexVerification}) - } - return meta, nil -} - func (r *RootHandler) RenderBody(c *fiber.Ctx, supplements *router.Supplements, _ string, templateMap fiber.Map) (statusCode int, err error) { templateMap["Title"] = "Choose Your Language" templateMap["AvailableLanguages"] = supplements.AvailableLanguages diff --git a/internal/router/handlers/sitemap.xml.go b/internal/router/handlers/sitemap.xml.go deleted file mode 100644 index bb1df93..0000000 --- a/internal/router/handlers/sitemap.xml.go +++ /dev/null @@ -1,79 +0,0 @@ -package handlers - -import ( - "log/slog" - "time" - - "github.com/SayaAndy/saya-today-web/internal/router" - "github.com/gofiber/fiber/v2" -) - -type SitemapXmlHandler struct { - router.BasicHandler -} - -func init() { - router.Routes = append(router.Routes, &SitemapXmlHandler{}) -} - -func (r *SitemapXmlHandler) Filter() (method string, path string) { - return "GET", "/sitemap.xml" -} - -func (r *SitemapXmlHandler) IsTemplated() bool { - return false -} - -func (r *SitemapXmlHandler) TemplatesToInject() []string { - return []string{"views/pages/sitemap.xml"} -} - -func (r *SitemapXmlHandler) ToCache() router.CacheSetting { - return router.ByUrlOnly -} - -func (r *SitemapXmlHandler) CacheDuration() time.Duration { - return time.Hour -} - -func (r *SitemapXmlHandler) ToValidateLang() router.LangSetting { - return router.NotRequired -} - -func (r *SitemapXmlHandler) ContentType() string { - return fiber.MIMEApplicationXMLCharsetUTF8 -} - -func (r *SitemapXmlHandler) Render(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) { - urls := []router.SitemapInfo{} - for _, route := range router.Routes { - sitemapInfo := route.SitemapInfo(supplements) - if sitemapInfo == nil { - continue - } - - method, match := route.Filter() - lastMod, err := supplements.TemplateManager.GetLastModified(method + " " + match) - if err != nil { - slog.Warn("failed to get last modified for a route", - slog.String("error", err.Error()), - slog.String("method", method), - slog.String("match", match)) - lastMod = time.Now() - } - - for i := range sitemapInfo { - if sitemapInfo[i].LastModified.Before(lastMod) { - sitemapInfo[i].LastModified = lastMod - } - if sitemapInfo[i].ChangeFreq == "" { - sitemapInfo[i].ChangeFreq = "monthly" - } - urls = append(urls, sitemapInfo[i]) - } - } - - templateMap["URLs"] = urls - - return fiber.StatusOK, nil -} |