solid-server 5.8.7 → 5.8.8-5fdbfa12

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