(search) Turn relative feed URLs absolute when dealing with RSS/Atom item URLs

This commit is contained in:
Viktor Lofgren 2025-01-06 16:56:24 +01:00
parent 6a6318d04c
commit b5469bd8a1
2 changed files with 25 additions and 4 deletions

View File

@ -85,8 +85,16 @@ public class SearchFrontPageService {
title = "[Missing Title]";
}
String url = item.getUrl();
if (url.startsWith("/")) { // relative URL
url = "https://" + feed.getDomain() + url;
} else if (!url.contains(":")) { // no schema, assume relative URL
url = "https://" + feed.getDomain() + "/" + url;
}
itemsAll.add(
new NewsItem(title, item.getUrl(), feed.getDomain(), item.getDescription(), item.getDate())
new NewsItem(title, url, feed.getDomain(), item.getDescription(), item.getDate())
);
}
}

View File

@ -381,11 +381,23 @@ public class SearchSiteInfoService {
public record FeedItem(String title, String date, String description, String url) {
public FeedItem(RpcFeedItem rpcFeedItem) {
public FeedItem(String domain, RpcFeedItem rpcFeedItem) {
this(rpcFeedItem.getTitle(),
rpcFeedItem.getDate(),
rpcFeedItem.getDescription(),
rpcFeedItem.getUrl());
absoluteFeedUrl(domain, rpcFeedItem.getUrl())
);
}
private static String absoluteFeedUrl(String domain, String url) {
if (url.startsWith("/")) { // relative URL
url = "https://" + domain + url;
} else if (!url.contains(":")) { // no schema, assume relative URL
url = "https://" + domain + "/" + url;
}
return url;
}
public String pubDay() { // Extract the date from an ISO style date string
@ -412,8 +424,9 @@ public class SearchSiteInfoService {
this(rpcFeedItems.getDomain(),
rpcFeedItems.getFeedUrl(),
rpcFeedItems.getUpdated(),
rpcFeedItems.getItemsList().stream().map(FeedItem::new).toList());
rpcFeedItems.getItemsList().stream().map(item -> new FeedItem(rpcFeedItems.getDomain(), item)).toList());
}
}
public record ReportDomain(