solid-server 5.8.7 → 5.8.8-8d509db1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (685) hide show
  1. package/CHANGELOG.md +0 -0
  2. package/CONTRIBUTING.md +0 -0
  3. package/CONTRIBUTORS.md +0 -0
  4. package/Dockerfile +0 -0
  5. package/LICENSE.md +0 -0
  6. package/README.md +0 -0
  7. package/bin/config.json +0 -0
  8. package/bin/lib/cli-utils.mjs +54 -0
  9. package/bin/lib/cli.mjs +44 -0
  10. package/bin/lib/{init.js → init.mjs} +93 -94
  11. package/bin/lib/{invalidUsernames.js → invalidUsernames.mjs} +136 -148
  12. package/bin/lib/{migrateLegacyResources.js → migrateLegacyResources.mjs} +64 -69
  13. package/bin/lib/{options.js → options.mjs} +379 -405
  14. package/bin/lib/{start.js → start.mjs} +124 -148
  15. package/bin/lib/{updateIndex.js → updateIndex.mjs} +55 -56
  16. package/bin/solid +2 -2
  17. package/bin/solid-test +0 -0
  18. package/common/css/bootstrap.min.css +6 -0
  19. package/common/css/solid.css +0 -0
  20. package/common/fonts/glyphicons-halflings-regular.eot +0 -0
  21. package/common/fonts/glyphicons-halflings-regular.svg +0 -0
  22. package/common/fonts/glyphicons-halflings-regular.ttf +0 -0
  23. package/common/fonts/glyphicons-halflings-regular.woff +0 -0
  24. package/common/fonts/glyphicons-halflings-regular.woff2 +0 -0
  25. package/common/img/solid-emblem.svg +0 -0
  26. package/common/js/auth-buttons.js +0 -0
  27. package/common/js/auth-buttons.mjs +57 -0
  28. package/common/js/index-buttons.js +0 -0
  29. package/common/js/index-buttons.mjs +43 -0
  30. package/common/js/solid.js +0 -0
  31. package/common/js/solid.mjs +456 -0
  32. package/common/well-known/security.txt +0 -0
  33. package/config/defaults.js +0 -0
  34. package/config/defaults.mjs +22 -0
  35. package/config/templates/emails/delete-account.js +49 -0
  36. package/config/templates/emails/delete-account.mjs +31 -0
  37. package/config/templates/emails/invalid-username.js +30 -0
  38. package/config/templates/emails/invalid-username.mjs +27 -0
  39. package/config/templates/emails/reset-password.js +49 -0
  40. package/config/templates/emails/reset-password.mjs +31 -0
  41. package/config/templates/emails/welcome.js +39 -0
  42. package/config/templates/emails/welcome.mjs +23 -0
  43. package/config/templates/new-account/favicon.ico +0 -0
  44. package/config/templates/new-account/favicon.ico.acl +26 -0
  45. package/config/templates/new-account/profile/card$.ttl +26 -0
  46. package/config/templates/new-account/robots.txt +3 -0
  47. package/config/templates/new-account/robots.txt.acl +26 -0
  48. package/config/templates/new-account/settings/prefs.ttl +15 -0
  49. package/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
  50. package/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
  51. package/{default-templates/new-account/.meta.acl → config/templates/new-account/settings/publicTypeIndex.ttl.acl} +4 -4
  52. package/config/templates/new-account/settings/serverSide.ttl.acl +13 -0
  53. package/config/templates/new-account/settings/serverSide.ttl.inactive +12 -0
  54. package/config/templates/server/favicon.ico +0 -0
  55. package/{.well-known/.acl → config/templates/server/favicon.ico.acl} +2 -2
  56. package/config/templates/server/index.html +54 -0
  57. package/config/templates/server/robots.txt +3 -0
  58. package/{default-templates/server/.well-known/.acl → config/templates/server/robots.txt.acl} +2 -2
  59. package/config/usernames-blacklist.json +0 -0
  60. package/config/views/account/account-deleted.hbs +17 -0
  61. package/config/views/account/delete-confirm.hbs +51 -0
  62. package/config/views/account/delete-link-sent.hbs +17 -0
  63. package/config/views/account/delete.hbs +51 -0
  64. package/config/views/account/invalid-username.hbs +22 -0
  65. package/config/views/account/register-disabled.hbs +6 -0
  66. package/config/views/account/register-form.hbs +133 -0
  67. package/config/views/account/register.hbs +24 -0
  68. package/config/views/auth/auth-hidden-fields.hbs +8 -0
  69. package/config/views/auth/change-password.hbs +58 -0
  70. package/config/views/auth/goodbye.hbs +23 -0
  71. package/config/views/auth/login-required.hbs +34 -0
  72. package/config/views/auth/login-tls.hbs +11 -0
  73. package/config/views/auth/login-username-password.hbs +28 -0
  74. package/config/views/auth/login.hbs +55 -0
  75. package/config/views/auth/no-permission.hbs +29 -0
  76. package/config/views/auth/password-changed.hbs +27 -0
  77. package/config/views/auth/reset-link-sent.hbs +21 -0
  78. package/config/views/auth/reset-password.hbs +52 -0
  79. package/config/views/auth/sharing.hbs +49 -0
  80. package/config/views/shared/create-account.hbs +8 -0
  81. package/config/views/shared/error.hbs +5 -0
  82. package/config.json-default +0 -0
  83. package/coverage/tmp/coverage-2254-1766613200322-0.json +1 -0
  84. package/coverage/tmp/coverage-2255-1766613179053-0.json +1 -0
  85. package/default-templates/emails/delete-account.js +0 -0
  86. package/default-templates/emails/delete-account.mjs +31 -0
  87. package/default-templates/emails/invalid-username.js +0 -0
  88. package/default-templates/emails/invalid-username.mjs +27 -0
  89. package/default-templates/emails/reset-password.js +0 -0
  90. package/default-templates/emails/reset-password.mjs +31 -0
  91. package/default-templates/emails/welcome.js +0 -0
  92. package/default-templates/emails/welcome.mjs +23 -0
  93. package/default-templates/new-account/favicon.ico +0 -0
  94. package/default-templates/new-account/favicon.ico.acl +0 -0
  95. package/default-templates/new-account/profile/card$.ttl +0 -0
  96. package/default-templates/new-account/robots.txt +0 -0
  97. package/default-templates/new-account/robots.txt.acl +0 -0
  98. package/default-templates/new-account/settings/prefs.ttl +0 -0
  99. package/default-templates/new-account/settings/privateTypeIndex.ttl +0 -0
  100. package/default-templates/new-account/settings/publicTypeIndex.ttl +0 -0
  101. package/default-templates/new-account/settings/publicTypeIndex.ttl.acl +0 -0
  102. package/default-templates/new-account/settings/serverSide.ttl.acl +0 -0
  103. package/default-templates/new-account/settings/serverSide.ttl.inactive +0 -0
  104. package/default-templates/server/favicon.ico +0 -0
  105. package/default-templates/server/favicon.ico.acl +0 -0
  106. package/default-templates/server/index.html +0 -0
  107. package/default-templates/server/robots.txt +0 -0
  108. package/default-templates/server/robots.txt.acl +0 -0
  109. package/default-views/account/account-deleted.hbs +0 -0
  110. package/default-views/account/delete-confirm.hbs +0 -0
  111. package/default-views/account/delete-link-sent.hbs +0 -0
  112. package/default-views/account/delete.hbs +0 -0
  113. package/default-views/account/invalid-username.hbs +0 -0
  114. package/default-views/account/register-disabled.hbs +0 -0
  115. package/default-views/account/register-form.hbs +0 -0
  116. package/default-views/account/register.hbs +0 -0
  117. package/default-views/auth/auth-hidden-fields.hbs +0 -0
  118. package/default-views/auth/change-password.hbs +0 -0
  119. package/default-views/auth/goodbye.hbs +0 -0
  120. package/default-views/auth/login-required.hbs +0 -0
  121. package/default-views/auth/login-tls.hbs +0 -0
  122. package/default-views/auth/login-username-password.hbs +0 -0
  123. package/default-views/auth/login.hbs +0 -0
  124. package/default-views/auth/no-permission.hbs +0 -0
  125. package/default-views/auth/password-changed.hbs +0 -0
  126. package/default-views/auth/reset-link-sent.hbs +0 -0
  127. package/default-views/auth/reset-password.hbs +0 -0
  128. package/default-views/auth/sharing.hbs +0 -0
  129. package/default-views/shared/create-account.hbs +0 -0
  130. package/default-views/shared/error.hbs +0 -0
  131. package/docker-compose.yml +0 -0
  132. package/docker-image/CONTRIBUTING.md +33 -0
  133. package/docker-image/Makefile +32 -0
  134. package/docker-image/README.md +65 -0
  135. package/docker-image/examples/docker-compose.all-in-one.yml +76 -0
  136. package/docker-image/examples/docker-compose.nginx.yml +51 -0
  137. package/docker-image/examples/docker-compose.simple.yml +34 -0
  138. package/docker-image/src/Dockerfile +34 -0
  139. package/docker-image/src/checks.sh +56 -0
  140. package/docker-image/src/create-temporary-cert.sh +14 -0
  141. package/docker-image/src/entrypoint.sh +8 -0
  142. package/{common/img/.gitkeep → docker-image/test/__init__.py} +0 -0
  143. package/docker-image/test/conftest.py +15 -0
  144. package/docker-image/test/test_image_foundations.py +51 -0
  145. package/docker-image/test/test_non_accessible_key_cert.py +36 -0
  146. package/docker-image/test/test_precondition_checks.py +41 -0
  147. package/docker-image/test/test_solid_default_config.py +66 -0
  148. package/docker-image/test/test_volumes.py +55 -0
  149. package/docker-image/test/wait_for_container.py +8 -0
  150. package/docs/how-to-delete-your-account.md +0 -0
  151. package/docs/login-and-grant-access-to-application.md +0 -0
  152. package/examples/custom-error-handling.js +0 -0
  153. package/examples/custom-error-handling.mjs +29 -0
  154. package/examples/ldp-with-webid.js +0 -0
  155. package/examples/ldp-with-webid.mjs +12 -0
  156. package/examples/simple-express-app.js +0 -0
  157. package/examples/simple-express-app.mjs +20 -0
  158. package/examples/simple-ldp-server.js +0 -0
  159. package/examples/simple-ldp-server.mjs +8 -0
  160. package/favicon.ico +0 -0
  161. package/favicon.ico.acl +0 -0
  162. package/index.cjs +4 -0
  163. package/index.html +0 -0
  164. package/index.mjs +23 -0
  165. package/lib/{acl-checker.js → acl-checker.mjs} +13 -15
  166. package/lib/api/accounts/{user-accounts.js → user-accounts.mjs} +17 -16
  167. package/lib/api/authn/{force-user.js → force-user.mjs} +5 -4
  168. package/lib/api/authn/index.mjs +8 -0
  169. package/lib/api/authn/{webid-oidc.js → webid-oidc.mjs} +27 -20
  170. package/lib/api/authn/{webid-tls.js → webid-tls.mjs} +12 -11
  171. package/lib/api/index.mjs +7 -0
  172. package/lib/{capability-discovery.js → capability-discovery.mjs} +3 -6
  173. package/lib/common/{fs-utils.js → fs-utils.mjs} +35 -43
  174. package/lib/common/template-utils.mjs +29 -0
  175. package/lib/common/{user-utils.js → user-utils.mjs} +24 -28
  176. package/lib/{create-app.js → create-app.mjs} +372 -361
  177. package/lib/{create-server.js → create-server.mjs} +32 -11
  178. package/lib/debug.mjs +37 -0
  179. package/lib/handlers/{allow.js → allow.mjs} +79 -83
  180. package/lib/handlers/{auth-proxy.js → auth-proxy.mjs} +4 -5
  181. package/lib/handlers/{copy.js → copy.mjs} +37 -39
  182. package/lib/handlers/{cors-proxy.js → cors-proxy.mjs} +9 -11
  183. package/lib/handlers/{delete.js → delete.mjs} +20 -22
  184. package/lib/handlers/{error-pages.js → error-pages.mjs} +144 -212
  185. package/lib/handlers/{get.js → get.mjs} +254 -252
  186. package/lib/handlers/{index.js → index.mjs} +7 -8
  187. package/lib/handlers/{notify.js → notify.mjs} +8 -10
  188. package/lib/handlers/{options.js → options.mjs} +3 -5
  189. package/lib/handlers/patch/{n3-patch-parser.js → n3-patch-parser.mjs} +57 -59
  190. package/lib/handlers/patch/{sparql-update-parser.js → sparql-update-parser.mjs} +14 -16
  191. package/lib/handlers/{patch.js → patch.mjs} +241 -235
  192. package/lib/handlers/{post.js → post.mjs} +101 -99
  193. package/lib/handlers/{put.js → put.mjs} +101 -105
  194. package/lib/handlers/{restrict-to-top-domain.js → restrict-to-top-domain.mjs} +2 -2
  195. package/lib/{header.js → header.mjs} +138 -143
  196. package/lib/{http-error.js → http-error.mjs} +35 -34
  197. package/lib/{ldp-container.js → ldp-container.mjs} +10 -12
  198. package/lib/ldp-copy.mjs +82 -0
  199. package/lib/ldp-middleware.mjs +38 -0
  200. package/lib/{ldp.js → ldp.mjs} +286 -75
  201. package/lib/{lock.js → lock.mjs} +10 -10
  202. package/lib/{metadata.js → metadata.mjs} +11 -11
  203. package/lib/models/account-manager.mjs +297 -0
  204. package/lib/models/account-template.mjs +70 -0
  205. package/lib/models/authenticator.mjs +161 -0
  206. package/lib/models/oidc-manager.mjs +23 -0
  207. package/lib/models/solid-host.mjs +63 -0
  208. package/lib/models/user-account.mjs +50 -0
  209. package/lib/models/webid-tls-certificate.mjs +97 -0
  210. package/lib/{payment-pointer-discovery.js → payment-pointer-discovery.mjs} +5 -8
  211. package/lib/{rdf-notification-template.js → rdf-notification-template.mjs} +3 -5
  212. package/lib/requests/add-cert-request.mjs +70 -0
  213. package/lib/requests/auth-request.mjs +151 -0
  214. package/lib/requests/{create-account-request.js → create-account-request.mjs} +249 -452
  215. package/lib/requests/delete-account-confirm-request.mjs +85 -0
  216. package/lib/requests/{delete-account-request.js → delete-account-request.mjs} +73 -134
  217. package/lib/requests/login-request.mjs +89 -0
  218. package/lib/requests/{password-change-request.js → password-change-request.mjs} +132 -201
  219. package/lib/requests/{password-reset-email-request.js → password-reset-email-request.mjs} +123 -202
  220. package/lib/requests/password-reset-request.mjs +47 -0
  221. package/lib/requests/register-request.mjs +48 -0
  222. package/lib/requests/{sharing-request.js → sharing-request.mjs} +174 -261
  223. package/lib/{resource-mapper.js → resource-mapper.mjs} +7 -6
  224. package/lib/{server-config.js → server-config.mjs} +15 -20
  225. package/lib/services/{blacklist-service.js → blacklist-service.mjs} +36 -33
  226. package/lib/services/email-service.mjs +76 -0
  227. package/lib/services/{token-service.js → token-service.mjs} +36 -44
  228. package/lib/{utils.js → utils.mjs} +309 -254
  229. package/lib/webid/{index.js → index.mjs} +9 -13
  230. package/lib/webid/lib/{get.js → get.mjs} +31 -35
  231. package/lib/webid/lib/{parse.js → parse.mjs} +10 -12
  232. package/lib/webid/lib/verify.mjs +77 -0
  233. package/lib/webid/tls/generate.mjs +53 -0
  234. package/lib/webid/tls/index.mjs +7 -0
  235. package/package.json +46 -26
  236. package/renovate.json +0 -0
  237. package/robots.txt +0 -0
  238. package/robots.txt.acl +0 -0
  239. package/solid-server-5.8.8.tgz +0 -0
  240. package/static/account-recovery.html +0 -0
  241. package/static/popup-redirect.html +0 -0
  242. package/static/signup.html +0 -0
  243. package/static/signup.html.acl +0 -0
  244. package/test/index.mjs +168 -0
  245. package/test/integration/account-creation-tls-test.mjs +127 -0
  246. package/test/integration/account-manager-test.mjs +151 -0
  247. package/test/integration/account-template-test.mjs +136 -0
  248. package/test/integration/acl-oidc-test.mjs +1048 -0
  249. package/test/integration/acl-tls-test.mjs +964 -0
  250. package/test/integration/auth-proxy-test.mjs +144 -0
  251. package/test/integration/authentication-oidc-test.mjs +812 -0
  252. package/test/integration/authentication-oidc-with-strict-origins-turned-off-test.mjs +638 -0
  253. package/test/integration/capability-discovery-test.mjs +116 -0
  254. package/test/integration/cors-proxy-test.mjs +145 -0
  255. package/test/integration/errors-oidc-test.mjs +109 -0
  256. package/test/integration/errors-test.mjs +49 -0
  257. package/test/integration/formats-test.mjs +136 -0
  258. package/test/integration/header-test.mjs +101 -0
  259. package/test/integration/http-copy-test.mjs +109 -0
  260. package/test/integration/http-test.mjs +1197 -0
  261. package/test/integration/ldp-test.mjs +528 -0
  262. package/test/integration/oidc-manager-test.mjs +42 -0
  263. package/test/integration/params-test.mjs +192 -0
  264. package/test/integration/patch-sparql-update-test.mjs +195 -0
  265. package/test/integration/patch-test.mjs +573 -0
  266. package/test/integration/payment-pointer-test.mjs +155 -0
  267. package/test/integration/prep-test.mjs +314 -0
  268. package/test/integration/quota-test.mjs +51 -0
  269. package/test/integration/special-root-acl-handling-test.mjs +68 -0
  270. package/test/integration/validate-tts-test.mjs +57 -0
  271. package/test/integration/www-account-creation-oidc-test.mjs +311 -0
  272. package/test/keys/cert.pem +21 -0
  273. package/test/keys/client-cert.pem +19 -0
  274. package/test/keys/client-key.pem +27 -0
  275. package/test/keys/key.pem +27 -0
  276. package/test/keys/user1-cert.pem +23 -0
  277. package/test/keys/user1-key.pem +28 -0
  278. package/test/keys/user2-cert.pem +23 -0
  279. package/test/keys/user2-key.pem +27 -0
  280. package/test/mocha.opts +2 -0
  281. package/test/resources/Makefile +146 -0
  282. package/test/resources/accounts/alice.localhost/profile/card +0 -0
  283. package/test/resources/accounts/db/oidc/op/clients/_key_30860bb5cf6ba07e80ed7b2e7178c7ad.json +1 -0
  284. package/test/resources/accounts/db/oidc/op/provider.json +419 -0
  285. package/test/resources/accounts/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A3457.json +1 -0
  286. package/test/resources/accounts/localhost/samplePublicContainer/nicola.jpg +0 -0
  287. package/test/resources/accounts/tim.localhost/hello.html +9 -0
  288. package/test/resources/accounts/tim.localhost/profile/card +0 -0
  289. package/test/resources/accounts-acl/config/templates/emails/welcome-test.js +39 -0
  290. package/test/resources/accounts-acl/config/templates/new-account/favicon.ico +0 -0
  291. package/test/resources/accounts-acl/config/templates/new-account/favicon.ico.acl +26 -0
  292. package/test/resources/accounts-acl/config/templates/new-account/index.html +28 -0
  293. package/test/resources/accounts-acl/config/templates/new-account/index.html.acl +22 -0
  294. package/test/resources/accounts-acl/config/templates/new-account/profile/card +27 -0
  295. package/{default-templates/new-account/inbox/.acl → test/resources/accounts-acl/config/templates/new-account/profile/card.acl} +5 -6
  296. package/test/resources/accounts-acl/config/templates/new-account/settings/prefs.ttl +9 -0
  297. package/test/resources/accounts-acl/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
  298. package/test/resources/accounts-acl/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
  299. package/test/resources/accounts-acl/config/templates/new-account/settings/publicTypeIndex.ttl.acl +25 -0
  300. package/test/resources/accounts-acl/config/templates/new-account/settings/serverSide.ttl +14 -0
  301. package/test/resources/accounts-acl/config/templates/server/index.html +35 -0
  302. package/{.acl → test/resources/accounts-acl/config/templates/server/index.html.acl} +4 -3
  303. package/test/resources/accounts-acl/config/views/account/register.hbs +58 -0
  304. package/test/resources/accounts-acl/config/views/auth/consent.hbs +49 -0
  305. package/test/resources/accounts-acl/config/views/auth/goodbye.hbs +20 -0
  306. package/test/resources/accounts-acl/config/views/auth/login-required.hbs +0 -0
  307. package/test/resources/accounts-acl/config/views/auth/login.hbs +51 -0
  308. package/test/resources/accounts-acl/config/views/auth/no-permission.hbs +0 -0
  309. package/test/resources/accounts-acl/db/oidc/op/clients/_key_77bb3b35edb1f3f7b887c25d1211a491.json +1 -0
  310. package/test/resources/accounts-acl/db/oidc/op/provider.json +419 -0
  311. package/test/resources/accounts-acl/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7777.json +1 -0
  312. package/test/resources/accounts-acl/localhost/favicon.ico +0 -0
  313. package/test/resources/accounts-acl/localhost/index.html +35 -0
  314. package/{default-templates/server/.acl → test/resources/accounts-acl/localhost/index.html.acl} +4 -3
  315. package/test/resources/accounts-acl/nicola.localhost/index.html +1 -0
  316. package/test/resources/accounts-acl/nicola.localhost/index.html.acl +10 -0
  317. package/test/resources/accounts-acl/quota/settings/serverSide.ttl +11 -0
  318. package/test/resources/accounts-acl/tim.localhost/append-acl/abc.ttl +1 -0
  319. package/test/resources/accounts-acl/tim.localhost/append-acl/abc.ttl.acl +8 -0
  320. package/test/resources/accounts-acl/tim.localhost/append-acl/abc2.ttl +1 -0
  321. package/test/resources/accounts-acl/tim.localhost/append-acl/abc2.ttl.acl +8 -0
  322. package/test/resources/accounts-acl/tim.localhost/fake-account/hello.html +9 -0
  323. package/test/resources/accounts-acl/tim.localhost/group/test-folder/group-listing-error.ttl +1 -0
  324. package/test/resources/accounts-acl/tim.localhost/group/test-folder/group-listing.ttl +14 -0
  325. package/test/resources/accounts-acl/tim.localhost/group/test-folder/some-other-file.txt +1 -0
  326. package/test/resources/accounts-acl/tim.localhost/multi-server/protected.txt +1 -0
  327. package/test/resources/accounts-acl/tim.localhost/multi-server/protected.txt.acl +8 -0
  328. package/test/resources/accounts-acl/tim.localhost/no-acl/test-file.html +1 -0
  329. package/test/resources/accounts-acl/tim.localhost/read-acl/deeper-tree/acls-only-on-top/example.ttl +1 -0
  330. package/test/resources/accounts-acl/tim.localhost/write-acl/test-file$.txt +1 -0
  331. package/test/resources/accounts-scenario/alice/db/oidc/op/clients/_key_e46bcfe080c59f5cbb53a559d6a272cb.json +1 -0
  332. package/test/resources/accounts-scenario/alice/db/oidc/op/provider.json +417 -0
  333. package/test/resources/accounts-scenario/alice/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7000.json +1 -0
  334. package/test/resources/accounts-scenario/alice/private-for-alice.txt +1 -0
  335. package/test/resources/accounts-scenario/alice/private-for-alice.txt.acl +12 -0
  336. package/test/resources/accounts-scenario/alice/profile/card$.ttl +10 -0
  337. package/test/resources/accounts-scenario/bob/db/oidc/op/clients/_key_e7fd102ec26a3dcd5916751e01a62315.json +1 -0
  338. package/test/resources/accounts-scenario/bob/db/oidc/op/provider.json +417 -0
  339. package/test/resources/accounts-scenario/bob/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7001.json +1 -0
  340. package/test/resources/accounts-scenario/bob/profile/card$.ttl +5 -0
  341. package/test/resources/accounts-scenario/bob/shared-with-alice.txt +1 -0
  342. package/test/resources/accounts-scenario/bob/shared-with-alice.txt.acl +15 -0
  343. package/test/resources/accounts-scenario/charlie/db/oidc/op/clients/_key_0eec962830f849876695b69df76a3137.json +1 -0
  344. package/test/resources/accounts-scenario/charlie/db/oidc/op/provider.json +415 -0
  345. package/test/resources/accounts-scenario/charlie/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A5002.json +1 -0
  346. package/test/resources/accounts-scenario/charlie/profile/card$.ttl +5 -0
  347. package/test/resources/accounts-strict-origin-off/alice/db/oidc/op/clients/_key_7d536a1f8c6eb86f41261e171a8af79a.json +1 -0
  348. package/test/resources/accounts-strict-origin-off/alice/db/oidc/op/provider.json +419 -0
  349. package/test/resources/accounts-strict-origin-off/alice/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7010.json +1 -0
  350. package/test/resources/accounts-strict-origin-off/alice/private-for-alice.txt +1 -0
  351. package/test/resources/accounts-strict-origin-off/alice/private-for-alice.txt.acl +12 -0
  352. package/test/resources/accounts-strict-origin-off/alice/profile/card$.ttl +10 -0
  353. package/test/resources/accounts-strict-origin-off/bob/db/oidc/op/clients/_key_0ed30b9e076814c6f6445582302487c2.json +1 -0
  354. package/test/resources/accounts-strict-origin-off/bob/db/oidc/op/provider.json +419 -0
  355. package/test/resources/accounts-strict-origin-off/bob/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7011.json +1 -0
  356. package/test/resources/accounts-strict-origin-off/bob/shared-with-alice.txt +1 -0
  357. package/test/resources/accounts-strict-origin-off/bob/shared-with-alice.txt.acl +15 -0
  358. package/test/resources/acl-tls/config/templates/emails/delete-account.js +49 -0
  359. package/test/resources/acl-tls/config/templates/emails/invalid-username.js +30 -0
  360. package/test/resources/acl-tls/config/templates/emails/reset-password.js +49 -0
  361. package/test/resources/acl-tls/config/templates/emails/welcome.js +39 -0
  362. package/test/resources/acl-tls/config/templates/new-account/favicon.ico +0 -0
  363. package/test/resources/acl-tls/config/templates/new-account/favicon.ico.acl +26 -0
  364. package/test/resources/acl-tls/config/templates/new-account/profile/card$.ttl +26 -0
  365. package/test/resources/acl-tls/config/templates/new-account/robots.txt +3 -0
  366. package/test/resources/acl-tls/config/templates/new-account/robots.txt.acl +26 -0
  367. package/test/resources/acl-tls/config/templates/new-account/settings/prefs.ttl +15 -0
  368. package/test/resources/acl-tls/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
  369. package/test/resources/acl-tls/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
  370. package/test/resources/acl-tls/config/templates/new-account/settings/publicTypeIndex.ttl.acl +25 -0
  371. package/test/resources/acl-tls/config/templates/new-account/settings/serverSide.ttl.acl +13 -0
  372. package/test/resources/acl-tls/config/templates/new-account/settings/serverSide.ttl.inactive +12 -0
  373. package/test/resources/acl-tls/config/templates/server/favicon.ico +0 -0
  374. package/test/resources/acl-tls/config/templates/server/favicon.ico.acl +15 -0
  375. package/test/resources/acl-tls/config/templates/server/index.html +55 -0
  376. package/test/resources/acl-tls/config/templates/server/robots.txt +3 -0
  377. package/test/resources/acl-tls/config/templates/server/robots.txt.acl +15 -0
  378. package/test/resources/acl-tls/config/views/account/account-deleted.hbs +17 -0
  379. package/test/resources/acl-tls/config/views/account/delete-confirm.hbs +51 -0
  380. package/test/resources/acl-tls/config/views/account/delete-link-sent.hbs +17 -0
  381. package/test/resources/acl-tls/config/views/account/delete.hbs +51 -0
  382. package/test/resources/acl-tls/config/views/account/invalid-username.hbs +22 -0
  383. package/test/resources/acl-tls/config/views/account/register-disabled.hbs +6 -0
  384. package/test/resources/acl-tls/config/views/account/register-form.hbs +147 -0
  385. package/test/resources/acl-tls/config/views/account/register.hbs +24 -0
  386. package/test/resources/acl-tls/config/views/auth/auth-hidden-fields.hbs +8 -0
  387. package/test/resources/acl-tls/config/views/auth/change-password.hbs +58 -0
  388. package/test/resources/acl-tls/config/views/auth/goodbye.hbs +23 -0
  389. package/test/resources/acl-tls/config/views/auth/login-required.hbs +34 -0
  390. package/test/resources/acl-tls/config/views/auth/login-tls.hbs +11 -0
  391. package/test/resources/acl-tls/config/views/auth/login-username-password.hbs +28 -0
  392. package/test/resources/acl-tls/config/views/auth/login.hbs +55 -0
  393. package/test/resources/acl-tls/config/views/auth/no-permission.hbs +29 -0
  394. package/test/resources/acl-tls/config/views/auth/password-changed.hbs +27 -0
  395. package/test/resources/acl-tls/config/views/auth/reset-link-sent.hbs +21 -0
  396. package/test/resources/acl-tls/config/views/auth/reset-password.hbs +52 -0
  397. package/test/resources/acl-tls/config/views/auth/sharing.hbs +49 -0
  398. package/test/resources/acl-tls/config/views/shared/create-account.hbs +8 -0
  399. package/test/resources/acl-tls/config/views/shared/error.hbs +5 -0
  400. package/test/resources/acl-tls/localhost/favicon.ico +0 -0
  401. package/test/resources/acl-tls/localhost/favicon.ico.acl +15 -0
  402. package/test/resources/acl-tls/localhost/index.html +48 -0
  403. package/test/resources/acl-tls/localhost/robots.txt +3 -0
  404. package/test/resources/acl-tls/localhost/robots.txt.acl +15 -0
  405. package/test/resources/acl-tls/tim.localhost/append-acl/abc.ttl +1 -0
  406. package/test/resources/acl-tls/tim.localhost/append-acl/abc.ttl.acl +8 -0
  407. package/test/resources/acl-tls/tim.localhost/append-acl/abc2.ttl +1 -0
  408. package/test/resources/acl-tls/tim.localhost/append-acl/abc2.ttl.acl +8 -0
  409. package/test/resources/acl-tls/tim.localhost/fake-account/hello.html +9 -0
  410. package/test/resources/acl-tls/tim.localhost/no-acl/test-file.html +1 -0
  411. package/test/resources/acl-tls/tim.localhost/profile/card$.ttl +17 -0
  412. package/test/resources/acl-tls/write-acl/test-file$.ttl +1 -0
  413. package/test/resources/auth-proxy/index.html +0 -0
  414. package/test/resources/auth-proxy/index.html.acl +0 -0
  415. package/test/resources/config/templates/emails/delete-account.js +49 -0
  416. package/test/resources/config/templates/emails/delete-account.mjs +31 -0
  417. package/test/resources/config/templates/emails/invalid-username.js +30 -0
  418. package/test/resources/config/templates/emails/invalid-username.mjs +27 -0
  419. package/test/resources/config/templates/emails/reset-password.js +49 -0
  420. package/test/resources/config/templates/emails/reset-password.mjs +31 -0
  421. package/test/resources/config/templates/emails/welcome.js +39 -0
  422. package/test/resources/config/templates/emails/welcome.mjs +23 -0
  423. package/test/resources/config/templates/new-account/favicon.ico +0 -0
  424. package/test/resources/config/templates/new-account/favicon.ico.acl +26 -0
  425. package/test/resources/config/templates/new-account/profile/card$.ttl +26 -0
  426. package/test/resources/config/templates/new-account/robots.txt +3 -0
  427. package/test/resources/config/templates/new-account/robots.txt.acl +26 -0
  428. package/test/resources/config/templates/new-account/settings/prefs.ttl +15 -0
  429. package/test/resources/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
  430. package/test/resources/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
  431. package/test/resources/config/templates/new-account/settings/publicTypeIndex.ttl.acl +25 -0
  432. package/test/resources/config/templates/new-account/settings/serverSide.ttl.acl +13 -0
  433. package/test/resources/config/templates/new-account/settings/serverSide.ttl.inactive +12 -0
  434. package/test/resources/config/templates/server/favicon.ico +0 -0
  435. package/test/resources/config/templates/server/favicon.ico.acl +15 -0
  436. package/test/resources/config/templates/server/index.html +54 -0
  437. package/test/resources/config/templates/server/robots.txt +3 -0
  438. package/test/resources/config/templates/server/robots.txt.acl +15 -0
  439. package/test/resources/config/views/account/account-deleted.hbs +17 -0
  440. package/test/resources/config/views/account/delete-confirm.hbs +51 -0
  441. package/test/resources/config/views/account/delete-link-sent.hbs +17 -0
  442. package/test/resources/config/views/account/delete.hbs +51 -0
  443. package/test/resources/config/views/account/invalid-username.hbs +22 -0
  444. package/test/resources/config/views/account/register-disabled.hbs +6 -0
  445. package/test/resources/config/views/account/register-form.hbs +133 -0
  446. package/test/resources/config/views/account/register.hbs +24 -0
  447. package/test/resources/config/views/auth/auth-hidden-fields.hbs +8 -0
  448. package/test/resources/config/views/auth/change-password.hbs +58 -0
  449. package/test/resources/config/views/auth/goodbye.hbs +23 -0
  450. package/test/resources/config/views/auth/login-required.hbs +34 -0
  451. package/test/resources/config/views/auth/login-tls.hbs +11 -0
  452. package/test/resources/config/views/auth/login-username-password.hbs +28 -0
  453. package/test/resources/config/views/auth/login.hbs +55 -0
  454. package/test/resources/config/views/auth/no-permission.hbs +29 -0
  455. package/test/resources/config/views/auth/password-changed.hbs +27 -0
  456. package/test/resources/config/views/auth/reset-link-sent.hbs +21 -0
  457. package/test/resources/config/views/auth/reset-password.hbs +52 -0
  458. package/test/resources/config/views/auth/sharing.hbs +49 -0
  459. package/test/resources/config/views/shared/create-account.hbs +8 -0
  460. package/test/resources/config/views/shared/error.hbs +5 -0
  461. package/test/resources/empty.spatch +0 -0
  462. package/test/resources/errorPages/401.html +5 -0
  463. package/test/resources/errorPages/403.html +5 -0
  464. package/test/resources/errorPages/404.html +5 -0
  465. package/test/resources/errorPages/405.html +5 -0
  466. package/test/resources/errorPages/415.html +5 -0
  467. package/test/resources/errorPages/500.html +5 -0
  468. package/test/resources/example_spkac.cnf +1 -0
  469. package/test/resources/external-servers/example.com/jwks.json +81 -0
  470. package/test/resources/external-servers/example.com/openid-configuration.json +53 -0
  471. package/test/resources/favicon.ico +0 -0
  472. package/test/resources/favicon.ico.acl +15 -0
  473. package/test/resources/headers/index.html +0 -0
  474. package/test/resources/headers/public-ra +0 -0
  475. package/test/resources/headers/public-ra.acl +7 -0
  476. package/test/resources/headers/user-rw-public-r +0 -0
  477. package/test/resources/headers/user-rw-public-r.acl +12 -0
  478. package/test/resources/headers/user-rwac-public-0 +0 -0
  479. package/test/resources/headers/user-rwac-public-0.acl +7 -0
  480. package/test/resources/hello.html +3 -0
  481. package/test/resources/invalid1.ttl +13 -0
  482. package/test/resources/invalid2.ttl +9 -0
  483. package/test/resources/ldpatch-example-final.ttl +23 -0
  484. package/test/resources/ldpatch-example-initial.ttl +22 -0
  485. package/test/resources/ldpatch-example-patch-1.spatch +8 -0
  486. package/test/resources/ldpatch-example-patch-2.spatch +12 -0
  487. package/test/resources/ldpatch-example-patch-3.spatch +14 -0
  488. package/test/resources/ldpatch-example-patch.ldpatch +25 -0
  489. package/test/resources/ldpatch-example-patch.spatch +24 -0
  490. package/test/resources/lennon.jsonld +7 -0
  491. package/test/resources/lfs-0.sparql +9 -0
  492. package/test/resources/lfs-1-final.json +10 -0
  493. package/test/resources/lfs-1.sparql +11 -0
  494. package/test/resources/messaging-scenario/user1.databox.me/profile/card +21 -0
  495. package/test/resources/nicola.jpg +0 -0
  496. package/test/resources/patch/append-only.ttl +2 -0
  497. package/test/resources/patch/append-only.ttl.acl +6 -0
  498. package/test/resources/patch/favicon.ico +0 -0
  499. package/test/resources/patch/favicon.ico.acl +15 -0
  500. package/test/resources/patch/index.html +0 -0
  501. package/test/resources/patch/read-append.ttl +2 -0
  502. package/test/resources/patch/read-append.ttl.acl +6 -0
  503. package/test/resources/patch/read-only.ttl +2 -0
  504. package/test/resources/patch/read-only.ttl.acl +6 -0
  505. package/test/resources/patch/read-write.ttl +2 -0
  506. package/test/resources/patch/read-write.ttl.acl +6 -0
  507. package/test/resources/patch/robots.txt +3 -0
  508. package/test/resources/patch/robots.txt.acl +15 -0
  509. package/test/resources/patch/write-only.ttl +2 -0
  510. package/test/resources/patch/write-only.ttl.acl +6 -0
  511. package/test/resources/patch-1-initial.ttl +3 -0
  512. package/test/resources/patch-2-final.ttl +2 -0
  513. package/test/resources/patch-2-initial.ttl +3 -0
  514. package/test/resources/patch-2.spatch +2 -0
  515. package/test/resources/patch-2n.spatch +2 -0
  516. package/test/resources/patch-3-final.ttl +28 -0
  517. package/test/resources/patch-4-final.ttl +29 -0
  518. package/test/resources/patch-5-final.ttl +1 -0
  519. package/test/resources/patch-5-initial.ttl +3 -0
  520. package/test/resources/patch-5.spatch +2 -0
  521. package/test/resources/put-input-2.html +13 -0
  522. package/test/resources/put-input.txt +6 -0
  523. package/test/resources/robots.txt +3 -0
  524. package/test/resources/robots.txt.acl +15 -0
  525. package/test/resources/sampleContainer/blank +0 -0
  526. package/test/resources/sampleContainer/cert.pkcs +0 -0
  527. package/test/resources/sampleContainer/example.ttl.old +1 -0
  528. package/test/resources/sampleContainer/example1.ttl +12 -0
  529. package/test/resources/sampleContainer/example2.ttl +3 -0
  530. package/test/resources/sampleContainer/example3.ttl +7 -0
  531. package/test/resources/sampleContainer/example4$.ttl +7 -0
  532. package/test/resources/sampleContainer/filename with spaces.txt +0 -0
  533. package/test/resources/sampleContainer/index.html +9 -0
  534. package/test/resources/sampleContainer/post2.ttl +6 -0
  535. package/test/resources/sampleContainer/put1.ttl +13 -0
  536. package/test/resources/sampleContainer/solid.png +0 -0
  537. package/test/resources/sampleContainer/user1.pfx +0 -0
  538. package/test/resources/sampleContainer/user2.pfx +0 -0
  539. package/test/resources/sampleContainer2/example1.ttl +10 -0
  540. package/test/resources/sampleContainer2/example2.ttl +7 -0
  541. package/test/resources/timbl.jpg +0 -0
  542. package/test/scenarios.md +23 -0
  543. package/test/surface/docker/cookie/Dockerfile +6 -0
  544. package/test/surface/docker/cookie/app/index.js +29 -0
  545. package/test/surface/docker/cookie/app/package-lock.json +13 -0
  546. package/test/surface/docker/cookie/app/package.json +14 -0
  547. package/test/surface/docker/server/Dockerfile +19 -0
  548. package/test/surface/docker/server/config/defaults.js +10 -0
  549. package/test/surface/docker/server/config/templates/emails/delete-account.js +49 -0
  550. package/test/surface/docker/server/config/templates/emails/invalid-username.js +30 -0
  551. package/test/surface/docker/server/config/templates/emails/reset-password.js +49 -0
  552. package/test/surface/docker/server/config/templates/emails/welcome.js +39 -0
  553. package/test/surface/docker/server/config/templates/new-account/favicon.ico +0 -0
  554. package/test/surface/docker/server/config/templates/new-account/favicon.ico.acl +26 -0
  555. package/test/surface/docker/server/config/templates/new-account/profile/card$.ttl +26 -0
  556. package/test/surface/docker/server/config/templates/new-account/robots.txt +3 -0
  557. package/test/surface/docker/server/config/templates/new-account/robots.txt.acl +26 -0
  558. package/test/surface/docker/server/config/templates/new-account/settings/prefs.ttl +15 -0
  559. package/test/surface/docker/server/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
  560. package/test/surface/docker/server/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
  561. package/test/surface/docker/server/config/templates/new-account/settings/publicTypeIndex.ttl.acl +25 -0
  562. package/test/surface/docker/server/config/templates/new-account/settings/serverSide.ttl.acl +13 -0
  563. package/test/surface/docker/server/config/templates/new-account/settings/serverSide.ttl.inactive +12 -0
  564. package/test/surface/docker/server/config/templates/server/favicon.ico +0 -0
  565. package/test/surface/docker/server/config/templates/server/favicon.ico.acl +15 -0
  566. package/test/surface/docker/server/config/templates/server/index.html +55 -0
  567. package/test/surface/docker/server/config/templates/server/robots.txt +3 -0
  568. package/test/surface/docker/server/config/templates/server/robots.txt.acl +15 -0
  569. package/test/surface/docker/server/config/usernames-blacklist.json +4 -0
  570. package/test/surface/docker/server/config/views/account/account-deleted.hbs +17 -0
  571. package/test/surface/docker/server/config/views/account/delete-confirm.hbs +51 -0
  572. package/test/surface/docker/server/config/views/account/delete-link-sent.hbs +17 -0
  573. package/test/surface/docker/server/config/views/account/delete.hbs +51 -0
  574. package/test/surface/docker/server/config/views/account/invalid-username.hbs +22 -0
  575. package/test/surface/docker/server/config/views/account/register-disabled.hbs +6 -0
  576. package/test/surface/docker/server/config/views/account/register-form.hbs +147 -0
  577. package/test/surface/docker/server/config/views/account/register.hbs +24 -0
  578. package/test/surface/docker/server/config/views/auth/auth-hidden-fields.hbs +8 -0
  579. package/test/surface/docker/server/config/views/auth/change-password.hbs +58 -0
  580. package/test/surface/docker/server/config/views/auth/goodbye.hbs +23 -0
  581. package/test/surface/docker/server/config/views/auth/login-required.hbs +34 -0
  582. package/test/surface/docker/server/config/views/auth/login-tls.hbs +11 -0
  583. package/test/surface/docker/server/config/views/auth/login-username-password.hbs +28 -0
  584. package/test/surface/docker/server/config/views/auth/login.hbs +55 -0
  585. package/test/surface/docker/server/config/views/auth/no-permission.hbs +29 -0
  586. package/test/surface/docker/server/config/views/auth/password-changed.hbs +27 -0
  587. package/test/surface/docker/server/config/views/auth/reset-link-sent.hbs +21 -0
  588. package/test/surface/docker/server/config/views/auth/reset-password.hbs +52 -0
  589. package/test/surface/docker/server/config/views/auth/sharing.hbs +49 -0
  590. package/test/surface/docker/server/config/views/shared/create-account.hbs +8 -0
  591. package/test/surface/docker/server/config/views/shared/error.hbs +5 -0
  592. package/test/surface/docker/server/config.json +22 -0
  593. package/test/surface/docker/server/data/favicon.ico +0 -0
  594. package/test/surface/docker/server/data/favicon.ico.acl +26 -0
  595. package/test/surface/docker/server/data/index.html +48 -0
  596. package/test/surface/docker/server/data/profile/card$.ttl +31 -0
  597. package/test/surface/docker/server/data/robots.txt +3 -0
  598. package/test/surface/docker/server/data/robots.txt.acl +26 -0
  599. package/test/surface/docker/server/data/settings/prefs.ttl +15 -0
  600. package/test/surface/docker/server/data/settings/privateTypeIndex.ttl +4 -0
  601. package/test/surface/docker/server/data/settings/publicTypeIndex.ttl +4 -0
  602. package/test/surface/docker/server/data/settings/publicTypeIndex.ttl.acl +25 -0
  603. package/test/surface/docker/server/data/settings/serverSide.ttl +0 -0
  604. package/test/surface/docker/server/data/settings/serverSide.ttl.acl +13 -0
  605. package/test/surface/docker/server/data/settings/serverSide.ttl.inactive +12 -0
  606. package/test/surface/docker/server/env.list +4 -0
  607. package/test/surface/docker/solid-crud/Dockerfile +4 -0
  608. package/test/surface/docker/web-access-control/Dockerfile +1 -0
  609. package/test/surface/docker/webid-provider/Dockerfile +1 -0
  610. package/test/surface/run-solid-test-suite.sh +75 -0
  611. package/test/surface/server-env.list +5 -0
  612. package/test/surface/solid-crud-tests-env.list +5 -0
  613. package/test/surface/thirdparty-config.json +23 -0
  614. package/test/surface/thirdparty-env.list +6 -0
  615. package/test/surface/web-access-control-tests-env.list +6 -0
  616. package/test/surface/webid-provider-tests-env.list +4 -0
  617. package/test/test-helpers.mjs +63 -0
  618. package/test/unit/account-manager-test.mjs +610 -0
  619. package/test/unit/account-template-test.mjs +59 -0
  620. package/test/unit/acl-checker-test.mjs +51 -0
  621. package/test/unit/add-cert-request-test.mjs +120 -0
  622. package/test/unit/auth-handlers-test.mjs +108 -0
  623. package/test/unit/auth-proxy-test.mjs +224 -0
  624. package/test/unit/auth-request-test.mjs +96 -0
  625. package/test/unit/authenticator-test.mjs +34 -0
  626. package/test/unit/blacklist-service-test.mjs +49 -0
  627. package/test/unit/create-account-request-test.mjs +306 -0
  628. package/test/unit/delete-account-confirm-request-test.mjs +234 -0
  629. package/test/unit/delete-account-request-test.mjs +180 -0
  630. package/test/unit/email-service-test.mjs +166 -0
  631. package/test/unit/email-welcome-test.mjs +81 -0
  632. package/test/unit/error-pages-test.mjs +100 -0
  633. package/test/unit/esm-imports.test.mjs +149 -0
  634. package/test/unit/force-user-test.mjs +73 -0
  635. package/test/unit/getAvailableUrl-test.mjs +30 -0
  636. package/test/unit/getTrustedOrigins-test.mjs +20 -0
  637. package/test/unit/login-request-test.mjs +246 -0
  638. package/test/unit/oidc-manager-test.mjs +50 -0
  639. package/test/unit/password-authenticator-test.mjs +125 -0
  640. package/test/unit/password-change-request-test.mjs +259 -0
  641. package/test/unit/password-reset-email-request-test.mjs +234 -0
  642. package/test/unit/resource-mapper-test.mjs +673 -0
  643. package/test/unit/solid-host-test.mjs +119 -0
  644. package/test/unit/tls-authenticator-test.mjs +174 -0
  645. package/test/unit/token-service-test.mjs +82 -0
  646. package/test/unit/user-account-test.mjs +38 -0
  647. package/test/unit/user-accounts-api-test.mjs +59 -0
  648. package/test/unit/user-utils-test.mjs +64 -0
  649. package/test/unit/utils-test.mjs +114 -0
  650. package/test/utils/index.mjs +167 -0
  651. package/test/utils.mjs +205 -0
  652. package/test/validate-turtle.mjs +43 -0
  653. package/.github/workflows/ci.yml +0 -113
  654. package/.nvmrc +0 -1
  655. package/.snyk +0 -35
  656. package/bin/lib/cli-utils.js +0 -85
  657. package/bin/lib/cli.js +0 -39
  658. package/bin/solid.js +0 -3
  659. package/default-templates/new-account/.acl +0 -26
  660. package/default-templates/new-account/.meta +0 -5
  661. package/default-templates/new-account/.well-known/.acl +0 -19
  662. package/default-templates/new-account/private/.acl +0 -10
  663. package/default-templates/new-account/profile/.acl +0 -19
  664. package/default-templates/new-account/public/.acl +0 -19
  665. package/default-templates/new-account/settings/.acl +0 -20
  666. package/index.js +0 -3
  667. package/lib/api/authn/index.js +0 -5
  668. package/lib/api/index.js +0 -6
  669. package/lib/common/template-utils.js +0 -50
  670. package/lib/debug.js +0 -18
  671. package/lib/ldp-copy.js +0 -73
  672. package/lib/ldp-middleware.js +0 -40
  673. package/lib/models/account-manager.js +0 -604
  674. package/lib/models/account-template.js +0 -156
  675. package/lib/models/authenticator.js +0 -337
  676. package/lib/models/oidc-manager.js +0 -53
  677. package/lib/models/solid-host.js +0 -131
  678. package/lib/models/user-account.js +0 -113
  679. package/lib/models/webid-tls-certificate.js +0 -184
  680. package/lib/requests/add-cert-request.js +0 -138
  681. package/lib/requests/auth-request.js +0 -234
  682. package/lib/requests/delete-account-confirm-request.js +0 -170
  683. package/lib/requests/login-request.js +0 -205
  684. package/lib/services/email-service.js +0 -162
  685. package/lib/webid/tls/index.js +0 -185
@@ -1,235 +1,241 @@
1
- // Express handler for LDP PATCH requests
2
-
3
- module.exports = handler
4
-
5
- const bodyParser = require('body-parser')
6
- const fs = require('fs')
7
- const debug = require('../debug').handlers
8
- const error = require('../http-error')
9
- const $rdf = require('rdflib')
10
- const crypto = require('crypto')
11
- const { overQuota, getContentType } = require('../utils')
12
- const withLock = require('../lock')
13
-
14
- // Patch parsers by request body content type
15
- const PATCH_PARSERS = {
16
- 'application/sparql-update': require('./patch/sparql-update-parser.js'),
17
- 'application/sparql-update-single-match': require('./patch/sparql-update-parser.js'),
18
- 'text/n3': require('./patch/n3-patch-parser.js')
19
- }
20
-
21
- // use media-type as contentType for new RDF resource
22
- const DEFAULT_FOR_NEW_CONTENT_TYPE = 'text/turtle'
23
-
24
- function contentTypeForNew (req) {
25
- let contentTypeForNew = DEFAULT_FOR_NEW_CONTENT_TYPE
26
- if (req.path.endsWith('.jsonld')) contentTypeForNew = 'application/ld+json'
27
- else if (req.path.endsWith('.n3')) contentTypeForNew = 'text/n3'
28
- else if (req.path.endsWith('.rdf')) contentTypeForNew = 'application/rdf+xml'
29
- return contentTypeForNew
30
- }
31
-
32
- function contentForNew (contentType) {
33
- let contentForNew = ''
34
- if (contentType.includes('ld+json')) contentForNew = JSON.stringify('{}')
35
- else if (contentType.includes('rdf+xml')) contentForNew = '<rdf:RDF\n xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">\n\n</rdf:RDF>'
36
- return contentForNew
37
- }
38
-
39
- // Handles a PATCH request
40
- async function patchHandler (req, res, next) {
41
- debug(`PATCH -- ${req.originalUrl}`)
42
- try {
43
- // Obtain details of the target resource
44
- const ldp = req.app.locals.ldp
45
- let path, contentType
46
- let resourceExists = true
47
- try {
48
- // First check if the file already exists
49
- ({ path, contentType } = await ldp.resourceMapper.mapUrlToFile({ url: req }))
50
- } catch (err) {
51
- // If the file doesn't exist, request to create one with the file media type as contentType
52
- ({ path, contentType } = await ldp.resourceMapper.mapUrlToFile(
53
- { url: req, createIfNotExists: true, contentType: contentTypeForNew(req) }))
54
- // check if a folder with same name exists
55
- try {
56
- await ldp.checkItemName(req)
57
- } catch (err) {
58
- return next(err)
59
- }
60
- resourceExists = false
61
- }
62
- const { url } = await ldp.resourceMapper.mapFileToUrl({ path, hostname: req.hostname })
63
- const resource = { path, contentType, url }
64
- debug('PATCH -- Target <%s> (%s)', url, contentType)
65
-
66
- // Obtain details of the patch document
67
- const patch = {}
68
- patch.text = req.body ? req.body.toString() : ''
69
- patch.uri = `${url}#patch-${hash(patch.text)}`
70
- patch.contentType = getContentType(req.headers)
71
- if (!patch.contentType) {
72
- throw error(400, 'PATCH request requires a content-type via the Content-Type header')
73
- }
74
- debug('PATCH -- Received patch (%d bytes, %s)', patch.text.length, patch.contentType)
75
- const parsePatch = PATCH_PARSERS[patch.contentType]
76
- if (!parsePatch) {
77
- throw error(415, `Unsupported patch content type: ${patch.contentType}`)
78
- }
79
- res.header('Accept-Patch', patch.contentType) // is this needed ?
80
- // Parse the patch document and verify permissions
81
- const patchObject = await parsePatch(url, patch.uri, patch.text)
82
- await checkPermission(req, patchObject, resourceExists)
83
-
84
- // Create the enclosing directory, if necessary
85
- await ldp.createDirectory(path, req.hostname)
86
-
87
- // Patch the graph and write it back to the file
88
- const result = await withLock(path, async () => {
89
- const graph = await readGraph(resource)
90
- await applyPatch(patchObject, graph, url)
91
- return writeGraph(graph, resource, ldp.resourceMapper.resolveFilePath(req.hostname), ldp.serverUri)
92
- })
93
- // Send the status and result to the client
94
- res.status(resourceExists ? 200 : 201)
95
- res.send(result)
96
- } catch (err) {
97
- return next(err)
98
- }
99
- return next()
100
- }
101
-
102
- // Reads the request body and calls the actual patch handler
103
- function handler (req, res, next) {
104
- readEntity(req, res, () => patchHandler(req, res, next))
105
- }
106
-
107
- const readEntity = bodyParser.text({ type: () => true })
108
-
109
- // Reads the RDF graph in the given resource
110
- function readGraph (resource) {
111
- // Read the resource's file
112
- return new Promise((resolve, reject) =>
113
- fs.readFile(resource.path, { encoding: 'utf8' }, function (err, fileContents) {
114
- if (err) {
115
- // If the file does not exist, assume empty contents
116
- // (it will be created after a successful patch)
117
- if (err.code === 'ENOENT') {
118
- fileContents = contentForNew(resource.contentType)
119
- // Fail on all other errors
120
- } else {
121
- return reject(error(500, `Original file read error: ${err}`))
122
- }
123
- }
124
- debug('PATCH -- Read target file (%d bytes)', fileContents.length)
125
- fileContents = resource.contentType.includes('json') ? JSON.parse(fileContents) : fileContents
126
- resolve(fileContents)
127
- })
128
- )
129
- // Parse the resource's file contents
130
- .then((fileContents) => {
131
- const graph = $rdf.graph()
132
- debug('PATCH -- Reading %s with content type %s', resource.url, resource.contentType)
133
- try {
134
- $rdf.parse(fileContents, graph, resource.url, resource.contentType)
135
- } catch (err) {
136
- throw error(500, `Patch: Target ${resource.contentType} file syntax error: ${err}`)
137
- }
138
- debug('PATCH -- Parsed target file')
139
- return graph
140
- })
141
- }
142
-
143
- // Verifies whether the user is allowed to perform the patch on the target
144
- async function checkPermission (request, patchObject, resourceExists) {
145
- // If no ACL object was passed down, assume permissions are okay.
146
- if (!request.acl) return Promise.resolve(patchObject)
147
- // At this point, we already assume append access,
148
- // as this can be checked upfront before parsing the patch.
149
- // Now that we know the details of the patch,
150
- // we might need to perform additional checks.
151
- let modes = []
152
- const { acl, session: { userId } } = request
153
- // Read access is required for DELETE and WHERE.
154
- // If we would allows users without read access,
155
- // they could use DELETE or WHERE to trigger 200 or 409,
156
- // and thereby guess the existence of certain triples.
157
- // DELETE additionally requires write access.
158
- if (patchObject.delete) {
159
- // ACTUALLY Read not needed by solid/test-suite only Write
160
- modes = ['Read', 'Write']
161
- // checks = [acl.can(userId, 'Read'), acl.can(userId, 'Write')]
162
- } else if (patchObject.where) {
163
- modes = modes.concat(['Read'])
164
- // checks = [acl.can(userId, 'Read')]
165
- }
166
- const allowed = await Promise.all(modes.map(mode => acl.can(userId, mode, request.method, resourceExists)))
167
- const allAllowed = allowed.reduce((memo, allowed) => memo && allowed, true)
168
- if (!allAllowed) {
169
- // check owner with Control
170
- const ldp = request.app.locals.ldp
171
- if (request.path.endsWith('.acl') && await ldp.isOwner(userId, request.hostname)) return Promise.resolve(patchObject)
172
-
173
- const errors = await Promise.all(modes.map(mode => acl.getError(userId, mode)))
174
- const error = errors.filter(error => !!error)
175
- .reduce((prevErr, err) => prevErr.status > err.status ? prevErr : err, { status: 0 })
176
- return Promise.reject(error)
177
- }
178
- return Promise.resolve(patchObject)
179
- }
180
-
181
- // Applies the patch to the RDF graph
182
- function applyPatch (patchObject, graph, url) {
183
- debug('PATCH -- Applying patch')
184
- return new Promise((resolve, reject) =>
185
- graph.applyPatch(patchObject, graph.sym(url), (err) => {
186
- if (err) {
187
- const message = err.message || err // returns string at the moment
188
- debug(`PATCH -- FAILED. Returning 409. Message: '${message}'`)
189
- return reject(error(409, `The patch could not be applied. ${message}`))
190
- }
191
- resolve(graph)
192
- })
193
- )
194
- }
195
-
196
- // Writes the RDF graph to the given resource
197
- function writeGraph (graph, resource, root, serverUri) {
198
- debug('PATCH -- Writing patched file')
199
- return new Promise((resolve, reject) => {
200
- const resourceSym = graph.sym(resource.url)
201
-
202
- function doWrite (serialized) {
203
- // First check if we are above quota
204
- overQuota(root, serverUri).then((isOverQuota) => {
205
- if (isOverQuota) {
206
- return reject(error(413,
207
- 'User has exceeded their storage quota'))
208
- }
209
-
210
- fs.writeFile(resource.path, serialized, { encoding: 'utf8' }, function (err) {
211
- if (err) {
212
- return reject(error(500, `Failed to write file after patch: ${err}`))
213
- }
214
- debug('PATCH -- applied successfully')
215
- resolve('Patch applied successfully.\n')
216
- })
217
- }).catch(() => reject(error(500, 'Error finding user quota')))
218
- }
219
-
220
- if (resource.contentType === 'application/ld+json') {
221
- $rdf.serialize(resourceSym, graph, resource.url, resource.contentType, function (err, result) {
222
- if (err) return reject(error(500, `Failed to serialize after patch: ${err}`))
223
- doWrite(result)
224
- })
225
- } else {
226
- const serialized = $rdf.serialize(resourceSym, graph, resource.url, resource.contentType)
227
- doWrite(serialized)
228
- }
229
- })
230
- }
231
-
232
- // Creates a hash of the given text
233
- function hash (text) {
234
- return crypto.createHash('md5').update(text).digest('hex')
235
- }
1
+ // Express handler for LDP PATCH requests
2
+ import bodyParser from 'body-parser'
3
+ import fs from 'fs'
4
+ import debugModule from '../debug.mjs'
5
+ import error from '../http-error.mjs'
6
+ import $rdf from 'rdflib'
7
+ import crypto from 'crypto'
8
+ import { overQuota, getContentType } from '../utils.mjs'
9
+ import withLock from '../lock.mjs'
10
+ import sparqlUpdateParser from './patch/sparql-update-parser.mjs'
11
+ import n3PatchParser from './patch/n3-patch-parser.mjs'
12
+
13
+ const debug = debugModule.handlers
14
+
15
+ // Patch parsers by request body content type
16
+ const PATCH_PARSERS = {
17
+ 'application/sparql-update': sparqlUpdateParser,
18
+ 'application/sparql-update-single-match': sparqlUpdateParser,
19
+ 'text/n3': n3PatchParser
20
+ }
21
+
22
+ // use media-type as contentType for new RDF resource
23
+ const DEFAULT_FOR_NEW_CONTENT_TYPE = 'text/turtle'
24
+
25
+ function contentTypeForNew (req) {
26
+ let contentTypeForNew = DEFAULT_FOR_NEW_CONTENT_TYPE
27
+ if (req.path.endsWith('.jsonld')) contentTypeForNew = 'application/ld+json'
28
+ else if (req.path.endsWith('.n3')) contentTypeForNew = 'text/n3'
29
+ else if (req.path.endsWith('.rdf')) contentTypeForNew = 'application/rdf+xml'
30
+ return contentTypeForNew
31
+ }
32
+
33
+ function contentForNew (contentType) {
34
+ let contentForNew = ''
35
+ if (contentType.includes('ld+json')) contentForNew = JSON.stringify('{}')
36
+ else if (contentType.includes('rdf+xml')) contentForNew = '<rdf:RDF\n xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">\n\n</rdf:RDF>'
37
+ return contentForNew
38
+ }
39
+
40
+ // Handles a PATCH request
41
+ async function patchHandler (req, res, next) {
42
+ debug(`PATCH -- ${req.originalUrl}`)
43
+ try {
44
+ // Obtain details of the target resource
45
+ const ldp = req.app.locals.ldp
46
+ let path, contentType
47
+ let resourceExists = true
48
+ try {
49
+ // First check if the file already exists
50
+ ({ path, contentType } = await ldp.resourceMapper.mapUrlToFile({ url: req }))
51
+ } catch (err) {
52
+ // debug('PATCH -- File does not exist, creating new resource. Error:', err.message)
53
+ // If the file doesn't exist, request to create one with the file media type as contentType
54
+ ({ path, contentType } = await ldp.resourceMapper.mapUrlToFile(
55
+ { url: req, createIfNotExists: true, contentType: contentTypeForNew(req) }))
56
+ // check if a folder with same name exists
57
+ try {
58
+ await ldp.checkItemName(req)
59
+ } catch (err) {
60
+ return next(err)
61
+ }
62
+ resourceExists = false
63
+ }
64
+ const { url } = await ldp.resourceMapper.mapFileToUrl({ path, hostname: req.hostname })
65
+ const resource = { path, contentType, url }
66
+ debug('PATCH -- Target <%s> (%s)', url, contentType)
67
+
68
+ // Obtain details of the patch document
69
+ const patch = {}
70
+ patch.text = req.body ? req.body.toString() : ''
71
+ patch.uri = `${url}#patch-${hash(patch.text)}`
72
+ patch.contentType = getContentType(req.headers)
73
+ if (!patch.contentType) {
74
+ throw error(400, 'PATCH request requires a content-type via the Content-Type header')
75
+ }
76
+ debug('PATCH -- Received patch (%d bytes, %s)', patch.text.length, patch.contentType)
77
+ const parsePatch = PATCH_PARSERS[patch.contentType]
78
+ if (!parsePatch) {
79
+ throw error(415, `Unsupported patch content type: ${patch.contentType}`)
80
+ }
81
+ res.header('Accept-Patch', patch.contentType) // is this needed ?
82
+ // Parse the patch document and verify permissions
83
+ const patchObject = await parsePatch(url, patch.uri, patch.text)
84
+ await checkPermission(req, patchObject, resourceExists)
85
+
86
+ // Create the enclosing directory, if necessary
87
+ await ldp.createDirectory(path, req.hostname)
88
+
89
+ // Patch the graph and write it back to the file
90
+ const result = await withLock(path, async () => {
91
+ const graph = await readGraph(resource)
92
+ await applyPatch(patchObject, graph, url)
93
+ return writeGraph(graph, resource, ldp.resourceMapper.resolveFilePath(req.hostname), ldp.serverUri)
94
+ })
95
+ // Send the status and result to the client
96
+ res.status(resourceExists ? 200 : 201)
97
+ res.send(result)
98
+ } catch (err) {
99
+ return next(err)
100
+ }
101
+ return next()
102
+ }
103
+
104
+ // Reads the request body and calls the actual patch handler
105
+ function handler (req, res, next) {
106
+ debug('PATCH -- handler called for:', req.originalUrl || req.url)
107
+ readEntity(req, res, () => patchHandler(req, res, next))
108
+ }
109
+
110
+ const readEntity = bodyParser.text({ type: () => true })
111
+
112
+ // Reads the RDF graph in the given resource
113
+ function readGraph (resource) {
114
+ // Read the resource's file
115
+ return new Promise((resolve, reject) =>
116
+ fs.readFile(resource.path, { encoding: 'utf8' }, function (err, fileContents) {
117
+ if (err) {
118
+ // If the file does not exist, assume empty contents
119
+ // (it will be created after a successful patch)
120
+ if (err.code === 'ENOENT') {
121
+ fileContents = contentForNew(resource.contentType)
122
+ // Fail on all other errors
123
+ } else {
124
+ return reject(error(500, `Original file read error: ${err}`))
125
+ }
126
+ }
127
+ debug('PATCH -- Read target file (%d bytes)', fileContents.length)
128
+ fileContents = resource.contentType.includes('json') ? JSON.parse(fileContents) : fileContents
129
+ resolve(fileContents)
130
+ })
131
+ )
132
+ // Parse the resource's file contents
133
+ .then((fileContents) => {
134
+ const graph = $rdf.graph()
135
+ debug('PATCH -- Reading %s with content type %s', resource.url, resource.contentType)
136
+ try {
137
+ $rdf.parse(fileContents, graph, resource.url, resource.contentType)
138
+ } catch (err) {
139
+ throw error(500, `Patch: Target ${resource.contentType} file syntax error: ${err}`)
140
+ }
141
+ debug('PATCH -- Parsed target file')
142
+ return graph
143
+ })
144
+ }
145
+
146
+ // Verifies whether the user is allowed to perform the patch on the target
147
+ async function checkPermission (request, patchObject, resourceExists) {
148
+ // If no ACL object was passed down, assume permissions are okay.
149
+ if (!request.acl) return Promise.resolve(patchObject)
150
+ // At this point, we already assume append access,
151
+ // as this can be checked upfront before parsing the patch.
152
+ // Now that we know the details of the patch,
153
+ // we might need to perform additional checks.
154
+ let modes = []
155
+ const { acl, session: { userId } } = request
156
+ // Read access is required for DELETE and WHERE.
157
+ // If we would allows users without read access,
158
+ // they could use DELETE or WHERE to trigger 200 or 409,
159
+ // and thereby guess the existence of certain triples.
160
+ // DELETE additionally requires write access.
161
+ if (patchObject.delete) {
162
+ // ACTUALLY Read not needed by solid/test-suite only Write
163
+ modes = ['Read', 'Write']
164
+ // checks = [acl.can(userId, 'Read'), acl.can(userId, 'Write')]
165
+ } else if (patchObject.where) {
166
+ modes = modes.concat(['Read'])
167
+ // checks = [acl.can(userId, 'Read')]
168
+ }
169
+ const allowed = await Promise.all(modes.map(mode => acl.can(userId, mode, request.method, resourceExists)))
170
+ const allAllowed = allowed.reduce((memo, allowed) => memo && allowed, true)
171
+ if (!allAllowed) {
172
+ // check owner with Control
173
+ const ldp = request.app.locals.ldp
174
+ if (request.path.endsWith('.acl') && await ldp.isOwner(userId, request.hostname)) return Promise.resolve(patchObject)
175
+
176
+ const errors = await Promise.all(modes.map(mode => acl.getError(userId, mode)))
177
+ const error = errors.filter(error => !!error)
178
+ .reduce((prevErr, err) => prevErr.status > err.status ? prevErr : err, { status: 0 })
179
+ return Promise.reject(error)
180
+ }
181
+ return Promise.resolve(patchObject)
182
+ }
183
+
184
+ // Applies the patch to the RDF graph
185
+ function applyPatch (patchObject, graph, url) {
186
+ debug('PATCH -- Applying patch')
187
+ return new Promise((resolve, reject) =>
188
+ graph.applyPatch(patchObject, graph.sym(url), (err) => {
189
+ if (err) {
190
+ const message = err.message || err // returns string at the moment
191
+ debug(`PATCH -- FAILED. Returning 409. Message: '${message}'`)
192
+ return reject(error(409, `The patch could not be applied. ${message}`))
193
+ }
194
+ resolve(graph)
195
+ })
196
+ )
197
+ }
198
+
199
+ // Writes the RDF graph to the given resource
200
+ function writeGraph (graph, resource, root, serverUri) {
201
+ debug('PATCH -- Writing patched file')
202
+ return new Promise((resolve, reject) => {
203
+ const resourceSym = graph.sym(resource.url)
204
+
205
+ function doWrite (serialized) {
206
+ // First check if we are above quota
207
+ overQuota(root, serverUri).then((isOverQuota) => {
208
+ if (isOverQuota) {
209
+ return reject(error(413,
210
+ 'User has exceeded their storage quota'))
211
+ }
212
+
213
+ fs.writeFile(resource.path, serialized, { encoding: 'utf8' }, function (err) {
214
+ if (err) {
215
+ return reject(error(500, `Failed to write file after patch: ${err}`))
216
+ }
217
+ debug('PATCH -- applied successfully')
218
+ resolve('Patch applied successfully.\n')
219
+ })
220
+ }).catch(() => reject(error(500, 'Error finding user quota')))
221
+ }
222
+
223
+ if (resource.contentType === 'application/ld+json') {
224
+ $rdf.serialize(resourceSym, graph, resource.url, resource.contentType, function (err, result) {
225
+ if (err) return reject(error(500, `Failed to serialize after patch: ${err}`))
226
+ doWrite(result)
227
+ })
228
+ } else {
229
+ const serialized = $rdf.serialize(resourceSym, graph, resource.url, resource.contentType)
230
+ debug(`PATCH -- Serialized graph:\n${serialized}`)
231
+ doWrite(serialized)
232
+ }
233
+ })
234
+ }
235
+
236
+ // Creates a hash of the given text
237
+ function hash (text) {
238
+ return crypto.createHash('md5').update(text).digest('hex')
239
+ }
240
+
241
+ export default handler