braidfs 0.0.27 → 0.0.28

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.
Files changed (2) hide show
  1. package/index.js +18 -5
  2. package/package.json +2 -2
package/index.js CHANGED
@@ -19,7 +19,7 @@ if (!require('fs').existsSync(braidfs_config_file)) {
19
19
  sync_urls: [],
20
20
  sync_index_urls: [],
21
21
  proxy_base: require('path').join(require('os').homedir(), 'http'),
22
- proxy_base_last_versions: require('path').join(braidfs_config_dir, 'proxy_base_last_versions'),
22
+ proxy_base_meta: require('path').join(braidfs_config_dir, 'proxy_base_meta'),
23
23
  braid_text_db: require('path').join(braidfs_config_dir, 'braid-text-db'),
24
24
  domains: { 'example.com': { auth_headers: { Cookie: "secret_pass" } } }
25
25
  }, null, 4))
@@ -56,6 +56,15 @@ while (argv.length) {
56
56
  console.log(`unexpose server from the outside world`)
57
57
  }
58
58
  }
59
+ if (config.proxy_base_last_versions && !config.proxy_base_meta) {
60
+ config.proxy_base_meta = config.proxy_base_last_versions
61
+ delete config.proxy_base_last_versions
62
+ console.log((save_config ?
63
+ `updating config file "proxy_base_last_versions" to "proxy_base_meta": ` :
64
+ `config file "proxy_base_last_versions" being interpreted as "proxy_base_meta": `) +
65
+ config.proxy_base_meta)
66
+ }
67
+
59
68
  if (save_config) {
60
69
  require('fs').writeFileSync(braidfs_config_file, JSON.stringify(config, null, 4))
61
70
  console.log(`saved config file`)
@@ -64,7 +73,7 @@ if (save_config) {
64
73
  braid_text.db_folder = config.braid_text_db
65
74
 
66
75
  require('fs').mkdirSync(config.proxy_base, { recursive: true })
67
- require('fs').mkdirSync(config.proxy_base_last_versions, { recursive: true })
76
+ require('fs').mkdirSync(config.proxy_base_meta, { recursive: true })
68
77
 
69
78
  let host_to_protocol = {}
70
79
  let path_to_func = {}
@@ -235,6 +244,7 @@ async function proxy_url(url) {
235
244
  let peer = Math.random().toString(36).slice(2)
236
245
  var char_counter = -1
237
246
  let file_last_version = null
247
+ let file_last_digest = null
238
248
  let file_last_text = null
239
249
  self.file_read_only = null
240
250
  let file_needs_reading = true
@@ -273,13 +283,16 @@ async function proxy_url(url) {
273
283
 
274
284
  if (file_last_version === null) {
275
285
  try {
276
- file_last_version = JSON.parse(await require('fs').promises.readFile(require('path').join(config.proxy_base_last_versions, braid_text.encode_filename(url)), { encoding: 'utf8' }))
286
+ ({version: file_last_version, digest: file_last_digest} = JSON.parse(await require('fs').promises.readFile(require('path').join(config.proxy_base_meta, braid_text.encode_filename(url)), { encoding: 'utf8' })))
277
287
  file_last_text = (await braid_text.get(url, { version: file_last_version })).body
278
288
  file_needs_writing = !v_eq(file_last_version, (await braid_text.get(url, {})).version)
279
289
  } catch (e) {
280
290
  file_last_text = ''
281
291
  file_needs_writing = true
282
292
  }
293
+
294
+ // sanity check
295
+ if (file_last_version && require('crypto').createHash('sha256').update(file_last_text).digest('base64') != file_last_digest) throw new Error('file_last_text does not match file_last_digest')
283
296
  }
284
297
 
285
298
  while (file_needs_reading || file_needs_writing) {
@@ -306,7 +319,7 @@ async function proxy_url(url) {
306
319
 
307
320
  await braid_text.put(url, { version, parents, patches, peer })
308
321
 
309
- await require('fs').promises.writeFile(require('path').join(config.proxy_base_last_versions, braid_text.encode_filename(url)), JSON.stringify(file_last_version))
322
+ await require('fs').promises.writeFile(require('path').join(config.proxy_base_meta, braid_text.encode_filename(url)), JSON.stringify({version: file_last_version, digest: require('crypto').createHash('sha256').update(file_last_text).digest('base64')}))
310
323
  }
311
324
  }
312
325
  if (file_needs_writing) {
@@ -321,7 +334,7 @@ async function proxy_url(url) {
321
334
  file_last_version = version
322
335
  file_last_text = body
323
336
  await require('fs').promises.writeFile(await get_fullpath(), file_last_text)
324
- await require('fs').promises.writeFile(require('path').join(config.proxy_base_last_versions, braid_text.encode_filename(url)), JSON.stringify(file_last_version))
337
+ await require('fs').promises.writeFile(require('path').join(config.proxy_base_meta, braid_text.encode_filename(url)), JSON.stringify({version: file_last_version, digest: require('crypto').createHash('sha256').update(file_last_text).digest('base64')}))
325
338
  }
326
339
 
327
340
  if (await is_read_only(await get_fullpath()) !== self.file_read_only) await set_read_only(await get_fullpath(), self.file_read_only)
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "braidfs",
3
- "version": "0.0.27",
3
+ "version": "0.0.28",
4
4
  "description": "braid technology synchronizing files and webpages",
5
5
  "author": "Braid Working Group",
6
6
  "repository": "braid-org/braidfs",
7
7
  "homepage": "https://braid.org",
8
8
  "dependencies": {
9
9
  "braid-http": "^0.3.20",
10
- "braid-text": "^0.0.30",
10
+ "braid-text": "^0.0.31",
11
11
  "chokidar": "^3.6.0"
12
12
  },
13
13
  "bin": {