1// SPDX-FileCopyrightText: Amolith <amolith@secluded.site>
2//
3// SPDX-License-Identifier: Apache-2.0
4
5package rss
6
7import (
8 "fmt"
9 "strings"
10 "time"
11
12 "github.com/microcosm-cc/bluemonday"
13
14 "github.com/mmcdole/gofeed"
15)
16
17type Release struct {
18 Tag string
19 Content string
20 URL string
21 Date time.Time
22}
23
24var (
25 bmUGC = bluemonday.UGCPolicy()
26 bmStrict = bluemonday.StrictPolicy()
27)
28
29func GetReleases(feedURL string) ([]Release, error) {
30 fp := gofeed.NewParser()
31
32 feed, err := fp.ParseURL(strings.TrimSuffix(feedURL, "/") + "/releases.atom")
33 if err != nil {
34 fmt.Println(err)
35 return nil, err
36 }
37
38 releases := make([]Release, 0)
39
40 for _, item := range feed.Items {
41 releases = append(releases, Release{
42 Tag: bmStrict.Sanitize(item.Title),
43 Content: bmUGC.Sanitize(item.Content),
44 URL: bmStrict.Sanitize(item.Link),
45 Date: *item.PublishedParsed,
46 })
47 }
48
49 return releases, nil
50}