@@ -6,10 +6,19 @@ const app = require('express')()
66const bodyParser = require ( 'body-parser' ) . json ( )
77const port = 3000
88
9- const axios = require ( 'axios' ) . default
10- const { JSDOM } = require ( 'jsdom' )
9+ // HTTP client
10+ const axios = require ( 'axios' ) . default
1111
12- const readability = require ( 'readability' )
12+ // Readability, dom and dom purify
13+ const { JSDOM } = require ( 'jsdom' )
14+ const readability = require ( 'readability' )
15+ const createDOMPurify = require ( 'dompurify' )
16+ const DOMPurify = createDOMPurify ( ( new JSDOM ( '' ) ) . window )
17+
18+ // Not too happy to allow iframe, but it's the only way to get youtube vids
19+ const domPurifyOptions = {
20+ ADD_TAGS : [ 'iframe' , 'video' ]
21+ }
1322
1423app . get ( '/' , ( req , res ) => {
1524 return res
@@ -37,8 +46,7 @@ app.post('/', bodyParser, (req, res) => {
3746 axios
3847 . get ( url )
3948 . then ( ( response ) => {
40- const dom = new JSDOM ( response . data )
41-
49+ const dom = new JSDOM ( response . data )
4250 const parsed = new readability ( dom . window . document , { } ) . parse ( )
4351
4452 console . log ( 'Fetched and parsed ' + url + ' successfully' )
@@ -47,7 +55,7 @@ app.post('/', bodyParser, (req, res) => {
4755 . status ( 200 )
4856 . send ( {
4957 url : url ,
50- content : parsed . content
58+ content : DOMPurify . sanitize ( parsed . content , domPurifyOptions )
5159 } )
5260 . end ( )
5361
0 commit comments