diff --git a/_views/guide.html b/_views/guide.html
index c6bb5c5..df4fb69 100644
--- a/_views/guide.html
+++ b/_views/guide.html
@@ -4,6 +4,10 @@
{{define "body"}}
+
+ Feed RSS
+
+
Articoli
diff --git a/_views/news.html b/_views/news.html
index 6932331..c8a7d36 100644
--- a/_views/news.html
+++ b/_views/news.html
@@ -4,6 +4,10 @@
{{define "body"}}
+
+ Feed RSS
+
+
Notizie Importanti
@@ -60,4 +64,4 @@
{{ end }}
-{{end}}
\ No newline at end of file
+{{end}}
diff --git a/go.mod b/go.mod
index 5a5092a..d9eaaba 100644
--- a/go.mod
+++ b/go.mod
@@ -17,6 +17,7 @@ require (
require (
github.com/andybalholm/brotli v1.0.4 // indirect
github.com/dlclark/regexp2 v1.4.0 // indirect
+ github.com/gorilla/feeds v1.1.1 // indirect
github.com/klauspost/compress v1.15.6 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
github.com/valyala/fasthttp v1.37.0 // indirect
diff --git a/go.sum b/go.sum
index 3e649fb..c9c310c 100644
--- a/go.sum
+++ b/go.sum
@@ -19,6 +19,8 @@ github.com/gofiber/fiber/v2 v2.34.0 h1:96BJMw6uaxQhJsHY54SFGOtGgp9pgombK5Hbi4JSE
github.com/gofiber/fiber/v2 v2.34.0/go.mod h1:ozRQfS+D7EL1+hMH+gutku0kfx1wLX4hAxDCtDzpj4U=
github.com/gofiber/redirect/v2 v2.1.23 h1:MqRyyeKyGqkF4GIFgTB4SuqIeeXviUglgRL2HCOFofM=
github.com/gofiber/redirect/v2 v2.1.23/go.mod h1:IYF5pPLDLYrrHMcxajDyWV+nHMbyPd6agCXkCnfLxS0=
+github.com/gorilla/feeds v1.1.1 h1:HwKXxqzcRNg9to+BbvJog4+f3s/xzvtZXICcQGutYfY=
+github.com/gorilla/feeds v1.1.1/go.mod h1:Nk0jZrvPFZX1OBe5NPiddPw7CfwF6Q9eqzaBbaightA=
github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg=
github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
diff --git a/handler/handler.go b/handler/handler.go
index a007a34..06952c8 100644
--- a/handler/handler.go
+++ b/handler/handler.go
@@ -9,6 +9,7 @@ import (
"git.phc.dm.unipi.it/phc/website/articles"
"git.phc.dm.unipi.it/phc/website/auth"
"git.phc.dm.unipi.it/phc/website/model"
+ "git.phc.dm.unipi.it/phc/website/rss"
"git.phc.dm.unipi.it/phc/website/templates"
"git.phc.dm.unipi.it/phc/website/util"
)
@@ -27,6 +28,8 @@ type Service interface {
HandleProfilePage(w io.Writer, ctx Context) error
HandleNewsArticlePage(w io.Writer, articleID string, ctx Context) error
HandleGuideArticlePage(w io.Writer, articleID string, ctx Context) error
+ HandleNewsFeedPage(w io.Writer) error
+ HandleGuideFeedPage(w io.Writer) error
}
//
@@ -188,3 +191,25 @@ func (h *DefaultHandler) HandleGuideArticlePage(w io.Writer, articleID string, c
"ContentHTML": template.HTML(html),
})
}
+
+func (h *DefaultHandler) HandleNewsFeedPage(w io.Writer) error {
+ registry, err := h.NewsArticlesRegistry.GetArticles()
+ if err != nil {
+ return err
+ }
+
+ newsFeed := rss.GenerateRssFeed(registry)
+
+ return newsFeed.WriteRss(w)
+}
+
+func (h *DefaultHandler) HandleGuideFeedPage(w io.Writer) error {
+ registry, err := h.GuideArticlesRegistry.GetArticles()
+ if err != nil {
+ return err
+ }
+
+ guideFeed := rss.GenerateRssFeed(registry)
+
+ return guideFeed.WriteRss(w)
+}
diff --git a/rss/feed.go b/rss/feed.go
new file mode 100644
index 0000000..7fcd03d
--- /dev/null
+++ b/rss/feed.go
@@ -0,0 +1,31 @@
+package rss
+
+import (
+ "git.phc.dm.unipi.it/phc/website/articles"
+ "github.com/gorilla/feeds"
+)
+
+func GenerateRssFeed(entries []*articles.Article) *feeds.Feed {
+
+ // Initialize RSS Feed
+ feed := &feeds.Feed{}
+
+ var feedItems []*feeds.Item
+
+ // Add items to RSS feeds
+ for _, entry := range entries {
+
+ feedItems = append(feedItems,
+ &feeds.Item{
+ Id: entry.Id,
+ Title: entry.Title,
+ Link: &feeds.Link{Href: entry.ArticlePath},
+ Description: entry.Description,
+ Created: entry.PublishDate,
+ })
+ }
+
+ feed.Items = feedItems
+
+ return feed
+}
diff --git a/server/fiber.go b/server/fiber.go
index f111ba7..097c55f 100644
--- a/server/fiber.go
+++ b/server/fiber.go
@@ -105,6 +105,16 @@ func routes(h handler.Service, r fiber.Router) {
return h.HandleGuidePage(c, CreateContext(c))
})
+ r.Get("/news/feed", func(c *fiber.Ctx) error {
+ c.Type("xml")
+ return h.HandleNewsFeedPage(c)
+ })
+
+ r.Get("/guide/feed", func(c *fiber.Ctx) error {
+ c.Type("xml")
+ return h.HandleGuideFeedPage(c)
+ })
+
r.Post("/login", func(c *fiber.Ctx) error {
var loginForm struct {
Provider string `form:"provider"`