add atom feed support
This commit is contained in:
parent
b2b4bc0a98
commit
2a95341a99
@ -15,4 +15,7 @@ RUN make
|
||||
ARG PASSWORD
|
||||
ENV PASSWORD $PASSWORD
|
||||
|
||||
ARG URL
|
||||
ENV URL $URL
|
||||
|
||||
ENTRYPOINT ["/app/server"]
|
||||
|
@ -2,6 +2,6 @@ server: *.go routes/* util/*
|
||||
go build -o server .
|
||||
|
||||
test:
|
||||
PASSWORD=test ./server
|
||||
URL=http://localhost:5173/ PASSWORD=test ./server
|
||||
|
||||
.PHONY: test
|
||||
|
@ -10,6 +10,7 @@ require (
|
||||
require (
|
||||
github.com/andybalholm/brotli v1.0.5 // indirect
|
||||
github.com/google/uuid v1.5.0 // indirect
|
||||
github.com/gorilla/feeds v1.1.2 // indirect
|
||||
github.com/klauspost/compress v1.17.0 // indirect
|
||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||
|
@ -4,6 +4,8 @@ github.com/gofiber/fiber/v2 v2.52.2 h1:b0rYH6b06Df+4NyrbdptQL8ifuxw/Tf2DgfkZkDax
|
||||
github.com/gofiber/fiber/v2 v2.52.2/go.mod h1:KEOE+cXMhXG0zHc9d8+E38hoX+ZN7bhOtgeF2oT6jrQ=
|
||||
github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU=
|
||||
github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/gorilla/feeds v1.1.2 h1:pxzZ5PD3RJdhFH2FsJJ4x6PqMqbgFk1+Vez4XWBW8Iw=
|
||||
github.com/gorilla/feeds v1.1.2/go.mod h1:WMib8uJP3BbY+X8Szd1rA5Pzhdfh+HCCAYT2z7Fza6Y=
|
||||
github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM=
|
||||
github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
|
||||
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
||||
|
@ -10,13 +10,16 @@ import (
|
||||
|
||||
func CorsMiddleware(c *fiber.Ctx) error {
|
||||
c.Set("Access-Control-Allow-Origin", "*")
|
||||
c.Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With")
|
||||
c.Set("Access-Control-Allow-Headers",
|
||||
"Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With")
|
||||
c.Set("Access-Control-Allow-Methods", "PUT, DELETE, GET")
|
||||
return c.Next()
|
||||
}
|
||||
|
||||
func main() {
|
||||
app := fiber.New()
|
||||
app := fiber.New(fiber.Config{
|
||||
DisableStartupMessage: true,
|
||||
})
|
||||
app.Use(CorsMiddleware)
|
||||
|
||||
db, err := sql.Open("sqlite3", "data.db")
|
||||
|
@ -4,9 +4,13 @@ import (
|
||||
"database/sql"
|
||||
"log"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/gofiber/fiber/v2"
|
||||
"github.com/gorilla/feeds"
|
||||
"github.com/ngn13/website/api/util"
|
||||
)
|
||||
|
||||
@ -129,6 +133,76 @@ func GetPost(c *fiber.Ctx) error{
|
||||
})
|
||||
}
|
||||
|
||||
func GetFeed(c *fiber.Ctx) error{
|
||||
var posts []Post = []Post{}
|
||||
rows, err := DB.Query("SELECT * FROM posts")
|
||||
if util.ErrorCheck(err, c) {
|
||||
return util.ErrServer(c)
|
||||
}
|
||||
|
||||
for rows.Next() {
|
||||
var post Post
|
||||
err := PostFromRow(&post, rows)
|
||||
|
||||
if util.ErrorCheck(err, c) {
|
||||
return util.ErrServer(c)
|
||||
}
|
||||
|
||||
if post.Public == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
posts = append(posts, post)
|
||||
}
|
||||
rows.Close()
|
||||
|
||||
|
||||
blogurl, err := url.JoinPath(os.Getenv("URL"), "/blog")
|
||||
if err != nil {
|
||||
log.Printf("Failed to create the blog URL: %s\n", err.Error())
|
||||
return c.JSON(fiber.Map{"error": "Server error"})
|
||||
}
|
||||
|
||||
feed := &feeds.Feed{
|
||||
Title: "[ngn] | blog",
|
||||
Link: &feeds.Link{Href: blogurl},
|
||||
Description: "ngn's personal blog",
|
||||
Author: &feeds.Author{Name: "ngn", Email: "ngn@ngn.tf"},
|
||||
Created: time.Now(),
|
||||
}
|
||||
|
||||
feed.Items = []*feeds.Item{}
|
||||
for _, p := range posts {
|
||||
purl, err := url.JoinPath(blogurl, p.ID)
|
||||
if err != nil {
|
||||
log.Printf("Failed to create URL for '%s': %s\n", p.ID, err.Error())
|
||||
continue
|
||||
}
|
||||
|
||||
parsed, err := time.Parse("02/01/06", p.Date)
|
||||
if err != nil {
|
||||
log.Printf("Failed to parse time for '%s': %s\n", p.ID, err.Error())
|
||||
continue
|
||||
}
|
||||
|
||||
feed.Items = append(feed.Items, &feeds.Item{
|
||||
Title: p.Title,
|
||||
Link: &feeds.Link{Href: purl},
|
||||
Author: &feeds.Author{Name: p.Author},
|
||||
Created: parsed,
|
||||
})
|
||||
}
|
||||
|
||||
atom, err := feed.ToAtom()
|
||||
if err != nil {
|
||||
log.Printf("Failed to create atom feed: %s", err.Error())
|
||||
return c.JSON(fiber.Map{"error": "Server error"})
|
||||
}
|
||||
|
||||
c.Set("Content-Type", "application/atom+xml")
|
||||
return c.Send([]byte(atom))
|
||||
}
|
||||
|
||||
func SumPost(c *fiber.Ctx) error{
|
||||
var posts []Post = []Post{}
|
||||
rows, err := DB.Query("SELECT * FROM posts")
|
||||
|
@ -19,6 +19,7 @@ func Setup(app *fiber.App, db *sql.DB){
|
||||
})
|
||||
|
||||
// blog routes
|
||||
app.Get("/blog/feed", GetFeed)
|
||||
app.Get("/blog/sum", SumPost)
|
||||
app.Get("/blog/get", GetPost)
|
||||
app.Get("/blog/vote/set", VoteSet)
|
||||
|
Loading…
x
Reference in New Issue
Block a user