solid-server 5.8.8 → 6.0.0-2a7305e7

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