Преглед на файлове

Update dependencies

Switch from the unmaintained node-static to serve-static.
dev_h
Ophir LOJKINE преди 5 години
родител
ревизия
c34ccbb17a
променени са 4 файла, в които са добавени 171 реда и са изтрити 48 реда
  1. 1
    1
      Dockerfile
  2. 142
    16
      package-lock.json
  3. 3
    3
      package.json
  4. 25
    28
      server/server.js

+ 1
- 1
Dockerfile Целия файл

@@ -1,4 +1,4 @@
1
-FROM node:10-alpine
1
+FROM node:12-alpine
2 2
 
3 3
 COPY . /opt/app
4 4
 WORKDIR /opt/app

+ 142
- 16
package-lock.json Целия файл

@@ -1,6 +1,6 @@
1 1
 {
2 2
    "name": "whitebophir",
3
-   "version": "1.0.24",
3
+   "version": "1.1.0",
4 4
    "lockfileVersion": 1,
5 5
    "requires": true,
6 6
    "dependencies": {
@@ -322,7 +322,8 @@
322 322
       "colors": {
323 323
          "version": "1.3.2",
324 324
          "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.2.tgz",
325
-         "integrity": "sha512-rhP0JSBGYvpcNQj4s5AdShMeE5ahMop96cTeDl/v9qQQm2fYClE2QXZRi8wLzc+GmXSxdIqqbOIAhyObEXDbfQ=="
325
+         "integrity": "sha512-rhP0JSBGYvpcNQj4s5AdShMeE5ahMop96cTeDl/v9qQQm2fYClE2QXZRi8wLzc+GmXSxdIqqbOIAhyObEXDbfQ==",
326
+         "dev": true
326 327
       },
327 328
       "combined-stream": {
328 329
          "version": "1.0.8",
@@ -469,6 +470,16 @@
469 470
          "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
470 471
          "dev": true
471 472
       },
473
+      "depd": {
474
+         "version": "1.1.2",
475
+         "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
476
+         "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
477
+      },
478
+      "destroy": {
479
+         "version": "1.0.4",
480
+         "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
481
+         "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
482
+      },
472 483
       "ecc-jsbn": {
473 484
          "version": "0.1.2",
474 485
          "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
@@ -479,6 +490,16 @@
479 490
             "safer-buffer": "^2.1.0"
480 491
          }
481 492
       },
493
+      "ee-first": {
494
+         "version": "1.1.1",
495
+         "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
496
+         "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
497
+      },
498
+      "encodeurl": {
499
+         "version": "1.0.2",
500
+         "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
501
+         "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
502
+      },
482 503
       "end-of-stream": {
483 504
          "version": "1.4.4",
484 505
          "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
@@ -568,12 +589,22 @@
568 589
             "has-binary2": "~1.0.2"
569 590
          }
570 591
       },
592
+      "escape-html": {
593
+         "version": "1.0.3",
594
+         "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
595
+         "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
596
+      },
571 597
       "escape-string-regexp": {
572 598
          "version": "1.0.5",
573 599
          "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
574 600
          "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
575 601
          "dev": true
576 602
       },
603
+      "etag": {
604
+         "version": "1.8.1",
605
+         "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
606
+         "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
607
+      },
577 608
       "extend": {
578 609
          "version": "3.0.2",
579 610
          "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
@@ -621,6 +652,11 @@
621 652
             "mime-types": "^2.1.12"
622 653
          }
623 654
       },
655
+      "fresh": {
656
+         "version": "0.5.2",
657
+         "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
658
+         "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
659
+      },
624 660
       "fs-constants": {
625 661
          "version": "1.0.0",
626 662
          "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
@@ -734,6 +770,18 @@
734 770
          "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
735 771
          "dev": true
736 772
       },
773
+      "http-errors": {
774
+         "version": "1.7.3",
775
+         "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
776
+         "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
777
+         "requires": {
778
+            "depd": "~1.1.2",
779
+            "inherits": "2.0.4",
780
+            "setprototypeof": "1.1.1",
781
+            "statuses": ">= 1.5.0 < 2",
782
+            "toidentifier": "1.0.0"
783
+         }
784
+      },
737 785
       "http-signature": {
738 786
          "version": "1.2.0",
739 787
          "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
@@ -775,8 +823,7 @@
775 823
       "inherits": {
776 824
          "version": "2.0.4",
777 825
          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
778
-         "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
779
-         "dev": true
826
+         "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
780 827
       },
781 828
       "is-extglob": {
782 829
          "version": "2.1.1",
@@ -978,7 +1025,8 @@
978 1025
       "minimist": {
979 1026
          "version": "0.0.10",
980 1027
          "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
981
-         "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="
1028
+         "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=",
1029
+         "dev": true
982 1030
       },
983 1031
       "mkdirp": {
984 1032
          "version": "0.5.5",
@@ -1025,16 +1073,6 @@
1025 1073
          "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
1026 1074
          "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw=="
1027 1075
       },
1028
-      "node-static": {
1029
-         "version": "0.7.11",
1030
-         "resolved": "https://registry.npmjs.org/node-static/-/node-static-0.7.11.tgz",
1031
-         "integrity": "sha512-zfWC/gICcqb74D9ndyvxZWaI1jzcoHmf4UTHWQchBNuNMxdBLJMDiUgZ1tjGLEIe/BMhj2DxKD8HOuc2062pDQ==",
1032
-         "requires": {
1033
-            "colors": ">=0.6.0",
1034
-            "mime": "^1.2.9",
1035
-            "optimist": ">=0.3.4"
1036
-         }
1037
-      },
1038 1076
       "normalize-path": {
1039 1077
          "version": "3.0.0",
1040 1078
          "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -1052,6 +1090,14 @@
1052 1090
          "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz",
1053 1091
          "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE="
1054 1092
       },
1093
+      "on-finished": {
1094
+         "version": "2.3.0",
1095
+         "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
1096
+         "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
1097
+         "requires": {
1098
+            "ee-first": "1.1.1"
1099
+         }
1100
+      },
1055 1101
       "once": {
1056 1102
          "version": "1.4.0",
1057 1103
          "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -1102,6 +1148,7 @@
1102 1148
          "version": "0.6.1",
1103 1149
          "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz",
1104 1150
          "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
1151
+         "dev": true,
1105 1152
          "requires": {
1106 1153
             "minimist": "~0.0.1",
1107 1154
             "wordwrap": "~0.0.2"
@@ -1175,6 +1222,11 @@
1175 1222
             "better-assert": "~1.0.0"
1176 1223
          }
1177 1224
       },
1225
+      "parseurl": {
1226
+         "version": "1.3.3",
1227
+         "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
1228
+         "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
1229
+      },
1178 1230
       "path-is-absolute": {
1179 1231
          "version": "1.0.1",
1180 1232
          "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
@@ -1231,6 +1283,11 @@
1231 1283
          "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
1232 1284
          "dev": true
1233 1285
       },
1286
+      "range-parser": {
1287
+         "version": "1.2.1",
1288
+         "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1289
+         "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
1290
+      },
1234 1291
       "read": {
1235 1292
          "version": "1.0.7",
1236 1293
          "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz",
@@ -1316,6 +1373,64 @@
1316 1373
          "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
1317 1374
          "dev": true
1318 1375
       },
1376
+      "send": {
1377
+         "version": "0.17.1",
1378
+         "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
1379
+         "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
1380
+         "requires": {
1381
+            "debug": "2.6.9",
1382
+            "depd": "~1.1.2",
1383
+            "destroy": "~1.0.4",
1384
+            "encodeurl": "~1.0.2",
1385
+            "escape-html": "~1.0.3",
1386
+            "etag": "~1.8.1",
1387
+            "fresh": "0.5.2",
1388
+            "http-errors": "~1.7.2",
1389
+            "mime": "1.6.0",
1390
+            "ms": "2.1.1",
1391
+            "on-finished": "~2.3.0",
1392
+            "range-parser": "~1.2.1",
1393
+            "statuses": "~1.5.0"
1394
+         },
1395
+         "dependencies": {
1396
+            "debug": {
1397
+               "version": "2.6.9",
1398
+               "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
1399
+               "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
1400
+               "requires": {
1401
+                  "ms": "2.0.0"
1402
+               },
1403
+               "dependencies": {
1404
+                  "ms": {
1405
+                     "version": "2.0.0",
1406
+                     "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1407
+                     "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
1408
+                  }
1409
+               }
1410
+            },
1411
+            "ms": {
1412
+               "version": "2.1.1",
1413
+               "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
1414
+               "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
1415
+            }
1416
+         }
1417
+      },
1418
+      "serve-static": {
1419
+         "version": "1.14.1",
1420
+         "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
1421
+         "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
1422
+         "requires": {
1423
+            "encodeurl": "~1.0.2",
1424
+            "escape-html": "~1.0.3",
1425
+            "parseurl": "~1.3.3",
1426
+            "send": "0.17.1"
1427
+         }
1428
+      },
1429
+      "setprototypeof": {
1430
+         "version": "1.1.1",
1431
+         "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
1432
+         "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
1433
+      },
1319 1434
       "sha1-file": {
1320 1435
          "version": "1.0.4",
1321 1436
          "resolved": "https://registry.npmjs.org/sha1-file/-/sha1-file-1.0.4.tgz",
@@ -1538,6 +1653,11 @@
1538 1653
          "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
1539 1654
          "dev": true
1540 1655
       },
1656
+      "statuses": {
1657
+         "version": "1.5.0",
1658
+         "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
1659
+         "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
1660
+      },
1541 1661
       "string_decoder": {
1542 1662
          "version": "1.1.1",
1543 1663
          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -1583,6 +1703,11 @@
1583 1703
          "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz",
1584 1704
          "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA="
1585 1705
       },
1706
+      "toidentifier": {
1707
+         "version": "1.0.0",
1708
+         "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
1709
+         "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
1710
+      },
1586 1711
       "tough-cookie": {
1587 1712
          "version": "2.5.0",
1588 1713
          "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
@@ -1719,7 +1844,8 @@
1719 1844
       "wordwrap": {
1720 1845
          "version": "0.0.3",
1721 1846
          "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz",
1722
-         "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc="
1847
+         "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
1848
+         "dev": true
1723 1849
       },
1724 1850
       "wrappy": {
1725 1851
          "version": "1.0.2",

+ 3
- 3
package.json Целия файл

@@ -3,16 +3,16 @@
3 3
       "collaborative",
4 4
       "whiteboard"
5 5
    ],
6
-   "version": "1.0.24",
6
+   "version": "1.1.0",
7 7
    "license": "AGPL-3.0-or-later",
8 8
    "dependencies": {
9 9
       "handlebars": "^4.7.6",
10
-      "node-static": "^0.7.11",
10
+      "serve-static": "^1.14.1",
11 11
       "socket.io": "^2.3.0"
12 12
    },
13 13
    "scripts": {
14 14
       "start": "node ./server/server.js",
15
-      "deploy": "openode sync && openode restart"
15
+      "deploy": "openode deploy"
16 16
    },
17 17
    "name": "whitebophir",
18 18
    "description": "Online collaborative whiteboard",

+ 25
- 28
server/server.js Целия файл

@@ -5,7 +5,7 @@ var app = require('http').createServer(handler)
5 5
 	, url = require('url')
6 6
 	, fs = require("fs")
7 7
 	, crypto = require("crypto")
8
-	, nodestatic = require("node-static")
8
+	, serveStatic = require("serve-static")
9 9
 	, createSVG = require("./createSVG.js")
10 10
 	, handlebars = require("handlebars");
11 11
 
@@ -38,16 +38,21 @@ log("server started", { port: PORT });
38 38
 
39 39
 var CSP = "default-src 'self'; style-src 'self' 'unsafe-inline'; connect-src 'self' ws: wss:";
40 40
 
41
-var fileserver = new nodestatic.Server(WEBROOT, {
42
-	"headers": {
43
-		"X-UA-Compatible": "IE=Edge",
44
-		"Content-Security-Policy": CSP,
41
+var fileserver = serveStatic(WEBROOT, {
42
+	maxAge: 2 * 3600 * 1000,
43
+	setHeaders: function (res) {
44
+		res.setHeader("X-UA-Compatible", "IE=Edge");
45
+		res.setHeader("Content-Security-Policy", CSP);
45 46
 	}
46 47
 });
47 48
 
48
-function serveError(request, response, err) {
49
-	console.warn("Error serving '" + request.url + "' : " + err.status + " " + err.message);
50
-	fileserver.serveFile('error.html', err.status, {}, request, response);
49
+var errorPage = fs.readFileSync(path.join(WEBROOT, "error.html"));
50
+function serveError(request, response) {
51
+	return function (err) {
52
+		log("error", { "error": err, "url": request.url });
53
+		response.writeHead(err ? 500 : 404, { "Content-Length": errorPage.length });
54
+		response.end(errorPage);
55
+	}
51 56
 }
52 57
 
53 58
 function logRequest(request) {
@@ -126,26 +131,23 @@ function handleRequest(request, response) {
126 131
 			response.end(body);
127 132
 		} else { // Else, it's a resource
128 133
 			request.url = "/" + parts.slice(1).join('/');
129
-			fileserver.serve(request, response, function (err, res) {
130
-				if (err) serveError(request, response, err);
131
-			});
134
+			fileserver(request, response, serveError(request, response));
132 135
 		}
133 136
 	} else if (parts[0] === "download") {
134 137
 		var boardName = encodeURIComponent(parts[1]),
135
-			history_file = "../server-data/board-" + boardName + ".json",
136
-			headers = {
137
-				"Content-Type": "application/json",
138
-				"Content-Disposition": 'attachment; filename="' + boardName + '.wbo"'
139
-			};
138
+			history_file = "server-data/board-" + boardName + ".json";
140 139
 		if (parts.length > 2 && !isNaN(Date.parse(parts[2]))) {
141 140
 			history_file += '.' + parts[2] + '.bak';
142 141
 		}
143
-		log("Downloading " + history_file);
144
-		var promise = fileserver.serveFile(history_file, 200, headers, request, response);
145
-		promise.on("error", function (err) {
146
-			console.error("Error while downloading history", err);
147
-			response.statusCode = 404;
148
-			response.end("ERROR: Unable to serve history file\n");
142
+		log("download", { "file": history_file });
143
+		fs.readFile(history_file, function (err, data) {
144
+			if (err) return serveError(request, response)(err);
145
+			response.writeHead(200, {
146
+				"Content-Type": "application/json",
147
+				"Content-Disposition": 'attachment; filename="' + boardName + '.wbo"',
148
+				"Content-Length": data.length,
149
+			});
150
+			response.end(data);
149 151
 		});
150 152
 	} else if (parts[0] === "preview") {
151 153
 		var boardName = encodeURIComponent(parts[1]),
@@ -169,12 +171,7 @@ function handleRequest(request, response) {
169 171
 		response.end(name);
170 172
 	} else {
171 173
 		if (parts[0] === '') logRequest(request);
172
-		fileserver.serve(request, response, function (err, res) {
173
-			if (err) {
174
-				logRequest(request);
175
-				serveError(request, response, err);
176
-			}
177
-		});
174
+		fileserver(request, response, serveError(request, response));
178 175
 	}
179 176
 }
180 177
 

Loading…
Отказ
Запис