Improve error handling & security
This commit is contained in:
parent
3219eb8813
commit
1a1ff23107
59
index.js
59
index.js
@ -1,11 +1,3 @@
|
|||||||
// const fetch = require('node-fetch')
|
|
||||||
// const config = require('./config.js')
|
|
||||||
// const Path = require('path')
|
|
||||||
// const { writeFile } = require('fs/promises')
|
|
||||||
|
|
||||||
// let cache = require('./cache.json')
|
|
||||||
// const { JSDOM } = require('jsdom')
|
|
||||||
|
|
||||||
import fetch from "node-fetch"
|
import fetch from "node-fetch"
|
||||||
import Path from "path"
|
import Path from "path"
|
||||||
import FS from "fs/promises"
|
import FS from "fs/promises"
|
||||||
@ -47,8 +39,7 @@ const handleNitterUser = async user => {
|
|||||||
console.warn(`Failed to fetch ${user} from ${source}`)
|
console.warn(`Failed to fetch ${user} from ${source}`)
|
||||||
index++
|
index++
|
||||||
} else {
|
} else {
|
||||||
console.error(err)
|
throw err
|
||||||
break
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -166,7 +157,7 @@ const processTumblr = (rss, user) => {
|
|||||||
|
|
||||||
const oneDay = 1000 * 60 * 60 * 24
|
const oneDay = 1000 * 60 * 60 * 24
|
||||||
|
|
||||||
const printFeed = async (sources, directory, header, viewOptions) => {
|
const printFeed = async (sources, directory, header, viewOptions, error) => {
|
||||||
// Coalate
|
// Coalate
|
||||||
let feed = []
|
let feed = []
|
||||||
let tooLongAgo = viewOptions.tooLongAgo ?
|
let tooLongAgo = viewOptions.tooLongAgo ?
|
||||||
@ -214,7 +205,15 @@ const printFeed = async (sources, directory, header, viewOptions) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(pages.length == 0) {
|
if(pages.length == 0) {
|
||||||
writePage(0, renderPage('No posts', [], header, 'No posts available') )
|
let message = 'No posts available'
|
||||||
|
|
||||||
|
if(error) {
|
||||||
|
// Put in an iframe to prevent potential XSS through response body? Who knows.
|
||||||
|
message += `<br><br>
|
||||||
|
<iframe src="data:text/plain,${encodeURIComponent(error.stack)}" style="width: 100%;"></iframe>`
|
||||||
|
}
|
||||||
|
|
||||||
|
writePage(0, renderPage('No posts', [], header, message) )
|
||||||
}
|
}
|
||||||
|
|
||||||
return Promise.all(promises)
|
return Promise.all(promises)
|
||||||
@ -291,8 +290,12 @@ ${footer}
|
|||||||
return html
|
return html
|
||||||
}
|
}
|
||||||
|
|
||||||
const renderImage = image => `\
|
const renderImage = image => {
|
||||||
<a href="${image}"><img src="${image}" loading="lazy"></img></a>`
|
let { href } = new URL(image)
|
||||||
|
|
||||||
|
return `\
|
||||||
|
<a href="${href}"><img src="${href}" loading="lazy"></img></a>`
|
||||||
|
}
|
||||||
|
|
||||||
const main = async () => {
|
const main = async () => {
|
||||||
let promises = []
|
let promises = []
|
||||||
@ -306,18 +309,20 @@ const main = async () => {
|
|||||||
let feed = config.feeds[feedName]
|
let feed = config.feeds[feedName]
|
||||||
let feedSources = []
|
let feedSources = []
|
||||||
|
|
||||||
const subscribe = (postPromise, type, name) =>
|
const subscribe = (postPromise, type, name) => {
|
||||||
postPromise
|
let source = { type, name, link: Path.join(type, name) }
|
||||||
.catch(error => console.error(error) )
|
|
||||||
|
return postPromise
|
||||||
|
.catch(error => {
|
||||||
|
source.error = error
|
||||||
|
console.error(error)
|
||||||
|
})
|
||||||
.then(posts => {
|
.then(posts => {
|
||||||
feedSources.push(posts)
|
feedSources.push(posts)
|
||||||
sources.push({
|
source.posts = posts
|
||||||
type,
|
sources.push(source)
|
||||||
name,
|
|
||||||
link: Path.join(type, name),
|
|
||||||
posts
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
|
||||||
if(feed.nitter) {
|
if(feed.nitter) {
|
||||||
for(let user of feed.nitter) {
|
for(let user of feed.nitter) {
|
||||||
@ -354,8 +359,10 @@ const main = async () => {
|
|||||||
let link = buildLink(root + page.link + '/')
|
let link = buildLink(root + page.link + '/')
|
||||||
let extra = ''
|
let extra = ''
|
||||||
|
|
||||||
if(page.posts === undefined) {
|
if(page.error) {
|
||||||
extra += ' (missing)'
|
extra += ' (errored)'
|
||||||
|
} else if (page.posts.length == 0) {
|
||||||
|
extra += ' (empty)'
|
||||||
}
|
}
|
||||||
|
|
||||||
return `<li><a href="${link}">${name}</a>${extra}</li>`
|
return `<li><a href="${link}">${name}</a>${extra}</li>`
|
||||||
@ -393,7 +400,7 @@ ${sources.map(source => renderEntry(source)).join('\n')}
|
|||||||
console.log('Writing...')
|
console.log('Writing...')
|
||||||
for(let source of sources) {
|
for(let source of sources) {
|
||||||
wait(
|
wait(
|
||||||
printFeed([ source.posts ], Path.join('out', source.link), navs[2], config.sourceView)
|
printFeed([ source.posts ], Path.join('out', source.link), navs[2], config.sourceView, source.error)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
for(let feed of feeds) {
|
for(let feed of feeds) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user