wiki-server 0.19.1 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/AUTHORS.txt CHANGED
@@ -17,3 +17,4 @@ Peter deHaan <pdehaan@users.noreply.github.com>
17
17
  winckell benjamin <winckell.benjamin.isart@gmail.com>
18
18
  Eric Dobbs <eric@dobbse.net>
19
19
  Joshua Benuck <joshua_benuck@yahoo.com>
20
+ Tom Lieber <tom@alltom.com>
@@ -28,7 +28,7 @@ module.exports = (argv) ->
28
28
  argv.status or= path.join(argv.data, 'status')
29
29
  argv.assets or= path.join(argv.data, 'assets')
30
30
  argv.recycler or= path.join(argv.data, 'recycle')
31
- argv.url or= 'http://localhost' + (':' + argv.port) unless argv.port is 80
31
+ argv.url or= 'http://localhost' + (if argv.port is 80 then '' else ':' + argv.port)
32
32
  argv.id or= path.join(argv.status, 'owner.json')
33
33
  argv.uploadLimit or= '5mb'
34
34
  argv.cookieSecret or= require('crypto').randomBytes(64).toString('hex')
package/lib/server.coffee CHANGED
@@ -22,6 +22,7 @@
22
22
  fs = require 'fs'
23
23
  path = require 'path'
24
24
  http = require 'http'
25
+ url = require 'url'
25
26
 
26
27
  # From npm
27
28
  mkdirp = require 'mkdirp'
@@ -31,6 +32,7 @@ glob = require 'glob'
31
32
  async = require 'async'
32
33
  f = require('flates')
33
34
  sanitize = require '@mapbox/sanitize-caja'
35
+ fetch = require 'node-fetch'
34
36
 
35
37
  # Express 4 middleware
36
38
  logger = require 'morgan'
@@ -139,33 +141,24 @@ module.exports = exports = (argv) ->
139
141
 
140
142
 
141
143
  remoteGet = (remote, slug, cb) ->
142
- [host, port] = remote.split(':')
143
- getopts = {
144
- host: host
145
- port: port or 80
146
- path: "/#{slug}.json"
147
- }
148
- # TODO: This needs more robust error handling, just trying to
149
- # keep it from taking down the server.
150
- http.get(getopts, (resp) ->
151
- responsedata = ''
152
- resp.on 'data', (chunk) ->
153
- responsedata += chunk
154
-
155
- resp.on 'error', (e) ->
156
- cb(e, 'Page not found', 404)
157
-
158
- resp.on 'end', ->
159
- if resp.statusCode == 404
160
- cb(null, 'Page not found', 404)
161
- else if responsedata
162
- cb(null, JSON.parse(responsedata), resp.statusCode)
163
- else
164
- cb(null, 'Page not found', 404)
165
-
166
- ).on 'error', (e) ->
167
- cb(e, 'Page not found', 404)
168
-
144
+ # assume http, as we know no better at this point and we need to specify a protocol.
145
+ remoteURL = new URL("http://#{remote}/#{slug}.json").toString()
146
+ # set a two second timeout
147
+ fetch(remoteURL, {timeout: 2000})
148
+ .then (res) ->
149
+ if res.ok
150
+ return res
151
+ throw new Error(res.statusText)
152
+ .then (res) ->
153
+ return res.json()
154
+ .then (json) ->
155
+ cb(null, json, 200)
156
+ .catch (err) ->
157
+ console.error('Unable to fetch remote resource', remote, slug, err)
158
+ cb(err, 'Page not found', 404)
159
+
160
+
161
+
169
162
  #### Express configuration ####
170
163
  # Set up all the standard express server options,
171
164
  # including hbs to use handlebars/mustache templates
@@ -233,7 +226,7 @@ module.exports = exports = (argv) ->
233
226
  plugins.map (plugin) ->
234
227
  pluginName = plugin.slice(12, -7)
235
228
  pluginPath = '/plugins/' + pluginName
236
- app.use(pluginPath, express.static(path.join(argv.packageDir, plugin), staticPathOptions))
229
+ app.use(pluginPath, cors, express.static(path.join(argv.packageDir, plugin), staticPathOptions))
237
230
 
238
231
  # Add static routes to the security client.
239
232
  if argv.security != './security'
@@ -306,7 +299,7 @@ module.exports = exports = (argv) ->
306
299
  info.pages.push(pageDiv)
307
300
  res.render('static.html', info)
308
301
 
309
- app.get ///([a-z0-9-]+)\.html$///, (req, res, next) ->
302
+ app.get ///^\/([a-z0-9-]+)\.html$///, (req, res, next) ->
310
303
  slug = req.params[0]
311
304
  log(slug)
312
305
  if slug is 'runtests'
@@ -453,20 +446,24 @@ module.exports = exports = (argv) ->
453
446
  # Send an array of pages currently in the recycler via json
454
447
  app.get '/recycler/system/slugs.json', authorized, (req, res) ->
455
448
  fs.readdir argv.recycler, (e, files) ->
456
- if e then return res.e e
449
+
457
450
  doRecyclermap = (file, cb) ->
458
- pagehandler.get file, (e, page, status) ->
459
- return cb() if file.match /^\./
460
- if e
451
+ recycleFile = 'recycler/' + file
452
+ pagehandler.get recycleFile, (e, page, status) ->
453
+ if e or status is 404
461
454
  console.log 'Problem building recycler map:', file, 'e: ',e
455
+ # this will leave an undefined/empty item in the array, which we will filter out later
462
456
  return cb()
463
457
  cb null, {
464
458
  slug: file
465
459
  title: page.title
466
460
  }
467
461
 
462
+ if e then return res.e e
468
463
  async.map files, doRecyclermap, (e, recyclermap) ->
469
464
  return cb(e) if e
465
+ # remove any empty items
466
+ recyclermap = recyclermap.filter( (el) -> return !!el )
470
467
  res.send(recyclermap)
471
468
 
472
469
  # Fetching page from the recycler
@@ -678,7 +675,8 @@ module.exports = exports = (argv) ->
678
675
  # otherwise ask pagehandler for it.
679
676
  if action.fork
680
677
  pagehandler.saveToRecycler req.params[0], (err) ->
681
- if err then console.log "Error saving #{req.params[0]} before fork: #{err}"
678
+ if err and err isnt 'page does not exist'
679
+ console.log "Error saving #{req.params[0]} before fork: #{err}"
682
680
  remoteGet(action.fork, req.params[0], actionCB)
683
681
  else if action.type is 'create'
684
682
  # Prevent attempt to write circular structure
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "wiki-server",
3
3
  "description": "A Federated Wiki Server",
4
- "version": "0.19.1",
4
+ "version": "0.20.0",
5
5
  "author": {
6
6
  "name": "Ward Cunningham",
7
7
  "email": "ward@c2.com",
@@ -36,6 +36,7 @@
36
36
  "minisearch": "^2.1.3",
37
37
  "mkdirp": "^0.5.5",
38
38
  "morgan": "^1.9.1",
39
+ "node-fetch": "^2.6.1",
39
40
  "request": "^2.88.0",
40
41
  "write-file-atomic": "^2.4.3",
41
42
  "xml2js": "^0.4.23"
@@ -52,12 +53,12 @@
52
53
  "mocha": "^8.0.1",
53
54
  "should": "^13.2.3",
54
55
  "supertest": "^4.0.2",
55
- "wiki-client": "^0.22.1",
56
+ "wiki-client": "^0.23.0",
56
57
  "wiki-plugin-activity": "^0.4.6",
57
58
  "wiki-plugin-video": "^0.2.10"
58
59
  },
59
60
  "engines": {
60
- "node": ">=8.x"
61
+ "node": ">=12.x"
61
62
  },
62
63
  "testling": {
63
64
  "harness": "mocha"