diff --git a/index.js b/index.js index a9451721a1d20b683bb0eadce735efe4b3d3b833..bb4ebac23d25e5dac7f2327cc9f6767a49ed8da0 100644 --- a/index.js +++ b/index.js @@ -5,6 +5,8 @@ const bodyParser = require('body-parser'); const http = require('http'); const express = require('express'); const path = require('path'); +const cors = require('cors'); +const fileUpload = require('express-fileupload'); const webminController = require('./server/controller/webmin.js'); // Inject 'webstart' command if no argument was given @@ -36,6 +38,11 @@ module.exports = { */ app.use(express.static(path.join(__dirname, '..', 'duniter-ui', 'public'))); + app.use(cors()); + + // File upload for backup API + app.use(fileUpload()); + app.use(bodyParser.urlencoded({ extended: true })); diff --git a/package.json b/package.json index a2d401d5cc63c0619613ae61d306c21dbb446a8b..fa2a93589153dea62317ffa483410c60d9a578d3 100644 --- a/package.json +++ b/package.json @@ -27,16 +27,18 @@ }, "dependencies": { "adm-zip": "0.4.7", - "request": "2.31.0", "body-parser": "1.15.2", "bower": "1.8.0", "brunch": "2.4.2", "co": "4.6.0", + "cors": "2.8.1", "express": "4.14.0", + "express-fileupload": "0.0.5", "fs-extra": "1.0.0", "materialize-css": "0.97.5", "moment": "2.6.0", "node-pre-gyp": "0.6.32", + "request": "2.31.0", "rimraf": "2.5.4", "tmp": "0.0.29", "underscore": "1.8.3" diff --git a/server/lib/network.js b/server/lib/network.js index a38bbceec255337562bfe2a6227bc24520701278..4dfa0ae24430d8f727f54358c6e5f6b2a10ecae8 100644 --- a/server/lib/network.js +++ b/server/lib/network.js @@ -18,7 +18,22 @@ const handleRequest = (method, uri, promiseFunc) => { }); }; +const handleFileRequest = (method, uri, promiseFunc) => { + method(uri, function(req, res) { + res.set('Access-Control-Allow-Origin', '*'); + co(function *() { + try { + let fileStream = yield promiseFunc(req); + // HTTP answer + fileStream.pipe(res); + } catch (e) { + // HTTP error + res.status(400).send(e); + } + }); + }); +}; module.exports = { - handleRequest + handleRequest, handleFileRequest }; \ No newline at end of file diff --git a/server/lib/routes.js b/server/lib/routes.js index 1ec5dc1b0417f92252a6d4097f44551c527f712a..2d7102ec40e35d707e9637b850789fce79a7fb96 100644 --- a/server/lib/routes.js +++ b/server/lib/routes.js @@ -3,6 +3,7 @@ const co = require('co'); const es = require('event-stream'); const handleRequest = require('../lib/network').handleRequest; +const handleFileRequest = require('../lib/network').handleFileRequest; const WEBMIN_LOGS_CACHE = 2000; const WebSocketServer = require('ws').Server; @@ -31,7 +32,7 @@ module.exports = { handleRequest(app.get.bind(app), '/webmin/server/services/stop_all', webminCtrl.stopAllServices); handleRequest(app.get.bind(app), '/webmin/server/reset/data', webminCtrl.resetData); handleRequest(app.get.bind(app), '/webmin/network/interfaces', webminCtrl.listInterfaces); - //app.httpGETFile('/webmin/data/duniter_export', webminCtrl.exportData); + handleFileRequest(app.get.bind(app),'/webmin/data/duniter_export', webminCtrl.exportData); handleRequest(app.post.bind(app), '/webmin/data/duniter_import', webminCtrl.importData); }, webminWS: function(webminCtrl) { diff --git a/yarn.lock b/yarn.lock index b8a5a3671afff017c9245c41e672a0a30bcc63a1..39408ee6b116d41913c25a6136cc145866576769 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1642,6 +1642,7 @@ domain-browser@~1.1.7: naclb "1.3.7" nnupnp "1.0.2" node-pre-gyp "^0.6.32" + node-uuid "^1.4.7" optimist "0.6.1" parallelshell "^2.0.0" q "1.4.1" @@ -2083,20 +2084,6 @@ gauge@~1.2.5: lodash.padend "^4.1.0" lodash.padstart "^4.1.0" -gauge@~2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.6.0.tgz#d35301ad18e96902b4751dcbbe40f4218b942a46" - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-color "^0.1.7" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - gauge@~2.7.1: version "2.7.2" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.2.tgz#15cecc31b02d05345a5d6b0e171cdb3ad2307774" @@ -2247,10 +2234,6 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -has-color@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" - has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -2729,8 +2712,8 @@ lodash@^3.3.1: resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.2.0, lodash@^4.8.0: - version "4.17.3" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.3.tgz#557ed7d2a9438cac5fd5a43043ca60cb455e01f7" + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" lodash@~4.16.4: version "4.16.6" @@ -2873,11 +2856,11 @@ mime-types@^2.1.10, mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.11, dependencies: mime-db "~1.25.0" -mime@1.3.4, mime@^1.2.11, mime@^1.3.4: +mime@1.3.4, mime@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" -mime@~1.2.11, mime@~1.2.9: +mime@^1.2.11, mime@~1.2.11, mime@~1.2.9: version "1.2.11" resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" @@ -2902,7 +2885,7 @@ minimatch@~0.2.11, minimatch@~0.2.14: lru-cache "2" sigmund "~1.0.0" -minimist@0.0.8, minimist@~0.0.1: +minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" @@ -2910,11 +2893,15 @@ minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -mkdirp@0.3.0: +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + +mkdirp@0.3.0, mkdirp@0.3.x: version "0.3.0" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" -mkdirp@0.3.4, mkdirp@0.3.x: +mkdirp@0.3.4: version "0.3.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.4.tgz#f8c81d213b7299a031f193a57d752a17d2f6c7d8" @@ -2992,15 +2979,11 @@ nan@2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.2.0.tgz#779c07135629503cf6a7b7e6aab33049b3c3853c" -nan@^2.0.5, nan@^2.3.0, nan@^2.3.2, nan@^2.3.3: - version "2.5.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.0.tgz#aa8f1e34531d807e9e27755b234b4a6ec0c152a8" - -nan@~2.3.3: +nan@^2.0.5, nan@^2.3.2, nan@~2.3.3: version "2.3.5" resolved "https://registry.yarnpkg.com/nan/-/nan-2.3.5.tgz#822a0dc266290ce4cd3a12282ca3e7e364668a08" -nan@~2.4.0: +nan@^2.3.0, nan@^2.3.3, nan@~2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.4.0.tgz#fb3c59d45fe4effe215f0b890f8adf6eb32d2232" @@ -3100,7 +3083,7 @@ node-pre-gyp@0.6.23: tar "~2.2.0" tar-pack "~3.1.0" -node-pre-gyp@0.6.32, node-pre-gyp@^0.6.29, node-pre-gyp@^0.6.32, node-pre-gyp@~0.6.28: +node-pre-gyp@0.6.32, node-pre-gyp@^0.6.29, node-pre-gyp@~0.6.28: version "0.6.32" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.32.tgz#fc452b376e7319b3d255f5f34853ef6fd8fe1fd5" dependencies: @@ -3135,7 +3118,7 @@ node-sass@^3.0.0: request "^2.61.0" sass-graph "^2.1.1" -node-uuid@~1.4.0, node-uuid@~1.4.7: +node-uuid@1.4.7, node-uuid@~1.4.0, node-uuid@~1.4.7: version "1.4.7" resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.7.tgz#6da5a17668c4b3dd59623bda11cf7fa4c1f60a6f" @@ -3169,14 +3152,13 @@ normalize-path@^2.0.0, normalize-path@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a" -"npmlog@0 || 1 || 2 || 3": - version "3.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-3.1.2.tgz#2d46fa874337af9498a2f12bb43d8d0be4a36873" +"npmlog@0 || 1 || 2 || 3", npmlog@~2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" dependencies: + ansi "~0.3.1" are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.6.0" - set-blocking "~2.0.0" + gauge "~1.2.5" npmlog@^4.0.0, npmlog@^4.0.1: version "4.0.2" @@ -3187,14 +3169,6 @@ npmlog@^4.0.0, npmlog@^4.0.1: gauge "~2.7.1" set-blocking "~2.0.0" -npmlog@~2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-2.0.4.tgz#98b52530f2514ca90d09ec5b22c8846722375692" - dependencies: - ansi "~0.3.1" - are-we-there-yet "~1.1.2" - gauge "~1.2.5" - number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" @@ -3228,7 +3202,13 @@ on-headers@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" -once@^1.3.0, once@~1.3.0, once@~1.3.3: +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +once@~1.3.0, once@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" dependencies: @@ -3280,7 +3260,7 @@ osenv@0: version "0.0.5" resolved "https://registry.yarnpkg.com/over/-/over-0.0.5.tgz#f29852e70fd7e25f360e013a8ec44c82aedb5708" -parallelshell@^2.0.0: +parallelshell@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/parallelshell/-/parallelshell-2.0.0.tgz#c94af5d6348526a26da9020faeb5fc724a80600c" @@ -3571,9 +3551,9 @@ readable-stream@1.1.x: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@~2.1.4: - version "2.1.5" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" +readable-stream@^2.0.0, "readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@^2.0.5: + version "2.2.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.2.tgz#a9e6fec3c7dda85f8bb1b3ba7028604556fc825e" dependencies: buffer-shims "^1.0.0" core-util-is "~1.0.0" @@ -3583,7 +3563,16 @@ readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@~2.1.4: string_decoder "~0.10.x" util-deprecate "~1.0.1" -"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.2, readable-stream@~2.0.5: +readable-stream@~1.0.0, readable-stream@~1.0.31: + version "1.0.34" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +readable-stream@~2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" dependencies: @@ -3594,14 +3583,17 @@ readable-stream@^2.0.0, readable-stream@^2.0.5, readable-stream@~2.1.4: string_decoder "~0.10.x" util-deprecate "~1.0.1" -readable-stream@~1.0.0, readable-stream@~1.0.31: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" +readable-stream@~2.1.4: + version "2.1.5" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" dependencies: + buffer-shims "^1.0.0" core-util-is "~1.0.0" inherits "~2.0.1" - isarray "0.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" string_decoder "~0.10.x" + util-deprecate "~1.0.1" readdirp@^2.0.0: version "2.1.0" @@ -4303,14 +4295,10 @@ tunnel-agent@~0.4.1: version "0.4.3" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" -tweetnacl@0.14.3: +tweetnacl@0.14.3, tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.3" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.3.tgz#3da382f670f25ded78d7b3d1792119bca0b7132d" -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - type-is@~1.6.13: version "1.6.14" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.14.tgz#e219639c17ded1ca0789092dd54a03826b817cb2" @@ -4525,10 +4513,14 @@ with@~4.0.0: acorn "^1.0.1" acorn-globals "^1.0.3" -wordwrap@0.0.2, wordwrap@~0.0.2: +wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + wotb@0.4.14: version "0.4.14" resolved "https://registry.yarnpkg.com/wotb/-/wotb-0.4.14.tgz#61162f5e427a51e7a41c7e834d16a41fea2373fc"