From 2125bc2eabeda1f5d900426478daca36d4025a5a Mon Sep 17 00:00:00 2001 From: b1ek Date: Mon, 27 Feb 2023 11:04:47 +1000 Subject: [PATCH] guestbook rss feed --- package.json | 3 ++- routes/guestbook.js | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index c6cfaea..f50299d 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "redis": "^4.6.4", "sequelize": "^7.0.0-alpha.9", "totp-generator": "^0.0.14", - "unit.js": "^2.1.1" + "unit.js": "^2.1.1", + "xml": "^1.0.1" } } diff --git a/routes/guestbook.js b/routes/guestbook.js index ebb8d3a..eda4606 100644 --- a/routes/guestbook.js +++ b/routes/guestbook.js @@ -1,6 +1,7 @@ const Helpers = require('../helpers'); const Sequelize = require('../models'); const html_escape = require('html-escaper'); +const xml = require('xml'); const send_error = async (res, error) => { return res.redirect('/guestbook?error=' + encodeURIComponent(error)); @@ -133,8 +134,47 @@ async function del(req, res, next) { catch (err) { next(err); } } +async function rss(req, res) { + const data = (await Sequelize.Guestbook.findAndCountAll({where: {hidden: false}})).rows; + + let rss = [{ + rss: [{ + _attr: {version: '2.0'} + }, + { + channel: [ + {title: 'Guestbook'}, + {link: 'http://blek.codes/guestbook'}, + {description: 'Alice\'s guestbook'}, + ] + }] + }] + + for (const record of data) { + console.log(record); + if (record.hidemail) + record.email = ('?'.repeat(record.email.split('@')[0].length)) + '@?.?'; + + rss[0].rss[1].channel.push({ + item: [ + {description: record.text}, + {author: `"${record.name}"${record.email ? (' at ' + record.email) : ''}`}, + {link: req.protocol + '://' + req.get('host') + '/guestbook#gb_entry_' + record.id} + ] + }); + } + + let ident = 4; + if (req.query.ident) ident = req.query.ident; + + res.header('Content-Type', 'text/plain'); + res.send(xml(rss, {indent: ' '.repeat(ident)})); + return; +} + module.exports = (router) => { router.get('/guestbook', handler); router.post('/guestbook/submit', submit); router.get('/guestbook/del/:id', del); + router.get('/guestbook.rss', rss); } \ No newline at end of file