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}