solid-server 5.8.7 → 5.8.8-5fdbfa12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (686) hide show
  1. package/CHANGELOG.md +0 -0
  2. package/CONTRIBUTING.md +0 -0
  3. package/CONTRIBUTORS.md +0 -0
  4. package/Dockerfile +0 -0
  5. package/LICENSE.md +0 -0
  6. package/README.md +0 -0
  7. package/bin/config.json +0 -0
  8. package/bin/lib/cli-utils.mjs +54 -0
  9. package/bin/lib/cli.mjs +44 -0
  10. package/bin/lib/{init.js → init.mjs} +93 -94
  11. package/bin/lib/{invalidUsernames.js → invalidUsernames.mjs} +136 -148
  12. package/bin/lib/{migrateLegacyResources.js → migrateLegacyResources.mjs} +64 -69
  13. package/bin/lib/{options.js → options.mjs} +379 -405
  14. package/bin/lib/{start.js → start.mjs} +124 -148
  15. package/bin/lib/{updateIndex.js → updateIndex.mjs} +55 -56
  16. package/bin/solid +2 -2
  17. package/bin/solid-test +0 -0
  18. package/common/css/bootstrap.min.css +6 -0
  19. package/common/css/solid.css +0 -0
  20. package/common/fonts/glyphicons-halflings-regular.eot +0 -0
  21. package/common/fonts/glyphicons-halflings-regular.svg +0 -0
  22. package/common/fonts/glyphicons-halflings-regular.ttf +0 -0
  23. package/common/fonts/glyphicons-halflings-regular.woff +0 -0
  24. package/common/fonts/glyphicons-halflings-regular.woff2 +0 -0
  25. package/common/img/solid-emblem.svg +0 -0
  26. package/common/js/auth-buttons.js +0 -0
  27. package/common/js/auth-buttons.mjs +57 -0
  28. package/common/js/index-buttons.js +0 -0
  29. package/common/js/index-buttons.mjs +38 -0
  30. package/common/js/solid.js +0 -0
  31. package/common/js/solid.mjs +456 -0
  32. package/common/well-known/security.txt +0 -0
  33. package/config/defaults.js +0 -0
  34. package/config/defaults.mjs +22 -0
  35. package/config/templates/emails/delete-account.js +49 -0
  36. package/config/templates/emails/delete-account.mjs +31 -0
  37. package/config/templates/emails/invalid-username.js +30 -0
  38. package/config/templates/emails/invalid-username.mjs +27 -0
  39. package/config/templates/emails/reset-password.js +49 -0
  40. package/config/templates/emails/reset-password.mjs +31 -0
  41. package/config/templates/emails/welcome.js +39 -0
  42. package/config/templates/emails/welcome.mjs +23 -0
  43. package/config/templates/new-account/favicon.ico +0 -0
  44. package/config/templates/new-account/favicon.ico.acl +26 -0
  45. package/config/templates/new-account/profile/card$.ttl +26 -0
  46. package/config/templates/new-account/robots.txt +3 -0
  47. package/config/templates/new-account/robots.txt.acl +26 -0
  48. package/config/templates/new-account/settings/prefs.ttl +15 -0
  49. package/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
  50. package/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
  51. package/{default-templates/new-account/.meta.acl → config/templates/new-account/settings/publicTypeIndex.ttl.acl} +4 -4
  52. package/config/templates/new-account/settings/serverSide.ttl.acl +13 -0
  53. package/config/templates/new-account/settings/serverSide.ttl.inactive +12 -0
  54. package/config/templates/server/favicon.ico +0 -0
  55. package/{.well-known/.acl → config/templates/server/favicon.ico.acl} +2 -2
  56. package/config/templates/server/index.html +54 -0
  57. package/config/templates/server/robots.txt +3 -0
  58. package/{default-templates/server/.well-known/.acl → config/templates/server/robots.txt.acl} +2 -2
  59. package/config/usernames-blacklist.json +0 -0
  60. package/config/views/account/account-deleted.hbs +17 -0
  61. package/config/views/account/delete-confirm.hbs +51 -0
  62. package/config/views/account/delete-link-sent.hbs +17 -0
  63. package/config/views/account/delete.hbs +51 -0
  64. package/config/views/account/invalid-username.hbs +22 -0
  65. package/config/views/account/register-disabled.hbs +6 -0
  66. package/config/views/account/register-form.hbs +133 -0
  67. package/config/views/account/register.hbs +24 -0
  68. package/config/views/auth/auth-hidden-fields.hbs +8 -0
  69. package/config/views/auth/change-password.hbs +58 -0
  70. package/config/views/auth/goodbye.hbs +23 -0
  71. package/config/views/auth/login-required.hbs +34 -0
  72. package/config/views/auth/login-tls.hbs +11 -0
  73. package/config/views/auth/login-username-password.hbs +28 -0
  74. package/config/views/auth/login.hbs +55 -0
  75. package/config/views/auth/no-permission.hbs +29 -0
  76. package/config/views/auth/password-changed.hbs +27 -0
  77. package/config/views/auth/reset-link-sent.hbs +21 -0
  78. package/config/views/auth/reset-password.hbs +52 -0
  79. package/config/views/auth/sharing.hbs +49 -0
  80. package/config/views/shared/create-account.hbs +8 -0
  81. package/config/views/shared/error.hbs +5 -0
  82. package/config.json-default +0 -0
  83. package/coverage/tmp/coverage-2275-1766876301000-0.json +1 -0
  84. package/coverage/tmp/coverage-2276-1766876279735-0.json +1 -0
  85. package/default-templates/emails/delete-account.js +0 -0
  86. package/default-templates/emails/delete-account.mjs +31 -0
  87. package/default-templates/emails/invalid-username.js +0 -0
  88. package/default-templates/emails/invalid-username.mjs +27 -0
  89. package/default-templates/emails/reset-password.js +0 -0
  90. package/default-templates/emails/reset-password.mjs +31 -0
  91. package/default-templates/emails/welcome.js +0 -0
  92. package/default-templates/emails/welcome.mjs +23 -0
  93. package/default-templates/new-account/favicon.ico +0 -0
  94. package/default-templates/new-account/favicon.ico.acl +0 -0
  95. package/default-templates/new-account/profile/card$.ttl +0 -0
  96. package/default-templates/new-account/robots.txt +0 -0
  97. package/default-templates/new-account/robots.txt.acl +0 -0
  98. package/default-templates/new-account/settings/prefs.ttl +0 -0
  99. package/default-templates/new-account/settings/privateTypeIndex.ttl +0 -0
  100. package/default-templates/new-account/settings/publicTypeIndex.ttl +0 -0
  101. package/default-templates/new-account/settings/publicTypeIndex.ttl.acl +0 -0
  102. package/default-templates/new-account/settings/serverSide.ttl.acl +0 -0
  103. package/default-templates/new-account/settings/serverSide.ttl.inactive +0 -0
  104. package/default-templates/server/favicon.ico +0 -0
  105. package/default-templates/server/favicon.ico.acl +0 -0
  106. package/default-templates/server/index.html +0 -0
  107. package/default-templates/server/robots.txt +0 -0
  108. package/default-templates/server/robots.txt.acl +0 -0
  109. package/default-views/account/account-deleted.hbs +0 -0
  110. package/default-views/account/delete-confirm.hbs +0 -0
  111. package/default-views/account/delete-link-sent.hbs +0 -0
  112. package/default-views/account/delete.hbs +0 -0
  113. package/default-views/account/invalid-username.hbs +0 -0
  114. package/default-views/account/register-disabled.hbs +0 -0
  115. package/default-views/account/register-form.hbs +0 -0
  116. package/default-views/account/register.hbs +0 -0
  117. package/default-views/auth/auth-hidden-fields.hbs +0 -0
  118. package/default-views/auth/change-password.hbs +0 -0
  119. package/default-views/auth/goodbye.hbs +0 -0
  120. package/default-views/auth/login-required.hbs +0 -0
  121. package/default-views/auth/login-tls.hbs +0 -0
  122. package/default-views/auth/login-username-password.hbs +0 -0
  123. package/default-views/auth/login.hbs +0 -0
  124. package/default-views/auth/no-permission.hbs +0 -0
  125. package/default-views/auth/password-changed.hbs +0 -0
  126. package/default-views/auth/reset-link-sent.hbs +0 -0
  127. package/default-views/auth/reset-password.hbs +0 -0
  128. package/default-views/auth/sharing.hbs +0 -0
  129. package/default-views/shared/create-account.hbs +0 -0
  130. package/default-views/shared/error.hbs +0 -0
  131. package/docker-compose.yml +0 -0
  132. package/docker-image/CONTRIBUTING.md +33 -0
  133. package/docker-image/Makefile +32 -0
  134. package/docker-image/README.md +65 -0
  135. package/docker-image/examples/docker-compose.all-in-one.yml +76 -0
  136. package/docker-image/examples/docker-compose.nginx.yml +51 -0
  137. package/docker-image/examples/docker-compose.simple.yml +34 -0
  138. package/docker-image/src/Dockerfile +34 -0
  139. package/docker-image/src/checks.sh +56 -0
  140. package/docker-image/src/create-temporary-cert.sh +14 -0
  141. package/docker-image/src/entrypoint.sh +8 -0
  142. package/{common/img/.gitkeep → docker-image/test/__init__.py} +0 -0
  143. package/docker-image/test/conftest.py +15 -0
  144. package/docker-image/test/test_image_foundations.py +51 -0
  145. package/docker-image/test/test_non_accessible_key_cert.py +36 -0
  146. package/docker-image/test/test_precondition_checks.py +41 -0
  147. package/docker-image/test/test_solid_default_config.py +66 -0
  148. package/docker-image/test/test_volumes.py +55 -0
  149. package/docker-image/test/wait_for_container.py +8 -0
  150. package/docs/how-to-delete-your-account.md +0 -0
  151. package/docs/login-and-grant-access-to-application.md +0 -0
  152. package/eslint.config.mjs +102 -0
  153. package/examples/custom-error-handling.js +0 -0
  154. package/examples/custom-error-handling.mjs +29 -0
  155. package/examples/ldp-with-webid.js +0 -0
  156. package/examples/ldp-with-webid.mjs +12 -0
  157. package/examples/simple-express-app.js +0 -0
  158. package/examples/simple-express-app.mjs +20 -0
  159. package/examples/simple-ldp-server.js +0 -0
  160. package/examples/simple-ldp-server.mjs +8 -0
  161. package/favicon.ico +0 -0
  162. package/favicon.ico.acl +0 -0
  163. package/index.cjs +4 -0
  164. package/index.html +0 -0
  165. package/index.mjs +23 -0
  166. package/lib/{acl-checker.js → acl-checker.mjs} +13 -17
  167. package/lib/api/accounts/{user-accounts.js → user-accounts.mjs} +17 -16
  168. package/lib/api/authn/{force-user.js → force-user.mjs} +5 -4
  169. package/lib/api/authn/index.mjs +8 -0
  170. package/lib/api/authn/{webid-oidc.js → webid-oidc.mjs} +27 -20
  171. package/lib/api/authn/{webid-tls.js → webid-tls.mjs} +12 -11
  172. package/lib/api/index.mjs +7 -0
  173. package/lib/{capability-discovery.js → capability-discovery.mjs} +3 -6
  174. package/lib/common/{fs-utils.js → fs-utils.mjs} +35 -43
  175. package/lib/common/template-utils.mjs +29 -0
  176. package/lib/common/{user-utils.js → user-utils.mjs} +24 -28
  177. package/lib/{create-app.js → create-app.mjs} +372 -361
  178. package/lib/{create-server.js → create-server.mjs} +34 -13
  179. package/lib/debug.mjs +37 -0
  180. package/lib/handlers/{allow.js → allow.mjs} +79 -83
  181. package/lib/handlers/{auth-proxy.js → auth-proxy.mjs} +8 -8
  182. package/lib/handlers/{copy.js → copy.mjs} +35 -39
  183. package/lib/handlers/{cors-proxy.js → cors-proxy.mjs} +11 -16
  184. package/lib/handlers/{delete.js → delete.mjs} +20 -22
  185. package/lib/handlers/{error-pages.js → error-pages.mjs} +144 -212
  186. package/lib/handlers/{get.js → get.mjs} +258 -252
  187. package/lib/handlers/{index.js → index.mjs} +7 -10
  188. package/lib/handlers/{notify.js → notify.mjs} +8 -10
  189. package/lib/handlers/{options.js → options.mjs} +3 -7
  190. package/lib/handlers/patch/{n3-patch-parser.js → n3-patch-parser.mjs} +57 -59
  191. package/lib/handlers/patch/{sparql-update-parser.js → sparql-update-parser.mjs} +14 -16
  192. package/lib/handlers/{patch.js → patch.mjs} +241 -235
  193. package/lib/handlers/{post.js → post.mjs} +101 -99
  194. package/lib/handlers/{put.js → put.mjs} +101 -105
  195. package/lib/handlers/{restrict-to-top-domain.js → restrict-to-top-domain.mjs} +2 -2
  196. package/lib/{header.js → header.mjs} +138 -143
  197. package/lib/{http-error.js → http-error.mjs} +35 -34
  198. package/lib/{ldp-container.js → ldp-container.mjs} +10 -12
  199. package/lib/ldp-copy.mjs +82 -0
  200. package/lib/ldp-middleware.mjs +38 -0
  201. package/lib/{ldp.js → ldp.mjs} +286 -78
  202. package/lib/{lock.js → lock.mjs} +10 -10
  203. package/lib/{metadata.js → metadata.mjs} +11 -11
  204. package/lib/models/account-manager.mjs +297 -0
  205. package/lib/models/account-template.mjs +70 -0
  206. package/lib/models/authenticator.mjs +161 -0
  207. package/lib/models/oidc-manager.mjs +22 -0
  208. package/lib/models/solid-host.mjs +63 -0
  209. package/lib/models/user-account.mjs +50 -0
  210. package/lib/models/webid-tls-certificate.mjs +97 -0
  211. package/lib/{payment-pointer-discovery.js → payment-pointer-discovery.mjs} +5 -8
  212. package/lib/{rdf-notification-template.js → rdf-notification-template.mjs} +3 -5
  213. package/lib/requests/add-cert-request.mjs +70 -0
  214. package/lib/requests/auth-request.mjs +151 -0
  215. package/lib/requests/{create-account-request.js → create-account-request.mjs} +249 -452
  216. package/lib/requests/delete-account-confirm-request.mjs +85 -0
  217. package/lib/requests/{delete-account-request.js → delete-account-request.mjs} +73 -134
  218. package/lib/requests/login-request.mjs +89 -0
  219. package/lib/requests/{password-change-request.js → password-change-request.mjs} +132 -201
  220. package/lib/requests/{password-reset-email-request.js → password-reset-email-request.mjs} +123 -202
  221. package/lib/requests/password-reset-request.mjs +47 -0
  222. package/lib/requests/register-request.mjs +48 -0
  223. package/lib/requests/{sharing-request.js → sharing-request.mjs} +174 -261
  224. package/lib/{resource-mapper.js → resource-mapper.mjs} +8 -9
  225. package/lib/{server-config.js → server-config.mjs} +15 -20
  226. package/lib/services/{blacklist-service.js → blacklist-service.mjs} +36 -33
  227. package/lib/services/email-service.mjs +76 -0
  228. package/lib/services/{token-service.js → token-service.mjs} +36 -44
  229. package/lib/{utils.js → utils.mjs} +307 -254
  230. package/lib/webid/{index.js → index.mjs} +9 -13
  231. package/lib/webid/lib/{get.js → get.mjs} +30 -35
  232. package/lib/webid/lib/{parse.js → parse.mjs} +10 -12
  233. package/lib/webid/lib/verify.mjs +77 -0
  234. package/lib/webid/tls/generate.mjs +53 -0
  235. package/lib/webid/tls/index.mjs +6 -0
  236. package/package.json +75 -67
  237. package/renovate.json +0 -0
  238. package/robots.txt +0 -0
  239. package/robots.txt.acl +0 -0
  240. package/solid-server-5.8.8.tgz +0 -0
  241. package/static/account-recovery.html +0 -0
  242. package/static/popup-redirect.html +0 -0
  243. package/static/signup.html +0 -0
  244. package/static/signup.html.acl +0 -0
  245. package/test/index.mjs +167 -0
  246. package/test/integration/account-creation-tls-test.mjs +127 -0
  247. package/test/integration/account-manager-test.mjs +150 -0
  248. package/test/integration/account-template-test.mjs +135 -0
  249. package/test/integration/acl-oidc-test.mjs +1047 -0
  250. package/test/integration/acl-tls-test.mjs +964 -0
  251. package/test/integration/auth-proxy-test.mjs +144 -0
  252. package/test/integration/authentication-oidc-test.mjs +816 -0
  253. package/test/integration/authentication-oidc-with-strict-origins-turned-off-test.mjs +643 -0
  254. package/test/integration/capability-discovery-test.mjs +115 -0
  255. package/test/integration/cors-proxy-test.mjs +145 -0
  256. package/test/integration/errors-oidc-test.mjs +109 -0
  257. package/test/integration/errors-test.mjs +49 -0
  258. package/test/integration/formats-test.mjs +136 -0
  259. package/test/integration/header-test.mjs +101 -0
  260. package/test/integration/http-copy-test.mjs +109 -0
  261. package/test/integration/http-test.mjs +1197 -0
  262. package/test/integration/ldp-test.mjs +528 -0
  263. package/test/integration/oidc-manager-test.mjs +41 -0
  264. package/test/integration/params-test.mjs +192 -0
  265. package/test/integration/patch-sparql-update-test.mjs +195 -0
  266. package/test/integration/patch-test.mjs +590 -0
  267. package/test/integration/payment-pointer-test.mjs +155 -0
  268. package/test/integration/prep-test.mjs +314 -0
  269. package/test/integration/quota-test.mjs +50 -0
  270. package/test/integration/special-root-acl-handling-test.mjs +68 -0
  271. package/test/integration/validate-tts-test.mjs +57 -0
  272. package/test/integration/www-account-creation-oidc-test.mjs +310 -0
  273. package/test/keys/cert.pem +21 -0
  274. package/test/keys/client-cert.pem +19 -0
  275. package/test/keys/client-key.pem +27 -0
  276. package/test/keys/key.pem +27 -0
  277. package/test/keys/user1-cert.pem +23 -0
  278. package/test/keys/user1-key.pem +28 -0
  279. package/test/keys/user2-cert.pem +23 -0
  280. package/test/keys/user2-key.pem +27 -0
  281. package/test/mocha.opts +2 -0
  282. package/test/resources/Makefile +146 -0
  283. package/test/resources/accounts/alice.localhost/profile/card +0 -0
  284. package/test/resources/accounts/db/oidc/op/clients/_key_abbf27de893abf7d05279547c22d9366.json +1 -0
  285. package/test/resources/accounts/db/oidc/op/provider.json +763 -0
  286. package/test/resources/accounts/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A3457.json +1 -0
  287. package/test/resources/accounts/localhost/samplePublicContainer/nicola.jpg +0 -0
  288. package/test/resources/accounts/tim.localhost/hello.html +9 -0
  289. package/test/resources/accounts/tim.localhost/profile/card +0 -0
  290. package/test/resources/accounts-acl/config/templates/emails/welcome-test.js +39 -0
  291. package/test/resources/accounts-acl/config/templates/new-account/favicon.ico +0 -0
  292. package/test/resources/accounts-acl/config/templates/new-account/favicon.ico.acl +26 -0
  293. package/test/resources/accounts-acl/config/templates/new-account/index.html +28 -0
  294. package/test/resources/accounts-acl/config/templates/new-account/index.html.acl +22 -0
  295. package/test/resources/accounts-acl/config/templates/new-account/profile/card +27 -0
  296. package/{default-templates/new-account/inbox/.acl → test/resources/accounts-acl/config/templates/new-account/profile/card.acl} +5 -6
  297. package/test/resources/accounts-acl/config/templates/new-account/settings/prefs.ttl +9 -0
  298. package/test/resources/accounts-acl/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
  299. package/test/resources/accounts-acl/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
  300. package/test/resources/accounts-acl/config/templates/new-account/settings/publicTypeIndex.ttl.acl +25 -0
  301. package/test/resources/accounts-acl/config/templates/new-account/settings/serverSide.ttl +14 -0
  302. package/test/resources/accounts-acl/config/templates/server/index.html +35 -0
  303. package/{.acl → test/resources/accounts-acl/config/templates/server/index.html.acl} +4 -3
  304. package/test/resources/accounts-acl/config/views/account/register.hbs +58 -0
  305. package/test/resources/accounts-acl/config/views/auth/consent.hbs +49 -0
  306. package/test/resources/accounts-acl/config/views/auth/goodbye.hbs +20 -0
  307. package/test/resources/accounts-acl/config/views/auth/login-required.hbs +0 -0
  308. package/test/resources/accounts-acl/config/views/auth/login.hbs +51 -0
  309. package/test/resources/accounts-acl/config/views/auth/no-permission.hbs +0 -0
  310. package/test/resources/accounts-acl/db/oidc/op/clients/_key_77bb3b35edb1f3f7b887c25d1211a491.json +1 -0
  311. package/test/resources/accounts-acl/db/oidc/op/provider.json +763 -0
  312. package/test/resources/accounts-acl/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7777.json +1 -0
  313. package/test/resources/accounts-acl/localhost/favicon.ico +0 -0
  314. package/test/resources/accounts-acl/localhost/index.html +35 -0
  315. package/{default-templates/server/.acl → test/resources/accounts-acl/localhost/index.html.acl} +4 -3
  316. package/test/resources/accounts-acl/nicola.localhost/index.html +1 -0
  317. package/test/resources/accounts-acl/nicola.localhost/index.html.acl +10 -0
  318. package/test/resources/accounts-acl/quota/settings/serverSide.ttl +11 -0
  319. package/test/resources/accounts-acl/tim.localhost/append-acl/abc.ttl +1 -0
  320. package/test/resources/accounts-acl/tim.localhost/append-acl/abc.ttl.acl +8 -0
  321. package/test/resources/accounts-acl/tim.localhost/append-acl/abc2.ttl +1 -0
  322. package/test/resources/accounts-acl/tim.localhost/append-acl/abc2.ttl.acl +8 -0
  323. package/test/resources/accounts-acl/tim.localhost/fake-account/hello.html +9 -0
  324. package/test/resources/accounts-acl/tim.localhost/group/test-folder/group-listing-error.ttl +1 -0
  325. package/test/resources/accounts-acl/tim.localhost/group/test-folder/group-listing.ttl +14 -0
  326. package/test/resources/accounts-acl/tim.localhost/group/test-folder/some-other-file.txt +1 -0
  327. package/test/resources/accounts-acl/tim.localhost/multi-server/protected.txt +1 -0
  328. package/test/resources/accounts-acl/tim.localhost/multi-server/protected.txt.acl +8 -0
  329. package/test/resources/accounts-acl/tim.localhost/no-acl/test-file.html +1 -0
  330. package/test/resources/accounts-acl/tim.localhost/read-acl/deeper-tree/acls-only-on-top/example.ttl +1 -0
  331. package/test/resources/accounts-acl/tim.localhost/write-acl/test-file$.txt +1 -0
  332. package/test/resources/accounts-scenario/alice/db/oidc/op/clients/_key_931f2a0c999a8f0695573844341dde0e.json +1 -0
  333. package/test/resources/accounts-scenario/alice/db/oidc/op/provider.json +761 -0
  334. package/test/resources/accounts-scenario/alice/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7000.json +1 -0
  335. package/test/resources/accounts-scenario/alice/private-for-alice.txt +1 -0
  336. package/test/resources/accounts-scenario/alice/private-for-alice.txt.acl +12 -0
  337. package/test/resources/accounts-scenario/alice/profile/card$.ttl +10 -0
  338. package/test/resources/accounts-scenario/bob/db/oidc/op/clients/_key_8bdd350afbe0452a42fe6b3b3705d25f.json +1 -0
  339. package/test/resources/accounts-scenario/bob/db/oidc/op/provider.json +761 -0
  340. package/test/resources/accounts-scenario/bob/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7001.json +1 -0
  341. package/test/resources/accounts-scenario/bob/profile/card$.ttl +5 -0
  342. package/test/resources/accounts-scenario/bob/shared-with-alice.txt +1 -0
  343. package/test/resources/accounts-scenario/bob/shared-with-alice.txt.acl +15 -0
  344. package/test/resources/accounts-scenario/charlie/db/oidc/op/clients/_key_e4ed74eed3926d2f8d4d1d9661be7aea.json +1 -0
  345. package/test/resources/accounts-scenario/charlie/db/oidc/op/provider.json +759 -0
  346. package/test/resources/accounts-scenario/charlie/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A5002.json +1 -0
  347. package/test/resources/accounts-scenario/charlie/profile/card$.ttl +5 -0
  348. package/test/resources/accounts-strict-origin-off/alice/db/oidc/op/clients/_key_9d6b49e3a595c4942e1105545518362d.json +1 -0
  349. package/test/resources/accounts-strict-origin-off/alice/db/oidc/op/provider.json +763 -0
  350. package/test/resources/accounts-strict-origin-off/alice/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7010.json +1 -0
  351. package/test/resources/accounts-strict-origin-off/alice/private-for-alice.txt +1 -0
  352. package/test/resources/accounts-strict-origin-off/alice/private-for-alice.txt.acl +12 -0
  353. package/test/resources/accounts-strict-origin-off/alice/profile/card$.ttl +10 -0
  354. package/test/resources/accounts-strict-origin-off/bob/db/oidc/op/clients/_key_5f68117de7511ed2b2290d81c83a2d98.json +1 -0
  355. package/test/resources/accounts-strict-origin-off/bob/db/oidc/op/provider.json +763 -0
  356. package/test/resources/accounts-strict-origin-off/bob/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7011.json +1 -0
  357. package/test/resources/accounts-strict-origin-off/bob/shared-with-alice.txt +1 -0
  358. package/test/resources/accounts-strict-origin-off/bob/shared-with-alice.txt.acl +15 -0
  359. package/test/resources/acl-tls/config/templates/emails/delete-account.js +49 -0
  360. package/test/resources/acl-tls/config/templates/emails/invalid-username.js +30 -0
  361. package/test/resources/acl-tls/config/templates/emails/reset-password.js +49 -0
  362. package/test/resources/acl-tls/config/templates/emails/welcome.js +39 -0
  363. package/test/resources/acl-tls/config/templates/new-account/favicon.ico +0 -0
  364. package/test/resources/acl-tls/config/templates/new-account/favicon.ico.acl +26 -0
  365. package/test/resources/acl-tls/config/templates/new-account/profile/card$.ttl +26 -0
  366. package/test/resources/acl-tls/config/templates/new-account/robots.txt +3 -0
  367. package/test/resources/acl-tls/config/templates/new-account/robots.txt.acl +26 -0
  368. package/test/resources/acl-tls/config/templates/new-account/settings/prefs.ttl +15 -0
  369. package/test/resources/acl-tls/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
  370. package/test/resources/acl-tls/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
  371. package/test/resources/acl-tls/config/templates/new-account/settings/publicTypeIndex.ttl.acl +25 -0
  372. package/test/resources/acl-tls/config/templates/new-account/settings/serverSide.ttl.acl +13 -0
  373. package/test/resources/acl-tls/config/templates/new-account/settings/serverSide.ttl.inactive +12 -0
  374. package/test/resources/acl-tls/config/templates/server/favicon.ico +0 -0
  375. package/test/resources/acl-tls/config/templates/server/favicon.ico.acl +15 -0
  376. package/test/resources/acl-tls/config/templates/server/index.html +55 -0
  377. package/test/resources/acl-tls/config/templates/server/robots.txt +3 -0
  378. package/test/resources/acl-tls/config/templates/server/robots.txt.acl +15 -0
  379. package/test/resources/acl-tls/config/views/account/account-deleted.hbs +17 -0
  380. package/test/resources/acl-tls/config/views/account/delete-confirm.hbs +51 -0
  381. package/test/resources/acl-tls/config/views/account/delete-link-sent.hbs +17 -0
  382. package/test/resources/acl-tls/config/views/account/delete.hbs +51 -0
  383. package/test/resources/acl-tls/config/views/account/invalid-username.hbs +22 -0
  384. package/test/resources/acl-tls/config/views/account/register-disabled.hbs +6 -0
  385. package/test/resources/acl-tls/config/views/account/register-form.hbs +147 -0
  386. package/test/resources/acl-tls/config/views/account/register.hbs +24 -0
  387. package/test/resources/acl-tls/config/views/auth/auth-hidden-fields.hbs +8 -0
  388. package/test/resources/acl-tls/config/views/auth/change-password.hbs +58 -0
  389. package/test/resources/acl-tls/config/views/auth/goodbye.hbs +23 -0
  390. package/test/resources/acl-tls/config/views/auth/login-required.hbs +34 -0
  391. package/test/resources/acl-tls/config/views/auth/login-tls.hbs +11 -0
  392. package/test/resources/acl-tls/config/views/auth/login-username-password.hbs +28 -0
  393. package/test/resources/acl-tls/config/views/auth/login.hbs +55 -0
  394. package/test/resources/acl-tls/config/views/auth/no-permission.hbs +29 -0
  395. package/test/resources/acl-tls/config/views/auth/password-changed.hbs +27 -0
  396. package/test/resources/acl-tls/config/views/auth/reset-link-sent.hbs +21 -0
  397. package/test/resources/acl-tls/config/views/auth/reset-password.hbs +52 -0
  398. package/test/resources/acl-tls/config/views/auth/sharing.hbs +49 -0
  399. package/test/resources/acl-tls/config/views/shared/create-account.hbs +8 -0
  400. package/test/resources/acl-tls/config/views/shared/error.hbs +5 -0
  401. package/test/resources/acl-tls/localhost/favicon.ico +0 -0
  402. package/test/resources/acl-tls/localhost/favicon.ico.acl +15 -0
  403. package/test/resources/acl-tls/localhost/index.html +48 -0
  404. package/test/resources/acl-tls/localhost/robots.txt +3 -0
  405. package/test/resources/acl-tls/localhost/robots.txt.acl +15 -0
  406. package/test/resources/acl-tls/tim.localhost/append-acl/abc.ttl +1 -0
  407. package/test/resources/acl-tls/tim.localhost/append-acl/abc.ttl.acl +8 -0
  408. package/test/resources/acl-tls/tim.localhost/append-acl/abc2.ttl +1 -0
  409. package/test/resources/acl-tls/tim.localhost/append-acl/abc2.ttl.acl +8 -0
  410. package/test/resources/acl-tls/tim.localhost/fake-account/hello.html +9 -0
  411. package/test/resources/acl-tls/tim.localhost/no-acl/test-file.html +1 -0
  412. package/test/resources/acl-tls/tim.localhost/profile/card$.ttl +17 -0
  413. package/test/resources/acl-tls/write-acl/test-file$.ttl +1 -0
  414. package/test/resources/auth-proxy/index.html +0 -0
  415. package/test/resources/auth-proxy/index.html.acl +0 -0
  416. package/test/resources/config/templates/emails/delete-account.js +49 -0
  417. package/test/resources/config/templates/emails/delete-account.mjs +31 -0
  418. package/test/resources/config/templates/emails/invalid-username.js +30 -0
  419. package/test/resources/config/templates/emails/invalid-username.mjs +27 -0
  420. package/test/resources/config/templates/emails/reset-password.js +49 -0
  421. package/test/resources/config/templates/emails/reset-password.mjs +31 -0
  422. package/test/resources/config/templates/emails/welcome.js +39 -0
  423. package/test/resources/config/templates/emails/welcome.mjs +23 -0
  424. package/test/resources/config/templates/new-account/favicon.ico +0 -0
  425. package/test/resources/config/templates/new-account/favicon.ico.acl +26 -0
  426. package/test/resources/config/templates/new-account/profile/card$.ttl +26 -0
  427. package/test/resources/config/templates/new-account/robots.txt +3 -0
  428. package/test/resources/config/templates/new-account/robots.txt.acl +26 -0
  429. package/test/resources/config/templates/new-account/settings/prefs.ttl +15 -0
  430. package/test/resources/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
  431. package/test/resources/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
  432. package/test/resources/config/templates/new-account/settings/publicTypeIndex.ttl.acl +25 -0
  433. package/test/resources/config/templates/new-account/settings/serverSide.ttl.acl +13 -0
  434. package/test/resources/config/templates/new-account/settings/serverSide.ttl.inactive +12 -0
  435. package/test/resources/config/templates/server/favicon.ico +0 -0
  436. package/test/resources/config/templates/server/favicon.ico.acl +15 -0
  437. package/test/resources/config/templates/server/index.html +54 -0
  438. package/test/resources/config/templates/server/robots.txt +3 -0
  439. package/test/resources/config/templates/server/robots.txt.acl +15 -0
  440. package/test/resources/config/views/account/account-deleted.hbs +17 -0
  441. package/test/resources/config/views/account/delete-confirm.hbs +51 -0
  442. package/test/resources/config/views/account/delete-link-sent.hbs +17 -0
  443. package/test/resources/config/views/account/delete.hbs +51 -0
  444. package/test/resources/config/views/account/invalid-username.hbs +22 -0
  445. package/test/resources/config/views/account/register-disabled.hbs +6 -0
  446. package/test/resources/config/views/account/register-form.hbs +133 -0
  447. package/test/resources/config/views/account/register.hbs +24 -0
  448. package/test/resources/config/views/auth/auth-hidden-fields.hbs +8 -0
  449. package/test/resources/config/views/auth/change-password.hbs +58 -0
  450. package/test/resources/config/views/auth/goodbye.hbs +23 -0
  451. package/test/resources/config/views/auth/login-required.hbs +34 -0
  452. package/test/resources/config/views/auth/login-tls.hbs +11 -0
  453. package/test/resources/config/views/auth/login-username-password.hbs +28 -0
  454. package/test/resources/config/views/auth/login.hbs +55 -0
  455. package/test/resources/config/views/auth/no-permission.hbs +29 -0
  456. package/test/resources/config/views/auth/password-changed.hbs +27 -0
  457. package/test/resources/config/views/auth/reset-link-sent.hbs +21 -0
  458. package/test/resources/config/views/auth/reset-password.hbs +52 -0
  459. package/test/resources/config/views/auth/sharing.hbs +49 -0
  460. package/test/resources/config/views/shared/create-account.hbs +8 -0
  461. package/test/resources/config/views/shared/error.hbs +5 -0
  462. package/test/resources/empty.spatch +0 -0
  463. package/test/resources/errorPages/401.html +5 -0
  464. package/test/resources/errorPages/403.html +5 -0
  465. package/test/resources/errorPages/404.html +5 -0
  466. package/test/resources/errorPages/405.html +5 -0
  467. package/test/resources/errorPages/415.html +5 -0
  468. package/test/resources/errorPages/500.html +5 -0
  469. package/test/resources/example_spkac.cnf +1 -0
  470. package/test/resources/external-servers/example.com/jwks.json +81 -0
  471. package/test/resources/external-servers/example.com/openid-configuration.json +53 -0
  472. package/test/resources/favicon.ico +0 -0
  473. package/test/resources/favicon.ico.acl +15 -0
  474. package/test/resources/headers/index.html +0 -0
  475. package/test/resources/headers/public-ra +0 -0
  476. package/test/resources/headers/public-ra.acl +7 -0
  477. package/test/resources/headers/user-rw-public-r +0 -0
  478. package/test/resources/headers/user-rw-public-r.acl +12 -0
  479. package/test/resources/headers/user-rwac-public-0 +0 -0
  480. package/test/resources/headers/user-rwac-public-0.acl +7 -0
  481. package/test/resources/hello.html +3 -0
  482. package/test/resources/invalid1.ttl +13 -0
  483. package/test/resources/invalid2.ttl +9 -0
  484. package/test/resources/ldpatch-example-final.ttl +23 -0
  485. package/test/resources/ldpatch-example-initial.ttl +22 -0
  486. package/test/resources/ldpatch-example-patch-1.spatch +8 -0
  487. package/test/resources/ldpatch-example-patch-2.spatch +12 -0
  488. package/test/resources/ldpatch-example-patch-3.spatch +14 -0
  489. package/test/resources/ldpatch-example-patch.ldpatch +25 -0
  490. package/test/resources/ldpatch-example-patch.spatch +24 -0
  491. package/test/resources/lennon.jsonld +7 -0
  492. package/test/resources/lfs-0.sparql +9 -0
  493. package/test/resources/lfs-1-final.json +10 -0
  494. package/test/resources/lfs-1.sparql +11 -0
  495. package/test/resources/messaging-scenario/user1.databox.me/profile/card +21 -0
  496. package/test/resources/nicola.jpg +0 -0
  497. package/test/resources/patch/append-only.ttl +2 -0
  498. package/test/resources/patch/append-only.ttl.acl +6 -0
  499. package/test/resources/patch/favicon.ico +0 -0
  500. package/test/resources/patch/favicon.ico.acl +15 -0
  501. package/test/resources/patch/index.html +0 -0
  502. package/test/resources/patch/read-append.ttl +2 -0
  503. package/test/resources/patch/read-append.ttl.acl +6 -0
  504. package/test/resources/patch/read-only.ttl +2 -0
  505. package/test/resources/patch/read-only.ttl.acl +6 -0
  506. package/test/resources/patch/read-write.ttl +2 -0
  507. package/test/resources/patch/read-write.ttl.acl +6 -0
  508. package/test/resources/patch/robots.txt +3 -0
  509. package/test/resources/patch/robots.txt.acl +15 -0
  510. package/test/resources/patch/write-only.ttl +2 -0
  511. package/test/resources/patch/write-only.ttl.acl +6 -0
  512. package/test/resources/patch-1-initial.ttl +3 -0
  513. package/test/resources/patch-2-final.ttl +2 -0
  514. package/test/resources/patch-2-initial.ttl +3 -0
  515. package/test/resources/patch-2.spatch +2 -0
  516. package/test/resources/patch-2n.spatch +2 -0
  517. package/test/resources/patch-3-final.ttl +28 -0
  518. package/test/resources/patch-4-final.ttl +29 -0
  519. package/test/resources/patch-5-final.ttl +1 -0
  520. package/test/resources/patch-5-initial.ttl +3 -0
  521. package/test/resources/patch-5.spatch +2 -0
  522. package/test/resources/put-input-2.html +13 -0
  523. package/test/resources/put-input.txt +6 -0
  524. package/test/resources/robots.txt +3 -0
  525. package/test/resources/robots.txt.acl +15 -0
  526. package/test/resources/sampleContainer/blank +0 -0
  527. package/test/resources/sampleContainer/cert.pkcs +0 -0
  528. package/test/resources/sampleContainer/example.ttl.old +1 -0
  529. package/test/resources/sampleContainer/example1.ttl +12 -0
  530. package/test/resources/sampleContainer/example2.ttl +3 -0
  531. package/test/resources/sampleContainer/example3.ttl +7 -0
  532. package/test/resources/sampleContainer/example4$.ttl +7 -0
  533. package/test/resources/sampleContainer/filename with spaces.txt +0 -0
  534. package/test/resources/sampleContainer/index.html +9 -0
  535. package/test/resources/sampleContainer/post2.ttl +6 -0
  536. package/test/resources/sampleContainer/put1.ttl +13 -0
  537. package/test/resources/sampleContainer/solid.png +0 -0
  538. package/test/resources/sampleContainer/user1.pfx +0 -0
  539. package/test/resources/sampleContainer/user2.pfx +0 -0
  540. package/test/resources/sampleContainer2/example1.ttl +10 -0
  541. package/test/resources/sampleContainer2/example2.ttl +7 -0
  542. package/test/resources/timbl.jpg +0 -0
  543. package/test/scenarios.md +23 -0
  544. package/test/surface/docker/cookie/Dockerfile +6 -0
  545. package/test/surface/docker/cookie/app/index.js +29 -0
  546. package/test/surface/docker/cookie/app/package-lock.json +13 -0
  547. package/test/surface/docker/cookie/app/package.json +14 -0
  548. package/test/surface/docker/server/Dockerfile +19 -0
  549. package/test/surface/docker/server/config/defaults.js +10 -0
  550. package/test/surface/docker/server/config/templates/emails/delete-account.js +49 -0
  551. package/test/surface/docker/server/config/templates/emails/invalid-username.js +30 -0
  552. package/test/surface/docker/server/config/templates/emails/reset-password.js +49 -0
  553. package/test/surface/docker/server/config/templates/emails/welcome.js +39 -0
  554. package/test/surface/docker/server/config/templates/new-account/favicon.ico +0 -0
  555. package/test/surface/docker/server/config/templates/new-account/favicon.ico.acl +26 -0
  556. package/test/surface/docker/server/config/templates/new-account/profile/card$.ttl +26 -0
  557. package/test/surface/docker/server/config/templates/new-account/robots.txt +3 -0
  558. package/test/surface/docker/server/config/templates/new-account/robots.txt.acl +26 -0
  559. package/test/surface/docker/server/config/templates/new-account/settings/prefs.ttl +15 -0
  560. package/test/surface/docker/server/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
  561. package/test/surface/docker/server/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
  562. package/test/surface/docker/server/config/templates/new-account/settings/publicTypeIndex.ttl.acl +25 -0
  563. package/test/surface/docker/server/config/templates/new-account/settings/serverSide.ttl.acl +13 -0
  564. package/test/surface/docker/server/config/templates/new-account/settings/serverSide.ttl.inactive +12 -0
  565. package/test/surface/docker/server/config/templates/server/favicon.ico +0 -0
  566. package/test/surface/docker/server/config/templates/server/favicon.ico.acl +15 -0
  567. package/test/surface/docker/server/config/templates/server/index.html +55 -0
  568. package/test/surface/docker/server/config/templates/server/robots.txt +3 -0
  569. package/test/surface/docker/server/config/templates/server/robots.txt.acl +15 -0
  570. package/test/surface/docker/server/config/usernames-blacklist.json +4 -0
  571. package/test/surface/docker/server/config/views/account/account-deleted.hbs +17 -0
  572. package/test/surface/docker/server/config/views/account/delete-confirm.hbs +51 -0
  573. package/test/surface/docker/server/config/views/account/delete-link-sent.hbs +17 -0
  574. package/test/surface/docker/server/config/views/account/delete.hbs +51 -0
  575. package/test/surface/docker/server/config/views/account/invalid-username.hbs +22 -0
  576. package/test/surface/docker/server/config/views/account/register-disabled.hbs +6 -0
  577. package/test/surface/docker/server/config/views/account/register-form.hbs +147 -0
  578. package/test/surface/docker/server/config/views/account/register.hbs +24 -0
  579. package/test/surface/docker/server/config/views/auth/auth-hidden-fields.hbs +8 -0
  580. package/test/surface/docker/server/config/views/auth/change-password.hbs +58 -0
  581. package/test/surface/docker/server/config/views/auth/goodbye.hbs +23 -0
  582. package/test/surface/docker/server/config/views/auth/login-required.hbs +34 -0
  583. package/test/surface/docker/server/config/views/auth/login-tls.hbs +11 -0
  584. package/test/surface/docker/server/config/views/auth/login-username-password.hbs +28 -0
  585. package/test/surface/docker/server/config/views/auth/login.hbs +55 -0
  586. package/test/surface/docker/server/config/views/auth/no-permission.hbs +29 -0
  587. package/test/surface/docker/server/config/views/auth/password-changed.hbs +27 -0
  588. package/test/surface/docker/server/config/views/auth/reset-link-sent.hbs +21 -0
  589. package/test/surface/docker/server/config/views/auth/reset-password.hbs +52 -0
  590. package/test/surface/docker/server/config/views/auth/sharing.hbs +49 -0
  591. package/test/surface/docker/server/config/views/shared/create-account.hbs +8 -0
  592. package/test/surface/docker/server/config/views/shared/error.hbs +5 -0
  593. package/test/surface/docker/server/config.json +22 -0
  594. package/test/surface/docker/server/data/favicon.ico +0 -0
  595. package/test/surface/docker/server/data/favicon.ico.acl +26 -0
  596. package/test/surface/docker/server/data/index.html +48 -0
  597. package/test/surface/docker/server/data/profile/card$.ttl +31 -0
  598. package/test/surface/docker/server/data/robots.txt +3 -0
  599. package/test/surface/docker/server/data/robots.txt.acl +26 -0
  600. package/test/surface/docker/server/data/settings/prefs.ttl +15 -0
  601. package/test/surface/docker/server/data/settings/privateTypeIndex.ttl +4 -0
  602. package/test/surface/docker/server/data/settings/publicTypeIndex.ttl +4 -0
  603. package/test/surface/docker/server/data/settings/publicTypeIndex.ttl.acl +25 -0
  604. package/test/surface/docker/server/data/settings/serverSide.ttl +0 -0
  605. package/test/surface/docker/server/data/settings/serverSide.ttl.acl +13 -0
  606. package/test/surface/docker/server/data/settings/serverSide.ttl.inactive +12 -0
  607. package/test/surface/docker/server/env.list +4 -0
  608. package/test/surface/docker/solid-crud/Dockerfile +4 -0
  609. package/test/surface/docker/web-access-control/Dockerfile +1 -0
  610. package/test/surface/docker/webid-provider/Dockerfile +1 -0
  611. package/test/surface/run-solid-test-suite.sh +75 -0
  612. package/test/surface/server-env.list +5 -0
  613. package/test/surface/solid-crud-tests-env.list +5 -0
  614. package/test/surface/thirdparty-config.json +23 -0
  615. package/test/surface/thirdparty-env.list +6 -0
  616. package/test/surface/web-access-control-tests-env.list +6 -0
  617. package/test/surface/webid-provider-tests-env.list +4 -0
  618. package/test/test-helpers.mjs +63 -0
  619. package/test/unit/account-manager-test.mjs +610 -0
  620. package/test/unit/account-template-test.mjs +58 -0
  621. package/test/unit/acl-checker-test.mjs +51 -0
  622. package/test/unit/add-cert-request-test.mjs +119 -0
  623. package/test/unit/auth-handlers-test.mjs +108 -0
  624. package/test/unit/auth-proxy-test.mjs +224 -0
  625. package/test/unit/auth-request-test.mjs +96 -0
  626. package/test/unit/authenticator-test.mjs +34 -0
  627. package/test/unit/blacklist-service-test.mjs +49 -0
  628. package/test/unit/create-account-request-test.mjs +306 -0
  629. package/test/unit/delete-account-confirm-request-test.mjs +234 -0
  630. package/test/unit/delete-account-request-test.mjs +180 -0
  631. package/test/unit/email-service-test.mjs +165 -0
  632. package/test/unit/email-welcome-test.mjs +80 -0
  633. package/test/unit/error-pages-test.mjs +100 -0
  634. package/test/unit/esm-imports.test.mjs +148 -0
  635. package/test/unit/force-user-test.mjs +73 -0
  636. package/test/unit/getAvailableUrl-test.mjs +30 -0
  637. package/test/unit/getTrustedOrigins-test.mjs +20 -0
  638. package/test/unit/login-request-test.mjs +246 -0
  639. package/test/unit/oidc-manager-test.mjs +49 -0
  640. package/test/unit/password-authenticator-test.mjs +125 -0
  641. package/test/unit/password-change-request-test.mjs +259 -0
  642. package/test/unit/password-reset-email-request-test.mjs +234 -0
  643. package/test/unit/resource-mapper-test.mjs +673 -0
  644. package/test/unit/solid-host-test.mjs +118 -0
  645. package/test/unit/tls-authenticator-test.mjs +174 -0
  646. package/test/unit/token-service-test.mjs +82 -0
  647. package/test/unit/user-account-test.mjs +37 -0
  648. package/test/unit/user-accounts-api-test.mjs +59 -0
  649. package/test/unit/user-utils-test.mjs +64 -0
  650. package/test/unit/utils-test.mjs +112 -0
  651. package/test/utils/index.mjs +166 -0
  652. package/test/utils.mjs +204 -0
  653. package/test/validate-turtle.mjs +42 -0
  654. package/.github/workflows/ci.yml +0 -113
  655. package/.nvmrc +0 -1
  656. package/.snyk +0 -35
  657. package/bin/lib/cli-utils.js +0 -85
  658. package/bin/lib/cli.js +0 -39
  659. package/bin/solid.js +0 -3
  660. package/default-templates/new-account/.acl +0 -26
  661. package/default-templates/new-account/.meta +0 -5
  662. package/default-templates/new-account/.well-known/.acl +0 -19
  663. package/default-templates/new-account/private/.acl +0 -10
  664. package/default-templates/new-account/profile/.acl +0 -19
  665. package/default-templates/new-account/public/.acl +0 -19
  666. package/default-templates/new-account/settings/.acl +0 -20
  667. package/index.js +0 -3
  668. package/lib/api/authn/index.js +0 -5
  669. package/lib/api/index.js +0 -6
  670. package/lib/common/template-utils.js +0 -50
  671. package/lib/debug.js +0 -18
  672. package/lib/ldp-copy.js +0 -73
  673. package/lib/ldp-middleware.js +0 -40
  674. package/lib/models/account-manager.js +0 -604
  675. package/lib/models/account-template.js +0 -156
  676. package/lib/models/authenticator.js +0 -337
  677. package/lib/models/oidc-manager.js +0 -53
  678. package/lib/models/solid-host.js +0 -131
  679. package/lib/models/user-account.js +0 -113
  680. package/lib/models/webid-tls-certificate.js +0 -184
  681. package/lib/requests/add-cert-request.js +0 -138
  682. package/lib/requests/auth-request.js +0 -234
  683. package/lib/requests/delete-account-confirm-request.js +0 -170
  684. package/lib/requests/login-request.js +0 -205
  685. package/lib/services/email-service.js +0 -162
  686. package/lib/webid/tls/index.js +0 -185
@@ -1,254 +1,307 @@
1
- /* eslint-disable node/no-deprecated-api */
2
-
3
- module.exports.pathBasename = pathBasename
4
- module.exports.hasSuffix = hasSuffix
5
- module.exports.serialize = serialize
6
- module.exports.translate = translate
7
- module.exports.stringToStream = stringToStream
8
- module.exports.debrack = debrack
9
- module.exports.stripLineEndings = stripLineEndings
10
- module.exports.fullUrlForReq = fullUrlForReq
11
- module.exports.routeResolvedFile = routeResolvedFile
12
- module.exports.getQuota = getQuota
13
- module.exports.overQuota = overQuota
14
- module.exports.getContentType = getContentType
15
- module.exports.parse = parse
16
-
17
- const fs = require('fs')
18
- const path = require('path')
19
- const util = require('util')
20
- const $rdf = require('rdflib')
21
- const from = require('from2')
22
- const url = require('url')
23
- const debug = require('./debug').fs
24
- const getSize = require('get-folder-size')
25
- const ns = require('solid-namespace')($rdf)
26
-
27
- /**
28
- * Returns a fully qualified URL from an Express.js Request object.
29
- * (It's insane that Express does not provide this natively.)
30
- *
31
- * Usage:
32
- *
33
- * ```
34
- * console.log(util.fullUrlForReq(req))
35
- * // -> https://example.com/path/to/resource?q1=v1
36
- * ```
37
- *
38
- * @param req {IncomingRequest}
39
- *
40
- * @return {string}
41
- */
42
- function fullUrlForReq (req) {
43
- const fullUrl = url.format({
44
- protocol: req.protocol,
45
- host: req.get('host'),
46
- pathname: url.resolve(req.baseUrl, req.path),
47
- query: req.query
48
- })
49
-
50
- return fullUrl
51
- }
52
-
53
- /**
54
- * Removes the `<` and `>` brackets around a string and returns it.
55
- * Used by the `allow` handler in `verifyDelegator()` logic.
56
- * @method debrack
57
- *
58
- * @param s {string}
59
- *
60
- * @return {string}
61
- */
62
- function debrack (s) {
63
- if (!s || s.length < 2) {
64
- return s
65
- }
66
- if (s[0] !== '<') {
67
- return s
68
- }
69
- if (s[s.length - 1] !== '>') {
70
- return s
71
- }
72
- return s.substring(1, s.length - 1)
73
- }
74
-
75
- async function parse (data, baseUri, contentType) {
76
- const graph = $rdf.graph()
77
- return new Promise((resolve, reject) => {
78
- try {
79
- return $rdf.parse(data, graph, baseUri, contentType, (err, str) => {
80
- if (err) {
81
- return reject(err)
82
- }
83
- resolve(str)
84
- })
85
- } catch (err) {
86
- return reject(err)
87
- }
88
- })
89
- }
90
-
91
- function pathBasename (fullpath) {
92
- let bname = ''
93
- if (fullpath) {
94
- bname = (fullpath.lastIndexOf('/') === fullpath.length - 1)
95
- ? ''
96
- : path.basename(fullpath)
97
- }
98
- return bname
99
- }
100
-
101
- function hasSuffix (path, suffixes) {
102
- for (const i in suffixes) {
103
- if (path.indexOf(suffixes[i], path.length - suffixes[i].length) !== -1) {
104
- return true
105
- }
106
- }
107
- return false
108
- }
109
-
110
- function serialize (graph, baseUri, contentType) {
111
- return new Promise((resolve, reject) => {
112
- try {
113
- // target, kb, base, contentType, callback
114
- $rdf.serialize(null, graph, baseUri, contentType, function (err, result) {
115
- if (err) {
116
- return reject(err)
117
- }
118
- if (result === undefined) {
119
- return reject(new Error('Error serializing the graph to ' +
120
- contentType))
121
- }
122
-
123
- resolve(result)
124
- })
125
- } catch (err) {
126
- reject(err)
127
- }
128
- })
129
- }
130
-
131
- function translate (stream, baseUri, from, to) {
132
- return new Promise((resolve, reject) => {
133
- let data = ''
134
- stream
135
- .on('data', function (chunk) {
136
- data += chunk
137
- })
138
- .on('end', function () {
139
- const graph = $rdf.graph()
140
- $rdf.parse(data, graph, baseUri, from, function (err) {
141
- if (err) return reject(err)
142
- resolve(serialize(graph, baseUri, to))
143
- })
144
- })
145
- })
146
- }
147
-
148
- function stringToStream (string) {
149
- return from(function (size, next) {
150
- // if there's no more content
151
- // left in the string, close the stream.
152
- if (!string || string.length <= 0) {
153
- return next(null, null)
154
- }
155
-
156
- // Pull in a new chunk of text,
157
- // removing it from the string.
158
- const chunk = string.slice(0, size)
159
- string = string.slice(size)
160
-
161
- // Emit "chunk" from the stream.
162
- next(null, chunk)
163
- })
164
- }
165
-
166
- /**
167
- * Removes line endings from a given string. Used for WebID TLS Certificate
168
- * generation.
169
- *
170
- * @param obj {string}
171
- *
172
- * @return {string}
173
- */
174
- function stripLineEndings (obj) {
175
- if (!obj) { return obj }
176
-
177
- return obj.replace(/(\r\n|\n|\r)/gm, '')
178
- }
179
-
180
- /**
181
- * Adds a route that serves a static file from another Node module
182
- */
183
- function routeResolvedFile (router, path, file, appendFileName = true) {
184
- const fullPath = appendFileName ? path + file.match(/[^/]+$/) : path
185
- const fullFile = require.resolve(file)
186
- router.get(fullPath, (req, res) => res.sendFile(fullFile))
187
- }
188
-
189
- /**
190
- * Returns the number of bytes that the user owning the requested POD
191
- * may store or Infinity if no limit
192
- */
193
-
194
- async function getQuota (root, serverUri) {
195
- const filename = path.join(root, 'settings/serverSide.ttl')
196
- let prefs
197
- try {
198
- prefs = await _asyncReadfile(filename)
199
- } catch (error) {
200
- debug('Setting no quota. While reading serverSide.ttl, got ' + error)
201
- return Infinity
202
- }
203
- const graph = $rdf.graph()
204
- const storageUri = serverUri.endsWith('/') ? serverUri : serverUri + '/'
205
- try {
206
- $rdf.parse(prefs, graph, storageUri, 'text/turtle')
207
- } catch (error) {
208
- throw new Error('Failed to parse serverSide.ttl, got ' + error)
209
- }
210
- return Number(graph.anyValue($rdf.sym(storageUri), ns.solid('storageQuota'))) || Infinity
211
- }
212
-
213
- /**
214
- * Returns true of the user has already exceeded their quota, i.e. it
215
- * will check if new requests should be rejected, which means they
216
- * could PUT a large file and get away with it.
217
- */
218
-
219
- async function overQuota (root, serverUri) {
220
- const quota = await getQuota(root, serverUri)
221
- if (quota === Infinity) {
222
- return false
223
- }
224
- // TODO: cache this value?
225
- const size = await actualSize(root)
226
- return (size > quota)
227
- }
228
-
229
- /**
230
- * Returns the number of bytes that is occupied by the actual files in
231
- * the file system. IMPORTANT NOTE: Since it traverses the directory
232
- * to find the actual file sizes, this does a costly operation, but
233
- * neglible for the small quotas we currently allow. If the quotas
234
- * grow bigger, this will significantly reduce write performance, and
235
- * so it needs to be rewritten.
236
- */
237
-
238
- function actualSize (root) {
239
- return util.promisify(getSize)(root)
240
- }
241
-
242
- function _asyncReadfile (filename) {
243
- return util.promisify(fs.readFile)(filename, 'utf-8')
244
- }
245
-
246
- /**
247
- * Get the content type from a headers object
248
- * @param headers An Express or Fetch API headers object
249
- * @return {string} A content type string
250
- */
251
- function getContentType (headers) {
252
- const value = headers.get ? headers.get('content-type') : headers['content-type']
253
- return value ? value.replace(/;.*/, '') : ''
254
- }
1
+ import fs from 'fs'
2
+ import path from 'path'
3
+ import util from 'util'
4
+ import $rdf from 'rdflib'
5
+ import from from 'from2'
6
+ import url, { fileURLToPath } from 'url'
7
+ import debugModule from './debug.mjs'
8
+ import getSize from 'get-folder-size'
9
+ import vocab from 'solid-namespace'
10
+
11
+ const nsObj = vocab($rdf)
12
+ const debug = debugModule.fs
13
+ /**
14
+ * Returns a fully qualified URL from an Express.js Request object.
15
+ * (It's insane that Express does not provide this natively.)
16
+ *
17
+ * Usage:
18
+ *
19
+ * ```
20
+ * console.log(util.fullUrlForReq(req))
21
+ * // -> https://example.com/path/to/resource?q1=v1
22
+ * ```
23
+ *
24
+ * @method fullUrlForReq
25
+ *
26
+ * @param req {IncomingRequest} Express.js request object
27
+ *
28
+ * @return {string} Fully qualified URL of the request
29
+ */
30
+ export function fullUrlForReq (req) {
31
+ const fullUrl = url.format({
32
+ protocol: req.protocol,
33
+ host: req.get('host'),
34
+ pathname: url.resolve(req.baseUrl, req.path),
35
+ query: req.query
36
+ })
37
+
38
+ return fullUrl
39
+ }
40
+
41
+ /**
42
+ * Removes the `<` and `>` brackets around a string and returns it.
43
+ * Used by the `allow` handler in `verifyDelegator()` logic.
44
+ * @method debrack
45
+ *
46
+ * @param s {string}
47
+ *
48
+ * @return {string}
49
+ */
50
+ export function debrack (s) {
51
+ if (!s || s.length < 2) {
52
+ return s
53
+ }
54
+ if (s[0] !== '<') {
55
+ return s
56
+ }
57
+ if (s[s.length - 1] !== '>') {
58
+ return s
59
+ }
60
+ return s.substring(1, s.length - 1)
61
+ }
62
+
63
+ /**
64
+ * Parse RDF content based on content type.
65
+ *
66
+ * @method parse
67
+ * @param graph {Graph} rdflib Graph object to parse into
68
+ * @param data {string} Data to parse
69
+ * @param base {string} Base URL
70
+ * @param contentType {string} Content type
71
+ * @return {Graph} The parsed graph
72
+ */
73
+ export async function parse (data, baseUri, contentType) {
74
+ const graph = $rdf.graph()
75
+ return new Promise((resolve, reject) => {
76
+ try {
77
+ return $rdf.parse(data, graph, baseUri, contentType, (err, str) => {
78
+ if (err) {
79
+ return reject(err)
80
+ }
81
+ resolve(str)
82
+ })
83
+ } catch (err) {
84
+ return reject(err)
85
+ }
86
+ })
87
+ }
88
+
89
+ /**
90
+ * Returns the base filename (without directory) for a given path.
91
+ *
92
+ * @method pathBasename
93
+ *
94
+ * @param fullpath {string}
95
+ *
96
+ * @return {string}
97
+ */
98
+ export function pathBasename (fullpath) {
99
+ let bname = ''
100
+ if (fullpath) {
101
+ bname = (fullpath.lastIndexOf('/') === fullpath.length - 1)
102
+ ? ''
103
+ : path.basename(fullpath)
104
+ }
105
+ return bname
106
+ }
107
+
108
+ /**
109
+ * Checks to see whether a string has the given suffix.
110
+ *
111
+ * @method hasSuffix
112
+ *
113
+ * @param str {string}
114
+ * @param suffix {string}
115
+ *
116
+ * @return {boolean}
117
+ */
118
+ export function hasSuffix (path, suffixes) {
119
+ for (const i in suffixes) {
120
+ if (path.indexOf(suffixes[i], path.length - suffixes[i].length) !== -1) {
121
+ return true
122
+ }
123
+ }
124
+ return false
125
+ }
126
+
127
+ /**
128
+ * Serializes an `rdflib` graph to a string.
129
+ *
130
+ * @method serialize
131
+ *
132
+ * @param graph {Graph} rdflib Graph object
133
+ * @param base {string} Base URL
134
+ * @param contentType {string}
135
+ *
136
+ * @return {string}
137
+ */
138
+ export function serialize (graph, base, contentType) {
139
+ return new Promise((resolve, reject) => {
140
+ try {
141
+ // target, kb, base, contentType, callback
142
+ $rdf.serialize(null, graph, base, contentType, function (err, result) {
143
+ if (err) {
144
+ return reject(err)
145
+ }
146
+ if (result === undefined) {
147
+ return reject(new Error('Error serializing the graph to ' +
148
+ contentType))
149
+ }
150
+
151
+ resolve(result)
152
+ })
153
+ } catch (err) {
154
+ reject(err)
155
+ }
156
+ })
157
+ }
158
+
159
+ /**
160
+ * Translates common RDF content types to `rdflib` parser names.
161
+ *
162
+ * @method translate
163
+ *
164
+ * @param contentType {string}
165
+ *
166
+ * @return {string}
167
+ */
168
+ export function translate (stream, baseUri, from, to) {
169
+ return new Promise((resolve, reject) => {
170
+ let data = ''
171
+ stream
172
+ .on('data', function (chunk) {
173
+ data += chunk
174
+ })
175
+ .on('end', function () {
176
+ const graph = $rdf.graph()
177
+ $rdf.parse(data, graph, baseUri, from, function (err) {
178
+ if (err) return reject(err)
179
+ resolve(serialize(graph, baseUri, to))
180
+ })
181
+ })
182
+ })
183
+ }
184
+
185
+ /**
186
+ * Converts a given string to a Node.js Readable Stream.
187
+ *
188
+ * @method stringToStream
189
+ *
190
+ * @param string {string}
191
+ *
192
+ * @return {ReadableStream}
193
+ */
194
+ export function stringToStream (string) {
195
+ return from(function (size, next) {
196
+ // if there's no more content
197
+ // left in the string, close the stream.
198
+ if (!string || string.length <= 0) {
199
+ return next(null, null)
200
+ }
201
+
202
+ // Pull in a new chunk of text,
203
+ // removing it from the string.
204
+ const chunk = string.slice(0, size)
205
+ string = string.slice(size)
206
+
207
+ // Emit "chunk" from the stream.
208
+ next(null, chunk)
209
+ })
210
+ }
211
+
212
+ /**
213
+ * Removes line ending characters (\n and \r) from a string.
214
+ *
215
+ * @method stripLineEndings
216
+ * @param str {string}
217
+ * @return {string}
218
+ */
219
+ export function stripLineEndings (obj) {
220
+ if (!obj) { return obj }
221
+
222
+ return obj.replace(/(\r\n|\n|\r)/gm, '')
223
+ }
224
+
225
+ /**
226
+ * Routes the resolved file. Serves static files with content negotiation.
227
+ *
228
+ * @method routeResolvedFile
229
+ * @param req {IncomingMessage} Express.js request object
230
+ * @param res {ServerResponse} Express.js response object
231
+ * @param file {string} resolved filename
232
+ * @param contentType {string} MIME type of the resolved file
233
+ * @param container {boolean} whether this is a container
234
+ * @param next {Function} Express.js next callback
235
+ */
236
+ export function routeResolvedFile (router, path, file, appendFileName = true) {
237
+ const fullPath = appendFileName ? path + file.match(/[^/]+$/) : path
238
+ const fullFile = fileURLToPath(import.meta.resolve(file))
239
+ router.get(fullPath, (req, res) => res.sendFile(fullFile))
240
+ }
241
+
242
+ /**
243
+ * Returns the quota for a user in a root
244
+ * @param root
245
+ * @param serverUri
246
+ * @returns {Promise<Number>} The quota in bytes
247
+ */
248
+ export async function getQuota (root, serverUri) {
249
+ const filename = path.join(root, 'settings/serverSide.ttl')
250
+ debug('Reading quota from ' + filename)
251
+ let prefs
252
+ try {
253
+ prefs = await _asyncReadfile(filename)
254
+ } catch (error) {
255
+ debug('Setting no quota. While reading serverSide.ttl, got ' + error)
256
+ return Infinity
257
+ }
258
+ const graph = $rdf.graph()
259
+ const storageUri = serverUri.endsWith('/') ? serverUri : serverUri + '/'
260
+ try {
261
+ $rdf.parse(prefs, graph, storageUri, 'text/turtle')
262
+ } catch (error) {
263
+ throw new Error('Failed to parse serverSide.ttl, got ' + error)
264
+ }
265
+ return Number(graph.anyValue($rdf.sym(storageUri), nsObj.solid('storageQuota'))) || Infinity
266
+ }
267
+
268
+ /**
269
+ * Returns true of the user has already exceeded their quota, i.e. it
270
+ * will check if new requests should be rejected, which means they
271
+ * could PUT a large file and get away with it.
272
+ */
273
+ export async function overQuota (root, serverUri) {
274
+ const quota = await getQuota(root, serverUri)
275
+ if (quota === Infinity) {
276
+ return false
277
+ }
278
+ // TODO: cache this value?
279
+ const size = await actualSize(root)
280
+ return (size > quota)
281
+ }
282
+
283
+ /**
284
+ * Returns the number of bytes that is occupied by the actual files in
285
+ * the file system. IMPORTANT NOTE: Since it traverses the directory
286
+ * to find the actual file sizes, this does a costly operation, but
287
+ * neglible for the small quotas we currently allow. If the quotas
288
+ * grow bigger, this will significantly reduce write performance, and
289
+ * so it needs to be rewritten.
290
+ */
291
+ function actualSize (root) {
292
+ return getSize(root)
293
+ }
294
+
295
+ function _asyncReadfile (filename) {
296
+ return util.promisify(fs.readFile)(filename, 'utf-8')
297
+ }
298
+
299
+ /**
300
+ * Get the content type from a headers object
301
+ * @param headers An Express or Fetch API headers object
302
+ * @return {string} A content type string
303
+ */
304
+ export function getContentType (headers) {
305
+ const value = headers.get ? headers.get('content-type') : headers['content-type']
306
+ return value ? value.replace(/;.*/, '') : ''
307
+ }
@@ -1,13 +1,9 @@
1
- module.exports = webid
2
-
3
- const tls = require('./tls')
4
-
5
- function webid (type) {
6
- type = type || 'tls'
7
-
8
- if (type === 'tls') {
9
- return tls
10
- }
11
-
12
- throw new Error('No other WebID supported')
13
- }
1
+ import tls from './tls/index.mjs'
2
+
3
+ export default function webid (type) {
4
+ type = type || 'tls'
5
+ if (type === 'tls') {
6
+ return tls
7
+ }
8
+ throw new Error('No other WebID supported')
9
+ }
@@ -1,35 +1,30 @@
1
- module.exports = get
2
-
3
- const fetch = require('node-fetch')
4
- const url = require('url')
5
-
6
- function get (webid, callback) {
7
- let uri
8
- try {
9
- uri = new url.URL(webid)
10
- } catch (err) {
11
- return callback(new Error('Invalid WebID URI: ' + webid + ': ' + err.message))
12
- }
13
-
14
- const headers = {
15
- Accept: 'text/turtle, application/ld+json'
16
- }
17
-
18
- fetch(uri.href, { method: 'GET', headers })
19
- .then(async res => {
20
- if (!res.ok) {
21
- return callback(new Error('Failed to retrieve WebID from ' + uri.href + ': HTTP ' + res.status))
22
- }
23
- const contentType = res.headers.get('content-type')
24
- let body
25
- if (contentType && contentType.includes('json')) {
26
- body = JSON.stringify(await res.json(), null, 2)
27
- } else {
28
- body = await res.text()
29
- }
30
- callback(null, body, contentType)
31
- })
32
- .catch(err => {
33
- return callback(new Error('Failed to fetch profile from ' + uri.href + ': ' + err))
34
- })
35
- }
1
+ import { URL } from 'url'
2
+
3
+ export default function get (webid, callback) {
4
+ let uri
5
+ try {
6
+ uri = new URL(webid)
7
+ } catch (err) {
8
+ return callback(new Error('Invalid WebID URI: ' + webid + ': ' + err.message))
9
+ }
10
+ const headers = {
11
+ Accept: 'text/turtle, application/ld+json'
12
+ }
13
+ fetch(uri.href, { method: 'GET', headers })
14
+ .then(async res => {
15
+ if (!res.ok) {
16
+ return callback(new Error('Failed to retrieve WebID from ' + uri.href + ': HTTP ' + res.status))
17
+ }
18
+ const contentType = res.headers.get('content-type')
19
+ let body
20
+ if (contentType && contentType.includes('json')) {
21
+ body = JSON.stringify(await res.json(), null, 2)
22
+ } else {
23
+ body = await res.text()
24
+ }
25
+ callback(null, body, contentType)
26
+ })
27
+ .catch(err => {
28
+ return callback(new Error('Failed to fetch profile from ' + uri.href + ': ' + err))
29
+ })
30
+ }