hfs 3.2.0-alpha1.1 → 3.2.0-beta3

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 (179) hide show
  1. package/admin/assets/{af-RjyQ-neT.js → af-CV3suok4.js} +1 -1
  2. package/admin/assets/{am-PptHpglb.js → am-DNvTMYJ-.js} +1 -1
  3. package/admin/assets/{ar-Du3syDxa.js → ar-BGIEjplY.js} +1 -1
  4. package/admin/assets/{ar-dz-CiziRh1x.js → ar-dz-Ilq3cpjW.js} +1 -1
  5. package/admin/assets/{ar-iq-hCKg0CRP.js → ar-iq-DjXqm3R3.js} +1 -1
  6. package/admin/assets/{ar-kw-COYePt-p.js → ar-kw-4nugD0ui.js} +1 -1
  7. package/admin/assets/{ar-ly-CY5yETqb.js → ar-ly-DvrpBGjb.js} +1 -1
  8. package/admin/assets/{ar-ma-DczXi97r.js → ar-ma-ClnDMaR_.js} +1 -1
  9. package/admin/assets/{ar-sa-Bu7sTKzl.js → ar-sa-yyW34p_k.js} +1 -1
  10. package/admin/assets/{ar-tn-BrG0r6qZ.js → ar-tn-Dkn_F6cH.js} +1 -1
  11. package/admin/assets/{az-DYRCrdk0.js → az-BGQIRIME.js} +1 -1
  12. package/admin/assets/{be-DObSs5HX.js → be-CgBB_Tl_.js} +1 -1
  13. package/admin/assets/{bg-BDBkMe50.js → bg-DQ2NnjXf.js} +1 -1
  14. package/admin/assets/{bi-CApXFwc6.js → bi-C76InPXJ.js} +1 -1
  15. package/admin/assets/{bm-CjxCV8Lr.js → bm-CEihEziX.js} +1 -1
  16. package/admin/assets/{bn-DzWZbDi3.js → bn-CxCmr3_d.js} +1 -1
  17. package/admin/assets/{bn-bd-ijdPRJbb.js → bn-bd-hXn474is.js} +1 -1
  18. package/admin/assets/{bo-BDDfj5XH.js → bo-23wkHeLT.js} +1 -1
  19. package/admin/assets/{br-DRHEjait.js → br-DwfJ5fK1.js} +1 -1
  20. package/admin/assets/{bs-B0Zv2Agm.js → bs-pRqCggJt.js} +1 -1
  21. package/admin/assets/{ca-DuZAUqU_.js → ca-DgXusSYE.js} +1 -1
  22. package/admin/assets/{cs-DVkylosR.js → cs-CDakLSd0.js} +1 -1
  23. package/admin/assets/{cv-8Is1Fns9.js → cv-LGuw2gsy.js} +1 -1
  24. package/admin/assets/{cy-Bk30Or_y.js → cy--OuAdcJb.js} +1 -1
  25. package/admin/assets/{da-C41DIdZK.js → da-BY4-Oo6j.js} +1 -1
  26. package/admin/assets/{de--qvLJgIE.js → de-DhZFVtF3.js} +1 -1
  27. package/admin/assets/{de-at-D5vCBlsw.js → de-at-Dyk0Il-9.js} +1 -1
  28. package/admin/assets/{de-ch-Oh2cO23c.js → de-ch-C9HgqgBG.js} +1 -1
  29. package/admin/assets/{dv-4ZO2KNbw.js → dv-BnHXOAHb.js} +1 -1
  30. package/admin/assets/{el-CobOUqyu.js → el-DKZwotls.js} +1 -1
  31. package/admin/assets/{en-C9afClpS.js → en-Cfkmutmh.js} +1 -1
  32. package/admin/assets/{en-au-C_QMghEl.js → en-au-B1uLNVRS.js} +1 -1
  33. package/admin/assets/{en-ca-C80KILwc.js → en-ca-CPQ8JLrR.js} +1 -1
  34. package/admin/assets/{en-gb-BwQ0asAI.js → en-gb-BBXjeXVa.js} +1 -1
  35. package/admin/assets/{en-ie-ConCcQkq.js → en-ie-wbMYxxCu.js} +1 -1
  36. package/admin/assets/{en-il-CAOzD4DD.js → en-il-BqiJQjg0.js} +1 -1
  37. package/admin/assets/{en-in-87gardaO.js → en-in-Cox_dy1Y.js} +1 -1
  38. package/admin/assets/{en-nz-uMTjgkDP.js → en-nz-D2denFwV.js} +1 -1
  39. package/admin/assets/{en-sg-BlbiLv4L.js → en-sg-CPMvhL_f.js} +1 -1
  40. package/admin/assets/{en-tt-BXXmBax2.js → en-tt-DTr6jsXn.js} +1 -1
  41. package/admin/assets/{eo-BBL7o-0W.js → eo-Dz5-PLu9.js} +1 -1
  42. package/admin/assets/{es-DuNej-79.js → es-Ctd1zmr5.js} +1 -1
  43. package/admin/assets/{es-do-bZWKFwTE.js → es-do-C1siaHVl.js} +1 -1
  44. package/admin/assets/{es-mx-C2Lfb86F.js → es-mx-xN8Flblv.js} +1 -1
  45. package/admin/assets/{es-pr-wU3Du8m-.js → es-pr-CdDKn0Nn.js} +1 -1
  46. package/admin/assets/{es-us-qcU-zRiw.js → es-us-DrylVZZL.js} +1 -1
  47. package/admin/assets/{et-B-4PjN_n.js → et-Bm2qrgIv.js} +1 -1
  48. package/admin/assets/{eu-D0pNDZ9i.js → eu-B8Npz2me.js} +1 -1
  49. package/admin/assets/{fa-R_zmYBGc.js → fa-Ce478gVV.js} +1 -1
  50. package/admin/assets/{fi-CWYS_0Hg.js → fi-DmQCLn1D.js} +1 -1
  51. package/admin/assets/{fo-aJYpcnWS.js → fo-ty-wZYb3.js} +1 -1
  52. package/admin/assets/{fr-BHFrWfwB.js → fr-CPfNx_dE.js} +1 -1
  53. package/admin/assets/{fr-ca-ihwmO47n.js → fr-ca-DUuUTvVd.js} +1 -1
  54. package/admin/assets/{fr-ch-Cb8XbRfE.js → fr-ch-DN707oy8.js} +1 -1
  55. package/admin/assets/{fy-DT9BUc6t.js → fy-DU59ExaB.js} +1 -1
  56. package/admin/assets/{ga-B8p4naXJ.js → ga-VymLo-KV.js} +1 -1
  57. package/admin/assets/{gd-Dzrl6rPc.js → gd-OonH0A5f.js} +1 -1
  58. package/admin/assets/{gl-bN2tXl9d.js → gl-BINpSrwL.js} +1 -1
  59. package/admin/assets/{gom-latn-DUK8PgIJ.js → gom-latn-CDC4oAAB.js} +1 -1
  60. package/admin/assets/{gu-CxAIP8fw.js → gu-EP-tB-Px.js} +1 -1
  61. package/admin/assets/{he-Bm9XJVAj.js → he-BWkV26db.js} +1 -1
  62. package/admin/assets/{hi-CHik9Qxx.js → hi-CV9_k_t0.js} +1 -1
  63. package/admin/assets/{hr-Dn57_dqN.js → hr-BXciZ7cA.js} +1 -1
  64. package/admin/assets/{ht-BRS-FrJq.js → ht-CzKVwgZT.js} +1 -1
  65. package/admin/assets/{hu-hVaGcZ-U.js → hu-TogNJljg.js} +1 -1
  66. package/admin/assets/{hy-am-heLxXhpz.js → hy-am-B5AuRs7s.js} +1 -1
  67. package/admin/assets/{id-B6AkO4h8.js → id-Cz1E3N6j.js} +1 -1
  68. package/admin/assets/{index-Buyl8rI8.js → index-HuChhgks.js} +1 -1
  69. package/admin/assets/{index-WXxQwyJV.js → index-vGnRRM8b.js} +104 -104
  70. package/admin/assets/{is-BUADPoni.js → is-5T5BMRUs.js} +1 -1
  71. package/admin/assets/{it-Ce3gssOP.js → it-BVocdL64.js} +1 -1
  72. package/admin/assets/{it-ch-CJzj2czr.js → it-ch-g40Nau9_.js} +1 -1
  73. package/admin/assets/{ja-DykMIu-9.js → ja-B20OfIuQ.js} +1 -1
  74. package/admin/assets/{jv-Cum6DLwa.js → jv-BHABcRuK.js} +1 -1
  75. package/admin/assets/{ka-foCPVFxw.js → ka-n41vrxKm.js} +1 -1
  76. package/admin/assets/{kk-CMNu1ysC.js → kk-Wbgu12fS.js} +1 -1
  77. package/admin/assets/{km-BfMisGaD.js → km-CKhKBloy.js} +1 -1
  78. package/admin/assets/{kn-R_9S5KJz.js → kn-CGuQntHB.js} +1 -1
  79. package/admin/assets/{ko-DYRND-mM.js → ko-CezL4UDJ.js} +1 -1
  80. package/admin/assets/{ku-CNZ_weGy.js → ku-BxSpmtCp.js} +1 -1
  81. package/admin/assets/{ky-BhTAWL4I.js → ky-C0SyLnPR.js} +1 -1
  82. package/admin/assets/{lb-CxWhQxwF.js → lb-Y7KwDWXU.js} +1 -1
  83. package/admin/assets/{lo-DBL_XLkE.js → lo-BSFQGbEr.js} +1 -1
  84. package/admin/assets/{lt-BakZVm4p.js → lt-hJzN-eOW.js} +1 -1
  85. package/admin/assets/{lv-CCn-slXG.js → lv-C_oDREN9.js} +1 -1
  86. package/admin/assets/{me-xPEA4qjE.js → me-BEBNCwj6.js} +1 -1
  87. package/admin/assets/{mi-6cCs2Mzx.js → mi-CxoHQu_r.js} +1 -1
  88. package/admin/assets/{mk-CwWbHJPS.js → mk-CMde5Lyr.js} +1 -1
  89. package/admin/assets/{ml-Dp7Ab1SV.js → ml-Bb1prImZ.js} +1 -1
  90. package/admin/assets/{mn-ClotGWAe.js → mn-Cbig8iIC.js} +1 -1
  91. package/admin/assets/{mr-GiM-paTF.js → mr-C2OpIZbx.js} +1 -1
  92. package/admin/assets/{ms-BiZ1_eVR.js → ms-DEYcAuJ5.js} +1 -1
  93. package/admin/assets/{ms-my-oevI0fOH.js → ms-my-B3WZsidY.js} +1 -1
  94. package/admin/assets/{mt-BaIHeOl1.js → mt-qLOys0a8.js} +1 -1
  95. package/admin/assets/{my-Cg5Fc_1j.js → my-DRfLOxB3.js} +1 -1
  96. package/admin/assets/{nb-ZPODjT6R.js → nb-CgMDn1Zp.js} +1 -1
  97. package/admin/assets/{ne-C0ti-ZX2.js → ne-D_QxFLXg.js} +1 -1
  98. package/admin/assets/{nl-DP2PkkGx.js → nl-ByoNxF5J.js} +1 -1
  99. package/admin/assets/{nl-be-VPC0QyaW.js → nl-be-i74dNB1Q.js} +1 -1
  100. package/admin/assets/{nn-NLidKyJd.js → nn-CXXinLMW.js} +1 -1
  101. package/admin/assets/{oc-lnc-Ddj9_PnD.js → oc-lnc-COJUbhtG.js} +1 -1
  102. package/admin/assets/{pa-in-DSAWffhb.js → pa-in-CS1YXP4F.js} +1 -1
  103. package/admin/assets/{pl-Yojex5aS.js → pl-C8IUihXp.js} +1 -1
  104. package/admin/assets/{pt-BQMs2la2.js → pt-Bb-_2exC.js} +1 -1
  105. package/admin/assets/{pt-br-DVeeNZu8.js → pt-br-CsJVJZP0.js} +1 -1
  106. package/admin/assets/{rn-CKkTrK3f.js → rn-Bnqkr3Ve.js} +1 -1
  107. package/admin/assets/{ro-BbgGULSZ.js → ro-F686nvw6.js} +1 -1
  108. package/admin/assets/{ru-mAZX3DTa.js → ru-De6t8zEr.js} +1 -1
  109. package/admin/assets/{rw-CYErOxKd.js → rw-dgQlpJrj.js} +1 -1
  110. package/admin/assets/{sd-kfPTqkSy.js → sd-D0kCoi0j.js} +1 -1
  111. package/admin/assets/{se-D0bN3rDS.js → se-CsHkKyBJ.js} +1 -1
  112. package/admin/assets/{sha512-99nhg44S.js → sha512-CwhW8y7u.js} +1 -1
  113. package/admin/assets/{si-COjb_4Hy.js → si-BCtFhatF.js} +1 -1
  114. package/admin/assets/{sk-Co95XNOo.js → sk-HU0zEULD.js} +1 -1
  115. package/admin/assets/{sl-DUXa5wTF.js → sl-pswBfYoS.js} +1 -1
  116. package/admin/assets/{sq-B-KU0nWK.js → sq-CBhNzauG.js} +1 -1
  117. package/admin/assets/{sr-Cb_b-zPG.js → sr-Ba_jL5gy.js} +1 -1
  118. package/admin/assets/{sr-cyrl-csuTDIB6.js → sr-cyrl-Cu3CgIND.js} +1 -1
  119. package/admin/assets/{ss-BDnE-cG6.js → ss-CgQ9MxWY.js} +1 -1
  120. package/admin/assets/{sv-CzWdOHcE.js → sv-D-BB39HA.js} +1 -1
  121. package/admin/assets/{sv-fi-IK8oi5nB.js → sv-fi-B-o1NvLZ.js} +1 -1
  122. package/admin/assets/{sw-fPHo5hof.js → sw-BLvaZOOT.js} +1 -1
  123. package/admin/assets/{ta-TteN0nyU.js → ta-DuDUH7cy.js} +1 -1
  124. package/admin/assets/{te-2gsQb1fF.js → te-CEN7Z7sm.js} +1 -1
  125. package/admin/assets/{tet-ClTpDYJv.js → tet-BQlE9nRY.js} +1 -1
  126. package/admin/assets/{tg-Bel7Uc6z.js → tg-D_Ri8xyt.js} +1 -1
  127. package/admin/assets/{th-pDQttM9V.js → th-Cni5syVw.js} +1 -1
  128. package/admin/assets/{tk-CxoKYZH6.js → tk-DpSrobWM.js} +1 -1
  129. package/admin/assets/{tl-ph-D9htRcOQ.js → tl-ph-DZSUk-Vh.js} +1 -1
  130. package/admin/assets/{tlh-7UqvDBxU.js → tlh-BbZfw6gL.js} +1 -1
  131. package/admin/assets/{tr-NjJrq1iC.js → tr-CDpse5eg.js} +1 -1
  132. package/admin/assets/{tzl-CzGaXn8M.js → tzl-Cw8O9VLh.js} +1 -1
  133. package/admin/assets/{tzm-BiuscZFr.js → tzm-MQi7pP8P.js} +1 -1
  134. package/admin/assets/{tzm-latn-IeWkCgWf.js → tzm-latn-B0fBCe7c.js} +1 -1
  135. package/admin/assets/{ug-cn-5LK64x5v.js → ug-cn-CryBI7iC.js} +1 -1
  136. package/admin/assets/{uk-CzacUaQe.js → uk-ehtRqDfR.js} +1 -1
  137. package/admin/assets/{ur-BRV7z4Gu.js → ur-DLUufiXP.js} +1 -1
  138. package/admin/assets/{uz-C4G77QOI.js → uz-BGWw0Xm-.js} +1 -1
  139. package/admin/assets/{uz-latn-CQFrzZ6F.js → uz-latn-_11BzAge.js} +1 -1
  140. package/admin/assets/{vi-DEFXdlJi.js → vi-B1XZb9GR.js} +1 -1
  141. package/admin/assets/{x-pseudo-sWj5RKxR.js → x-pseudo-DbSvrJEU.js} +1 -1
  142. package/admin/assets/{yo-CBDjk96e.js → yo-enfGQNrL.js} +1 -1
  143. package/admin/assets/{zh-CQtX_fkD.js → zh-SltlpEBf.js} +1 -1
  144. package/admin/assets/{zh-cn-D6dF0jKM.js → zh-cn-C5GmIAnm.js} +1 -1
  145. package/admin/assets/{zh-hk-DY-Jaqdg.js → zh-hk-DHOlvPn8.js} +1 -1
  146. package/admin/assets/{zh-tw-BdmVby0R.js → zh-tw-Bk63QN63.js} +1 -1
  147. package/admin/index.html +1 -1
  148. package/frontend/assets/index-legacy-CU5HXdA4.js +9 -0
  149. package/frontend/assets/{index-legacy-CQovmh_0.js → index-legacy-FmhiYDuG.js} +1 -1
  150. package/frontend/assets/{sha512-legacy-CXU3efCO.js → sha512-legacy-B8oB-JQf.js} +1 -1
  151. package/frontend/index.html +1 -1
  152. package/npm-shrinkwrap.json +75 -31
  153. package/package.json +12 -12
  154. package/src/adminApis.js +2 -2
  155. package/src/api.get_file_list.js +3 -3
  156. package/src/api.vfs.js +46 -1
  157. package/src/basicWeb.js +1 -1
  158. package/src/comments.js +7 -4
  159. package/src/const.js +1 -1
  160. package/src/cross.js +12 -10
  161. package/src/events.js +2 -3
  162. package/src/expiringCache.js +8 -7
  163. package/src/frontEndApis.js +17 -14
  164. package/src/geo.js +6 -5
  165. package/src/listen.js +3 -2
  166. package/src/middlewares.js +1 -1
  167. package/src/nat.js +4 -1
  168. package/src/perm.js +1 -1
  169. package/src/plugins.js +2 -2
  170. package/src/roots.js +2 -2
  171. package/src/selfCheck.js +2 -1
  172. package/src/serveGuiAndSharedFiles.js +17 -7
  173. package/src/serveGuiFiles.js +3 -3
  174. package/src/update.js +1 -3
  175. package/src/util-files.js +9 -4
  176. package/src/util-http.js +2 -0
  177. package/src/vfs.js +20 -8
  178. package/src/zip.js +1 -1
  179. package/frontend/assets/index-legacy-BtoTkZho.js +0 -9
package/src/vfs.js CHANGED
@@ -15,10 +15,11 @@ exports.getNodeByName = getNodeByName;
15
15
  exports.isRoot = isRoot;
16
16
  exports.getNodeName = getNodeName;
17
17
  exports.nodeIsFolder = nodeIsFolder;
18
- exports.hasDefaultFile = hasDefaultFile;
18
+ exports.getDefaultFile = getDefaultFile;
19
19
  exports.nodeIsLink = nodeIsLink;
20
20
  exports.hasPermission = hasPermission;
21
21
  exports.statusCodeForMissingPerm = statusCodeForMissingPerm;
22
+ exports.simpleWhoToError = simpleWhoToError;
22
23
  exports.walkNode = walkNode;
23
24
  exports.masksCouldGivePermission = masksCouldGivePermission;
24
25
  exports.parentMaskApplier = parentMaskApplier;
@@ -35,6 +36,7 @@ const fswin_1 = __importDefault(require("fswin"));
35
36
  const comments_1 = require("./comments");
36
37
  const walkDir_1 = require("./walkDir");
37
38
  const node_stream_1 = require("node:stream");
39
+ const adminApis_1 = require("./adminApis");
38
40
  const showHiddenFiles = (0, config_1.defineConfig)('show_hidden_files', false);
39
41
  function permsFromParent(parent, child) {
40
42
  const ret = {};
@@ -225,7 +227,7 @@ function nodeIsFolder(node) {
225
227
  return undefined;
226
228
  }
227
229
  }
228
- async function hasDefaultFile(node, ctx) {
230
+ async function getDefaultFile(node, ctx) {
229
231
  return node.default && nodeIsFolder(node) && await urlToNode(node.default, ctx, node) || undefined;
230
232
  }
231
233
  function nodeIsLink(node) {
@@ -254,7 +256,7 @@ function statusCodeForMissingPerm(node, perm, ctx, assign = true) {
254
256
  if ((0, misc_1.isWhoObject)(who))
255
257
  who = who.this;
256
258
  who ??= misc_1.defaultPerms[cur];
257
- if (typeof who !== 'string' || who === misc_1.WHO_ANY_ACCOUNT)
259
+ if (typeof who !== 'string' || who === misc_1.WHO_ANY_ACCOUNT || who === misc_1.WHO_ADMIN)
258
260
  break;
259
261
  if (!max--) {
260
262
  console.error(`Endless loop in permission ${perm}=${node[perm] ?? misc_1.defaultPerms[perm]} for ${node.url || getNodeName(node)}`);
@@ -262,19 +264,29 @@ function statusCodeForMissingPerm(node, perm, ctx, assign = true) {
262
264
  }
263
265
  cur = who;
264
266
  } while (1);
267
+ if ((0, misc_1.isWhoObject)(who) || isWhoVfsPerms(who))
268
+ throw Error(`permission type-guard: ${JSON.stringify(who)}`);
265
269
  const eventName = 'checkVfsPermission';
266
270
  if (events_1.default.anyListener(eventName)) {
267
271
  const first = lodash_1.default.max(events_1.default.emit(eventName, { who, node, perm, ctx }));
268
272
  if (first !== undefined)
269
273
  return first;
270
274
  }
271
- if (Array.isArray(who))
272
- return (0, perm_1.ctxBelongsTo)(ctx, who) ? 0 : const_1.HTTP_UNAUTHORIZED;
273
- return typeof who === 'boolean' ? (who ? 0 : const_1.HTTP_FORBIDDEN)
274
- : who === misc_1.WHO_ANY_ACCOUNT ? ((0, auth_1.getCurrentUsername)(ctx) ? 0 : const_1.HTTP_UNAUTHORIZED)
275
- : (0, misc_1.throw_)(Error(`invalid permission: ${perm}=${(0, misc_1.try_)(() => JSON.stringify(who))}`));
275
+ return simpleWhoToError(who, ctx)
276
+ ?? (0, misc_1.throw_)(Error(`invalid permission: ${perm}=${(0, misc_1.try_)(() => JSON.stringify(who))}`));
276
277
  }
277
278
  }
279
+ function simpleWhoToError(who, ctx) {
280
+ if (Array.isArray(who))
281
+ return (0, perm_1.ctxBelongsTo)(ctx, who) ? 0 : const_1.HTTP_UNAUTHORIZED;
282
+ return typeof who === 'boolean' ? (who ? 0 : const_1.HTTP_FORBIDDEN)
283
+ : who === misc_1.WHO_ANY_ACCOUNT ? ((0, auth_1.getCurrentUsername)(ctx) ? 0 : const_1.HTTP_UNAUTHORIZED)
284
+ : who === misc_1.WHO_ADMIN ? ((0, adminApis_1.ctxAdminAccess)(ctx) ? 0 : const_1.HTTP_UNAUTHORIZED)
285
+ : undefined;
286
+ }
287
+ function isWhoVfsPerms(who) {
288
+ return typeof who === 'string' && misc_1.PERM_KEYS.includes(who);
289
+ }
278
290
  // it's the responsibility of the caller to verify you have list permission on parent, as callers have different needs.
279
291
  async function* walkNode(parent, { ctx, depth = Infinity, prefixPath = '', requiredPerm, onlyFolders = false, onlyFiles = false, parallelizeRecursion = true, } = {}) {
280
292
  let started = false;
package/src/zip.js CHANGED
@@ -40,7 +40,7 @@ async function zipStreamFromFolder(node, ctx) {
40
40
  if ((0, vfs_1.nodeIsFolder)(subNode)) { // a directory needs to be walked
41
41
  if ((0, vfs_1.hasPermission)(subNode, 'can_list', ctx) && (0, vfs_1.hasPermission)(subNode, 'can_archive', ctx)) {
42
42
  yield subNode; // it could be empty
43
- yield* (0, vfs_1.walkNode)(subNode, { ctx, prefixPath: decodeURI(uri) + '/', requiredPerm: 'can_archive' });
43
+ yield* (0, vfs_1.walkNode)(subNode, { ctx, prefixPath: (0, misc_1.pathDecodeSegments)(uri) + '/', requiredPerm: 'can_archive' });
44
44
  }
45
45
  continue;
46
46
  }