cryptpad-server 0.0.1 → 0.0.3
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/build/core.js +61 -66
- package/build/core.worker.js +53 -44
- package/build/front.js +62 -58
- package/build/http.js +61 -54
- package/build/http.worker.js +33 -11
- package/build/storage.cluster.js +78 -53
- package/build/storage.js +99 -65
- package/build/storage.worker.js +55 -48
- package/index.js +3 -2
- package/package.json +6 -4
- package/readme.md +41 -44
package/build/http.js
CHANGED
|
@@ -996,7 +996,6 @@ function requireCore() {
|
|
|
996
996
|
const Util = requireCommonUtil$1();
|
|
997
997
|
const Constants = requireConstants();
|
|
998
998
|
const escapeKeyCharacters = Util.escapeKeyCharacters;
|
|
999
|
-
__require$5();
|
|
1000
999
|
const Crypto = __require$4();
|
|
1001
1000
|
const Keys = requireKeys();
|
|
1002
1001
|
Core.DEFAULT_LIMIT = 50 * 1024 * 1024;
|
|
@@ -1116,8 +1115,7 @@ function requireCore() {
|
|
|
1116
1115
|
cb();
|
|
1117
1116
|
};
|
|
1118
1117
|
Core.getPaths = (mainConfig, isEnv) => {
|
|
1119
|
-
const {
|
|
1120
|
-
Constants.paths;
|
|
1118
|
+
const {config} = mainConfig;
|
|
1121
1119
|
const all = {
|
|
1122
1120
|
basePath: config.basePath || config.base || "./data",
|
|
1123
1121
|
filePath: config.filePath || "./datastore",
|
|
@@ -3479,7 +3477,7 @@ function requireLogger() {
|
|
|
3479
3477
|
return logger;
|
|
3480
3478
|
}
|
|
3481
3479
|
|
|
3482
|
-
var version = "0.0.
|
|
3480
|
+
var version = "0.0.3";
|
|
3483
3481
|
|
|
3484
3482
|
var require$$2 = {
|
|
3485
3483
|
version
|
|
@@ -4649,60 +4647,69 @@ var hasRequiredCrypto;
|
|
|
4649
4647
|
function requireCrypto() {
|
|
4650
4648
|
if (hasRequiredCrypto) return crypto;
|
|
4651
4649
|
hasRequiredCrypto = 1;
|
|
4652
|
-
|
|
4653
|
-
let
|
|
4654
|
-
exports.decodeBase64 = msg => Buffer.from(msg, "base64");
|
|
4655
|
-
exports.encodeBase64 = msg => Buffer.from(msg).toString("base64");
|
|
4656
|
-
exports.decodeUTF8 = msg => Buffer.from(msg, "utf8");
|
|
4657
|
-
exports.encodeUTF8 = msg => Buffer.from(msg).toString("utf8");
|
|
4650
|
+
const loadSodium = cryptoLib => {
|
|
4651
|
+
let sodiumLib = {};
|
|
4658
4652
|
let SodiumNative, NaCl;
|
|
4659
4653
|
switch (cryptoLib) {
|
|
4660
4654
|
case "sodiumnative":
|
|
4661
|
-
|
|
4662
|
-
|
|
4663
|
-
|
|
4664
|
-
|
|
4665
|
-
|
|
4666
|
-
|
|
4667
|
-
|
|
4668
|
-
|
|
4669
|
-
};
|
|
4670
|
-
exports.detachedVerify = (signedBuffer, signatureBuffer, validateKey) => SodiumNative.crypto_sign_verify_detached(signatureBuffer, signedBuffer, validateKey);
|
|
4671
|
-
exports.secretbox = (message, nonce, secretKey) => {
|
|
4672
|
-
let secretBox = Buffer.alloc(message.length + SodiumNative.crypto_box_MACBYTES);
|
|
4673
|
-
SodiumNative.crypto_secretbox_easy(secretBox, message, nonce, secretKey);
|
|
4674
|
-
return secretBox;
|
|
4675
|
-
};
|
|
4676
|
-
exports.secretboxOpen = (secretBox, nonce, secretKey) => {
|
|
4677
|
-
let msg = Buffer.alloc(secretBox.length - SodiumNative.crypto_secretbox_MACBYTES);
|
|
4678
|
-
if (SodiumNative.crypto_secretbox_open_easy(msg, secretBox, nonce, secretKey)) {
|
|
4655
|
+
try {
|
|
4656
|
+
SodiumNative = require("sodium-native");
|
|
4657
|
+
sodiumLib.sigVerify = (signedMessage, validateKey) => {
|
|
4658
|
+
let msg = signedMessage.subarray(64);
|
|
4659
|
+
let ok = SodiumNative.crypto_sign_open(msg, signedMessage, validateKey);
|
|
4660
|
+
if (!ok) {
|
|
4661
|
+
return false;
|
|
4662
|
+
}
|
|
4679
4663
|
return msg;
|
|
4680
|
-
}
|
|
4681
|
-
|
|
4682
|
-
|
|
4683
|
-
|
|
4684
|
-
|
|
4685
|
-
|
|
4686
|
-
|
|
4687
|
-
|
|
4688
|
-
|
|
4689
|
-
|
|
4690
|
-
|
|
4691
|
-
|
|
4692
|
-
|
|
4693
|
-
|
|
4664
|
+
};
|
|
4665
|
+
sodiumLib.detachedVerify = (signedBuffer, signatureBuffer, validateKey) => SodiumNative.crypto_sign_verify_detached(signatureBuffer, signedBuffer, validateKey);
|
|
4666
|
+
sodiumLib.secretbox = (message, nonce, secretKey) => {
|
|
4667
|
+
let secretBox = Buffer.alloc(message.length + SodiumNative.crypto_box_MACBYTES);
|
|
4668
|
+
SodiumNative.crypto_secretbox_easy(secretBox, message, nonce, secretKey);
|
|
4669
|
+
return secretBox;
|
|
4670
|
+
};
|
|
4671
|
+
sodiumLib.secretboxOpen = (secretBox, nonce, secretKey) => {
|
|
4672
|
+
let msg = Buffer.alloc(secretBox.length - SodiumNative.crypto_secretbox_MACBYTES);
|
|
4673
|
+
if (SodiumNative.crypto_secretbox_open_easy(msg, secretBox, nonce, secretKey)) {
|
|
4674
|
+
return msg;
|
|
4675
|
+
} else {
|
|
4676
|
+
return void 0;
|
|
4677
|
+
}
|
|
4678
|
+
};
|
|
4679
|
+
sodiumLib.publicKeyFromSecretKey = secretKey => {
|
|
4680
|
+
let pk = new Uint8Array(SodiumNative.crypto_sign_PUBLICKEYBYTES);
|
|
4681
|
+
SodiumNative.crypto_sign_ed25519_sk_to_pk(pk, secretKey);
|
|
4682
|
+
return pk;
|
|
4683
|
+
};
|
|
4684
|
+
sodiumLib.hash = message => {
|
|
4685
|
+
let out = Buffer.alloc(SodiumNative.crypto_hash_sha512_BYTES);
|
|
4686
|
+
SodiumNative.crypto_hash_sha512(out, message);
|
|
4687
|
+
return out;
|
|
4688
|
+
};
|
|
4689
|
+
} catch (err) {
|
|
4690
|
+
console.error("Error in loading sodium-native: fallback on tweetnacl");
|
|
4691
|
+
return loadSodium("");
|
|
4692
|
+
}
|
|
4694
4693
|
break;
|
|
4695
4694
|
|
|
4696
4695
|
default:
|
|
4697
4696
|
NaCl = require$$0$2;
|
|
4698
|
-
|
|
4699
|
-
|
|
4700
|
-
|
|
4701
|
-
|
|
4702
|
-
|
|
4703
|
-
|
|
4697
|
+
sodiumLib.sigVerify = NaCl.sign.open;
|
|
4698
|
+
sodiumLib.detachedVerify = NaCl.sign.detached.verify;
|
|
4699
|
+
sodiumLib.secretbox = NaCl.secretbox;
|
|
4700
|
+
sodiumLib.secretboxOpen = (secretBox, nonce, secretKey) => Buffer.from(NaCl.secretbox.open(secretBox, nonce, secretKey));
|
|
4701
|
+
sodiumLib.publicKeyFromSecretKey = secretKey => NaCl.sign?.keyPair?.fromSecretKey(secretKey)?.publicKey;
|
|
4702
|
+
sodiumLib.hash = msg => Buffer.from(NaCl.hash(msg));
|
|
4704
4703
|
break;
|
|
4705
4704
|
}
|
|
4705
|
+
return sodiumLib;
|
|
4706
|
+
};
|
|
4707
|
+
crypto = cryptoLib => {
|
|
4708
|
+
const exports = loadSodium(cryptoLib);
|
|
4709
|
+
exports.decodeBase64 = msg => Buffer.from(msg, "base64");
|
|
4710
|
+
exports.encodeBase64 = msg => Buffer.from(msg).toString("base64");
|
|
4711
|
+
exports.decodeUTF8 = msg => Buffer.from(msg, "utf8");
|
|
4712
|
+
exports.encodeUTF8 = msg => Buffer.from(msg).toString("utf8");
|
|
4706
4713
|
return exports;
|
|
4707
4714
|
};
|
|
4708
4715
|
return crypto;
|
|
@@ -4754,13 +4761,13 @@ function require_interface() {
|
|
|
4754
4761
|
return;
|
|
4755
4762
|
}
|
|
4756
4763
|
const {type: rcvType, idx, challenge: challengeBase64, nonce: nonceBase64} = data;
|
|
4757
|
-
const challenge = new Uint8Array(
|
|
4758
|
-
const nonce = new Uint8Array(
|
|
4764
|
+
const challenge = new Uint8Array(Crypto.decodeBase64(challengeBase64));
|
|
4765
|
+
const nonce = new Uint8Array(Crypto.decodeBase64(nonceBase64));
|
|
4759
4766
|
if (ctx.ChallengesCache[challengeBase64]) {
|
|
4760
4767
|
other.disconnect();
|
|
4761
4768
|
return ctx.Log.error("INTERFACE_CHALLENGE_ERROR", "Reused challenge");
|
|
4762
4769
|
}
|
|
4763
|
-
const msg =
|
|
4770
|
+
const msg = Crypto.secretboxOpen(challenge, nonce, ctx.nodes_key);
|
|
4764
4771
|
if (!msg) {
|
|
4765
4772
|
other.disconnect();
|
|
4766
4773
|
return ctx.Log.error("INTERFACE_CHALLENGE_ERROR", "Bad challenge answer");
|
|
@@ -4835,13 +4842,13 @@ function require_interface() {
|
|
|
4835
4842
|
let uid = Util.guid(ctx.pendingConnections);
|
|
4836
4843
|
ctx.pendingConnections[uid] = coreId;
|
|
4837
4844
|
const nonce = NodeCrypto.randomBytes(24);
|
|
4838
|
-
const msg =
|
|
4839
|
-
const challenge = Crypto.secretbox(msg, nonce, ctx.nodes_key)
|
|
4845
|
+
const msg = Crypto.decodeUTF8(`${ctx.myType}:${ctx.myNumber}:${String(Date.now())}`);
|
|
4846
|
+
const challenge = Crypto.encodeBase64(Crypto.secretbox(msg, nonce, ctx.nodes_key));
|
|
4840
4847
|
createHandlers(ctx, other);
|
|
4841
4848
|
other.send([ uid, "IDENTITY", {
|
|
4842
4849
|
type: ctx.myType,
|
|
4843
4850
|
idx: ctx.myNumber,
|
|
4844
|
-
nonce:
|
|
4851
|
+
nonce: Crypto.encodeBase64(nonce),
|
|
4845
4852
|
challenge
|
|
4846
4853
|
} ]);
|
|
4847
4854
|
};
|
package/build/http.worker.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
var require$$0$2 = require("express");
|
|
4
4
|
|
|
5
|
+
var require$$1$2 = require("mime-types");
|
|
6
|
+
|
|
5
7
|
var node_module = require("node:module");
|
|
6
8
|
|
|
7
9
|
var require$$1$1 = require("fs-extra");
|
|
@@ -16,9 +18,9 @@ var require$$0$1 = require("stream-to-pull-stream");
|
|
|
16
18
|
|
|
17
19
|
var require$$1 = require("pull-stream");
|
|
18
20
|
|
|
19
|
-
var require$$
|
|
21
|
+
var require$$6 = require("http-proxy-middleware");
|
|
20
22
|
|
|
21
|
-
var require$$
|
|
23
|
+
var require$$8 = require("connect-gzip-static");
|
|
22
24
|
|
|
23
25
|
var _documentCurrentScript = typeof document !== "undefined" ? document.currentScript : null;
|
|
24
26
|
|
|
@@ -1004,7 +1006,6 @@ function requireCore() {
|
|
|
1004
1006
|
const Util = requireCommonUtil$1();
|
|
1005
1007
|
const Constants = requireConstants();
|
|
1006
1008
|
const escapeKeyCharacters = Util.escapeKeyCharacters;
|
|
1007
|
-
__require$2();
|
|
1008
1009
|
const Crypto = __require();
|
|
1009
1010
|
const Keys = requireKeys();
|
|
1010
1011
|
Core.DEFAULT_LIMIT = 50 * 1024 * 1024;
|
|
@@ -1124,8 +1125,7 @@ function requireCore() {
|
|
|
1124
1125
|
cb();
|
|
1125
1126
|
};
|
|
1126
1127
|
Core.getPaths = (mainConfig, isEnv) => {
|
|
1127
|
-
const {
|
|
1128
|
-
Constants.paths;
|
|
1128
|
+
const {config} = mainConfig;
|
|
1129
1129
|
const all = {
|
|
1130
1130
|
basePath: config.basePath || config.base || "./data",
|
|
1131
1131
|
filePath: config.filePath || "./datastore",
|
|
@@ -3529,7 +3529,7 @@ function requireDefaults() {
|
|
|
3529
3529
|
return defaults.exports;
|
|
3530
3530
|
}
|
|
3531
3531
|
|
|
3532
|
-
var version = "0.0.
|
|
3532
|
+
var version = "0.0.3";
|
|
3533
3533
|
|
|
3534
3534
|
var require$$2 = {
|
|
3535
3535
|
version
|
|
@@ -4330,14 +4330,16 @@ function requireWorker() {
|
|
|
4330
4330
|
if (hasRequiredWorker) return worker$1;
|
|
4331
4331
|
hasRequiredWorker = 1;
|
|
4332
4332
|
const Express = require$$0$2;
|
|
4333
|
+
const Mime = require$$1$2;
|
|
4333
4334
|
const Http = require("node:http");
|
|
4335
|
+
const Https = require("node:https");
|
|
4334
4336
|
const Path = __require$2();
|
|
4335
4337
|
const Fs = __require$1();
|
|
4336
4338
|
const Logger = requireLogger();
|
|
4337
4339
|
const Util = requireCommonUtil$1();
|
|
4338
|
-
const {createProxyMiddleware} = require$$
|
|
4340
|
+
const {createProxyMiddleware} = require$$6;
|
|
4339
4341
|
const Default = requireDefaults();
|
|
4340
|
-
const gzipStatic = require$$
|
|
4342
|
+
const gzipStatic = require$$8;
|
|
4341
4343
|
const Environment = requireEnv();
|
|
4342
4344
|
const {setHeaders} = requireHeaders();
|
|
4343
4345
|
const COMMANDS = {};
|
|
@@ -4350,9 +4352,7 @@ function requireWorker() {
|
|
|
4350
4352
|
warn: () => {},
|
|
4351
4353
|
info: () => {}
|
|
4352
4354
|
};
|
|
4353
|
-
|
|
4354
|
-
"application/wasm": [ "wasm" ]
|
|
4355
|
-
});
|
|
4355
|
+
Mime.lookup("wasm");
|
|
4356
4356
|
const initFeedback = (Env, app) => {
|
|
4357
4357
|
if (!Env.logFeedback) {
|
|
4358
4358
|
return;
|
|
@@ -4422,6 +4422,28 @@ function requireWorker() {
|
|
|
4422
4422
|
app.use("/cryptpad_websocket", wsProxy);
|
|
4423
4423
|
app.use("/extensions.js", httpProxy);
|
|
4424
4424
|
app.use("/api", httpProxy);
|
|
4425
|
+
const checkAllStores = (req, res) => {
|
|
4426
|
+
setHeaders(Env, req, res);
|
|
4427
|
+
const promiseResponses = storageList.map(baseUrl => new Promise((res, rej) => {
|
|
4428
|
+
const protocol = new URL(baseUrl).protocol;
|
|
4429
|
+
if (![ "http:", "https:" ].includes(protocol)) {
|
|
4430
|
+
return rej();
|
|
4431
|
+
}
|
|
4432
|
+
const H = protocol === "http:" ? Http : Https;
|
|
4433
|
+
H.get(new URL(req.url, baseUrl), {
|
|
4434
|
+
method: "HEAD"
|
|
4435
|
+
}, resp => {
|
|
4436
|
+
const {statusCode} = resp;
|
|
4437
|
+
if (statusCode !== 200) {
|
|
4438
|
+
return rej();
|
|
4439
|
+
}
|
|
4440
|
+
res();
|
|
4441
|
+
});
|
|
4442
|
+
}));
|
|
4443
|
+
Promise.all(promiseResponses).then(() => res.status(200).send("PLACEHOLDER")).catch(() => res.status(404).end());
|
|
4444
|
+
};
|
|
4445
|
+
app.get("/blob/placeholder.txt", checkAllStores);
|
|
4446
|
+
app.get("/block/placeholder.txt", checkAllStores);
|
|
4425
4447
|
const storeProxy = createProxyMiddleware({
|
|
4426
4448
|
router: req => {
|
|
4427
4449
|
const split = req.url.split("/");
|
package/build/storage.cluster.js
CHANGED
|
@@ -18,8 +18,6 @@ var require$$1$1 = require("pull-stream");
|
|
|
18
18
|
|
|
19
19
|
var require$$0$2 = require("tweetnacl/nacl-fast");
|
|
20
20
|
|
|
21
|
-
var require$$11 = require("body-parser");
|
|
22
|
-
|
|
23
21
|
var _documentCurrentScript = typeof document !== "undefined" ? document.currentScript : null;
|
|
24
22
|
|
|
25
23
|
function getDefaultExportFromCjs(x) {
|
|
@@ -981,7 +979,6 @@ function requireCore() {
|
|
|
981
979
|
const Util = requireCommonUtil$1();
|
|
982
980
|
const Constants = requireConstants();
|
|
983
981
|
const escapeKeyCharacters = Util.escapeKeyCharacters;
|
|
984
|
-
__require$2();
|
|
985
982
|
const Crypto = __require$1();
|
|
986
983
|
const Keys = requireKeys();
|
|
987
984
|
Core.DEFAULT_LIMIT = 50 * 1024 * 1024;
|
|
@@ -1101,8 +1098,7 @@ function requireCore() {
|
|
|
1101
1098
|
cb();
|
|
1102
1099
|
};
|
|
1103
1100
|
Core.getPaths = (mainConfig, isEnv) => {
|
|
1104
|
-
const {
|
|
1105
|
-
Constants.paths;
|
|
1101
|
+
const {config} = mainConfig;
|
|
1106
1102
|
const all = {
|
|
1107
1103
|
basePath: config.basePath || config.base || "./data",
|
|
1108
1104
|
filePath: config.filePath || "./datastore",
|
|
@@ -1425,6 +1421,27 @@ function requireBlock$1() {
|
|
|
1425
1421
|
}, cb);
|
|
1426
1422
|
});
|
|
1427
1423
|
};
|
|
1424
|
+
Block.rootPlaceholderCreate = (Env, _cb) => {
|
|
1425
|
+
const cb = Util.once(Util.mkAsync(_cb));
|
|
1426
|
+
nThen(w => {
|
|
1427
|
+
Fse.mkdirp(Env.paths.block, w(err => {
|
|
1428
|
+
if (err) {
|
|
1429
|
+
Env.Log.error("BLOCK_FOLDER_CREATE_FAILED", err);
|
|
1430
|
+
w.abort();
|
|
1431
|
+
return cb(err);
|
|
1432
|
+
}
|
|
1433
|
+
}));
|
|
1434
|
+
}).nThen(w => {
|
|
1435
|
+
const fullPath = Path.join(Env.paths.block, "placeholder.txt");
|
|
1436
|
+
Fs.writeFile(fullPath, "PLACEHOLDER\n", w(err => {
|
|
1437
|
+
if (err) {
|
|
1438
|
+
Env.Log.error("BLOCK_PLACEHOLDER_CREATE_FAILED", err);
|
|
1439
|
+
w.abort();
|
|
1440
|
+
return cb(err);
|
|
1441
|
+
}
|
|
1442
|
+
}));
|
|
1443
|
+
}).nThen(() => cb());
|
|
1444
|
+
};
|
|
1428
1445
|
})(block$1);
|
|
1429
1446
|
return block$1.exports;
|
|
1430
1447
|
}
|
|
@@ -2528,60 +2545,69 @@ var hasRequiredCrypto;
|
|
|
2528
2545
|
function requireCrypto() {
|
|
2529
2546
|
if (hasRequiredCrypto) return crypto;
|
|
2530
2547
|
hasRequiredCrypto = 1;
|
|
2531
|
-
|
|
2532
|
-
let
|
|
2533
|
-
exports.decodeBase64 = msg => Buffer.from(msg, "base64");
|
|
2534
|
-
exports.encodeBase64 = msg => Buffer.from(msg).toString("base64");
|
|
2535
|
-
exports.decodeUTF8 = msg => Buffer.from(msg, "utf8");
|
|
2536
|
-
exports.encodeUTF8 = msg => Buffer.from(msg).toString("utf8");
|
|
2548
|
+
const loadSodium = cryptoLib => {
|
|
2549
|
+
let sodiumLib = {};
|
|
2537
2550
|
let SodiumNative, NaCl;
|
|
2538
2551
|
switch (cryptoLib) {
|
|
2539
2552
|
case "sodiumnative":
|
|
2540
|
-
|
|
2541
|
-
|
|
2542
|
-
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
};
|
|
2549
|
-
exports.detachedVerify = (signedBuffer, signatureBuffer, validateKey) => SodiumNative.crypto_sign_verify_detached(signatureBuffer, signedBuffer, validateKey);
|
|
2550
|
-
exports.secretbox = (message, nonce, secretKey) => {
|
|
2551
|
-
let secretBox = Buffer.alloc(message.length + SodiumNative.crypto_box_MACBYTES);
|
|
2552
|
-
SodiumNative.crypto_secretbox_easy(secretBox, message, nonce, secretKey);
|
|
2553
|
-
return secretBox;
|
|
2554
|
-
};
|
|
2555
|
-
exports.secretboxOpen = (secretBox, nonce, secretKey) => {
|
|
2556
|
-
let msg = Buffer.alloc(secretBox.length - SodiumNative.crypto_secretbox_MACBYTES);
|
|
2557
|
-
if (SodiumNative.crypto_secretbox_open_easy(msg, secretBox, nonce, secretKey)) {
|
|
2553
|
+
try {
|
|
2554
|
+
SodiumNative = require("sodium-native");
|
|
2555
|
+
sodiumLib.sigVerify = (signedMessage, validateKey) => {
|
|
2556
|
+
let msg = signedMessage.subarray(64);
|
|
2557
|
+
let ok = SodiumNative.crypto_sign_open(msg, signedMessage, validateKey);
|
|
2558
|
+
if (!ok) {
|
|
2559
|
+
return false;
|
|
2560
|
+
}
|
|
2558
2561
|
return msg;
|
|
2559
|
-
}
|
|
2560
|
-
|
|
2561
|
-
|
|
2562
|
-
|
|
2563
|
-
|
|
2564
|
-
|
|
2565
|
-
|
|
2566
|
-
|
|
2567
|
-
|
|
2568
|
-
|
|
2569
|
-
|
|
2570
|
-
|
|
2571
|
-
|
|
2572
|
-
|
|
2562
|
+
};
|
|
2563
|
+
sodiumLib.detachedVerify = (signedBuffer, signatureBuffer, validateKey) => SodiumNative.crypto_sign_verify_detached(signatureBuffer, signedBuffer, validateKey);
|
|
2564
|
+
sodiumLib.secretbox = (message, nonce, secretKey) => {
|
|
2565
|
+
let secretBox = Buffer.alloc(message.length + SodiumNative.crypto_box_MACBYTES);
|
|
2566
|
+
SodiumNative.crypto_secretbox_easy(secretBox, message, nonce, secretKey);
|
|
2567
|
+
return secretBox;
|
|
2568
|
+
};
|
|
2569
|
+
sodiumLib.secretboxOpen = (secretBox, nonce, secretKey) => {
|
|
2570
|
+
let msg = Buffer.alloc(secretBox.length - SodiumNative.crypto_secretbox_MACBYTES);
|
|
2571
|
+
if (SodiumNative.crypto_secretbox_open_easy(msg, secretBox, nonce, secretKey)) {
|
|
2572
|
+
return msg;
|
|
2573
|
+
} else {
|
|
2574
|
+
return void 0;
|
|
2575
|
+
}
|
|
2576
|
+
};
|
|
2577
|
+
sodiumLib.publicKeyFromSecretKey = secretKey => {
|
|
2578
|
+
let pk = new Uint8Array(SodiumNative.crypto_sign_PUBLICKEYBYTES);
|
|
2579
|
+
SodiumNative.crypto_sign_ed25519_sk_to_pk(pk, secretKey);
|
|
2580
|
+
return pk;
|
|
2581
|
+
};
|
|
2582
|
+
sodiumLib.hash = message => {
|
|
2583
|
+
let out = Buffer.alloc(SodiumNative.crypto_hash_sha512_BYTES);
|
|
2584
|
+
SodiumNative.crypto_hash_sha512(out, message);
|
|
2585
|
+
return out;
|
|
2586
|
+
};
|
|
2587
|
+
} catch (err) {
|
|
2588
|
+
console.error("Error in loading sodium-native: fallback on tweetnacl");
|
|
2589
|
+
return loadSodium("");
|
|
2590
|
+
}
|
|
2573
2591
|
break;
|
|
2574
2592
|
|
|
2575
2593
|
default:
|
|
2576
2594
|
NaCl = require$$0$2;
|
|
2577
|
-
|
|
2578
|
-
|
|
2579
|
-
|
|
2580
|
-
|
|
2581
|
-
|
|
2582
|
-
|
|
2595
|
+
sodiumLib.sigVerify = NaCl.sign.open;
|
|
2596
|
+
sodiumLib.detachedVerify = NaCl.sign.detached.verify;
|
|
2597
|
+
sodiumLib.secretbox = NaCl.secretbox;
|
|
2598
|
+
sodiumLib.secretboxOpen = (secretBox, nonce, secretKey) => Buffer.from(NaCl.secretbox.open(secretBox, nonce, secretKey));
|
|
2599
|
+
sodiumLib.publicKeyFromSecretKey = secretKey => NaCl.sign?.keyPair?.fromSecretKey(secretKey)?.publicKey;
|
|
2600
|
+
sodiumLib.hash = msg => Buffer.from(NaCl.hash(msg));
|
|
2583
2601
|
break;
|
|
2584
2602
|
}
|
|
2603
|
+
return sodiumLib;
|
|
2604
|
+
};
|
|
2605
|
+
crypto = cryptoLib => {
|
|
2606
|
+
const exports = loadSodium(cryptoLib);
|
|
2607
|
+
exports.decodeBase64 = msg => Buffer.from(msg, "base64");
|
|
2608
|
+
exports.encodeBase64 = msg => Buffer.from(msg).toString("base64");
|
|
2609
|
+
exports.decodeUTF8 = msg => Buffer.from(msg, "utf8");
|
|
2610
|
+
exports.encodeUTF8 = msg => Buffer.from(msg).toString("utf8");
|
|
2585
2611
|
return exports;
|
|
2586
2612
|
};
|
|
2587
2613
|
return crypto;
|
|
@@ -2853,7 +2879,7 @@ function requireMfa() {
|
|
|
2853
2879
|
return mfa.exports;
|
|
2854
2880
|
}
|
|
2855
2881
|
|
|
2856
|
-
var version = "0.0.
|
|
2882
|
+
var version = "0.0.3";
|
|
2857
2883
|
|
|
2858
2884
|
var require$$2 = {
|
|
2859
2885
|
version
|
|
@@ -7973,7 +7999,6 @@ function requireCluster() {
|
|
|
7973
7999
|
const Util = requireCommonUtil$1();
|
|
7974
8000
|
const MFA = requireMfa();
|
|
7975
8001
|
const Sessions = requireSessions();
|
|
7976
|
-
const bodyParser = require$$11;
|
|
7977
8002
|
const Fs = __require();
|
|
7978
8003
|
const Environment = requireEnv();
|
|
7979
8004
|
const Logger = requireLogger();
|
|
@@ -8008,7 +8033,7 @@ function requireCluster() {
|
|
|
8008
8033
|
Env.Log.error("WORKER__" + errLabel, info);
|
|
8009
8034
|
});
|
|
8010
8035
|
const initServerHandlers = (Env, app) => {
|
|
8011
|
-
app.use(
|
|
8036
|
+
app.use(Express.urlencoded({
|
|
8012
8037
|
extended: true
|
|
8013
8038
|
}));
|
|
8014
8039
|
app.use("/blob", function(req, res, next) {
|
|
@@ -8235,7 +8260,7 @@ function requireCluster() {
|
|
|
8235
8260
|
res.statusCode = 204;
|
|
8236
8261
|
return void res.end();
|
|
8237
8262
|
}
|
|
8238
|
-
const {chunk, sig, edPublic} = req.body;
|
|
8263
|
+
const {chunk, sig, edPublic} = req.body || {};
|
|
8239
8264
|
const forbidden = reason => void res.status(403).send({
|
|
8240
8265
|
error: reason
|
|
8241
8266
|
});
|