cryptpad-server 0.0.2 → 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 CHANGED
@@ -1967,7 +1967,6 @@ function requireCore$1() {
1967
1967
  const Util = requireCommonUtil$1();
1968
1968
  const Constants = requireConstants();
1969
1969
  const escapeKeyCharacters = Util.escapeKeyCharacters;
1970
- __require$3();
1971
1970
  const Crypto = __require$5();
1972
1971
  const Keys = requireKeys();
1973
1972
  Core.DEFAULT_LIMIT = 50 * 1024 * 1024;
@@ -2087,8 +2086,7 @@ function requireCore$1() {
2087
2086
  cb();
2088
2087
  };
2089
2088
  Core.getPaths = (mainConfig, isEnv) => {
2090
- const {index, config} = mainConfig;
2091
- Constants.paths;
2089
+ const {config} = mainConfig;
2092
2090
  const all = {
2093
2091
  basePath: config.basePath || config.base || "./data",
2094
2092
  filePath: config.filePath || "./datastore",
@@ -4445,11 +4443,6 @@ function requireAdmin() {
4445
4443
  const nThen = require$$3;
4446
4444
  const Crypto = __require$5();
4447
4445
  const Admin = {};
4448
- const getWorkerProfiles = function(Env, _publicKey, _data, cb) {
4449
- cb(void 0, {
4450
- "Not Implemented": 1
4451
- });
4452
- };
4453
4446
  const getUid = () => Crypto.randomBytes(18).toString("hex");
4454
4447
  const getInvitations = (Env, _publicKey, _data, cb) => {
4455
4448
  Env.interface.broadcast("storage", "ADMIN_CMD", {
@@ -4518,11 +4511,6 @@ function requireAdmin() {
4518
4511
  }
4519
4512
  Env.flushCache(args, cb);
4520
4513
  };
4521
- const getDiskUsage = (Env, _publicKey, _data, cb) => {
4522
- cb(void 0, {
4523
- DEPRECATED: 0
4524
- });
4525
- };
4526
4514
  const getRegisteredUsers = (Env, _publicKey, _data, cb) => {
4527
4515
  Env.interface.broadcast("storage", "GET_REGISTERED_USERS", {}, (_err, data) => {
4528
4516
  let users = data.reduce((acc, it) => acc + it?.users, 0);
@@ -5166,7 +5154,6 @@ function requireAdmin() {
5166
5154
  ACTIVE_SESSIONS: getActiveSessions,
5167
5155
  ACTIVE_PADS: getActiveChannelCount,
5168
5156
  REGISTERED_USERS: getRegisteredUsers,
5169
- DISK_USAGE: getDiskUsage,
5170
5157
  FLUSH_CACHE: flushCache,
5171
5158
  GET_FILE_DESCRIPTOR_COUNT: getFileDescriptorCount,
5172
5159
  GET_FILE_DESCRIPTOR_LIMIT: getFileDescriptorLimit,
@@ -5203,7 +5190,6 @@ function requireAdmin() {
5203
5190
  ADMIN_DECREE: Admin.sendDecree,
5204
5191
  INSTANCE_STATUS: instanceStatus,
5205
5192
  GET_LIMITS: getLimits,
5206
- GET_WORKER_PROFILES: getWorkerProfiles,
5207
5193
  GET_USER_TOTAL_SIZE: getUserTotalSize,
5208
5194
  GET_ALL_INVITATIONS: getInvitations,
5209
5195
  CREATE_INVITATION: createInvitation,
@@ -7696,7 +7682,7 @@ function requireHttpCommands() {
7696
7682
  return httpCommands;
7697
7683
  }
7698
7684
 
7699
- var version = "0.0.2";
7685
+ var version = "0.0.3";
7700
7686
 
7701
7687
  var require$$2 = {
7702
7688
  version
package/build/front.js CHANGED
@@ -22,8 +22,6 @@ var require$$1$2 = require("express");
22
22
 
23
23
  var require$$4$1 = require("cookie-parser");
24
24
 
25
- var require$$5 = require("body-parser");
26
-
27
25
  var _documentCurrentScript = typeof document !== "undefined" ? document.currentScript : null;
28
26
 
29
27
  var commonUtil$2 = {
@@ -1570,7 +1568,6 @@ function requireCore() {
1570
1568
  const Util = requireCommonUtil$1();
1571
1569
  const Constants = requireConstants();
1572
1570
  const escapeKeyCharacters = Util.escapeKeyCharacters;
1573
- __require();
1574
1571
  const Crypto = __require$3();
1575
1572
  const Keys = requireKeys();
1576
1573
  Core.DEFAULT_LIMIT = 50 * 1024 * 1024;
@@ -1690,8 +1687,7 @@ function requireCore() {
1690
1687
  cb();
1691
1688
  };
1692
1689
  Core.getPaths = (mainConfig, isEnv) => {
1693
- const {index, config} = mainConfig;
1694
- Constants.paths;
1690
+ const {config} = mainConfig;
1695
1691
  const all = {
1696
1692
  basePath: config.basePath || config.base || "./data",
1697
1693
  filePath: config.filePath || "./datastore",
@@ -4053,7 +4049,7 @@ function requireLogger() {
4053
4049
  return logger;
4054
4050
  }
4055
4051
 
4056
- var version = "0.0.2";
4052
+ var version = "0.0.3";
4057
4053
 
4058
4054
  var require$$2 = {
4059
4055
  version
@@ -5010,7 +5006,6 @@ function requireNetwork() {
5010
5006
  const {setHeaders} = requireHeaders();
5011
5007
  const Crypto = require("crypto");
5012
5008
  const cookieParser = require$$4$1;
5013
- const bodyParser = require$$5;
5014
5009
  const Network = {};
5015
5010
  const app = Express();
5016
5011
  const events = {
@@ -5028,7 +5023,7 @@ function requireNetwork() {
5028
5023
  }
5029
5024
  next();
5030
5025
  });
5031
- app.use(bodyParser.urlencoded({
5026
+ app.use(Express.urlencoded({
5032
5027
  extended: true
5033
5028
  }));
5034
5029
  app.use(cookieParser());
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 {index, config} = mainConfig;
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.2";
3480
+ var version = "0.0.3";
3483
3481
 
3484
3482
  var require$$2 = {
3485
3483
  version
@@ -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$$5 = require("http-proxy-middleware");
21
+ var require$$6 = require("http-proxy-middleware");
20
22
 
21
- var require$$7 = require("connect-gzip-static");
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 {index, config} = mainConfig;
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.2";
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$$5;
4340
+ const {createProxyMiddleware} = require$$6;
4339
4341
  const Default = requireDefaults();
4340
- const gzipStatic = require$$7;
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
- Express.static.mime.define({
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("/");
@@ -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 {index, config} = mainConfig;
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
  }
@@ -2862,7 +2879,7 @@ function requireMfa() {
2862
2879
  return mfa.exports;
2863
2880
  }
2864
2881
 
2865
- var version = "0.0.2";
2882
+ var version = "0.0.3";
2866
2883
 
2867
2884
  var require$$2 = {
2868
2885
  version
@@ -7982,7 +7999,6 @@ function requireCluster() {
7982
7999
  const Util = requireCommonUtil$1();
7983
8000
  const MFA = requireMfa();
7984
8001
  const Sessions = requireSessions();
7985
- const bodyParser = require$$11;
7986
8002
  const Fs = __require();
7987
8003
  const Environment = requireEnv();
7988
8004
  const Logger = requireLogger();
@@ -8017,7 +8033,7 @@ function requireCluster() {
8017
8033
  Env.Log.error("WORKER__" + errLabel, info);
8018
8034
  });
8019
8035
  const initServerHandlers = (Env, app) => {
8020
- app.use(bodyParser.urlencoded({
8036
+ app.use(Express.urlencoded({
8021
8037
  extended: true
8022
8038
  }));
8023
8039
  app.use("/blob", function(req, res, next) {
@@ -8244,7 +8260,7 @@ function requireCluster() {
8244
8260
  res.statusCode = 204;
8245
8261
  return void res.end();
8246
8262
  }
8247
- const {chunk, sig, edPublic} = req.body;
8263
+ const {chunk, sig, edPublic} = req.body || {};
8248
8264
  const forbidden = reason => void res.status(403).send({
8249
8265
  error: reason
8250
8266
  });
package/build/storage.js CHANGED
@@ -998,7 +998,6 @@ function requireCore() {
998
998
  const Util = requireCommonUtil$1();
999
999
  const Constants = requireConstants();
1000
1000
  const escapeKeyCharacters = Util.escapeKeyCharacters;
1001
- __require$5();
1002
1001
  const Crypto = __require$6();
1003
1002
  const Keys = requireKeys();
1004
1003
  Core.DEFAULT_LIMIT = 50 * 1024 * 1024;
@@ -1118,8 +1117,7 @@ function requireCore() {
1118
1117
  cb();
1119
1118
  };
1120
1119
  Core.getPaths = (mainConfig, isEnv) => {
1121
- const {index, config} = mainConfig;
1122
- Constants.paths;
1120
+ const {config} = mainConfig;
1123
1121
  const all = {
1124
1122
  basePath: config.basePath || config.base || "./data",
1125
1123
  filePath: config.filePath || "./datastore",
@@ -5475,6 +5473,27 @@ function requireBlock$1() {
5475
5473
  }, cb);
5476
5474
  });
5477
5475
  };
5476
+ Block.rootPlaceholderCreate = (Env, _cb) => {
5477
+ const cb = Util.once(Util.mkAsync(_cb));
5478
+ nThen(w => {
5479
+ Fse.mkdirp(Env.paths.block, w(err => {
5480
+ if (err) {
5481
+ Env.Log.error("BLOCK_FOLDER_CREATE_FAILED", err);
5482
+ w.abort();
5483
+ return cb(err);
5484
+ }
5485
+ }));
5486
+ }).nThen(w => {
5487
+ const fullPath = Path.join(Env.paths.block, "placeholder.txt");
5488
+ Fs.writeFile(fullPath, "PLACEHOLDER\n", w(err => {
5489
+ if (err) {
5490
+ Env.Log.error("BLOCK_PLACEHOLDER_CREATE_FAILED", err);
5491
+ w.abort();
5492
+ return cb(err);
5493
+ }
5494
+ }));
5495
+ }).nThen(() => cb());
5496
+ };
5478
5497
  })(block$1);
5479
5498
  return block$1.exports;
5480
5499
  }
@@ -6676,7 +6695,7 @@ function requireMfaManager() {
6676
6695
  return mfaManager;
6677
6696
  }
6678
6697
 
6679
- var version = "0.0.2";
6698
+ var version = "0.0.3";
6680
6699
 
6681
6700
  var require$$2 = {
6682
6701
  version
@@ -10624,6 +10643,17 @@ function requireAdmin() {
10624
10643
  const {key} = data;
10625
10644
  MFA.revoke(Env, key, cb);
10626
10645
  };
10646
+ const onGetCachedChannelMetadata = (Env, id, cb) => {
10647
+ const index = Env.metadata_cache?.[id];
10648
+ if (!index) {
10649
+ return void cb("ENOENT");
10650
+ }
10651
+ cb(void 0, index);
10652
+ };
10653
+ const onClearCachedChannelMetadata = (Env, id, cb) => {
10654
+ delete Env.metadata_cache[id];
10655
+ cb();
10656
+ };
10627
10657
  const onArchiveBlock = (Env, data, cb) => {
10628
10658
  const {key, reason} = data;
10629
10659
  const archiveReason = {
@@ -11013,17 +11043,6 @@ function requireAdmin() {
11013
11043
  }
11014
11044
  cb(void 0, index);
11015
11045
  };
11016
- const onGetCachedChannelMetadata = (Env, id, cb) => {
11017
- const index = Env.metadata_cache?.[id];
11018
- if (!index) {
11019
- return void cb("ENOENT");
11020
- }
11021
- cb(void 0, index);
11022
- };
11023
- const onClearCachedChannelMetadata = (Env, id, cb) => {
11024
- delete Env.metadata_cache[id];
11025
- cb();
11026
- };
11027
11046
  const onGetActiveChannelCount = (Env, _id, cb) => {
11028
11047
  if (!Env.channel_cache) {
11029
11048
  return void cb("ENOENT");
@@ -12059,6 +12078,12 @@ function requireStorage() {
12059
12078
  const bearerSecret = Util.encodeBase64(Crypto.randomBytes(32));
12060
12079
  const decree = [ "SET_BEARER_SECRET", [ bearerSecret ], "INTERNAL", +new Date ];
12061
12080
  Decrees.onNewDecree(Env, decree, "", waitFor());
12081
+ }).nThen(w => {
12082
+ BlockStore.rootPlaceholderCreate(Env, w(err => {
12083
+ if (err) {
12084
+ console.warn(`${myId}: Impossible to create block's placeholder. Please check the value of blockPath in your config.js file and if you have write access on it.`);
12085
+ }
12086
+ }));
12062
12087
  }).nThen(() => {
12063
12088
  if (index !== 0) {
12064
12089
  return;
@@ -1000,7 +1000,6 @@ function requireCore() {
1000
1000
  const Util = requireCommonUtil$1();
1001
1001
  const Constants = requireConstants();
1002
1002
  const escapeKeyCharacters = Util.escapeKeyCharacters;
1003
- __require$1();
1004
1003
  const Crypto = __require();
1005
1004
  const Keys = requireKeys();
1006
1005
  Core.DEFAULT_LIMIT = 50 * 1024 * 1024;
@@ -1120,8 +1119,7 @@ function requireCore() {
1120
1119
  cb();
1121
1120
  };
1122
1121
  Core.getPaths = (mainConfig, isEnv) => {
1123
- const {index, config} = mainConfig;
1124
- Constants.paths;
1122
+ const {config} = mainConfig;
1125
1123
  const all = {
1126
1124
  basePath: config.basePath || config.base || "./data",
1127
1125
  filePath: config.filePath || "./datastore",
@@ -4733,7 +4731,7 @@ function requireTasks() {
4733
4731
  return tasks.exports;
4734
4732
  }
4735
4733
 
4736
- var version = "0.0.2";
4734
+ var version = "0.0.3";
4737
4735
 
4738
4736
  var require$$2 = {
4739
4737
  version
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "cryptpad-server",
3
3
  "description": "CryptPad Server",
4
- "version": "0.0.2",
4
+ "version": "0.0.3",
5
5
  "license": "AGPL-3.0+",
6
6
  "repository": {
7
7
  "type": "git",
@@ -16,10 +16,10 @@
16
16
  "build"
17
17
  ],
18
18
  "dependencies": {
19
- "body-parser": "^2.2.0",
20
19
  "connect-gzip-static": "^4.2.1",
21
20
  "cookie-parser": "^1.4.7",
22
- "express": "~4.22.1",
21
+ "express": "~5.2.1",
22
+ "mime-types": "^3.0.2",
23
23
  "fs-extra": "^7.0.0",
24
24
  "http-proxy-middleware": "^3.0.3",
25
25
  "nthen": "0.1.8",
@@ -50,6 +50,7 @@
50
50
  "typescript": "^5.6.2"
51
51
  },
52
52
  "overrides": {
53
+ "qs": "^6.16.0",
53
54
  "http-proxy": "npm:http-proxy-3@^1.23.2",
54
55
  "serialize-javascript": "^7.0.4"
55
56
  },
@@ -63,6 +64,7 @@
63
64
  "tests": "node --test tests/",
64
65
  "test": "node tests/runAll.js",
65
66
  "start": "node index.js",
66
- "dev": "DEV=1 node index.js"
67
+ "dev": "DEV=1 node index.js",
68
+ "windev": "set DEV=1& node index.js"
67
69
  }
68
70
  }