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

1
.gitignore vendored
View File

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

View File

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

View File

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

View File

@ -9,6 +9,13 @@ const md = require('markdown-it')({ typographer: true })
const yamlFront = require('yaml-front-matter') const yamlFront = require('yaml-front-matter')
const { DateTime } = require('luxon') const { DateTime } = require('luxon')
const Feed = require('feed').Feed 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"), { md.use(require("markdown-it-anchor"), {
"level": 2, "level": 2,
@ -34,6 +41,15 @@ const getBlogPosts = async (opts) => {
if (!opts) { opts = {} } if (!opts) { opts = {} }
opts.publishedOnly = 'publishedOnly' in opts ? opts.publishedOnly : true 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 = [] let data = []
for await (const f of getFiles(path.join(__dirname, '../', 'content', 'blog'))) { for await (const f of getFiles(path.join(__dirname, '../', 'content', 'blog'))) {
const rawContent = fs.readFileSync(f, 'utf8') const rawContent = fs.readFileSync(f, 'utf8')
@ -62,6 +78,15 @@ const getNotes = async (opts) => {
if (!opts) { opts = {} } if (!opts) { opts = {} }
opts.publishedOnly = 'publishedOnly' in opts ? opts.publishedOnly : true 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 = [] let data = []
for await (const f of getFiles(path.join(__dirname, '../', 'content', 'notes'))) { for await (const f of getFiles(path.join(__dirname, '../', 'content', 'notes'))) {
const rawContent = fs.readFileSync(f, 'utf8') const rawContent = fs.readFileSync(f, 'utf8')
@ -87,15 +112,19 @@ const getNotes = async (opts) => {
} }
const getPost = async (slug) => { const getPost = async (slug) => {
let post = null, posts = await getBlogPosts() // let post = null, posts = await getBlogPosts()
posts = _.filter(posts, (p) => { return slug == p.slug }) // posts = _.filter(posts, (p) => { return slug == p.slug })
post = posts.length > 0 ? posts[0] : null // 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) { let post = db.get('posts')
posts = await getNotes() .find({ slug: slug })
posts = _.filter(posts, (p) => { return slug == p.slug }) .value()
post = posts.length > 0 ? posts[0] : null
}
return post return post
} }
@ -196,11 +225,35 @@ const getRSS = async (opts) => {
return response 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 = { module.exports = {
getFiles: getFiles, getFiles: getFiles,
getBlogPosts: getBlogPosts, getBlogPosts: getBlogPosts,
getBlogPostsFromFiles: getBlogPostsFromFiles,
getNotes: getNotes, getNotes: getNotes,
getNotesFromFiles: getNotesFromFiles,
getPost: getPost, getPost: getPost,
getWebmentions: getWebmentions, getWebmentions: getWebmentions,
getRSS: getRSS getRSS: getRSS,
updateDB: updateDB
} }