aboutsummaryrefslogtreecommitdiffhomepage
path: root/reader/json
diff options
context:
space:
mode:
authorGravatar Frédéric Guillot <fred@miniflux.net>2017-12-13 20:16:15 -0800
committerGravatar Frédéric Guillot <fred@miniflux.net>2017-12-13 20:16:15 -0800
commit827683ab59131ec38ed7cfa268bcaa6dc77d1412 (patch)
tree8461fa67142378b050fde4ee39d393e18ab71aaf /reader/json
parent84d912c9794eaaef0f06638d9d23716f4e02b42f (diff)
Make sure that item URL are absolute
Diffstat (limited to 'reader/json')
-rw-r--r--reader/json/json.go6
-rw-r--r--reader/json/parser_test.go25
2 files changed, 31 insertions, 0 deletions
diff --git a/reader/json/json.go b/reader/json/json.go
index 5924916..ad92068 100644
--- a/reader/json/json.go
+++ b/reader/json/json.go
@@ -13,6 +13,7 @@ import (
"github.com/miniflux/miniflux/model"
"github.com/miniflux/miniflux/reader/date"
"github.com/miniflux/miniflux/reader/sanitizer"
+ "github.com/miniflux/miniflux/url"
)
type jsonFeed struct {
@@ -66,6 +67,11 @@ func (j *jsonFeed) Transform() *model.Feed {
for _, item := range j.Items {
entry := item.Transform()
+ entryURL, err := url.AbsoluteURL(feed.SiteURL, entry.URL)
+ if err == nil {
+ entry.URL = entryURL
+ }
+
if entry.Author == "" {
entry.Author = j.GetAuthor()
}
diff --git a/reader/json/parser_test.go b/reader/json/parser_test.go
index e6fa9ed..a3d5b5b 100644
--- a/reader/json/parser_test.go
+++ b/reader/json/parser_test.go
@@ -174,6 +174,31 @@ func TestParsePodcast(t *testing.T) {
}
}
+func TestParseFeedWithRelativeURL(t *testing.T) {
+ data := `{
+ "version": "https://jsonfeed.org/version/1",
+ "title": "Example",
+ "home_page_url": "https://example.org/",
+ "feed_url": "https://example.org/feed.json",
+ "items": [
+ {
+ "id": "2347259",
+ "url": "something.html",
+ "date_published": "2016-02-09T14:22:00-07:00"
+ }
+ ]
+ }`
+
+ feed, err := Parse(bytes.NewBufferString(data))
+ if err != nil {
+ t.Error(err)
+ }
+
+ if feed.Entries[0].URL != "https://example.org/something.html" {
+ t.Errorf("Incorrect entry URL, got: %s", feed.Entries[0].URL)
+ }
+}
+
func TestParseAuthor(t *testing.T) {
data := `{
"version": "https://jsonfeed.org/version/1",