add ability to add feeds on the fly
authorxangelo <me@xangelo.ca>
Fri, 26 Jan 2024 18:58:54 +0000 (13:58 -0500)
committerxangelo <me@xangelo.ca>
Fri, 26 Jan 2024 18:58:54 +0000 (13:58 -0500)
.env.sample
src/server.ts

index 7e6c7eadcd377b3d2d155b5348f7119d03c55cf2..ec012673123de8eb59fbfbcf8de6cd16380cbc7d 100644 (file)
@@ -1,2 +1,3 @@
 API_PORT=9191
 FEED_REFRESH_RATE=1
+ADMIN_KEY=test
index f250f001eaf1571d1d9810d9c5c89e00a71d44ad..9f2279722ead176acec38351d502048a32e51f10 100644 (file)
@@ -9,7 +9,7 @@ import { renderFeedItem, renderFeedItemHeader } from './views';
 const db = knex({
   client: 'better-sqlite3',
   connection: {
-    filename: join(__dirname, '..', 'data.db')
+    filename: join('./data.db')
   }
 });
 const parser = new Parser();
@@ -64,6 +64,7 @@ async function queryFeeds() {
 }
 
 app.use(express.static(join(__dirname, 'public')));
+app.use(express.json());
 
 app.use((req, res, next) => {
   console.log(`${req.method}: ${req.url}`);
@@ -128,6 +129,29 @@ app.get('/river', async (req, res) => {
     }).join("\n"));
 });
 
+app.post('/feeds', async (req, res) => {
+  if(req.body.key !== process.env.ADMIN_KEY) {
+    res.sendStatus(400).end();
+    return;
+  }
+  const now = new Date();
+  const feed = {
+    url: req.body.url,
+    title: req.body.title,
+    favicon: req.body.favicon,
+    created_at: now,
+    updated_at: now
+  };
+
+  const rows = await db('feeds').insert(feed).onConflict().ignore().returning('*');
+
+  res.json(rows);
+});
+
+app.get('/feeds', async (req, res) => {
+  res.json(await db.select('*').from('feeds').orderBy('created_at'));
+})
+
 app.listen(process.env.API_PORT, () => {
   console.log(`Listening on port ${process.env.API_PORT}`);
   console.log(`Feed refresh rate: ${(Number(process.env.FEED_REFRESH_RATE) + 1)}m`);