Merge remote-tracking branch 'origin/main' into main

This commit is contained in:
Yarmo Mackenbach 2020-10-21 10:21:12 +02:00
commit f457dc0dfc
5 changed files with 74 additions and 12 deletions

3
.gitignore vendored
View File

@ -1,2 +1,3 @@
.well-known
node_modules
node_modules
db.json

View File

@ -1,6 +1,7 @@
const express = require('express')
const app = express()
const fs = require('fs')
const util = require('./server/util')
require('dotenv').config()
app.set('env', process.env.NODE_ENV || "production")
@ -29,6 +30,8 @@ app.use('/', require('./routes/static'))
app.use('/feed', require('./routes/feed'))
app.use('/rss', require('./routes/feed'))
util.updateDB()
app.listen(app.get('port'), () => {
console.log(`Node server listening at http://localhost:${app.get('port')}`)
})

View File

@ -1,5 +1,5 @@
{
"ignore": [],
"ignore": ["db.json"],
"env": {
"NODE_ENV": "development"
}

View File

@ -55,4 +55,9 @@ router.get('/pgp', (req, res) => {
res.render('pgp', { title: 'PGP — yarmo.eu' })
})
// router.get('/updateDB', async (req, res) => {
// const response = await util.updateDB()
// res.send(response)
// })
module.exports = router

View File

@ -9,6 +9,13 @@ const md = require('markdown-it')({ typographer: true })
const yamlFront = require('yaml-front-matter')
const { DateTime } = require('luxon')
const Feed = require('feed').Feed
const low = require('lowdb')
const FileSync = require('lowdb/adapters/FileSync')
const adapter = new FileSync('db.json')
const db = low(adapter)
db.defaults({ posts: [] })
.write()
md.use(require("markdown-it-anchor"), {
"level": 2,
@ -34,6 +41,15 @@ const getBlogPosts = async (opts) => {
if (!opts) { opts = {} }
opts.publishedOnly = 'publishedOnly' in opts ? opts.publishedOnly : true
return db._.reverse(db.get('posts')
.filter({ type: 'blog', published: opts.publishedOnly })
.sortBy('date')
.value())
}
const getBlogPostsFromFiles = async (opts) => {
if (!opts) { opts = {} }
opts.publishedOnly = 'publishedOnly' in opts ? opts.publishedOnly : true
let data = []
for await (const f of getFiles(path.join(__dirname, '../', 'content', 'blog'))) {
const rawContent = fs.readFileSync(f, 'utf8')
@ -62,6 +78,15 @@ const getNotes = async (opts) => {
if (!opts) { opts = {} }
opts.publishedOnly = 'publishedOnly' in opts ? opts.publishedOnly : true
return db._.reverse(db.get('posts')
.filter({ type: 'note', published: opts.publishedOnly })
.sortBy('date')
.value())
}
const getNotesFromFiles = async (opts) => {
if (!opts) { opts = {} }
opts.publishedOnly = 'publishedOnly' in opts ? opts.publishedOnly : true
let data = []
for await (const f of getFiles(path.join(__dirname, '../', 'content', 'notes'))) {
const rawContent = fs.readFileSync(f, 'utf8')
@ -87,15 +112,19 @@ const getNotes = async (opts) => {
}
const getPost = async (slug) => {
let post = null, posts = await getBlogPosts()
posts = _.filter(posts, (p) => { return slug == p.slug })
post = posts.length > 0 ? posts[0] : null
// let post = null, posts = await getBlogPosts()
// posts = _.filter(posts, (p) => { return slug == p.slug })
// post = posts.length > 0 ? posts[0] : null
//
// if (!post) {
// posts = await getNotes()
// posts = _.filter(posts, (p) => { return slug == p.slug })
// post = posts.length > 0 ? posts[0] : null
// }
if (!post) {
posts = await getNotes()
posts = _.filter(posts, (p) => { return slug == p.slug })
post = posts.length > 0 ? posts[0] : null
}
let post = db.get('posts')
.find({ slug: slug })
.value()
return post
}
@ -111,7 +140,7 @@ const getWebmentions = async (url) => {
x.time = DateTime.fromISO(x.created_at).setLocale("en").setZone('utc').toLocaleString(DateTime.TIME_24_WITH_SHORT_OFFSET)
return x
})
return data
}
@ -196,11 +225,35 @@ const getRSS = async (opts) => {
return response
}
const updateDB = async () => {
db.read()
let data
data = await getBlogPostsFromFiles({ publishedOnly: false })
data = data.concat(await getNotesFromFiles({ publishedOnly: false }))
data.forEach((item, i) => {
if (db.get('posts').find({ slug: item.slug }).size().value() == 0) {
db.get('posts')
.push(item)
.write()
} else {
db.get('posts')
.find({ slug: item.slug })
.assign(item)
.write()
}
})
}
module.exports = {
getFiles: getFiles,
getBlogPosts: getBlogPosts,
getBlogPostsFromFiles: getBlogPostsFromFiles,
getNotes: getNotes,
getNotesFromFiles: getNotesFromFiles,
getPost: getPost,
getWebmentions: getWebmentions,
getRSS: getRSS
getRSS: getRSS,
updateDB: updateDB
}