solid-server 5.8.6 → 5.8.8-8d509db1

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 (686) hide show
  1. package/CHANGELOG.md +0 -0
  2. package/CONTRIBUTING.md +0 -0
  3. package/CONTRIBUTORS.md +0 -0
  4. package/Dockerfile +0 -0
  5. package/LICENSE.md +0 -0
  6. package/README.md +0 -0
  7. package/bin/config.json +0 -0
  8. package/bin/lib/cli-utils.mjs +54 -0
  9. package/bin/lib/cli.mjs +44 -0
  10. package/bin/lib/{init.js → init.mjs} +93 -94
  11. package/bin/lib/{invalidUsernames.js → invalidUsernames.mjs} +136 -148
  12. package/bin/lib/{migrateLegacyResources.js → migrateLegacyResources.mjs} +64 -69
  13. package/bin/lib/{options.js → options.mjs} +379 -405
  14. package/bin/lib/{start.js → start.mjs} +124 -148
  15. package/bin/lib/{updateIndex.js → updateIndex.mjs} +55 -56
  16. package/bin/solid +2 -2
  17. package/bin/solid-test +0 -0
  18. package/common/css/bootstrap.min.css +6 -0
  19. package/common/css/solid.css +0 -0
  20. package/common/fonts/glyphicons-halflings-regular.eot +0 -0
  21. package/common/fonts/glyphicons-halflings-regular.svg +0 -0
  22. package/common/fonts/glyphicons-halflings-regular.ttf +0 -0
  23. package/common/fonts/glyphicons-halflings-regular.woff +0 -0
  24. package/common/fonts/glyphicons-halflings-regular.woff2 +0 -0
  25. package/common/img/solid-emblem.svg +0 -0
  26. package/common/js/auth-buttons.js +0 -0
  27. package/common/js/auth-buttons.mjs +57 -0
  28. package/common/js/index-buttons.js +0 -0
  29. package/common/js/index-buttons.mjs +43 -0
  30. package/common/js/solid.js +0 -0
  31. package/common/js/solid.mjs +456 -0
  32. package/common/well-known/security.txt +0 -0
  33. package/config/defaults.js +0 -0
  34. package/config/defaults.mjs +22 -0
  35. package/config/templates/emails/delete-account.js +49 -0
  36. package/config/templates/emails/delete-account.mjs +31 -0
  37. package/config/templates/emails/invalid-username.js +30 -0
  38. package/config/templates/emails/invalid-username.mjs +27 -0
  39. package/config/templates/emails/reset-password.js +49 -0
  40. package/config/templates/emails/reset-password.mjs +31 -0
  41. package/config/templates/emails/welcome.js +39 -0
  42. package/config/templates/emails/welcome.mjs +23 -0
  43. package/config/templates/new-account/favicon.ico +0 -0
  44. package/config/templates/new-account/favicon.ico.acl +26 -0
  45. package/config/templates/new-account/profile/card$.ttl +26 -0
  46. package/config/templates/new-account/robots.txt +3 -0
  47. package/config/templates/new-account/robots.txt.acl +26 -0
  48. package/config/templates/new-account/settings/prefs.ttl +15 -0
  49. package/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
  50. package/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
  51. package/{default-templates/new-account/.meta.acl → config/templates/new-account/settings/publicTypeIndex.ttl.acl} +4 -4
  52. package/config/templates/new-account/settings/serverSide.ttl.acl +13 -0
  53. package/config/templates/new-account/settings/serverSide.ttl.inactive +12 -0
  54. package/config/templates/server/favicon.ico +0 -0
  55. package/{.well-known/.acl → config/templates/server/favicon.ico.acl} +2 -2
  56. package/config/templates/server/index.html +54 -0
  57. package/config/templates/server/robots.txt +3 -0
  58. package/{default-templates/server/.well-known/.acl → config/templates/server/robots.txt.acl} +2 -2
  59. package/config/usernames-blacklist.json +0 -0
  60. package/config/views/account/account-deleted.hbs +17 -0
  61. package/config/views/account/delete-confirm.hbs +51 -0
  62. package/config/views/account/delete-link-sent.hbs +17 -0
  63. package/config/views/account/delete.hbs +51 -0
  64. package/config/views/account/invalid-username.hbs +22 -0
  65. package/config/views/account/register-disabled.hbs +6 -0
  66. package/config/views/account/register-form.hbs +133 -0
  67. package/config/views/account/register.hbs +24 -0
  68. package/config/views/auth/auth-hidden-fields.hbs +8 -0
  69. package/config/views/auth/change-password.hbs +58 -0
  70. package/config/views/auth/goodbye.hbs +23 -0
  71. package/config/views/auth/login-required.hbs +34 -0
  72. package/config/views/auth/login-tls.hbs +11 -0
  73. package/config/views/auth/login-username-password.hbs +28 -0
  74. package/config/views/auth/login.hbs +55 -0
  75. package/config/views/auth/no-permission.hbs +29 -0
  76. package/config/views/auth/password-changed.hbs +27 -0
  77. package/config/views/auth/reset-link-sent.hbs +21 -0
  78. package/config/views/auth/reset-password.hbs +52 -0
  79. package/config/views/auth/sharing.hbs +49 -0
  80. package/config/views/shared/create-account.hbs +8 -0
  81. package/config/views/shared/error.hbs +5 -0
  82. package/config.json-default +0 -0
  83. package/coverage/tmp/coverage-2254-1766613200322-0.json +1 -0
  84. package/coverage/tmp/coverage-2255-1766613179053-0.json +1 -0
  85. package/default-templates/emails/delete-account.js +0 -0
  86. package/default-templates/emails/delete-account.mjs +31 -0
  87. package/default-templates/emails/invalid-username.js +0 -0
  88. package/default-templates/emails/invalid-username.mjs +27 -0
  89. package/default-templates/emails/reset-password.js +0 -0
  90. package/default-templates/emails/reset-password.mjs +31 -0
  91. package/default-templates/emails/welcome.js +0 -0
  92. package/default-templates/emails/welcome.mjs +23 -0
  93. package/default-templates/new-account/favicon.ico +0 -0
  94. package/default-templates/new-account/favicon.ico.acl +0 -0
  95. package/default-templates/new-account/profile/card$.ttl +0 -0
  96. package/default-templates/new-account/robots.txt +0 -0
  97. package/default-templates/new-account/robots.txt.acl +0 -0
  98. package/default-templates/new-account/settings/prefs.ttl +0 -0
  99. package/default-templates/new-account/settings/privateTypeIndex.ttl +0 -0
  100. package/default-templates/new-account/settings/publicTypeIndex.ttl +0 -0
  101. package/default-templates/new-account/settings/publicTypeIndex.ttl.acl +0 -0
  102. package/default-templates/new-account/settings/serverSide.ttl.acl +0 -0
  103. package/default-templates/new-account/settings/serverSide.ttl.inactive +0 -0
  104. package/default-templates/server/favicon.ico +0 -0
  105. package/default-templates/server/favicon.ico.acl +0 -0
  106. package/default-templates/server/index.html +0 -0
  107. package/default-templates/server/robots.txt +0 -0
  108. package/default-templates/server/robots.txt.acl +0 -0
  109. package/default-views/account/account-deleted.hbs +0 -0
  110. package/default-views/account/delete-confirm.hbs +0 -0
  111. package/default-views/account/delete-link-sent.hbs +0 -0
  112. package/default-views/account/delete.hbs +0 -0
  113. package/default-views/account/invalid-username.hbs +0 -0
  114. package/default-views/account/register-disabled.hbs +0 -0
  115. package/default-views/account/register-form.hbs +0 -0
  116. package/default-views/account/register.hbs +0 -0
  117. package/default-views/auth/auth-hidden-fields.hbs +0 -0
  118. package/default-views/auth/change-password.hbs +0 -0
  119. package/default-views/auth/goodbye.hbs +0 -0
  120. package/default-views/auth/login-required.hbs +0 -0
  121. package/default-views/auth/login-tls.hbs +0 -0
  122. package/default-views/auth/login-username-password.hbs +0 -0
  123. package/default-views/auth/login.hbs +0 -0
  124. package/default-views/auth/no-permission.hbs +0 -0
  125. package/default-views/auth/password-changed.hbs +0 -0
  126. package/default-views/auth/reset-link-sent.hbs +0 -0
  127. package/default-views/auth/reset-password.hbs +0 -0
  128. package/default-views/auth/sharing.hbs +0 -0
  129. package/default-views/shared/create-account.hbs +0 -0
  130. package/default-views/shared/error.hbs +0 -0
  131. package/docker-compose.yml +0 -0
  132. package/docker-image/CONTRIBUTING.md +33 -0
  133. package/docker-image/Makefile +32 -0
  134. package/docker-image/README.md +65 -0
  135. package/docker-image/examples/docker-compose.all-in-one.yml +76 -0
  136. package/docker-image/examples/docker-compose.nginx.yml +51 -0
  137. package/docker-image/examples/docker-compose.simple.yml +34 -0
  138. package/docker-image/src/Dockerfile +34 -0
  139. package/docker-image/src/checks.sh +56 -0
  140. package/docker-image/src/create-temporary-cert.sh +14 -0
  141. package/docker-image/src/entrypoint.sh +8 -0
  142. package/{common/img/.gitkeep → docker-image/test/__init__.py} +0 -0
  143. package/docker-image/test/conftest.py +15 -0
  144. package/docker-image/test/test_image_foundations.py +51 -0
  145. package/docker-image/test/test_non_accessible_key_cert.py +36 -0
  146. package/docker-image/test/test_precondition_checks.py +41 -0
  147. package/docker-image/test/test_solid_default_config.py +66 -0
  148. package/docker-image/test/test_volumes.py +55 -0
  149. package/docker-image/test/wait_for_container.py +8 -0
  150. package/docs/how-to-delete-your-account.md +0 -0
  151. package/docs/login-and-grant-access-to-application.md +0 -0
  152. package/examples/custom-error-handling.js +0 -0
  153. package/examples/custom-error-handling.mjs +29 -0
  154. package/examples/ldp-with-webid.js +0 -0
  155. package/examples/ldp-with-webid.mjs +12 -0
  156. package/examples/simple-express-app.js +0 -0
  157. package/examples/simple-express-app.mjs +20 -0
  158. package/examples/simple-ldp-server.js +0 -0
  159. package/examples/simple-ldp-server.mjs +8 -0
  160. package/favicon.ico +0 -0
  161. package/favicon.ico.acl +0 -0
  162. package/index.cjs +4 -0
  163. package/index.html +0 -0
  164. package/index.mjs +23 -0
  165. package/lib/{acl-checker.js → acl-checker.mjs} +13 -15
  166. package/lib/api/accounts/{user-accounts.js → user-accounts.mjs} +17 -16
  167. package/lib/api/authn/{force-user.js → force-user.mjs} +5 -4
  168. package/lib/api/authn/index.mjs +8 -0
  169. package/lib/api/authn/{webid-oidc.js → webid-oidc.mjs} +27 -20
  170. package/lib/api/authn/{webid-tls.js → webid-tls.mjs} +12 -11
  171. package/lib/api/index.mjs +7 -0
  172. package/lib/{capability-discovery.js → capability-discovery.mjs} +3 -6
  173. package/lib/common/{fs-utils.js → fs-utils.mjs} +35 -43
  174. package/lib/common/template-utils.mjs +29 -0
  175. package/lib/common/{user-utils.js → user-utils.mjs} +24 -28
  176. package/lib/{create-app.js → create-app.mjs} +372 -361
  177. package/lib/{create-server.js → create-server.mjs} +32 -11
  178. package/lib/debug.mjs +37 -0
  179. package/lib/handlers/{allow.js → allow.mjs} +79 -83
  180. package/lib/handlers/{auth-proxy.js → auth-proxy.mjs} +4 -5
  181. package/lib/handlers/{copy.js → copy.mjs} +37 -39
  182. package/lib/handlers/{cors-proxy.js → cors-proxy.mjs} +9 -11
  183. package/lib/handlers/{delete.js → delete.mjs} +20 -22
  184. package/lib/handlers/{error-pages.js → error-pages.mjs} +144 -212
  185. package/lib/handlers/{get.js → get.mjs} +254 -252
  186. package/lib/handlers/{index.js → index.mjs} +7 -8
  187. package/lib/handlers/{notify.js → notify.mjs} +8 -10
  188. package/lib/handlers/{options.js → options.mjs} +3 -5
  189. package/lib/handlers/patch/{n3-patch-parser.js → n3-patch-parser.mjs} +57 -59
  190. package/lib/handlers/patch/{sparql-update-parser.js → sparql-update-parser.mjs} +14 -16
  191. package/lib/handlers/{patch.js → patch.mjs} +241 -235
  192. package/lib/handlers/{post.js → post.mjs} +101 -99
  193. package/lib/handlers/{put.js → put.mjs} +101 -105
  194. package/lib/handlers/{restrict-to-top-domain.js → restrict-to-top-domain.mjs} +2 -2
  195. package/lib/{header.js → header.mjs} +138 -143
  196. package/lib/{http-error.js → http-error.mjs} +35 -34
  197. package/lib/{ldp-container.js → ldp-container.mjs} +10 -12
  198. package/lib/ldp-copy.mjs +82 -0
  199. package/lib/ldp-middleware.mjs +38 -0
  200. package/lib/{ldp.js → ldp.mjs} +286 -75
  201. package/lib/{lock.js → lock.mjs} +10 -10
  202. package/lib/{metadata.js → metadata.mjs} +11 -11
  203. package/lib/models/account-manager.mjs +297 -0
  204. package/lib/models/account-template.mjs +70 -0
  205. package/lib/models/authenticator.mjs +161 -0
  206. package/lib/models/oidc-manager.mjs +23 -0
  207. package/lib/models/solid-host.mjs +63 -0
  208. package/lib/models/user-account.mjs +50 -0
  209. package/lib/models/webid-tls-certificate.mjs +97 -0
  210. package/lib/{payment-pointer-discovery.js → payment-pointer-discovery.mjs} +5 -8
  211. package/lib/{rdf-notification-template.js → rdf-notification-template.mjs} +3 -5
  212. package/lib/requests/add-cert-request.mjs +70 -0
  213. package/lib/requests/auth-request.mjs +151 -0
  214. package/lib/requests/{create-account-request.js → create-account-request.mjs} +249 -452
  215. package/lib/requests/delete-account-confirm-request.mjs +85 -0
  216. package/lib/requests/{delete-account-request.js → delete-account-request.mjs} +73 -134
  217. package/lib/requests/login-request.mjs +89 -0
  218. package/lib/requests/{password-change-request.js → password-change-request.mjs} +132 -201
  219. package/lib/requests/{password-reset-email-request.js → password-reset-email-request.mjs} +123 -202
  220. package/lib/requests/password-reset-request.mjs +47 -0
  221. package/lib/requests/register-request.mjs +48 -0
  222. package/lib/requests/{sharing-request.js → sharing-request.mjs} +174 -261
  223. package/lib/{resource-mapper.js → resource-mapper.mjs} +7 -6
  224. package/lib/{server-config.js → server-config.mjs} +15 -20
  225. package/lib/services/{blacklist-service.js → blacklist-service.mjs} +36 -33
  226. package/lib/services/email-service.mjs +76 -0
  227. package/lib/services/{token-service.js → token-service.mjs} +36 -44
  228. package/lib/{utils.js → utils.mjs} +309 -254
  229. package/lib/webid/{index.js → index.mjs} +9 -13
  230. package/lib/webid/lib/get.mjs +31 -0
  231. package/lib/webid/lib/{parse.js → parse.mjs} +10 -12
  232. package/lib/webid/lib/verify.mjs +77 -0
  233. package/lib/webid/tls/generate.mjs +53 -0
  234. package/lib/webid/tls/index.mjs +7 -0
  235. package/package.json +51 -31
  236. package/renovate.json +0 -0
  237. package/robots.txt +0 -0
  238. package/robots.txt.acl +0 -0
  239. package/solid-server-5.8.8.tgz +0 -0
  240. package/static/account-recovery.html +0 -0
  241. package/static/popup-redirect.html +0 -0
  242. package/static/signup.html +0 -0
  243. package/static/signup.html.acl +0 -0
  244. package/test/index.mjs +168 -0
  245. package/test/integration/account-creation-tls-test.mjs +127 -0
  246. package/test/integration/account-manager-test.mjs +151 -0
  247. package/test/integration/account-template-test.mjs +136 -0
  248. package/test/integration/acl-oidc-test.mjs +1048 -0
  249. package/test/integration/acl-tls-test.mjs +964 -0
  250. package/test/integration/auth-proxy-test.mjs +144 -0
  251. package/test/integration/authentication-oidc-test.mjs +812 -0
  252. package/test/integration/authentication-oidc-with-strict-origins-turned-off-test.mjs +638 -0
  253. package/test/integration/capability-discovery-test.mjs +116 -0
  254. package/test/integration/cors-proxy-test.mjs +145 -0
  255. package/test/integration/errors-oidc-test.mjs +109 -0
  256. package/test/integration/errors-test.mjs +49 -0
  257. package/test/integration/formats-test.mjs +136 -0
  258. package/test/integration/header-test.mjs +101 -0
  259. package/test/integration/http-copy-test.mjs +109 -0
  260. package/test/integration/http-test.mjs +1197 -0
  261. package/test/integration/ldp-test.mjs +528 -0
  262. package/test/integration/oidc-manager-test.mjs +42 -0
  263. package/test/integration/params-test.mjs +192 -0
  264. package/test/integration/patch-sparql-update-test.mjs +195 -0
  265. package/test/integration/patch-test.mjs +573 -0
  266. package/test/integration/payment-pointer-test.mjs +155 -0
  267. package/test/integration/prep-test.mjs +314 -0
  268. package/test/integration/quota-test.mjs +51 -0
  269. package/test/integration/special-root-acl-handling-test.mjs +68 -0
  270. package/test/integration/validate-tts-test.mjs +57 -0
  271. package/test/integration/www-account-creation-oidc-test.mjs +311 -0
  272. package/test/keys/cert.pem +21 -0
  273. package/test/keys/client-cert.pem +19 -0
  274. package/test/keys/client-key.pem +27 -0
  275. package/test/keys/key.pem +27 -0
  276. package/test/keys/user1-cert.pem +23 -0
  277. package/test/keys/user1-key.pem +28 -0
  278. package/test/keys/user2-cert.pem +23 -0
  279. package/test/keys/user2-key.pem +27 -0
  280. package/test/mocha.opts +2 -0
  281. package/test/resources/Makefile +146 -0
  282. package/test/resources/accounts/alice.localhost/profile/card +0 -0
  283. package/test/resources/accounts/db/oidc/op/clients/_key_30860bb5cf6ba07e80ed7b2e7178c7ad.json +1 -0
  284. package/test/resources/accounts/db/oidc/op/provider.json +419 -0
  285. package/test/resources/accounts/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A3457.json +1 -0
  286. package/test/resources/accounts/localhost/samplePublicContainer/nicola.jpg +0 -0
  287. package/test/resources/accounts/tim.localhost/hello.html +9 -0
  288. package/test/resources/accounts/tim.localhost/profile/card +0 -0
  289. package/test/resources/accounts-acl/config/templates/emails/welcome-test.js +39 -0
  290. package/test/resources/accounts-acl/config/templates/new-account/favicon.ico +0 -0
  291. package/test/resources/accounts-acl/config/templates/new-account/favicon.ico.acl +26 -0
  292. package/test/resources/accounts-acl/config/templates/new-account/index.html +28 -0
  293. package/test/resources/accounts-acl/config/templates/new-account/index.html.acl +22 -0
  294. package/test/resources/accounts-acl/config/templates/new-account/profile/card +27 -0
  295. package/{default-templates/new-account/inbox/.acl → test/resources/accounts-acl/config/templates/new-account/profile/card.acl} +5 -6
  296. package/test/resources/accounts-acl/config/templates/new-account/settings/prefs.ttl +9 -0
  297. package/test/resources/accounts-acl/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
  298. package/test/resources/accounts-acl/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
  299. package/test/resources/accounts-acl/config/templates/new-account/settings/publicTypeIndex.ttl.acl +25 -0
  300. package/test/resources/accounts-acl/config/templates/new-account/settings/serverSide.ttl +14 -0
  301. package/test/resources/accounts-acl/config/templates/server/index.html +35 -0
  302. package/{.acl → test/resources/accounts-acl/config/templates/server/index.html.acl} +4 -3
  303. package/test/resources/accounts-acl/config/views/account/register.hbs +58 -0
  304. package/test/resources/accounts-acl/config/views/auth/consent.hbs +49 -0
  305. package/test/resources/accounts-acl/config/views/auth/goodbye.hbs +20 -0
  306. package/test/resources/accounts-acl/config/views/auth/login-required.hbs +0 -0
  307. package/test/resources/accounts-acl/config/views/auth/login.hbs +51 -0
  308. package/test/resources/accounts-acl/config/views/auth/no-permission.hbs +0 -0
  309. package/test/resources/accounts-acl/db/oidc/op/clients/_key_77bb3b35edb1f3f7b887c25d1211a491.json +1 -0
  310. package/test/resources/accounts-acl/db/oidc/op/provider.json +419 -0
  311. package/test/resources/accounts-acl/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7777.json +1 -0
  312. package/test/resources/accounts-acl/localhost/favicon.ico +0 -0
  313. package/test/resources/accounts-acl/localhost/index.html +35 -0
  314. package/{default-templates/server/.acl → test/resources/accounts-acl/localhost/index.html.acl} +4 -3
  315. package/test/resources/accounts-acl/nicola.localhost/index.html +1 -0
  316. package/test/resources/accounts-acl/nicola.localhost/index.html.acl +10 -0
  317. package/test/resources/accounts-acl/quota/settings/serverSide.ttl +11 -0
  318. package/test/resources/accounts-acl/tim.localhost/append-acl/abc.ttl +1 -0
  319. package/test/resources/accounts-acl/tim.localhost/append-acl/abc.ttl.acl +8 -0
  320. package/test/resources/accounts-acl/tim.localhost/append-acl/abc2.ttl +1 -0
  321. package/test/resources/accounts-acl/tim.localhost/append-acl/abc2.ttl.acl +8 -0
  322. package/test/resources/accounts-acl/tim.localhost/fake-account/hello.html +9 -0
  323. package/test/resources/accounts-acl/tim.localhost/group/test-folder/group-listing-error.ttl +1 -0
  324. package/test/resources/accounts-acl/tim.localhost/group/test-folder/group-listing.ttl +14 -0
  325. package/test/resources/accounts-acl/tim.localhost/group/test-folder/some-other-file.txt +1 -0
  326. package/test/resources/accounts-acl/tim.localhost/multi-server/protected.txt +1 -0
  327. package/test/resources/accounts-acl/tim.localhost/multi-server/protected.txt.acl +8 -0
  328. package/test/resources/accounts-acl/tim.localhost/no-acl/test-file.html +1 -0
  329. package/test/resources/accounts-acl/tim.localhost/read-acl/deeper-tree/acls-only-on-top/example.ttl +1 -0
  330. package/test/resources/accounts-acl/tim.localhost/write-acl/test-file$.txt +1 -0
  331. package/test/resources/accounts-scenario/alice/db/oidc/op/clients/_key_e46bcfe080c59f5cbb53a559d6a272cb.json +1 -0
  332. package/test/resources/accounts-scenario/alice/db/oidc/op/provider.json +417 -0
  333. package/test/resources/accounts-scenario/alice/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7000.json +1 -0
  334. package/test/resources/accounts-scenario/alice/private-for-alice.txt +1 -0
  335. package/test/resources/accounts-scenario/alice/private-for-alice.txt.acl +12 -0
  336. package/test/resources/accounts-scenario/alice/profile/card$.ttl +10 -0
  337. package/test/resources/accounts-scenario/bob/db/oidc/op/clients/_key_e7fd102ec26a3dcd5916751e01a62315.json +1 -0
  338. package/test/resources/accounts-scenario/bob/db/oidc/op/provider.json +417 -0
  339. package/test/resources/accounts-scenario/bob/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7001.json +1 -0
  340. package/test/resources/accounts-scenario/bob/profile/card$.ttl +5 -0
  341. package/test/resources/accounts-scenario/bob/shared-with-alice.txt +1 -0
  342. package/test/resources/accounts-scenario/bob/shared-with-alice.txt.acl +15 -0
  343. package/test/resources/accounts-scenario/charlie/db/oidc/op/clients/_key_0eec962830f849876695b69df76a3137.json +1 -0
  344. package/test/resources/accounts-scenario/charlie/db/oidc/op/provider.json +415 -0
  345. package/test/resources/accounts-scenario/charlie/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A5002.json +1 -0
  346. package/test/resources/accounts-scenario/charlie/profile/card$.ttl +5 -0
  347. package/test/resources/accounts-strict-origin-off/alice/db/oidc/op/clients/_key_7d536a1f8c6eb86f41261e171a8af79a.json +1 -0
  348. package/test/resources/accounts-strict-origin-off/alice/db/oidc/op/provider.json +419 -0
  349. package/test/resources/accounts-strict-origin-off/alice/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7010.json +1 -0
  350. package/test/resources/accounts-strict-origin-off/alice/private-for-alice.txt +1 -0
  351. package/test/resources/accounts-strict-origin-off/alice/private-for-alice.txt.acl +12 -0
  352. package/test/resources/accounts-strict-origin-off/alice/profile/card$.ttl +10 -0
  353. package/test/resources/accounts-strict-origin-off/bob/db/oidc/op/clients/_key_0ed30b9e076814c6f6445582302487c2.json +1 -0
  354. package/test/resources/accounts-strict-origin-off/bob/db/oidc/op/provider.json +419 -0
  355. package/test/resources/accounts-strict-origin-off/bob/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7011.json +1 -0
  356. package/test/resources/accounts-strict-origin-off/bob/shared-with-alice.txt +1 -0
  357. package/test/resources/accounts-strict-origin-off/bob/shared-with-alice.txt.acl +15 -0
  358. package/test/resources/acl-tls/config/templates/emails/delete-account.js +49 -0
  359. package/test/resources/acl-tls/config/templates/emails/invalid-username.js +30 -0
  360. package/test/resources/acl-tls/config/templates/emails/reset-password.js +49 -0
  361. package/test/resources/acl-tls/config/templates/emails/welcome.js +39 -0
  362. package/test/resources/acl-tls/config/templates/new-account/favicon.ico +0 -0
  363. package/test/resources/acl-tls/config/templates/new-account/favicon.ico.acl +26 -0
  364. package/test/resources/acl-tls/config/templates/new-account/profile/card$.ttl +26 -0
  365. package/test/resources/acl-tls/config/templates/new-account/robots.txt +3 -0
  366. package/test/resources/acl-tls/config/templates/new-account/robots.txt.acl +26 -0
  367. package/test/resources/acl-tls/config/templates/new-account/settings/prefs.ttl +15 -0
  368. package/test/resources/acl-tls/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
  369. package/test/resources/acl-tls/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
  370. package/test/resources/acl-tls/config/templates/new-account/settings/publicTypeIndex.ttl.acl +25 -0
  371. package/test/resources/acl-tls/config/templates/new-account/settings/serverSide.ttl.acl +13 -0
  372. package/test/resources/acl-tls/config/templates/new-account/settings/serverSide.ttl.inactive +12 -0
  373. package/test/resources/acl-tls/config/templates/server/favicon.ico +0 -0
  374. package/test/resources/acl-tls/config/templates/server/favicon.ico.acl +15 -0
  375. package/test/resources/acl-tls/config/templates/server/index.html +55 -0
  376. package/test/resources/acl-tls/config/templates/server/robots.txt +3 -0
  377. package/test/resources/acl-tls/config/templates/server/robots.txt.acl +15 -0
  378. package/test/resources/acl-tls/config/views/account/account-deleted.hbs +17 -0
  379. package/test/resources/acl-tls/config/views/account/delete-confirm.hbs +51 -0
  380. package/test/resources/acl-tls/config/views/account/delete-link-sent.hbs +17 -0
  381. package/test/resources/acl-tls/config/views/account/delete.hbs +51 -0
  382. package/test/resources/acl-tls/config/views/account/invalid-username.hbs +22 -0
  383. package/test/resources/acl-tls/config/views/account/register-disabled.hbs +6 -0
  384. package/test/resources/acl-tls/config/views/account/register-form.hbs +147 -0
  385. package/test/resources/acl-tls/config/views/account/register.hbs +24 -0
  386. package/test/resources/acl-tls/config/views/auth/auth-hidden-fields.hbs +8 -0
  387. package/test/resources/acl-tls/config/views/auth/change-password.hbs +58 -0
  388. package/test/resources/acl-tls/config/views/auth/goodbye.hbs +23 -0
  389. package/test/resources/acl-tls/config/views/auth/login-required.hbs +34 -0
  390. package/test/resources/acl-tls/config/views/auth/login-tls.hbs +11 -0
  391. package/test/resources/acl-tls/config/views/auth/login-username-password.hbs +28 -0
  392. package/test/resources/acl-tls/config/views/auth/login.hbs +55 -0
  393. package/test/resources/acl-tls/config/views/auth/no-permission.hbs +29 -0
  394. package/test/resources/acl-tls/config/views/auth/password-changed.hbs +27 -0
  395. package/test/resources/acl-tls/config/views/auth/reset-link-sent.hbs +21 -0
  396. package/test/resources/acl-tls/config/views/auth/reset-password.hbs +52 -0
  397. package/test/resources/acl-tls/config/views/auth/sharing.hbs +49 -0
  398. package/test/resources/acl-tls/config/views/shared/create-account.hbs +8 -0
  399. package/test/resources/acl-tls/config/views/shared/error.hbs +5 -0
  400. package/test/resources/acl-tls/localhost/favicon.ico +0 -0
  401. package/test/resources/acl-tls/localhost/favicon.ico.acl +15 -0
  402. package/test/resources/acl-tls/localhost/index.html +48 -0
  403. package/test/resources/acl-tls/localhost/robots.txt +3 -0
  404. package/test/resources/acl-tls/localhost/robots.txt.acl +15 -0
  405. package/test/resources/acl-tls/tim.localhost/append-acl/abc.ttl +1 -0
  406. package/test/resources/acl-tls/tim.localhost/append-acl/abc.ttl.acl +8 -0
  407. package/test/resources/acl-tls/tim.localhost/append-acl/abc2.ttl +1 -0
  408. package/test/resources/acl-tls/tim.localhost/append-acl/abc2.ttl.acl +8 -0
  409. package/test/resources/acl-tls/tim.localhost/fake-account/hello.html +9 -0
  410. package/test/resources/acl-tls/tim.localhost/no-acl/test-file.html +1 -0
  411. package/test/resources/acl-tls/tim.localhost/profile/card$.ttl +17 -0
  412. package/test/resources/acl-tls/write-acl/test-file$.ttl +1 -0
  413. package/test/resources/auth-proxy/index.html +0 -0
  414. package/test/resources/auth-proxy/index.html.acl +0 -0
  415. package/test/resources/config/templates/emails/delete-account.js +49 -0
  416. package/test/resources/config/templates/emails/delete-account.mjs +31 -0
  417. package/test/resources/config/templates/emails/invalid-username.js +30 -0
  418. package/test/resources/config/templates/emails/invalid-username.mjs +27 -0
  419. package/test/resources/config/templates/emails/reset-password.js +49 -0
  420. package/test/resources/config/templates/emails/reset-password.mjs +31 -0
  421. package/test/resources/config/templates/emails/welcome.js +39 -0
  422. package/test/resources/config/templates/emails/welcome.mjs +23 -0
  423. package/test/resources/config/templates/new-account/favicon.ico +0 -0
  424. package/test/resources/config/templates/new-account/favicon.ico.acl +26 -0
  425. package/test/resources/config/templates/new-account/profile/card$.ttl +26 -0
  426. package/test/resources/config/templates/new-account/robots.txt +3 -0
  427. package/test/resources/config/templates/new-account/robots.txt.acl +26 -0
  428. package/test/resources/config/templates/new-account/settings/prefs.ttl +15 -0
  429. package/test/resources/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
  430. package/test/resources/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
  431. package/test/resources/config/templates/new-account/settings/publicTypeIndex.ttl.acl +25 -0
  432. package/test/resources/config/templates/new-account/settings/serverSide.ttl.acl +13 -0
  433. package/test/resources/config/templates/new-account/settings/serverSide.ttl.inactive +12 -0
  434. package/test/resources/config/templates/server/favicon.ico +0 -0
  435. package/test/resources/config/templates/server/favicon.ico.acl +15 -0
  436. package/test/resources/config/templates/server/index.html +54 -0
  437. package/test/resources/config/templates/server/robots.txt +3 -0
  438. package/test/resources/config/templates/server/robots.txt.acl +15 -0
  439. package/test/resources/config/views/account/account-deleted.hbs +17 -0
  440. package/test/resources/config/views/account/delete-confirm.hbs +51 -0
  441. package/test/resources/config/views/account/delete-link-sent.hbs +17 -0
  442. package/test/resources/config/views/account/delete.hbs +51 -0
  443. package/test/resources/config/views/account/invalid-username.hbs +22 -0
  444. package/test/resources/config/views/account/register-disabled.hbs +6 -0
  445. package/test/resources/config/views/account/register-form.hbs +133 -0
  446. package/test/resources/config/views/account/register.hbs +24 -0
  447. package/test/resources/config/views/auth/auth-hidden-fields.hbs +8 -0
  448. package/test/resources/config/views/auth/change-password.hbs +58 -0
  449. package/test/resources/config/views/auth/goodbye.hbs +23 -0
  450. package/test/resources/config/views/auth/login-required.hbs +34 -0
  451. package/test/resources/config/views/auth/login-tls.hbs +11 -0
  452. package/test/resources/config/views/auth/login-username-password.hbs +28 -0
  453. package/test/resources/config/views/auth/login.hbs +55 -0
  454. package/test/resources/config/views/auth/no-permission.hbs +29 -0
  455. package/test/resources/config/views/auth/password-changed.hbs +27 -0
  456. package/test/resources/config/views/auth/reset-link-sent.hbs +21 -0
  457. package/test/resources/config/views/auth/reset-password.hbs +52 -0
  458. package/test/resources/config/views/auth/sharing.hbs +49 -0
  459. package/test/resources/config/views/shared/create-account.hbs +8 -0
  460. package/test/resources/config/views/shared/error.hbs +5 -0
  461. package/test/resources/empty.spatch +0 -0
  462. package/test/resources/errorPages/401.html +5 -0
  463. package/test/resources/errorPages/403.html +5 -0
  464. package/test/resources/errorPages/404.html +5 -0
  465. package/test/resources/errorPages/405.html +5 -0
  466. package/test/resources/errorPages/415.html +5 -0
  467. package/test/resources/errorPages/500.html +5 -0
  468. package/test/resources/example_spkac.cnf +1 -0
  469. package/test/resources/external-servers/example.com/jwks.json +81 -0
  470. package/test/resources/external-servers/example.com/openid-configuration.json +53 -0
  471. package/test/resources/favicon.ico +0 -0
  472. package/test/resources/favicon.ico.acl +15 -0
  473. package/test/resources/headers/index.html +0 -0
  474. package/test/resources/headers/public-ra +0 -0
  475. package/test/resources/headers/public-ra.acl +7 -0
  476. package/test/resources/headers/user-rw-public-r +0 -0
  477. package/test/resources/headers/user-rw-public-r.acl +12 -0
  478. package/test/resources/headers/user-rwac-public-0 +0 -0
  479. package/test/resources/headers/user-rwac-public-0.acl +7 -0
  480. package/test/resources/hello.html +3 -0
  481. package/test/resources/invalid1.ttl +13 -0
  482. package/test/resources/invalid2.ttl +9 -0
  483. package/test/resources/ldpatch-example-final.ttl +23 -0
  484. package/test/resources/ldpatch-example-initial.ttl +22 -0
  485. package/test/resources/ldpatch-example-patch-1.spatch +8 -0
  486. package/test/resources/ldpatch-example-patch-2.spatch +12 -0
  487. package/test/resources/ldpatch-example-patch-3.spatch +14 -0
  488. package/test/resources/ldpatch-example-patch.ldpatch +25 -0
  489. package/test/resources/ldpatch-example-patch.spatch +24 -0
  490. package/test/resources/lennon.jsonld +7 -0
  491. package/test/resources/lfs-0.sparql +9 -0
  492. package/test/resources/lfs-1-final.json +10 -0
  493. package/test/resources/lfs-1.sparql +11 -0
  494. package/test/resources/messaging-scenario/user1.databox.me/profile/card +21 -0
  495. package/test/resources/nicola.jpg +0 -0
  496. package/test/resources/patch/append-only.ttl +2 -0
  497. package/test/resources/patch/append-only.ttl.acl +6 -0
  498. package/test/resources/patch/favicon.ico +0 -0
  499. package/test/resources/patch/favicon.ico.acl +15 -0
  500. package/test/resources/patch/index.html +0 -0
  501. package/test/resources/patch/read-append.ttl +2 -0
  502. package/test/resources/patch/read-append.ttl.acl +6 -0
  503. package/test/resources/patch/read-only.ttl +2 -0
  504. package/test/resources/patch/read-only.ttl.acl +6 -0
  505. package/test/resources/patch/read-write.ttl +2 -0
  506. package/test/resources/patch/read-write.ttl.acl +6 -0
  507. package/test/resources/patch/robots.txt +3 -0
  508. package/test/resources/patch/robots.txt.acl +15 -0
  509. package/test/resources/patch/write-only.ttl +2 -0
  510. package/test/resources/patch/write-only.ttl.acl +6 -0
  511. package/test/resources/patch-1-initial.ttl +3 -0
  512. package/test/resources/patch-2-final.ttl +2 -0
  513. package/test/resources/patch-2-initial.ttl +3 -0
  514. package/test/resources/patch-2.spatch +2 -0
  515. package/test/resources/patch-2n.spatch +2 -0
  516. package/test/resources/patch-3-final.ttl +28 -0
  517. package/test/resources/patch-4-final.ttl +29 -0
  518. package/test/resources/patch-5-final.ttl +1 -0
  519. package/test/resources/patch-5-initial.ttl +3 -0
  520. package/test/resources/patch-5.spatch +2 -0
  521. package/test/resources/put-input-2.html +13 -0
  522. package/test/resources/put-input.txt +6 -0
  523. package/test/resources/robots.txt +3 -0
  524. package/test/resources/robots.txt.acl +15 -0
  525. package/test/resources/sampleContainer/blank +0 -0
  526. package/test/resources/sampleContainer/cert.pkcs +0 -0
  527. package/test/resources/sampleContainer/example.ttl.old +1 -0
  528. package/test/resources/sampleContainer/example1.ttl +12 -0
  529. package/test/resources/sampleContainer/example2.ttl +3 -0
  530. package/test/resources/sampleContainer/example3.ttl +7 -0
  531. package/test/resources/sampleContainer/example4$.ttl +7 -0
  532. package/test/resources/sampleContainer/filename with spaces.txt +0 -0
  533. package/test/resources/sampleContainer/index.html +9 -0
  534. package/test/resources/sampleContainer/post2.ttl +6 -0
  535. package/test/resources/sampleContainer/put1.ttl +13 -0
  536. package/test/resources/sampleContainer/solid.png +0 -0
  537. package/test/resources/sampleContainer/user1.pfx +0 -0
  538. package/test/resources/sampleContainer/user2.pfx +0 -0
  539. package/test/resources/sampleContainer2/example1.ttl +10 -0
  540. package/test/resources/sampleContainer2/example2.ttl +7 -0
  541. package/test/resources/timbl.jpg +0 -0
  542. package/test/scenarios.md +23 -0
  543. package/test/surface/docker/cookie/Dockerfile +6 -0
  544. package/test/surface/docker/cookie/app/index.js +29 -0
  545. package/test/surface/docker/cookie/app/package-lock.json +13 -0
  546. package/test/surface/docker/cookie/app/package.json +14 -0
  547. package/test/surface/docker/server/Dockerfile +19 -0
  548. package/test/surface/docker/server/config/defaults.js +10 -0
  549. package/test/surface/docker/server/config/templates/emails/delete-account.js +49 -0
  550. package/test/surface/docker/server/config/templates/emails/invalid-username.js +30 -0
  551. package/test/surface/docker/server/config/templates/emails/reset-password.js +49 -0
  552. package/test/surface/docker/server/config/templates/emails/welcome.js +39 -0
  553. package/test/surface/docker/server/config/templates/new-account/favicon.ico +0 -0
  554. package/test/surface/docker/server/config/templates/new-account/favicon.ico.acl +26 -0
  555. package/test/surface/docker/server/config/templates/new-account/profile/card$.ttl +26 -0
  556. package/test/surface/docker/server/config/templates/new-account/robots.txt +3 -0
  557. package/test/surface/docker/server/config/templates/new-account/robots.txt.acl +26 -0
  558. package/test/surface/docker/server/config/templates/new-account/settings/prefs.ttl +15 -0
  559. package/test/surface/docker/server/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
  560. package/test/surface/docker/server/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
  561. package/test/surface/docker/server/config/templates/new-account/settings/publicTypeIndex.ttl.acl +25 -0
  562. package/test/surface/docker/server/config/templates/new-account/settings/serverSide.ttl.acl +13 -0
  563. package/test/surface/docker/server/config/templates/new-account/settings/serverSide.ttl.inactive +12 -0
  564. package/test/surface/docker/server/config/templates/server/favicon.ico +0 -0
  565. package/test/surface/docker/server/config/templates/server/favicon.ico.acl +15 -0
  566. package/test/surface/docker/server/config/templates/server/index.html +55 -0
  567. package/test/surface/docker/server/config/templates/server/robots.txt +3 -0
  568. package/test/surface/docker/server/config/templates/server/robots.txt.acl +15 -0
  569. package/test/surface/docker/server/config/usernames-blacklist.json +4 -0
  570. package/test/surface/docker/server/config/views/account/account-deleted.hbs +17 -0
  571. package/test/surface/docker/server/config/views/account/delete-confirm.hbs +51 -0
  572. package/test/surface/docker/server/config/views/account/delete-link-sent.hbs +17 -0
  573. package/test/surface/docker/server/config/views/account/delete.hbs +51 -0
  574. package/test/surface/docker/server/config/views/account/invalid-username.hbs +22 -0
  575. package/test/surface/docker/server/config/views/account/register-disabled.hbs +6 -0
  576. package/test/surface/docker/server/config/views/account/register-form.hbs +147 -0
  577. package/test/surface/docker/server/config/views/account/register.hbs +24 -0
  578. package/test/surface/docker/server/config/views/auth/auth-hidden-fields.hbs +8 -0
  579. package/test/surface/docker/server/config/views/auth/change-password.hbs +58 -0
  580. package/test/surface/docker/server/config/views/auth/goodbye.hbs +23 -0
  581. package/test/surface/docker/server/config/views/auth/login-required.hbs +34 -0
  582. package/test/surface/docker/server/config/views/auth/login-tls.hbs +11 -0
  583. package/test/surface/docker/server/config/views/auth/login-username-password.hbs +28 -0
  584. package/test/surface/docker/server/config/views/auth/login.hbs +55 -0
  585. package/test/surface/docker/server/config/views/auth/no-permission.hbs +29 -0
  586. package/test/surface/docker/server/config/views/auth/password-changed.hbs +27 -0
  587. package/test/surface/docker/server/config/views/auth/reset-link-sent.hbs +21 -0
  588. package/test/surface/docker/server/config/views/auth/reset-password.hbs +52 -0
  589. package/test/surface/docker/server/config/views/auth/sharing.hbs +49 -0
  590. package/test/surface/docker/server/config/views/shared/create-account.hbs +8 -0
  591. package/test/surface/docker/server/config/views/shared/error.hbs +5 -0
  592. package/test/surface/docker/server/config.json +22 -0
  593. package/test/surface/docker/server/data/favicon.ico +0 -0
  594. package/test/surface/docker/server/data/favicon.ico.acl +26 -0
  595. package/test/surface/docker/server/data/index.html +48 -0
  596. package/test/surface/docker/server/data/profile/card$.ttl +31 -0
  597. package/test/surface/docker/server/data/robots.txt +3 -0
  598. package/test/surface/docker/server/data/robots.txt.acl +26 -0
  599. package/test/surface/docker/server/data/settings/prefs.ttl +15 -0
  600. package/test/surface/docker/server/data/settings/privateTypeIndex.ttl +4 -0
  601. package/test/surface/docker/server/data/settings/publicTypeIndex.ttl +4 -0
  602. package/test/surface/docker/server/data/settings/publicTypeIndex.ttl.acl +25 -0
  603. package/test/surface/docker/server/data/settings/serverSide.ttl +0 -0
  604. package/test/surface/docker/server/data/settings/serverSide.ttl.acl +13 -0
  605. package/test/surface/docker/server/data/settings/serverSide.ttl.inactive +12 -0
  606. package/test/surface/docker/server/env.list +4 -0
  607. package/test/surface/docker/solid-crud/Dockerfile +4 -0
  608. package/test/surface/docker/web-access-control/Dockerfile +1 -0
  609. package/test/surface/docker/webid-provider/Dockerfile +1 -0
  610. package/test/surface/run-solid-test-suite.sh +75 -0
  611. package/test/surface/server-env.list +5 -0
  612. package/test/surface/solid-crud-tests-env.list +5 -0
  613. package/test/surface/thirdparty-config.json +23 -0
  614. package/test/surface/thirdparty-env.list +6 -0
  615. package/test/surface/web-access-control-tests-env.list +6 -0
  616. package/test/surface/webid-provider-tests-env.list +4 -0
  617. package/test/test-helpers.mjs +63 -0
  618. package/test/unit/account-manager-test.mjs +610 -0
  619. package/test/unit/account-template-test.mjs +59 -0
  620. package/test/unit/acl-checker-test.mjs +51 -0
  621. package/test/unit/add-cert-request-test.mjs +120 -0
  622. package/test/unit/auth-handlers-test.mjs +108 -0
  623. package/test/unit/auth-proxy-test.mjs +224 -0
  624. package/test/unit/auth-request-test.mjs +96 -0
  625. package/test/unit/authenticator-test.mjs +34 -0
  626. package/test/unit/blacklist-service-test.mjs +49 -0
  627. package/test/unit/create-account-request-test.mjs +306 -0
  628. package/test/unit/delete-account-confirm-request-test.mjs +234 -0
  629. package/test/unit/delete-account-request-test.mjs +180 -0
  630. package/test/unit/email-service-test.mjs +166 -0
  631. package/test/unit/email-welcome-test.mjs +81 -0
  632. package/test/unit/error-pages-test.mjs +100 -0
  633. package/test/unit/esm-imports.test.mjs +149 -0
  634. package/test/unit/force-user-test.mjs +73 -0
  635. package/test/unit/getAvailableUrl-test.mjs +30 -0
  636. package/test/unit/getTrustedOrigins-test.mjs +20 -0
  637. package/test/unit/login-request-test.mjs +246 -0
  638. package/test/unit/oidc-manager-test.mjs +50 -0
  639. package/test/unit/password-authenticator-test.mjs +125 -0
  640. package/test/unit/password-change-request-test.mjs +259 -0
  641. package/test/unit/password-reset-email-request-test.mjs +234 -0
  642. package/test/unit/resource-mapper-test.mjs +673 -0
  643. package/test/unit/solid-host-test.mjs +119 -0
  644. package/test/unit/tls-authenticator-test.mjs +174 -0
  645. package/test/unit/token-service-test.mjs +82 -0
  646. package/test/unit/user-account-test.mjs +38 -0
  647. package/test/unit/user-accounts-api-test.mjs +59 -0
  648. package/test/unit/user-utils-test.mjs +64 -0
  649. package/test/unit/utils-test.mjs +114 -0
  650. package/test/utils/index.mjs +167 -0
  651. package/test/utils.mjs +205 -0
  652. package/test/validate-turtle.mjs +43 -0
  653. package/.github/workflows/ci.yml +0 -113
  654. package/.nvmrc +0 -1
  655. package/.snyk +0 -35
  656. package/bin/lib/cli-utils.js +0 -85
  657. package/bin/lib/cli.js +0 -39
  658. package/bin/solid.js +0 -3
  659. package/default-templates/new-account/.acl +0 -26
  660. package/default-templates/new-account/.meta +0 -5
  661. package/default-templates/new-account/.well-known/.acl +0 -19
  662. package/default-templates/new-account/private/.acl +0 -10
  663. package/default-templates/new-account/profile/.acl +0 -19
  664. package/default-templates/new-account/public/.acl +0 -19
  665. package/default-templates/new-account/settings/.acl +0 -20
  666. package/index.js +0 -3
  667. package/lib/api/authn/index.js +0 -5
  668. package/lib/api/index.js +0 -6
  669. package/lib/common/template-utils.js +0 -50
  670. package/lib/debug.js +0 -18
  671. package/lib/ldp-copy.js +0 -73
  672. package/lib/ldp-middleware.js +0 -40
  673. package/lib/models/account-manager.js +0 -604
  674. package/lib/models/account-template.js +0 -156
  675. package/lib/models/authenticator.js +0 -337
  676. package/lib/models/oidc-manager.js +0 -53
  677. package/lib/models/solid-host.js +0 -131
  678. package/lib/models/user-account.js +0 -113
  679. package/lib/models/webid-tls-certificate.js +0 -184
  680. package/lib/requests/add-cert-request.js +0 -138
  681. package/lib/requests/auth-request.js +0 -234
  682. package/lib/requests/delete-account-confirm-request.js +0 -170
  683. package/lib/requests/login-request.js +0 -205
  684. package/lib/services/email-service.js +0 -162
  685. package/lib/webid/lib/get.js +0 -27
  686. package/lib/webid/tls/index.js +0 -185
@@ -1,28 +1,23 @@
1
1
  /* eslint-disable node/no-deprecated-api */
2
2
 
3
- const { join, dirname } = require('path')
4
- const intoStream = require('into-stream')
5
- const url = require('url')
6
- const fs = require('fs')
7
- const $rdf = require('rdflib')
8
- const mkdirp = require('fs-extra').mkdirp
9
- const uuid = require('uuid')
10
- const debug = require('./debug')
11
- const error = require('./http-error')
12
- const stringToStream = require('./utils').stringToStream
13
- const serialize = require('./utils').serialize
14
- const overQuota = require('./utils').overQuota
15
- const getContentType = require('./utils').getContentType
16
- const extend = require('extend')
17
- const rimraf = require('rimraf')
18
- const ldpContainer = require('./ldp-container')
19
- const parse = require('./utils').parse
20
- const fetch = require('node-fetch')
21
- const { promisify } = require('util')
22
- const URL = require('url')
23
- const withLock = require('./lock')
24
- const utilPath = require('path')
25
- const { clearAclCache } = require('./acl-checker')
3
+ import utilPath, { join, dirname } from 'path'
4
+ import intoStream from 'into-stream'
5
+ import urlModule from 'url'
6
+ import fs from 'fs'
7
+ import $rdf from 'rdflib'
8
+ import { mkdirp } from 'fs-extra'
9
+ import { v4 as uuid } from 'uuid' // there seem to be an esm module
10
+ import debug from './debug.mjs'
11
+ import error from './http-error.mjs'
12
+ import { stringToStream, serialize, overQuota, getContentType, parse } from './utils.mjs'
13
+ import extend from 'extend'
14
+ import rimraf from 'rimraf'
15
+ import { exec } from 'child_process'
16
+ import * as ldpContainer from './ldp-container.mjs'
17
+ import fetch from 'node-fetch'
18
+ import { promisify } from 'util'
19
+ import withLock from './lock.mjs'
20
+ import { clearAclCache } from './acl-checker.mjs'
26
21
 
27
22
  const RDF_MIME_TYPES = new Set([
28
23
  'text/turtle', // .ttl
@@ -149,6 +144,7 @@ class LDP {
149
144
  extension = ''
150
145
  }
151
146
  // pepare slug
147
+ debug.handlers('POST -- Slug: ' + slug) // alain
152
148
  if (slug) {
153
149
  slug = decodeURIComponent(slug)
154
150
 
@@ -170,7 +166,8 @@ class LDP {
170
166
  debug.handlers('POST -- Will create at: ' + resourceUrl)
171
167
 
172
168
  await ldp.put(resourceUrl, stream, contentType)
173
- return URL.parse(resourceUrl).path
169
+ // return urlModule.parse(resourceUrl).path
170
+ return new URL(resourceUrl).pathname
174
171
  }
175
172
 
176
173
  isAuxResource (slug, extension) {
@@ -200,10 +197,9 @@ class LDP {
200
197
  * @return {Promise<Graph>}
201
198
  */
202
199
  async putGraph (graph, uri, contentType) {
203
- const { path } = url.parse(uri)
204
200
  const content = await serialize(graph, uri, contentType)
205
201
  const stream = stringToStream(content)
206
- return await this.put(path, stream, contentType)
202
+ return await this.put(uri, stream, contentType)
207
203
  }
208
204
 
209
205
  isValidRdf (body, requestUri, contentType) {
@@ -211,7 +207,7 @@ class LDP {
211
207
  try {
212
208
  $rdf.parse(body, resourceGraph, requestUri, contentType)
213
209
  } catch (err) {
214
- debug.ldp('VALIDATE -- Error parsing data: ' + err)
210
+ if (debug && debug.ldp) debug.ldp('VALIDATE -- Error parsing data: ' + err)
215
211
  return false
216
212
  }
217
213
  return true
@@ -225,7 +221,7 @@ class LDP {
225
221
  'PUT request requires a content-type via the Content-Type header')
226
222
  }
227
223
  // reject resource with percent-encoded $ extension
228
- const dollarExtensionRegex = /%(?:24)\.[^%(?:24)]*$/ // /\$\.[^$]*$/
224
+ const dollarExtensionRegex = /%(?:24)\.[^%(?:24)]*$/
229
225
  if ((url.url || url).match(dollarExtensionRegex)) {
230
226
  throw error(400, 'Resource with a $.ext is not allowed by the server')
231
227
  }
@@ -233,7 +229,7 @@ class LDP {
233
229
  let isOverQuota
234
230
  // Someone had a reason to make url actually a req sometimes but not
235
231
  // all the time. So now we have to account for that, as done below.
236
- const hostname = typeof url !== 'string' ? url.hostname : URL.parse(url).hostname
232
+ const hostname = typeof url !== 'string' ? url.hostname : urlModule.parse(url).hostname
237
233
  try {
238
234
  isOverQuota = await overQuota(this.resourceMapper.resolveFilePath(hostname), this.serverUri)
239
235
  } catch (err) {
@@ -251,7 +247,6 @@ class LDP {
251
247
  })
252
248
 
253
249
  if (container) { path += suffixMeta }
254
- // debug.handlers(container + ' item ' + (url.url || url) + ' ' + contentType + ' ' + path)
255
250
  // check if file exists, and in that case that it has the same extension
256
251
  if (!container) { await this.checkFileExtension(url, path) }
257
252
  // Create the enclosing directory, if necessary, do not create pubsub if PUT create container
@@ -266,7 +261,7 @@ class LDP {
266
261
  return withLock(path, () => new Promise((resolve, reject) => {
267
262
  // HACK: the middleware in webid-oidc.js uses body-parser, thus ending the stream of data
268
263
  // for JSON bodies. So, the stream needs to be reset
269
- if (contentType.includes('application/json')) {
264
+ if (contentType && contentType.includes && contentType.includes('application/json')) {
270
265
  stream = intoStream(JSON.stringify(stream.body))
271
266
  }
272
267
  const file = stream.pipe(fs.createWriteStream(path))
@@ -288,9 +283,9 @@ class LDP {
288
283
  * @param {*} hostname
289
284
  * @param {*} nonContainer
290
285
  */
291
- async createDirectory (path, hostname, nonContainer = true) {
286
+ async createDirectory (pathArg, hostname, nonContainer = true) {
292
287
  try {
293
- const dirName = dirname(path)
288
+ const dirName = dirname(pathArg)
294
289
  if (!fs.existsSync(dirName)) {
295
290
  await promisify(mkdirp)(dirName)
296
291
  if (this.live && nonContainer) {
@@ -303,20 +298,19 @@ class LDP {
303
298
  hostname
304
299
  })).url
305
300
  // Update websockets
306
- this.live(URL.parse(parentDirectoryUrl).pathname)
301
+ this.live(urlModule.parse(parentDirectoryUrl).pathname)
307
302
  }
308
303
  }
309
304
  } catch (err) {
310
305
  debug.handlers('PUT -- Error creating directory: ' + err)
311
- throw error(err,
312
- 'Failed to create the path to the new resource')
306
+ throw error(err, 'Failed to create the path to the new resource')
313
307
  }
314
308
  }
315
309
 
316
- async checkFileExtension (url, path) {
310
+ async checkFileExtension (urlArg, pathArg) {
317
311
  try {
318
- const { path: existingPath } = await this.resourceMapper.mapUrlToFile({ url })
319
- if (path !== existingPath) {
312
+ const { path: existingPath } = await this.resourceMapper.mapUrlToFile({ url: urlArg })
313
+ if (pathArg !== existingPath) {
320
314
  try {
321
315
  await withLock(existingPath, () => promisify(fs.unlink)(existingPath))
322
316
  } catch (err) { throw error(err, 'Failed to delete resource') }
@@ -390,11 +384,11 @@ class LDP {
390
384
  async fetchGraph (uri, options = {}) {
391
385
  const response = await fetch(uri)
392
386
  if (!response.ok) {
393
- const error = new Error(
387
+ const err = new Error(
394
388
  `Error fetching ${uri}: ${response.status} ${response.statusText}`
395
389
  )
396
- error.statusCode = response.status || 400
397
- throw error
390
+ err.statusCode = response.status || 400
391
+ throw err
398
392
  }
399
393
  const body = await response.text()
400
394
 
@@ -402,20 +396,19 @@ class LDP {
402
396
  }
403
397
 
404
398
  /**
405
- * Loads from fs the graph at a given uri, parses it and and returns it.
399
+ * Remotely loads the graph at a given uri, parses it and and returns it.
406
400
  * Usage:
407
401
  *
408
402
  * ```
409
- * ldp.getGraph('https://localhost:8443/contacts/card1.ttl')
403
+ * ldp.fetchGraph('https://example.com/contacts/card1.ttl')
410
404
  * .then(graph => {
411
- * // let matches = graph.match(...)
405
+ * // const matches = graph.match(...)
412
406
  * })
413
407
  * ```
414
408
  *
415
409
  * @param uri {string} Fully qualified uri of the request.
416
- * Note that the protocol part is needed, to provide a base URI to pass on
417
- * to the graph parser.
418
- * @param [contentType] {string}
410
+ *
411
+ * @param [options] {object} Options hashmap, passed through to fetchGraph
419
412
  *
420
413
  * @return {Promise<Graph>}
421
414
  */
@@ -439,11 +432,9 @@ class LDP {
439
432
  // this /.meta has no functionality in actual NSS
440
433
  // comment https://github.com/solid/node-solid-server/pull/1604#discussion_r652903546
441
434
  async isOwner (webId, hostname) {
442
- // const ldp = req.app.locals.ldp
443
435
  const rootUrl = this.resourceMapper.resolveUrl(hostname)
444
436
  let graph
445
437
  try {
446
- // TODO check for permission ?? Owner is a MUST
447
438
  graph = await this.getGraph(rootUrl + '/.meta')
448
439
  const SOLID = $rdf.Namespace('http://www.w3.org/ns/solid/terms#')
449
440
  const owner = await graph.statementsMatching($rdf.sym(webId), SOLID('account'), $rdf.sym(rootUrl + '/'))
@@ -454,40 +445,34 @@ class LDP {
454
445
  }
455
446
 
456
447
  async get (options, searchIndex = true) {
457
- let path, contentType, stats
448
+ let pathLocal, contentType, stats
458
449
  try {
459
- ({ path, contentType } = await this.resourceMapper.mapUrlToFile({ url: options, searchIndex }))
460
- stats = await this.stat(path)
450
+ ({ path: pathLocal, contentType } = await this.resourceMapper.mapUrlToFile({ url: options, searchIndex }))
451
+ stats = await this.stat(pathLocal)
461
452
  } catch (err) {
462
453
  throw error(err.status || 500, err.message)
463
454
  }
464
455
 
465
- // Just return, since resource exists
466
456
  if (!options.includeBody) {
467
457
  return { stream: stats, contentType, container: stats.isDirectory() }
468
458
  }
469
459
 
470
- // Found a container
471
460
  if (stats.isDirectory()) {
472
- const { url: absContainerUri } = await this.resourceMapper
473
- .mapFileToUrl({ path, hostname: options.hostname })
474
- const metaFile = await this.readContainerMeta(absContainerUri)
475
- .catch(() => '') // Default to an empty meta file if it is missing
461
+ const { url: absContainerUri } = await this.resourceMapper.mapFileToUrl({ path: pathLocal, hostname: options.hostname })
462
+ const metaFile = await this.readContainerMeta(absContainerUri).catch(() => '')
476
463
  let data
477
464
  try {
478
- data = await this.listContainer(path, absContainerUri, metaFile, options.hostname)
465
+ data = await this.listContainer(pathLocal, absContainerUri, metaFile, options.hostname)
479
466
  } catch (err) {
480
467
  debug.handlers('GET container -- Read error:' + err.message)
481
468
  throw err
482
469
  }
483
470
  const stream = stringToStream(data)
484
- // TODO contentType is defaultContainerContentType ('text/turtle'),
485
- // This forces one translation turtle -> desired
486
471
  return { stream, contentType, container: true }
487
472
  } else {
488
473
  let chunksize, contentRange, start, end
489
474
  if (options.range) {
490
- const total = fs.statSync(path).size
475
+ const total = fs.statSync(pathLocal).size
491
476
  const parts = options.range.replace(/bytes=/, '').split('-')
492
477
  const partialstart = parts[0]
493
478
  const partialend = parts[1]
@@ -496,15 +481,15 @@ class LDP {
496
481
  chunksize = (end - start) + 1
497
482
  contentRange = 'bytes ' + start + '-' + end + '/' + total
498
483
  }
499
- return withLock(path, () => new Promise((resolve, reject) => {
500
- const stream = fs.createReadStream(path, start && end ? { start, end } : {})
484
+ return withLock(pathLocal, () => new Promise((resolve, reject) => {
485
+ const stream = fs.createReadStream(pathLocal, start && end ? { start, end } : {})
501
486
  stream
502
487
  .on('error', function (err) {
503
- debug.handlers(`GET -- error reading ${path}: ${err.message}`)
488
+ debug.handlers(`GET -- error reading ${pathLocal}: ${err.message}`)
504
489
  return reject(error(err, "Can't read file " + err))
505
490
  })
506
491
  .on('open', function () {
507
- debug.handlers(`GET -- Reading ${path}`)
492
+ debug.handlers(`GET -- Reading ${pathLocal}`)
508
493
  return resolve({ stream, contentType, container: false, contentRange, chunksize })
509
494
  })
510
495
  }))
@@ -544,9 +529,7 @@ class LDP {
544
529
  }
545
530
 
546
531
  async deleteContainer (directory) {
547
- if (directory[directory.length - 1] !== '/') {
548
- directory += '/'
549
- }
532
+ if (directory[directory.length - 1] !== '/') directory += '/'
550
533
 
551
534
  // Ensure the container exists
552
535
  let list
@@ -590,22 +573,245 @@ class LDP {
590
573
  }
591
574
  }
592
575
 
593
- async getAvailableUrl (hostname, containerURI, { slug = uuid.v1(), extension, container }) {
576
+ async copy (from, to, options) {
577
+ if (overQuota(this.quotaFile, this.quota)) {
578
+ debug.handlers('COPY -- Over quota')
579
+ throw error(413, 'Storage quota exceeded')
580
+ }
581
+
582
+ const originalParsedPath = urlModule.parse(from)
583
+ const parsedPath = urlModule.parse(to)
584
+ const fromPath = this.resourceMapper.resolveFilePath(
585
+ originalParsedPath.hostname,
586
+ decodeURIComponent(originalParsedPath.pathname)
587
+ )
588
+ const toPath = this.resourceMapper.resolveFilePath(
589
+ parsedPath.hostname,
590
+ decodeURIComponent(parsedPath.pathname)
591
+ )
592
+
593
+ // Check if file already exists
594
+ if (fs.existsSync(toPath)) {
595
+ throw error(412, 'Target file already exists')
596
+ }
597
+
598
+ let copyPromise
599
+
600
+ // create destination directory if not exists
601
+ mkdirp(dirname(toPath))
602
+
603
+ // If original is a single file
604
+ if (!fromPath.endsWith('/')) {
605
+ copyPromise = new Promise((resolve, reject) => {
606
+ const readStream = fs.createReadStream(fromPath)
607
+ const writeStream = fs.createWriteStream(toPath)
608
+ readStream.on('error', function (err) {
609
+ debug.handlers('Error reading file: ' + err)
610
+ reject(error(500, err))
611
+ })
612
+ writeStream.on('error', function (err) {
613
+ debug.handlers('Error writing file: ' + err)
614
+ reject(error(500, err))
615
+ })
616
+ writeStream.on('finish', function () {
617
+ debug.handlers('Finished copying file')
618
+ resolve()
619
+ })
620
+ readStream.pipe(writeStream)
621
+ })
622
+ } else {
623
+ // If original is a folder, copy recursively
624
+ copyPromise = new Promise((resolve, reject) => {
625
+ exec(`cp -r "${fromPath}" "${toPath}"`, function (err) {
626
+ if (err) {
627
+ debug.handlers('Error copying directory: ' + err)
628
+ reject(error(500, err))
629
+ } else {
630
+ debug.handlers('Finished copying directory')
631
+ resolve()
632
+ }
633
+ })
634
+ })
635
+ }
636
+
637
+ await copyPromise
638
+ // Copy ACL file if exists
639
+ if (fs.existsSync(fromPath + this.suffixAcl)) {
640
+ const readAclStream = fs.createReadStream(fromPath + this.suffixAcl)
641
+ const writeAclStream = fs.createWriteStream(toPath + this.suffixAcl)
642
+ await new Promise((resolve, reject) => {
643
+ readAclStream.on('error', function (err) {
644
+ debug.handlers('Error reading ACL file: ' + err)
645
+ reject(error(500, err))
646
+ })
647
+ writeAclStream.on('error', function (err) {
648
+ debug.handlers('Error writing ACL file: ' + err)
649
+ reject(error(500, err))
650
+ })
651
+ writeAclStream.on('finish', function () {
652
+ debug.handlers('Finished copying ACL file')
653
+ resolve()
654
+ })
655
+ readAclStream.pipe(writeAclStream)
656
+ })
657
+ }
658
+
659
+ // Copy meta file if exists
660
+ if (fs.existsSync(fromPath + this.suffixMeta)) {
661
+ const readMetaStream = fs.createReadStream(fromPath + this.suffixMeta)
662
+ const writeMetaStream = fs.createWriteStream(toPath + this.suffixMeta)
663
+ await new Promise((resolve, reject) => {
664
+ readMetaStream
665
+ .on('error', function (err) {
666
+ debug.handlers('Error reading meta file: ' + err)
667
+ reject(error(500, err))
668
+ })
669
+ .on('open', function () {
670
+ readMetaStream.pipe(writeMetaStream)
671
+ })
672
+ writeMetaStream.on('error', function (err) {
673
+ debug.handlers('Error writing meta file: ' + err)
674
+ reject(error(500, err))
675
+ })
676
+ writeMetaStream.on('finish', function () {
677
+ debug.handlers('Finished copying meta file')
678
+ resolve()
679
+ })
680
+ })
681
+ }
682
+
683
+ await clearAclCache()
684
+
685
+ debug.handlers('COPY -- Copied ' + fromPath + ' to ' + toPath)
686
+ }
687
+
688
+ async patch (uri, patchObject) {
689
+ if (overQuota(this.quotaFile, this.quota)) {
690
+ debug.handlers('PATCH -- Over quota')
691
+ throw error(413, 'Storage quota exceeded')
692
+ }
693
+
694
+ const url = uri
695
+ let path
696
+ try {
697
+ ({ path } = await this.resourceMapper.mapUrlToFile({ url }))
698
+ } catch (err) {
699
+ throw error(err.status || 500, err.message)
700
+ }
701
+
702
+ await withLock(path, async () => {
703
+ let originalData = ''
704
+
705
+ try {
706
+ originalData = await promisify(fs.readFile)(path, { encoding: 'utf8' })
707
+ } catch (err) {
708
+ throw error(err, 'Cannot patch a file that does not exist')
709
+ }
710
+
711
+ const contentType = getContentType(path)
712
+ const patchedData = await this.applyPatch(originalData, patchObject, contentType, uri)
713
+
714
+ // Write patched data back to file
715
+ await promisify(fs.writeFile)(path, patchedData, 'utf8')
716
+ })
717
+
718
+ await clearAclCache()
719
+
720
+ debug.handlers('PATCH -- Patched:' + path)
721
+ }
722
+
723
+ async applyPatch (data, patchObject, contentType, uri) {
724
+ const baseGraph = $rdf.graph()
725
+ let patchedGraph
726
+
727
+ try {
728
+ $rdf.parse(data, baseGraph, uri, contentType)
729
+ } catch (err) {
730
+ throw error(500, 'Cannot parse file for patching: ' + uri)
731
+ }
732
+
733
+ // Apply patches
734
+ if (patchObject.updates) {
735
+ patchedGraph = await this.applyPatchUpdate(baseGraph, patchObject.updates, uri, contentType)
736
+ } else if (patchObject.deletes || patchObject.inserts) {
737
+ patchedGraph = await this.applyPatchInsertDelete(baseGraph, patchObject, uri, contentType)
738
+ } else {
739
+ throw error(422, 'Invalid patch object')
740
+ }
741
+
742
+ try {
743
+ return await serialize(patchedGraph, uri, contentType)
744
+ } catch (err) {
745
+ throw error(500, 'Cannot serialize patched file: ' + uri)
746
+ }
747
+ }
748
+
749
+ async applyPatchUpdate (baseGraph, updates, uri, contentType) {
750
+ const patchedGraph = baseGraph
751
+
752
+ for (const update of updates) {
753
+ if (update.operation === 'delete') {
754
+ const deleteQuads = this.parseQuads(update.where, uri, contentType)
755
+ for (const quad of deleteQuads) {
756
+ patchedGraph.removeMatches(quad.subject, quad.predicate, quad.object)
757
+ }
758
+ } else if (update.operation === 'insert') {
759
+ const insertQuads = this.parseQuads(update.quads, uri, contentType)
760
+ for (const quad of insertQuads) {
761
+ patchedGraph.add(quad.subject, quad.predicate, quad.object)
762
+ }
763
+ } else {
764
+ throw error(422, 'Unknown patch operation: ' + update.operation)
765
+ }
766
+ }
767
+
768
+ return patchedGraph
769
+ }
770
+
771
+ async applyPatchInsertDelete (baseGraph, patchObject, uri, contentType) {
772
+ const patchedGraph = baseGraph
773
+
774
+ // Apply deletes first
775
+ if (patchObject.deletes) {
776
+ const deleteQuads = this.parseQuads(patchObject.deletes, uri, contentType)
777
+ for (const quad of deleteQuads) {
778
+ patchedGraph.removeMatches(quad.subject, quad.predicate, quad.object)
779
+ }
780
+ }
781
+
782
+ // Apply inserts
783
+ if (patchObject.inserts) {
784
+ const insertQuads = this.parseQuads(patchObject.inserts, uri, contentType)
785
+ for (const quad of insertQuads) {
786
+ patchedGraph.add(quad.subject, quad.predicate, quad.object)
787
+ }
788
+ }
789
+
790
+ return patchedGraph
791
+ }
792
+
793
+ parseQuads (quads, uri, contentType) {
794
+ const graph = $rdf.graph()
795
+ $rdf.parse(quads, graph, uri, contentType)
796
+ return graph.statements
797
+ }
798
+
799
+ async getAvailableUrl (hostname, containerURI, { slug = uuid(), extension, container } = {}) {
594
800
  let requestUrl = this.resourceMapper.resolveUrl(hostname, containerURI)
595
- requestUrl = requestUrl.replace(/\/*$/, '/') // ??? what for
801
+ requestUrl = requestUrl.replace(/\/*$/, '/')
596
802
 
597
803
  let itemName = slug.endsWith(extension) || slug.endsWith(this.suffixAcl) || slug.endsWith(this.suffixMeta) ? slug : slug + extension
598
804
  try {
599
805
  // check whether resource exists
600
806
  const context = container ? '/' : ''
601
807
  await this.resourceMapper.mapUrlToFile({ url: (requestUrl + itemName + context) })
602
- itemName = `${uuid.v1()}-${itemName}`
808
+ itemName = `${uuid()}-${itemName}`
603
809
  } catch (e) {
604
810
  try {
605
811
  // check whether resource with same name exists
606
812
  const context = !container ? '/' : ''
607
813
  await this.resourceMapper.mapUrlToFile({ url: (requestUrl + itemName + context) })
608
- itemName = `${uuid.v1()}-${itemName}`
814
+ itemName = `${uuid()}-${itemName}`
609
815
  } catch (e) {}
610
816
  }
611
817
  if (container) itemName += '/'
@@ -620,6 +826,10 @@ class LDP {
620
826
  return trustedOrigins
621
827
  }
622
828
 
829
+ static getRDFMimeTypes () {
830
+ return Array.from(RDF_MIME_TYPES)
831
+ }
832
+
623
833
  static mimeTypeIsRdf (mimeType) {
624
834
  return RDF_MIME_TYPES.has(mimeType)
625
835
  }
@@ -628,4 +838,5 @@ class LDP {
628
838
  return Array.from(RDF_MIME_TYPES)
629
839
  }
630
840
  }
631
- module.exports = LDP
841
+
842
+ export default LDP
@@ -1,10 +1,10 @@
1
- const AsyncLock = require('async-lock')
2
-
3
- const lock = new AsyncLock({ timeout: 30 * 1000 })
4
-
5
- // Obtains a lock on the path, and maintains it until the task finishes
6
- async function withLock (path, executeTask) {
7
- return await lock.acquire(path, executeTask)
8
- }
9
-
10
- module.exports = withLock
1
+ import AsyncLock from 'async-lock'
2
+
3
+ const lock = new AsyncLock({ timeout: 30 * 1000 })
4
+
5
+ // Obtains a lock on the path, and maintains it until the task finishes
6
+ async function withLock (path, executeTask) {
7
+ return await lock.acquire(path, executeTask)
8
+ }
9
+
10
+ export default withLock
@@ -1,11 +1,11 @@
1
- exports.Metadata = Metadata
2
-
3
- function Metadata () {
4
- this.filename = ''
5
- this.isResource = false
6
- this.isSourceResource = false
7
- this.isContainer = false
8
- this.isBasicContainer = false
9
- this.isDirectContainer = false
10
- this.isStorage = false
11
- }
1
+ export function Metadata () {
2
+ this.filename = ''
3
+ this.isResource = false
4
+ this.isSourceResource = false
5
+ this.isContainer = false
6
+ this.isBasicContainer = false
7
+ this.isDirectContainer = false
8
+ this.isStorage = false
9
+ }
10
+
11
+ export default { Metadata }