diff --git a/package-lock.json b/package-lock.json
index e68eae1..25ea069 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5760,6 +5760,30 @@
"inherits": "^2.0.1"
}
},
+ "rss": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/rss/-/rss-1.2.2.tgz",
+ "integrity": "sha1-UKFpiHYTgTOnT5oF0r3I240nqSE=",
+ "requires": {
+ "mime-types": "2.1.13",
+ "xml": "1.0.1"
+ },
+ "dependencies": {
+ "mime-db": {
+ "version": "1.25.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.25.0.tgz",
+ "integrity": "sha1-wY29fHOl2/b0SgJNwNFloeexw5I="
+ },
+ "mime-types": {
+ "version": "2.1.13",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz",
+ "integrity": "sha1-4HqqnGxrmnyjASxpADrSWjnpKog=",
+ "requires": {
+ "mime-db": "~1.25.0"
+ }
+ }
+ }
+ },
"run-queue": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
@@ -7205,6 +7229,11 @@
"resolved": "https://registry.npmjs.org/x-xss-protection/-/x-xss-protection-1.3.0.tgz",
"integrity": "sha512-kpyBI9TlVipZO4diReZMAHWtS0MMa/7Kgx8hwG/EuZLiA6sg4Ah/4TRdASHhRRN3boobzcYgFRUFSgHRge6Qhg=="
},
+ "xml": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz",
+ "integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU="
+ },
"xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
diff --git a/package.json b/package.json
index e5b9a03..9e3aa93 100644
--- a/package.json
+++ b/package.json
@@ -29,6 +29,7 @@
"passport": "^0.4.1",
"passport-local": "^1.0.0",
"rate-limiter-flexible": "^2.1.10",
+ "rss": "^1.2.2",
"session-file-store": "^1.4.0",
"useragent": "^2.3.0"
},
diff --git a/src/routes/rss.xml.js b/src/routes/rss.xml.js
new file mode 100644
index 0000000..5829541
--- /dev/null
+++ b/src/routes/rss.xml.js
@@ -0,0 +1,30 @@
+import RSS from 'rss';
+import Article from '../models/article.js';
+
+export async function get(req, res)
+{
+ let feed = new RSS();
+ let articles = await Article.find().populate({
+ path: 'author',
+ select: 'realname avatar'
+ }).populate({
+ path: 'category'
+ });
+
+ for (let article of articles) {
+ feed.item({
+ title: article.title,
+ description: article.html,
+ url: `http://howfeed.biz/a/${article.slug}`,
+ categories: [ article.category.name ],
+ author: article.author.realname,
+ date: article.created_at,
+ enclosure: {
+ url: `http://howfeed.biz/a/${article.image}`
+ }
+ });
+ }
+
+ res.writeHead(200);
+ res.end(feed.xml());
+}
diff --git a/src/template.html b/src/template.html
index b580f32..3eb2b63 100644
--- a/src/template.html
+++ b/src/template.html
@@ -9,6 +9,7 @@
+
%sapper.styles%
%sapper.head%