diff --git a/src/main/java/me/kavin/piped/ServerLauncher.java b/src/main/java/me/kavin/piped/ServerLauncher.java index 4336d30..d3be310 100644 --- a/src/main/java/me/kavin/piped/ServerLauncher.java +++ b/src/main/java/me/kavin/piped/ServerLauncher.java @@ -243,6 +243,13 @@ public class ServerLauncher extends MultithreadedHttpServerLauncher { } catch (Exception e) { return getErrorResponse(e); } + })).map(GET, "/feed/rss", AsyncServlet.ofBlocking(executor, request -> { + try { + return getJsonResponse(ResponseHelper.feedResponseRSS(request.getQueryParameter("authToken")), + "public, s-maxage=120"); + } catch (Exception e) { + return getErrorResponse(e); + } })).map(POST, "/import", AsyncServlet.ofBlocking(executor, request -> { try { String[] subscriptions = Constants.mapper.readValue(request.loadBody().getResult().asArray(), diff --git a/src/main/java/me/kavin/piped/utils/ResponseHelper.java b/src/main/java/me/kavin/piped/utils/ResponseHelper.java index 569eef3..f9ebfe2 100644 --- a/src/main/java/me/kavin/piped/utils/ResponseHelper.java +++ b/src/main/java/me/kavin/piped/utils/ResponseHelper.java @@ -12,6 +12,7 @@ import java.nio.charset.StandardCharsets; import java.security.NoSuchAlgorithmException; import java.security.spec.InvalidKeySpecException; import java.util.Collections; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.concurrent.CompletableFuture; @@ -51,6 +52,8 @@ import com.rometools.rome.feed.synd.SyndEntry; import com.rometools.rome.feed.synd.SyndEntryImpl; import com.rometools.rome.feed.synd.SyndFeed; import com.rometools.rome.feed.synd.SyndFeedImpl; +import com.rometools.rome.feed.synd.SyndPerson; +import com.rometools.rome.feed.synd.SyndPersonImpl; import com.rometools.rome.io.FeedException; import com.rometools.rome.io.SyndFeedOutput; @@ -706,6 +709,59 @@ public class ResponseHelper { } + public static final byte[] feedResponseRSS(String session) + throws IOException, NoSuchAlgorithmException, InvalidKeySpecException, FeedException { + + Session s = DatabaseSessionFactory.createSession(); + + User user = DatabaseHelper.getUserFromSessionWithSubscribed(s, session); + + if (user != null) { + + SyndFeed feed = new SyndFeedImpl(); + feed.setFeedType("atom_1.0"); + feed.setTitle("Piped - Feed"); + feed.setDescription(String.format("Piped's RSS subscription feed for %s.", user.getUsername())); + feed.setUri("https://piped.kavin.rocks/feed"); + + if (user.getSubscribed() != null && !user.getSubscribed().isEmpty()) { + + List