solid-server 5.8.8 → 6.0.0-2caddca5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (676) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/CONTRIBUTING.md +0 -0
  3. package/CONTRIBUTORS.md +0 -0
  4. package/Dockerfile +0 -0
  5. package/LICENSE.md +0 -0
  6. package/README.md +3 -0
  7. package/bin/config.json +0 -0
  8. package/bin/lib/cli-utils.mjs +54 -0
  9. package/bin/lib/cli.mjs +44 -0
  10. package/bin/lib/{init.js → init.mjs} +93 -94
  11. package/bin/lib/{invalidUsernames.js → invalidUsernames.mjs} +136 -148
  12. package/bin/lib/{migrateLegacyResources.js → migrateLegacyResources.mjs} +64 -69
  13. package/bin/lib/{options.js → options.mjs} +379 -405
  14. package/bin/lib/{start.js → start.mjs} +124 -148
  15. package/bin/lib/{updateIndex.js → updateIndex.mjs} +55 -56
  16. package/bin/solid +2 -2
  17. package/bin/solid-test +0 -0
  18. package/common/css/bootstrap.min.css +0 -0
  19. package/common/css/solid.css +0 -0
  20. package/common/fonts/glyphicons-halflings-regular.eot +0 -0
  21. package/common/fonts/glyphicons-halflings-regular.svg +0 -0
  22. package/common/fonts/glyphicons-halflings-regular.ttf +0 -0
  23. package/common/fonts/glyphicons-halflings-regular.woff +0 -0
  24. package/common/fonts/glyphicons-halflings-regular.woff2 +0 -0
  25. package/common/img/solid-emblem.svg +0 -0
  26. package/common/js/{auth-buttons.js → auth-buttons.mjs} +57 -67
  27. package/common/js/index-buttons.mjs +44 -0
  28. package/common/js/solid.js +0 -0
  29. package/common/js/solid.mjs +456 -0
  30. package/common/well-known/security.txt +0 -0
  31. package/config/{defaults.js → defaults.mjs} +22 -25
  32. package/config/templates/emails/delete-account.mjs +31 -0
  33. package/config/templates/emails/invalid-username.mjs +27 -0
  34. package/config/templates/emails/reset-password.mjs +31 -0
  35. package/config/templates/emails/welcome.mjs +23 -0
  36. package/config/templates/new-account/favicon.ico +0 -0
  37. package/config/templates/new-account/favicon.ico.acl +26 -0
  38. package/config/templates/new-account/profile/card$.ttl +26 -0
  39. package/config/templates/new-account/robots.txt +3 -0
  40. package/config/templates/new-account/robots.txt.acl +26 -0
  41. package/config/templates/new-account/settings/prefs.ttl +15 -0
  42. package/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
  43. package/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
  44. package/{default-templates/new-account/.meta.acl → config/templates/new-account/settings/publicTypeIndex.ttl.acl} +4 -4
  45. package/config/templates/new-account/settings/serverSide.ttl.acl +13 -0
  46. package/config/templates/new-account/settings/serverSide.ttl.inactive +12 -0
  47. package/config/templates/server/favicon.ico +0 -0
  48. package/{.well-known/.acl → config/templates/server/favicon.ico.acl} +2 -2
  49. package/config/templates/server/index.html +54 -0
  50. package/config/templates/server/robots.txt +3 -0
  51. package/{default-templates/server/.well-known/.acl → config/templates/server/robots.txt.acl} +2 -2
  52. package/config/usernames-blacklist.json +0 -0
  53. package/config/views/account/account-deleted.hbs +17 -0
  54. package/config/views/account/delete-confirm.hbs +51 -0
  55. package/config/views/account/delete-link-sent.hbs +17 -0
  56. package/config/views/account/delete.hbs +51 -0
  57. package/config/views/account/invalid-username.hbs +22 -0
  58. package/config/views/account/register-disabled.hbs +6 -0
  59. package/config/views/account/register-form.hbs +133 -0
  60. package/config/views/account/register.hbs +24 -0
  61. package/config/views/auth/auth-hidden-fields.hbs +8 -0
  62. package/config/views/auth/change-password.hbs +58 -0
  63. package/config/views/auth/goodbye.hbs +23 -0
  64. package/config/views/auth/login-required.hbs +34 -0
  65. package/config/views/auth/login-tls.hbs +11 -0
  66. package/config/views/auth/login-username-password.hbs +28 -0
  67. package/config/views/auth/login.hbs +55 -0
  68. package/config/views/auth/no-permission.hbs +29 -0
  69. package/config/views/auth/password-changed.hbs +27 -0
  70. package/config/views/auth/reset-link-sent.hbs +21 -0
  71. package/config/views/auth/reset-password.hbs +52 -0
  72. package/config/views/auth/sharing.hbs +49 -0
  73. package/config/views/shared/create-account.hbs +8 -0
  74. package/config/views/shared/error.hbs +5 -0
  75. package/config.json-default +0 -0
  76. package/coverage/tmp/coverage-2248-1768127616589-0.json +1 -0
  77. package/coverage/tmp/coverage-2249-1768127595001-0.json +1 -0
  78. package/default-templates/emails/delete-account.mjs +31 -0
  79. package/default-templates/emails/invalid-username.mjs +27 -0
  80. package/default-templates/emails/reset-password.mjs +31 -0
  81. package/default-templates/emails/welcome.mjs +23 -0
  82. package/default-templates/new-account/favicon.ico +0 -0
  83. package/default-templates/new-account/favicon.ico.acl +0 -0
  84. package/default-templates/new-account/profile/card$.ttl +0 -0
  85. package/default-templates/new-account/robots.txt +0 -0
  86. package/default-templates/new-account/robots.txt.acl +0 -0
  87. package/default-templates/new-account/settings/prefs.ttl +0 -0
  88. package/default-templates/new-account/settings/privateTypeIndex.ttl +0 -0
  89. package/default-templates/new-account/settings/publicTypeIndex.ttl +0 -0
  90. package/default-templates/new-account/settings/publicTypeIndex.ttl.acl +0 -0
  91. package/default-templates/new-account/settings/serverSide.ttl.acl +0 -0
  92. package/default-templates/new-account/settings/serverSide.ttl.inactive +0 -0
  93. package/default-templates/server/favicon.ico +0 -0
  94. package/default-templates/server/favicon.ico.acl +0 -0
  95. package/default-templates/server/index.html +1 -1
  96. package/default-templates/server/robots.txt +0 -0
  97. package/default-templates/server/robots.txt.acl +0 -0
  98. package/default-views/account/account-deleted.hbs +0 -0
  99. package/default-views/account/delete-confirm.hbs +0 -0
  100. package/default-views/account/delete-link-sent.hbs +0 -0
  101. package/default-views/account/delete.hbs +0 -0
  102. package/default-views/account/invalid-username.hbs +0 -0
  103. package/default-views/account/register-disabled.hbs +0 -0
  104. package/default-views/account/register-form.hbs +0 -0
  105. package/default-views/account/register.hbs +0 -0
  106. package/default-views/auth/auth-hidden-fields.hbs +0 -0
  107. package/default-views/auth/change-password.hbs +0 -0
  108. package/default-views/auth/goodbye.hbs +0 -0
  109. package/default-views/auth/login-required.hbs +0 -0
  110. package/default-views/auth/login-tls.hbs +0 -0
  111. package/default-views/auth/login-username-password.hbs +0 -0
  112. package/default-views/auth/login.hbs +0 -0
  113. package/default-views/auth/no-permission.hbs +0 -0
  114. package/default-views/auth/password-changed.hbs +0 -0
  115. package/default-views/auth/reset-link-sent.hbs +0 -0
  116. package/default-views/auth/reset-password.hbs +0 -0
  117. package/default-views/auth/sharing.hbs +0 -0
  118. package/default-views/shared/create-account.hbs +0 -0
  119. package/default-views/shared/error.hbs +0 -0
  120. package/docker-compose.yml +0 -0
  121. package/docker-image/CONTRIBUTING.md +33 -0
  122. package/docker-image/Makefile +32 -0
  123. package/docker-image/README.md +65 -0
  124. package/docker-image/examples/docker-compose.all-in-one.yml +76 -0
  125. package/docker-image/examples/docker-compose.nginx.yml +51 -0
  126. package/docker-image/examples/docker-compose.simple.yml +34 -0
  127. package/docker-image/src/Dockerfile +34 -0
  128. package/docker-image/src/checks.sh +56 -0
  129. package/docker-image/src/create-temporary-cert.sh +14 -0
  130. package/docker-image/src/entrypoint.sh +8 -0
  131. package/{common/img/.gitkeep → docker-image/test/__init__.py} +0 -0
  132. package/docker-image/test/conftest.py +15 -0
  133. package/docker-image/test/test_image_foundations.py +51 -0
  134. package/docker-image/test/test_non_accessible_key_cert.py +36 -0
  135. package/docker-image/test/test_precondition_checks.py +41 -0
  136. package/docker-image/test/test_solid_default_config.py +66 -0
  137. package/docker-image/test/test_volumes.py +55 -0
  138. package/docker-image/test/wait_for_container.py +8 -0
  139. package/docs/how-to-delete-your-account.md +0 -0
  140. package/docs/login-and-grant-access-to-application.md +0 -0
  141. package/eslint.config.mjs +102 -0
  142. package/examples/custom-error-handling.js +0 -0
  143. package/examples/custom-error-handling.mjs +29 -0
  144. package/examples/ldp-with-webid.js +0 -0
  145. package/examples/ldp-with-webid.mjs +12 -0
  146. package/examples/simple-express-app.js +0 -0
  147. package/examples/simple-express-app.mjs +20 -0
  148. package/examples/simple-ldp-server.js +0 -0
  149. package/examples/simple-ldp-server.mjs +8 -0
  150. package/favicon.ico +0 -0
  151. package/favicon.ico.acl +0 -0
  152. package/index.cjs +4 -0
  153. package/index.html +0 -0
  154. package/index.mjs +23 -0
  155. package/lib/{acl-checker.js → acl-checker.mjs} +13 -17
  156. package/lib/api/accounts/{user-accounts.js → user-accounts.mjs} +17 -16
  157. package/lib/api/authn/{force-user.js → force-user.mjs} +5 -4
  158. package/lib/api/authn/index.mjs +8 -0
  159. package/lib/api/authn/{webid-oidc.js → webid-oidc.mjs} +27 -20
  160. package/lib/api/authn/{webid-tls.js → webid-tls.mjs} +12 -11
  161. package/lib/api/index.mjs +7 -0
  162. package/lib/{capability-discovery.js → capability-discovery.mjs} +3 -6
  163. package/lib/common/{fs-utils.js → fs-utils.mjs} +35 -43
  164. package/lib/common/template-utils.mjs +29 -0
  165. package/lib/common/{user-utils.js → user-utils.mjs} +24 -28
  166. package/lib/{create-app.js → create-app.mjs} +372 -361
  167. package/lib/{create-server.js → create-server.mjs} +32 -11
  168. package/lib/debug.mjs +37 -0
  169. package/lib/handlers/{allow.js → allow.mjs} +79 -83
  170. package/lib/handlers/{auth-proxy.js → auth-proxy.mjs} +4 -5
  171. package/lib/handlers/{copy.js → copy.mjs} +35 -39
  172. package/lib/handlers/{cors-proxy.js → cors-proxy.mjs} +10 -14
  173. package/lib/handlers/{delete.js → delete.mjs} +20 -22
  174. package/lib/handlers/{error-pages.js → error-pages.mjs} +144 -212
  175. package/lib/handlers/{get.js → get.mjs} +258 -252
  176. package/lib/handlers/{index.js → index.mjs} +7 -10
  177. package/lib/handlers/{notify.js → notify.mjs} +8 -10
  178. package/lib/handlers/{options.js → options.mjs} +3 -7
  179. package/lib/handlers/patch/{n3-patch-parser.js → n3-patch-parser.mjs} +57 -59
  180. package/lib/handlers/patch/{sparql-update-parser.js → sparql-update-parser.mjs} +14 -16
  181. package/lib/handlers/{patch.js → patch.mjs} +241 -235
  182. package/lib/handlers/{post.js → post.mjs} +101 -99
  183. package/lib/handlers/{put.js → put.mjs} +101 -105
  184. package/lib/handlers/{restrict-to-top-domain.js → restrict-to-top-domain.mjs} +2 -2
  185. package/lib/{header.js → header.mjs} +138 -143
  186. package/lib/{http-error.js → http-error.mjs} +35 -34
  187. package/lib/{ldp-container.js → ldp-container.mjs} +10 -12
  188. package/lib/ldp-copy.mjs +82 -0
  189. package/lib/ldp-middleware.mjs +38 -0
  190. package/lib/{ldp.js → ldp.mjs} +285 -77
  191. package/lib/{lock.js → lock.mjs} +10 -10
  192. package/lib/{metadata.js → metadata.mjs} +11 -11
  193. package/lib/models/account-manager.mjs +297 -0
  194. package/lib/models/account-template.mjs +70 -0
  195. package/lib/models/authenticator.mjs +161 -0
  196. package/lib/models/oidc-manager.mjs +22 -0
  197. package/lib/models/solid-host.mjs +63 -0
  198. package/lib/models/user-account.mjs +50 -0
  199. package/lib/models/webid-tls-certificate.mjs +97 -0
  200. package/lib/{payment-pointer-discovery.js → payment-pointer-discovery.mjs} +5 -8
  201. package/lib/{rdf-notification-template.js → rdf-notification-template.mjs} +3 -5
  202. package/lib/requests/add-cert-request.mjs +70 -0
  203. package/lib/requests/auth-request.mjs +151 -0
  204. package/lib/requests/{create-account-request.js → create-account-request.mjs} +249 -452
  205. package/lib/requests/delete-account-confirm-request.mjs +85 -0
  206. package/lib/requests/{delete-account-request.js → delete-account-request.mjs} +73 -134
  207. package/lib/requests/login-request.mjs +89 -0
  208. package/lib/requests/{password-change-request.js → password-change-request.mjs} +132 -201
  209. package/lib/requests/{password-reset-email-request.js → password-reset-email-request.mjs} +123 -202
  210. package/lib/requests/password-reset-request.mjs +47 -0
  211. package/lib/requests/register-request.mjs +48 -0
  212. package/lib/requests/{sharing-request.js → sharing-request.mjs} +174 -261
  213. package/lib/{resource-mapper.js → resource-mapper.mjs} +8 -9
  214. package/lib/{server-config.js → server-config.mjs} +15 -20
  215. package/lib/services/{blacklist-service.js → blacklist-service.mjs} +36 -33
  216. package/lib/services/email-service.mjs +76 -0
  217. package/lib/services/{token-service.js → token-service.mjs} +36 -44
  218. package/lib/{utils.js → utils.mjs} +307 -254
  219. package/lib/webid/{index.js → index.mjs} +9 -13
  220. package/lib/webid/lib/{get.js → get.mjs} +30 -35
  221. package/lib/webid/lib/{parse.js → parse.mjs} +10 -12
  222. package/lib/webid/lib/verify.mjs +77 -0
  223. package/lib/webid/tls/generate.mjs +53 -0
  224. package/lib/webid/tls/index.mjs +6 -0
  225. package/package.json +76 -55
  226. package/renovate.json +0 -0
  227. package/robots.txt +0 -0
  228. package/robots.txt.acl +0 -0
  229. package/solid-server-6.0.0.tgz +0 -0
  230. package/static/account-recovery.html +0 -0
  231. package/static/popup-redirect.html +0 -0
  232. package/static/signup.html +0 -0
  233. package/static/signup.html.acl +0 -0
  234. package/test/index.mjs +167 -0
  235. package/test/integration/account-creation-tls-test.mjs +127 -0
  236. package/test/integration/account-manager-test.mjs +150 -0
  237. package/test/integration/account-template-test.mjs +135 -0
  238. package/test/integration/acl-oidc-test.mjs +1047 -0
  239. package/test/integration/acl-tls-test.mjs +964 -0
  240. package/test/integration/auth-proxy-test.mjs +144 -0
  241. package/test/integration/authentication-oidc-test.mjs +817 -0
  242. package/test/integration/authentication-oidc-with-strict-origins-turned-off-test.mjs +643 -0
  243. package/test/integration/capability-discovery-test.mjs +115 -0
  244. package/test/integration/cors-proxy-test.mjs +145 -0
  245. package/test/integration/errors-oidc-test.mjs +109 -0
  246. package/test/integration/errors-test.mjs +49 -0
  247. package/test/integration/formats-test.mjs +136 -0
  248. package/test/integration/header-test.mjs +101 -0
  249. package/test/integration/http-copy-test.mjs +109 -0
  250. package/test/integration/http-test.mjs +1197 -0
  251. package/test/integration/ldp-test.mjs +528 -0
  252. package/test/integration/oidc-manager-test.mjs +135 -0
  253. package/test/integration/params-test.mjs +192 -0
  254. package/test/integration/patch-sparql-update-test.mjs +195 -0
  255. package/test/integration/patch-test.mjs +590 -0
  256. package/test/integration/payment-pointer-test.mjs +155 -0
  257. package/test/integration/prep-test.mjs +314 -0
  258. package/test/integration/quota-test.mjs +50 -0
  259. package/test/integration/special-root-acl-handling-test.mjs +68 -0
  260. package/test/integration/validate-tts-test.mjs +57 -0
  261. package/test/integration/www-account-creation-oidc-test.mjs +310 -0
  262. package/test/keys/cert.pem +21 -0
  263. package/test/keys/client-cert.pem +19 -0
  264. package/test/keys/client-key.pem +27 -0
  265. package/test/keys/key.pem +27 -0
  266. package/test/keys/user1-cert.pem +23 -0
  267. package/test/keys/user1-key.pem +28 -0
  268. package/test/keys/user2-cert.pem +23 -0
  269. package/test/keys/user2-key.pem +27 -0
  270. package/test/mocha.opts +2 -0
  271. package/test/resources/Makefile +146 -0
  272. package/test/resources/accounts/alice.localhost/profile/card +0 -0
  273. package/test/resources/accounts/db/oidc/op/clients/_key_c763c1d56c6179805e5630cf727c1d90.json +1 -0
  274. package/test/resources/accounts/db/oidc/op/provider.json +763 -0
  275. package/test/resources/accounts/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A3457.json +1 -0
  276. package/test/resources/accounts/localhost/samplePublicContainer/nicola.jpg +0 -0
  277. package/test/resources/accounts/tim.localhost/hello.html +9 -0
  278. package/test/resources/accounts/tim.localhost/profile/card +0 -0
  279. package/{default-templates/emails/welcome.js → test/resources/accounts-acl/config/templates/emails/welcome-test.js} +0 -0
  280. package/test/resources/accounts-acl/config/templates/new-account/favicon.ico +0 -0
  281. package/test/resources/accounts-acl/config/templates/new-account/favicon.ico.acl +26 -0
  282. package/test/resources/accounts-acl/config/templates/new-account/index.html +28 -0
  283. package/test/resources/accounts-acl/config/templates/new-account/index.html.acl +22 -0
  284. package/test/resources/accounts-acl/config/templates/new-account/profile/card +27 -0
  285. package/{default-templates/new-account/inbox/.acl → test/resources/accounts-acl/config/templates/new-account/profile/card.acl} +5 -6
  286. package/test/resources/accounts-acl/config/templates/new-account/settings/prefs.ttl +9 -0
  287. package/test/resources/accounts-acl/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
  288. package/test/resources/accounts-acl/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
  289. package/test/resources/accounts-acl/config/templates/new-account/settings/publicTypeIndex.ttl.acl +25 -0
  290. package/test/resources/accounts-acl/config/templates/new-account/settings/serverSide.ttl +14 -0
  291. package/test/resources/accounts-acl/config/templates/server/index.html +35 -0
  292. package/{.acl → test/resources/accounts-acl/config/templates/server/index.html.acl} +4 -3
  293. package/test/resources/accounts-acl/config/views/account/register.hbs +58 -0
  294. package/test/resources/accounts-acl/config/views/auth/consent.hbs +49 -0
  295. package/test/resources/accounts-acl/config/views/auth/goodbye.hbs +20 -0
  296. package/test/resources/accounts-acl/config/views/auth/login-required.hbs +0 -0
  297. package/test/resources/accounts-acl/config/views/auth/login.hbs +51 -0
  298. package/test/resources/accounts-acl/config/views/auth/no-permission.hbs +0 -0
  299. package/test/resources/accounts-acl/db/oidc/op/clients/_key_77bb3b35edb1f3f7b887c25d1211a491.json +1 -0
  300. package/test/resources/accounts-acl/db/oidc/op/provider.json +763 -0
  301. package/test/resources/accounts-acl/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7777.json +1 -0
  302. package/test/resources/accounts-acl/localhost/favicon.ico +0 -0
  303. package/test/resources/accounts-acl/localhost/index.html +35 -0
  304. package/{default-templates/server/.acl → test/resources/accounts-acl/localhost/index.html.acl} +4 -3
  305. package/test/resources/accounts-acl/nicola.localhost/index.html +1 -0
  306. package/test/resources/accounts-acl/nicola.localhost/index.html.acl +10 -0
  307. package/test/resources/accounts-acl/quota/settings/serverSide.ttl +11 -0
  308. package/test/resources/accounts-acl/tim.localhost/append-acl/abc.ttl +1 -0
  309. package/test/resources/accounts-acl/tim.localhost/append-acl/abc.ttl.acl +8 -0
  310. package/test/resources/accounts-acl/tim.localhost/append-acl/abc2.ttl +1 -0
  311. package/test/resources/accounts-acl/tim.localhost/append-acl/abc2.ttl.acl +8 -0
  312. package/test/resources/accounts-acl/tim.localhost/fake-account/hello.html +9 -0
  313. package/test/resources/accounts-acl/tim.localhost/group/test-folder/group-listing-error.ttl +1 -0
  314. package/test/resources/accounts-acl/tim.localhost/group/test-folder/group-listing.ttl +14 -0
  315. package/test/resources/accounts-acl/tim.localhost/group/test-folder/some-other-file.txt +1 -0
  316. package/test/resources/accounts-acl/tim.localhost/multi-server/protected.txt +1 -0
  317. package/test/resources/accounts-acl/tim.localhost/multi-server/protected.txt.acl +8 -0
  318. package/test/resources/accounts-acl/tim.localhost/no-acl/test-file.html +1 -0
  319. package/test/resources/accounts-acl/tim.localhost/read-acl/deeper-tree/acls-only-on-top/example.ttl +1 -0
  320. package/test/resources/accounts-acl/tim.localhost/write-acl/test-file$.txt +1 -0
  321. package/test/resources/accounts-scenario/alice/db/oidc/op/clients/_key_b8a06d4b84bef0f9bdf119feb401a49b.json +1 -0
  322. package/test/resources/accounts-scenario/alice/db/oidc/op/provider.json +986 -0
  323. package/test/resources/accounts-scenario/alice/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7000.json +1 -0
  324. package/test/resources/accounts-scenario/alice/private-for-alice.txt +1 -0
  325. package/test/resources/accounts-scenario/alice/private-for-alice.txt.acl +12 -0
  326. package/test/resources/accounts-scenario/alice/profile/card$.ttl +10 -0
  327. package/test/resources/accounts-scenario/bob/db/oidc/op/clients/_key_04da74e0d809681d1fcd37c382cd3caf.json +1 -0
  328. package/test/resources/accounts-scenario/bob/db/oidc/op/provider.json +986 -0
  329. package/test/resources/accounts-scenario/bob/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7001.json +1 -0
  330. package/test/resources/accounts-scenario/bob/profile/card$.ttl +5 -0
  331. package/test/resources/accounts-scenario/bob/shared-with-alice.txt +1 -0
  332. package/test/resources/accounts-scenario/bob/shared-with-alice.txt.acl +15 -0
  333. package/test/resources/accounts-scenario/charlie/db/oidc/op/clients/_key_d9b6aa7268c20e5f8ee272ded946258f.json +1 -0
  334. package/test/resources/accounts-scenario/charlie/db/oidc/op/provider.json +759 -0
  335. package/test/resources/accounts-scenario/charlie/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A5002.json +1 -0
  336. package/test/resources/accounts-scenario/charlie/profile/card$.ttl +5 -0
  337. package/test/resources/accounts-strict-origin-off/alice/db/oidc/op/clients/_key_0a0dafa35f17f9f56e1b2d8858ffc4b6.json +1 -0
  338. package/test/resources/accounts-strict-origin-off/alice/db/oidc/op/provider.json +763 -0
  339. package/test/resources/accounts-strict-origin-off/alice/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7010.json +1 -0
  340. package/test/resources/accounts-strict-origin-off/alice/private-for-alice.txt +1 -0
  341. package/test/resources/accounts-strict-origin-off/alice/private-for-alice.txt.acl +12 -0
  342. package/test/resources/accounts-strict-origin-off/alice/profile/card$.ttl +10 -0
  343. package/test/resources/accounts-strict-origin-off/bob/db/oidc/op/clients/_key_367fd3187411d219f73956bcdd85bf64.json +1 -0
  344. package/test/resources/accounts-strict-origin-off/bob/db/oidc/op/provider.json +763 -0
  345. package/test/resources/accounts-strict-origin-off/bob/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7011.json +1 -0
  346. package/test/resources/accounts-strict-origin-off/bob/shared-with-alice.txt +1 -0
  347. package/test/resources/accounts-strict-origin-off/bob/shared-with-alice.txt.acl +15 -0
  348. package/{default-templates → test/resources/acl-tls/config/templates}/emails/delete-account.js +0 -0
  349. package/{default-templates → test/resources/acl-tls/config/templates}/emails/invalid-username.js +0 -0
  350. package/{default-templates → test/resources/acl-tls/config/templates}/emails/reset-password.js +0 -0
  351. package/test/resources/acl-tls/config/templates/emails/welcome.js +39 -0
  352. package/test/resources/acl-tls/config/templates/new-account/favicon.ico +0 -0
  353. package/test/resources/acl-tls/config/templates/new-account/favicon.ico.acl +26 -0
  354. package/test/resources/acl-tls/config/templates/new-account/profile/card$.ttl +26 -0
  355. package/test/resources/acl-tls/config/templates/new-account/robots.txt +3 -0
  356. package/test/resources/acl-tls/config/templates/new-account/robots.txt.acl +26 -0
  357. package/test/resources/acl-tls/config/templates/new-account/settings/prefs.ttl +15 -0
  358. package/test/resources/acl-tls/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
  359. package/test/resources/acl-tls/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
  360. package/test/resources/acl-tls/config/templates/new-account/settings/publicTypeIndex.ttl.acl +25 -0
  361. package/test/resources/acl-tls/config/templates/new-account/settings/serverSide.ttl.acl +13 -0
  362. package/test/resources/acl-tls/config/templates/new-account/settings/serverSide.ttl.inactive +12 -0
  363. package/test/resources/acl-tls/config/templates/server/favicon.ico +0 -0
  364. package/test/resources/acl-tls/config/templates/server/favicon.ico.acl +15 -0
  365. package/test/resources/acl-tls/config/templates/server/index.html +55 -0
  366. package/test/resources/acl-tls/config/templates/server/robots.txt +3 -0
  367. package/test/resources/acl-tls/config/templates/server/robots.txt.acl +15 -0
  368. package/test/resources/acl-tls/config/views/account/account-deleted.hbs +17 -0
  369. package/test/resources/acl-tls/config/views/account/delete-confirm.hbs +51 -0
  370. package/test/resources/acl-tls/config/views/account/delete-link-sent.hbs +17 -0
  371. package/test/resources/acl-tls/config/views/account/delete.hbs +51 -0
  372. package/test/resources/acl-tls/config/views/account/invalid-username.hbs +22 -0
  373. package/test/resources/acl-tls/config/views/account/register-disabled.hbs +6 -0
  374. package/test/resources/acl-tls/config/views/account/register-form.hbs +147 -0
  375. package/test/resources/acl-tls/config/views/account/register.hbs +24 -0
  376. package/test/resources/acl-tls/config/views/auth/auth-hidden-fields.hbs +8 -0
  377. package/test/resources/acl-tls/config/views/auth/change-password.hbs +58 -0
  378. package/test/resources/acl-tls/config/views/auth/goodbye.hbs +23 -0
  379. package/test/resources/acl-tls/config/views/auth/login-required.hbs +34 -0
  380. package/test/resources/acl-tls/config/views/auth/login-tls.hbs +11 -0
  381. package/test/resources/acl-tls/config/views/auth/login-username-password.hbs +28 -0
  382. package/test/resources/acl-tls/config/views/auth/login.hbs +55 -0
  383. package/test/resources/acl-tls/config/views/auth/no-permission.hbs +29 -0
  384. package/test/resources/acl-tls/config/views/auth/password-changed.hbs +27 -0
  385. package/test/resources/acl-tls/config/views/auth/reset-link-sent.hbs +21 -0
  386. package/test/resources/acl-tls/config/views/auth/reset-password.hbs +52 -0
  387. package/test/resources/acl-tls/config/views/auth/sharing.hbs +49 -0
  388. package/test/resources/acl-tls/config/views/shared/create-account.hbs +8 -0
  389. package/test/resources/acl-tls/config/views/shared/error.hbs +5 -0
  390. package/test/resources/acl-tls/localhost/favicon.ico +0 -0
  391. package/test/resources/acl-tls/localhost/favicon.ico.acl +15 -0
  392. package/test/resources/acl-tls/localhost/index.html +48 -0
  393. package/test/resources/acl-tls/localhost/robots.txt +3 -0
  394. package/test/resources/acl-tls/localhost/robots.txt.acl +15 -0
  395. package/test/resources/acl-tls/tim.localhost/append-acl/abc.ttl +1 -0
  396. package/test/resources/acl-tls/tim.localhost/append-acl/abc.ttl.acl +8 -0
  397. package/test/resources/acl-tls/tim.localhost/append-acl/abc2.ttl +1 -0
  398. package/test/resources/acl-tls/tim.localhost/append-acl/abc2.ttl.acl +8 -0
  399. package/test/resources/acl-tls/tim.localhost/fake-account/hello.html +9 -0
  400. package/test/resources/acl-tls/tim.localhost/no-acl/test-file.html +1 -0
  401. package/test/resources/acl-tls/tim.localhost/profile/card$.ttl +17 -0
  402. package/test/resources/acl-tls/write-acl/test-file$.ttl +1 -0
  403. package/test/resources/auth-proxy/index.html +0 -0
  404. package/test/resources/auth-proxy/index.html.acl +0 -0
  405. package/test/resources/config/templates/emails/delete-account.js +49 -0
  406. package/test/resources/config/templates/emails/delete-account.mjs +31 -0
  407. package/test/resources/config/templates/emails/invalid-username.js +30 -0
  408. package/test/resources/config/templates/emails/invalid-username.mjs +27 -0
  409. package/test/resources/config/templates/emails/reset-password.js +49 -0
  410. package/test/resources/config/templates/emails/reset-password.mjs +31 -0
  411. package/test/resources/config/templates/emails/welcome.js +39 -0
  412. package/test/resources/config/templates/emails/welcome.mjs +23 -0
  413. package/test/resources/config/templates/new-account/favicon.ico +0 -0
  414. package/test/resources/config/templates/new-account/favicon.ico.acl +26 -0
  415. package/test/resources/config/templates/new-account/profile/card$.ttl +26 -0
  416. package/test/resources/config/templates/new-account/robots.txt +3 -0
  417. package/test/resources/config/templates/new-account/robots.txt.acl +26 -0
  418. package/test/resources/config/templates/new-account/settings/prefs.ttl +15 -0
  419. package/test/resources/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
  420. package/test/resources/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
  421. package/test/resources/config/templates/new-account/settings/publicTypeIndex.ttl.acl +25 -0
  422. package/test/resources/config/templates/new-account/settings/serverSide.ttl.acl +13 -0
  423. package/test/resources/config/templates/new-account/settings/serverSide.ttl.inactive +12 -0
  424. package/test/resources/config/templates/server/favicon.ico +0 -0
  425. package/test/resources/config/templates/server/favicon.ico.acl +15 -0
  426. package/test/resources/config/templates/server/index.html +54 -0
  427. package/test/resources/config/templates/server/robots.txt +3 -0
  428. package/test/resources/config/templates/server/robots.txt.acl +15 -0
  429. package/test/resources/config/views/account/account-deleted.hbs +17 -0
  430. package/test/resources/config/views/account/delete-confirm.hbs +51 -0
  431. package/test/resources/config/views/account/delete-link-sent.hbs +17 -0
  432. package/test/resources/config/views/account/delete.hbs +51 -0
  433. package/test/resources/config/views/account/invalid-username.hbs +22 -0
  434. package/test/resources/config/views/account/register-disabled.hbs +6 -0
  435. package/test/resources/config/views/account/register-form.hbs +133 -0
  436. package/test/resources/config/views/account/register.hbs +24 -0
  437. package/test/resources/config/views/auth/auth-hidden-fields.hbs +8 -0
  438. package/test/resources/config/views/auth/change-password.hbs +58 -0
  439. package/test/resources/config/views/auth/goodbye.hbs +23 -0
  440. package/test/resources/config/views/auth/login-required.hbs +34 -0
  441. package/test/resources/config/views/auth/login-tls.hbs +11 -0
  442. package/test/resources/config/views/auth/login-username-password.hbs +28 -0
  443. package/test/resources/config/views/auth/login.hbs +55 -0
  444. package/test/resources/config/views/auth/no-permission.hbs +29 -0
  445. package/test/resources/config/views/auth/password-changed.hbs +27 -0
  446. package/test/resources/config/views/auth/reset-link-sent.hbs +21 -0
  447. package/test/resources/config/views/auth/reset-password.hbs +52 -0
  448. package/test/resources/config/views/auth/sharing.hbs +49 -0
  449. package/test/resources/config/views/shared/create-account.hbs +8 -0
  450. package/test/resources/config/views/shared/error.hbs +5 -0
  451. package/test/resources/empty.spatch +0 -0
  452. package/test/resources/errorPages/401.html +5 -0
  453. package/test/resources/errorPages/403.html +5 -0
  454. package/test/resources/errorPages/404.html +5 -0
  455. package/test/resources/errorPages/405.html +5 -0
  456. package/test/resources/errorPages/415.html +5 -0
  457. package/test/resources/errorPages/500.html +5 -0
  458. package/test/resources/example_spkac.cnf +1 -0
  459. package/test/resources/external-servers/example.com/jwks.json +81 -0
  460. package/test/resources/external-servers/example.com/openid-configuration.json +53 -0
  461. package/test/resources/favicon.ico +0 -0
  462. package/test/resources/favicon.ico.acl +15 -0
  463. package/test/resources/headers/index.html +0 -0
  464. package/test/resources/headers/public-ra +0 -0
  465. package/test/resources/headers/public-ra.acl +7 -0
  466. package/test/resources/headers/user-rw-public-r +0 -0
  467. package/test/resources/headers/user-rw-public-r.acl +12 -0
  468. package/test/resources/headers/user-rwac-public-0 +0 -0
  469. package/test/resources/headers/user-rwac-public-0.acl +7 -0
  470. package/test/resources/hello.html +3 -0
  471. package/test/resources/invalid1.ttl +13 -0
  472. package/test/resources/invalid2.ttl +9 -0
  473. package/test/resources/ldpatch-example-final.ttl +23 -0
  474. package/test/resources/ldpatch-example-initial.ttl +22 -0
  475. package/test/resources/ldpatch-example-patch-1.spatch +8 -0
  476. package/test/resources/ldpatch-example-patch-2.spatch +12 -0
  477. package/test/resources/ldpatch-example-patch-3.spatch +14 -0
  478. package/test/resources/ldpatch-example-patch.ldpatch +25 -0
  479. package/test/resources/ldpatch-example-patch.spatch +24 -0
  480. package/test/resources/lennon.jsonld +7 -0
  481. package/test/resources/lfs-0.sparql +9 -0
  482. package/test/resources/lfs-1-final.json +10 -0
  483. package/test/resources/lfs-1.sparql +11 -0
  484. package/test/resources/messaging-scenario/user1.databox.me/profile/card +21 -0
  485. package/test/resources/nicola.jpg +0 -0
  486. package/test/resources/patch/append-only.ttl +2 -0
  487. package/test/resources/patch/append-only.ttl.acl +6 -0
  488. package/test/resources/patch/favicon.ico +0 -0
  489. package/test/resources/patch/favicon.ico.acl +15 -0
  490. package/test/resources/patch/index.html +0 -0
  491. package/test/resources/patch/read-append.ttl +2 -0
  492. package/test/resources/patch/read-append.ttl.acl +6 -0
  493. package/test/resources/patch/read-only.ttl +2 -0
  494. package/test/resources/patch/read-only.ttl.acl +6 -0
  495. package/test/resources/patch/read-write.ttl +2 -0
  496. package/test/resources/patch/read-write.ttl.acl +6 -0
  497. package/test/resources/patch/robots.txt +3 -0
  498. package/test/resources/patch/robots.txt.acl +15 -0
  499. package/test/resources/patch/write-only.ttl +2 -0
  500. package/test/resources/patch/write-only.ttl.acl +6 -0
  501. package/test/resources/patch-1-initial.ttl +3 -0
  502. package/test/resources/patch-2-final.ttl +2 -0
  503. package/test/resources/patch-2-initial.ttl +3 -0
  504. package/test/resources/patch-2.spatch +2 -0
  505. package/test/resources/patch-2n.spatch +2 -0
  506. package/test/resources/patch-3-final.ttl +28 -0
  507. package/test/resources/patch-4-final.ttl +29 -0
  508. package/test/resources/patch-5-final.ttl +1 -0
  509. package/test/resources/patch-5-initial.ttl +3 -0
  510. package/test/resources/patch-5.spatch +2 -0
  511. package/test/resources/put-input-2.html +13 -0
  512. package/test/resources/put-input.txt +6 -0
  513. package/test/resources/robots.txt +3 -0
  514. package/test/resources/robots.txt.acl +15 -0
  515. package/test/resources/sampleContainer/blank +0 -0
  516. package/test/resources/sampleContainer/cert.pkcs +0 -0
  517. package/test/resources/sampleContainer/example.ttl.old +1 -0
  518. package/test/resources/sampleContainer/example1.ttl +12 -0
  519. package/test/resources/sampleContainer/example2.ttl +3 -0
  520. package/test/resources/sampleContainer/example3.ttl +7 -0
  521. package/test/resources/sampleContainer/example4$.ttl +7 -0
  522. package/test/resources/sampleContainer/filename with spaces.txt +0 -0
  523. package/test/resources/sampleContainer/index.html +9 -0
  524. package/test/resources/sampleContainer/post2.ttl +6 -0
  525. package/test/resources/sampleContainer/put1.ttl +13 -0
  526. package/test/resources/sampleContainer/solid.png +0 -0
  527. package/test/resources/sampleContainer/user1.pfx +0 -0
  528. package/test/resources/sampleContainer/user2.pfx +0 -0
  529. package/test/resources/sampleContainer2/example1.ttl +10 -0
  530. package/test/resources/sampleContainer2/example2.ttl +7 -0
  531. package/test/resources/timbl.jpg +0 -0
  532. package/test/scenarios.md +23 -0
  533. package/test/surface/docker/cookie/Dockerfile +6 -0
  534. package/test/surface/docker/cookie/app/index.js +29 -0
  535. package/test/surface/docker/cookie/app/package-lock.json +13 -0
  536. package/test/surface/docker/cookie/app/package.json +14 -0
  537. package/test/surface/docker/server/Dockerfile +19 -0
  538. package/test/surface/docker/server/config/defaults.js +10 -0
  539. package/test/surface/docker/server/config/templates/emails/delete-account.js +49 -0
  540. package/test/surface/docker/server/config/templates/emails/invalid-username.js +30 -0
  541. package/test/surface/docker/server/config/templates/emails/reset-password.js +49 -0
  542. package/test/surface/docker/server/config/templates/emails/welcome.js +39 -0
  543. package/test/surface/docker/server/config/templates/new-account/favicon.ico +0 -0
  544. package/test/surface/docker/server/config/templates/new-account/favicon.ico.acl +26 -0
  545. package/test/surface/docker/server/config/templates/new-account/profile/card$.ttl +26 -0
  546. package/test/surface/docker/server/config/templates/new-account/robots.txt +3 -0
  547. package/test/surface/docker/server/config/templates/new-account/robots.txt.acl +26 -0
  548. package/test/surface/docker/server/config/templates/new-account/settings/prefs.ttl +15 -0
  549. package/test/surface/docker/server/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
  550. package/test/surface/docker/server/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
  551. package/test/surface/docker/server/config/templates/new-account/settings/publicTypeIndex.ttl.acl +25 -0
  552. package/test/surface/docker/server/config/templates/new-account/settings/serverSide.ttl.acl +13 -0
  553. package/test/surface/docker/server/config/templates/new-account/settings/serverSide.ttl.inactive +12 -0
  554. package/test/surface/docker/server/config/templates/server/favicon.ico +0 -0
  555. package/test/surface/docker/server/config/templates/server/favicon.ico.acl +15 -0
  556. package/test/surface/docker/server/config/templates/server/index.html +55 -0
  557. package/test/surface/docker/server/config/templates/server/robots.txt +3 -0
  558. package/test/surface/docker/server/config/templates/server/robots.txt.acl +15 -0
  559. package/test/surface/docker/server/config/usernames-blacklist.json +4 -0
  560. package/test/surface/docker/server/config/views/account/account-deleted.hbs +17 -0
  561. package/test/surface/docker/server/config/views/account/delete-confirm.hbs +51 -0
  562. package/test/surface/docker/server/config/views/account/delete-link-sent.hbs +17 -0
  563. package/test/surface/docker/server/config/views/account/delete.hbs +51 -0
  564. package/test/surface/docker/server/config/views/account/invalid-username.hbs +22 -0
  565. package/test/surface/docker/server/config/views/account/register-disabled.hbs +6 -0
  566. package/test/surface/docker/server/config/views/account/register-form.hbs +147 -0
  567. package/test/surface/docker/server/config/views/account/register.hbs +24 -0
  568. package/test/surface/docker/server/config/views/auth/auth-hidden-fields.hbs +8 -0
  569. package/test/surface/docker/server/config/views/auth/change-password.hbs +58 -0
  570. package/test/surface/docker/server/config/views/auth/goodbye.hbs +23 -0
  571. package/test/surface/docker/server/config/views/auth/login-required.hbs +34 -0
  572. package/test/surface/docker/server/config/views/auth/login-tls.hbs +11 -0
  573. package/test/surface/docker/server/config/views/auth/login-username-password.hbs +28 -0
  574. package/test/surface/docker/server/config/views/auth/login.hbs +55 -0
  575. package/test/surface/docker/server/config/views/auth/no-permission.hbs +29 -0
  576. package/test/surface/docker/server/config/views/auth/password-changed.hbs +27 -0
  577. package/test/surface/docker/server/config/views/auth/reset-link-sent.hbs +21 -0
  578. package/test/surface/docker/server/config/views/auth/reset-password.hbs +52 -0
  579. package/test/surface/docker/server/config/views/auth/sharing.hbs +49 -0
  580. package/test/surface/docker/server/config/views/shared/create-account.hbs +8 -0
  581. package/test/surface/docker/server/config/views/shared/error.hbs +5 -0
  582. package/test/surface/docker/server/config.json +22 -0
  583. package/test/surface/docker/server/data/favicon.ico +0 -0
  584. package/test/surface/docker/server/data/favicon.ico.acl +26 -0
  585. package/test/surface/docker/server/data/index.html +48 -0
  586. package/test/surface/docker/server/data/profile/card$.ttl +31 -0
  587. package/test/surface/docker/server/data/robots.txt +3 -0
  588. package/test/surface/docker/server/data/robots.txt.acl +26 -0
  589. package/test/surface/docker/server/data/settings/prefs.ttl +15 -0
  590. package/test/surface/docker/server/data/settings/privateTypeIndex.ttl +4 -0
  591. package/test/surface/docker/server/data/settings/publicTypeIndex.ttl +4 -0
  592. package/test/surface/docker/server/data/settings/publicTypeIndex.ttl.acl +25 -0
  593. package/test/surface/docker/server/data/settings/serverSide.ttl +0 -0
  594. package/test/surface/docker/server/data/settings/serverSide.ttl.acl +13 -0
  595. package/test/surface/docker/server/data/settings/serverSide.ttl.inactive +12 -0
  596. package/test/surface/docker/server/env.list +4 -0
  597. package/test/surface/docker/solid-crud/Dockerfile +4 -0
  598. package/test/surface/docker/web-access-control/Dockerfile +1 -0
  599. package/test/surface/docker/webid-provider/Dockerfile +1 -0
  600. package/test/surface/run-solid-test-suite.sh +75 -0
  601. package/test/surface/server-env.list +5 -0
  602. package/test/surface/solid-crud-tests-env.list +5 -0
  603. package/test/surface/thirdparty-config.json +23 -0
  604. package/test/surface/thirdparty-env.list +6 -0
  605. package/test/surface/web-access-control-tests-env.list +6 -0
  606. package/test/surface/webid-provider-tests-env.list +4 -0
  607. package/test/test-helpers.mjs +63 -0
  608. package/test/unit/account-manager-test.mjs +610 -0
  609. package/test/unit/account-template-test.mjs +58 -0
  610. package/test/unit/acl-checker-test.mjs +51 -0
  611. package/test/unit/add-cert-request-test.mjs +119 -0
  612. package/test/unit/auth-handlers-test.mjs +108 -0
  613. package/test/unit/auth-proxy-test.mjs +224 -0
  614. package/test/unit/auth-request-test.mjs +96 -0
  615. package/test/unit/authenticator-test.mjs +34 -0
  616. package/test/unit/blacklist-service-test.mjs +49 -0
  617. package/test/unit/create-account-request-test.mjs +306 -0
  618. package/test/unit/delete-account-confirm-request-test.mjs +234 -0
  619. package/test/unit/delete-account-request-test.mjs +180 -0
  620. package/test/unit/email-service-test.mjs +165 -0
  621. package/test/unit/email-welcome-test.mjs +80 -0
  622. package/test/unit/error-pages-test.mjs +100 -0
  623. package/test/unit/esm-imports.test.mjs +148 -0
  624. package/test/unit/force-user-test.mjs +73 -0
  625. package/test/unit/getAvailableUrl-test.mjs +30 -0
  626. package/test/unit/getTrustedOrigins-test.mjs +20 -0
  627. package/test/unit/login-request-test.mjs +246 -0
  628. package/test/unit/oidc-manager-test.mjs +49 -0
  629. package/test/unit/password-authenticator-test.mjs +125 -0
  630. package/test/unit/password-change-request-test.mjs +259 -0
  631. package/test/unit/password-reset-email-request-test.mjs +234 -0
  632. package/test/unit/resource-mapper-test.mjs +673 -0
  633. package/test/unit/solid-host-test.mjs +118 -0
  634. package/test/unit/tls-authenticator-test.mjs +174 -0
  635. package/test/unit/token-service-test.mjs +82 -0
  636. package/test/unit/user-account-test.mjs +37 -0
  637. package/test/unit/user-accounts-api-test.mjs +59 -0
  638. package/test/unit/user-utils-test.mjs +64 -0
  639. package/test/unit/utils-test.mjs +112 -0
  640. package/test/utils/index.mjs +166 -0
  641. package/test/utils.mjs +204 -0
  642. package/test/validate-turtle.mjs +42 -0
  643. package/.github/workflows/ci.yml +0 -113
  644. package/.nvmrc +0 -1
  645. package/.snyk +0 -35
  646. package/bin/lib/cli-utils.js +0 -85
  647. package/bin/lib/cli.js +0 -39
  648. package/bin/solid.js +0 -3
  649. package/common/js/index-buttons.js +0 -44
  650. package/default-templates/new-account/.acl +0 -26
  651. package/default-templates/new-account/.meta +0 -5
  652. package/default-templates/new-account/.well-known/.acl +0 -19
  653. package/default-templates/new-account/private/.acl +0 -10
  654. package/default-templates/new-account/profile/.acl +0 -19
  655. package/default-templates/new-account/public/.acl +0 -19
  656. package/default-templates/new-account/settings/.acl +0 -20
  657. package/index.js +0 -3
  658. package/lib/api/authn/index.js +0 -5
  659. package/lib/api/index.js +0 -6
  660. package/lib/common/template-utils.js +0 -50
  661. package/lib/debug.js +0 -18
  662. package/lib/ldp-copy.js +0 -73
  663. package/lib/ldp-middleware.js +0 -40
  664. package/lib/models/account-manager.js +0 -604
  665. package/lib/models/account-template.js +0 -156
  666. package/lib/models/authenticator.js +0 -337
  667. package/lib/models/oidc-manager.js +0 -53
  668. package/lib/models/solid-host.js +0 -131
  669. package/lib/models/user-account.js +0 -113
  670. package/lib/models/webid-tls-certificate.js +0 -184
  671. package/lib/requests/add-cert-request.js +0 -138
  672. package/lib/requests/auth-request.js +0 -234
  673. package/lib/requests/delete-account-confirm-request.js +0 -170
  674. package/lib/requests/login-request.js +0 -205
  675. package/lib/services/email-service.js +0 -162
  676. package/lib/webid/tls/index.js +0 -185
@@ -1,604 +0,0 @@
1
- 'use strict'
2
- /* eslint-disable node/no-deprecated-api */
3
-
4
- const url = require('url')
5
- const rdf = require('rdflib')
6
- const ns = require('solid-namespace')(rdf)
7
-
8
- const defaults = require('../../config/defaults')
9
- const UserAccount = require('./user-account')
10
- const AccountTemplate = require('./account-template')
11
- const debug = require('./../debug').accounts
12
-
13
- const DEFAULT_PROFILE_CONTENT_TYPE = 'text/turtle'
14
- const DEFAULT_ADMIN_USERNAME = 'admin'
15
-
16
- /**
17
- * Manages account creation (determining whether accounts exist, creating
18
- * directory structures for new accounts, saving credentials).
19
- *
20
- * @class AccountManager
21
- */
22
- class AccountManager {
23
- /**
24
- * @constructor
25
- * @param [options={}] {Object}
26
- * @param [options.authMethod] {string} Primary authentication method (e.g. 'oidc')
27
- * @param [options.emailService] {EmailService}
28
- * @param [options.tokenService] {TokenService}
29
- * @param [options.host] {SolidHost}
30
- * @param [options.multiuser=false] {boolean} (argv.multiuser) Is the server running
31
- * in multiuser mode (users can sign up for accounts) or single user
32
- * (such as a personal website).
33
- * @param [options.store] {LDP}
34
- * @param [options.pathCard] {string}
35
- * @param [options.suffixURI] {string}
36
- * @param [options.accountTemplatePath] {string} Path to the account template
37
- * directory (will be used as a template for default containers, etc, when
38
- * creating new accounts).
39
- */
40
- constructor (options = {}) {
41
- if (!options.host) {
42
- throw Error('AccountManager requires a host instance')
43
- }
44
- this.host = options.host
45
- this.emailService = options.emailService
46
- this.tokenService = options.tokenService
47
- this.authMethod = options.authMethod || defaults.auth
48
- this.multiuser = options.multiuser || false
49
- this.store = options.store
50
- this.pathCard = options.pathCard || 'profile/card'
51
- this.suffixURI = options.suffixURI || '#me'
52
- this.accountTemplatePath = options.accountTemplatePath || './default-templates/new-account/'
53
- }
54
-
55
- /**
56
- * Factory method for new account manager creation. Usage:
57
- *
58
- * ```
59
- * let options = { host, multiuser, store }
60
- * let accountManager = AccountManager.from(options)
61
- * ```
62
- *
63
- * @param [options={}] {Object} See the `constructor()` docstring.
64
- *
65
- * @return {AccountManager}
66
- */
67
- static from (options) {
68
- return new AccountManager(options)
69
- }
70
-
71
- /**
72
- * Tests whether an account already exists for a given username.
73
- * Usage:
74
- *
75
- * ```
76
- * accountManager.accountExists('alice')
77
- * .then(exists => {
78
- * console.log('answer: ', exists)
79
- * })
80
- * ```
81
- * @param accountName {string} Account username, e.g. 'alice'
82
- *
83
- * @return {Promise<boolean>}
84
- */
85
- accountExists (accountName) {
86
- let accountUri
87
- let cardPath
88
-
89
- try {
90
- accountUri = this.accountUriFor(accountName)
91
- accountUri = url.parse(accountUri).hostname
92
- cardPath = url.resolve('/', this.pathCard)
93
- } catch (err) {
94
- return Promise.reject(err)
95
- }
96
- return this.accountUriExists(accountUri, cardPath)
97
- }
98
-
99
- /**
100
- * Tests whether a given account URI (e.g. 'https://alice.example.com/')
101
- * already exists on the server.
102
- *
103
- * @param accountUri {string}
104
- * @param accountResource {string}
105
- *
106
- * @return {Promise<boolean>}
107
- */
108
- async accountUriExists (accountUri, accountResource = '/') {
109
- try {
110
- return await this.store.exists(accountUri, accountResource)
111
- } catch (err) {
112
- return false
113
- }
114
- }
115
-
116
- /**
117
- * Constructs a directory path for a given account (used for account creation).
118
- * Usage:
119
- *
120
- * ```
121
- * // If solid-server was launched with '/accounts/' as the root directory
122
- * // and serverUri: 'https://example.com'
123
- *
124
- * accountManager.accountDirFor('alice') // -> '/accounts/alice.example.com'
125
- * ```
126
- *
127
- * @param accountName {string}
128
- *
129
- * @return {string}
130
- */
131
- accountDirFor (accountName) {
132
- const { hostname } = url.parse(this.accountUriFor(accountName))
133
- return this.store.resourceMapper.resolveFilePath(hostname)
134
- }
135
-
136
- /**
137
- * Composes an account URI for a given account name.
138
- * Usage (given a host with serverUri of 'https://example.com'):
139
- *
140
- * ```
141
- * // in multi user mode:
142
- * acctMgr.accountUriFor('alice')
143
- * // -> 'https://alice.example.com'
144
- *
145
- * // in single user mode:
146
- * acctMgr.accountUriFor()
147
- * // -> 'https://example.com'
148
- * ```
149
- *
150
- * @param [accountName] {string}
151
- *
152
- * @throws {Error} If `this.host` has not been initialized with serverUri,
153
- * or if in multiuser mode and accountName is not provided.
154
- * @return {string}
155
- */
156
- accountUriFor (accountName) {
157
- const accountUri = this.multiuser
158
- ? this.host.accountUriFor(accountName)
159
- : this.host.serverUri // single user mode
160
-
161
- return accountUri
162
- }
163
-
164
- /**
165
- * Composes a WebID (uri with hash fragment) for a given account name.
166
- * Usage:
167
- *
168
- * ```
169
- * // in multi user mode:
170
- * acctMgr.accountWebIdFor('alice')
171
- * // -> 'https://alice.example.com/profile/card#me'
172
- *
173
- * // in single user mode:
174
- * acctMgr.accountWebIdFor()
175
- * // -> 'https://example.com/profile/card#me'
176
- * ```
177
- *
178
- * @param [accountName] {string}
179
- *
180
- * @throws {Error} via accountUriFor()
181
- *
182
- * @return {string|null}
183
- */
184
- accountWebIdFor (accountName) {
185
- const accountUri = this.accountUriFor(accountName)
186
-
187
- const webIdUri = url.parse(url.resolve(accountUri, this.pathCard))
188
- webIdUri.hash = this.suffixURI
189
- return webIdUri.format()
190
- }
191
-
192
- /**
193
- * Returns the root .acl URI for a given user account (the account recovery
194
- * email is stored there).
195
- *
196
- * @param userAccount {UserAccount}
197
- *
198
- * @throws {Error} via accountUriFor()
199
- *
200
- * @return {string} Root .acl URI
201
- */
202
- rootAclFor (userAccount) {
203
- const accountUri = this.accountUriFor(userAccount.username)
204
-
205
- return url.resolve(accountUri, this.store.suffixAcl)
206
- }
207
-
208
- /**
209
- * Adds a newly generated WebID-TLS certificate to the user's profile graph.
210
- *
211
- * @param certificate {WebIdTlsCertificate}
212
- * @param userAccount {UserAccount}
213
- *
214
- * @return {Promise<Graph>}
215
- */
216
- addCertKeyToProfile (certificate, userAccount) {
217
- if (!certificate) {
218
- throw new TypeError('Cannot add empty certificate to user profile')
219
- }
220
-
221
- return this.getProfileGraphFor(userAccount)
222
- .then(profileGraph => {
223
- return this.addCertKeyToGraph(certificate, profileGraph)
224
- })
225
- .then(profileGraph => {
226
- return this.saveProfileGraph(profileGraph, userAccount)
227
- })
228
- }
229
-
230
- /**
231
- * Returns a parsed WebID Profile graph for a given user account.
232
- *
233
- * @param userAccount {UserAccount}
234
- * @param [contentType] {string} Content type of the profile to parse
235
- *
236
- * @throws {Error} If the user account's WebID is missing
237
- * @throws {Error} HTTP 404 error (via `getGraph()`) if the profile resource
238
- * is not found
239
- *
240
- * @return {Promise<Graph>}
241
- */
242
- getProfileGraphFor (userAccount, contentType = DEFAULT_PROFILE_CONTENT_TYPE) {
243
- const webId = userAccount.webId
244
- if (!webId) {
245
- const error = new Error('Cannot fetch profile graph, missing WebId URI')
246
- error.status = 400
247
- return Promise.reject(error)
248
- }
249
-
250
- const uri = userAccount.profileUri
251
-
252
- return this.store.getGraph(uri, contentType)
253
- .catch(error => {
254
- error.message = `Error retrieving profile graph ${uri}: ` + error.message
255
- throw error
256
- })
257
- }
258
-
259
- /**
260
- * Serializes and saves a given graph to the user's WebID Profile (and returns
261
- * the original graph object, as it was before serialization).
262
- *
263
- * @param profileGraph {Graph}
264
- * @param userAccount {UserAccount}
265
- * @param [contentType] {string}
266
- *
267
- * @return {Promise<Graph>}
268
- */
269
- saveProfileGraph (profileGraph, userAccount, contentType = DEFAULT_PROFILE_CONTENT_TYPE) {
270
- const webId = userAccount.webId
271
- if (!webId) {
272
- const error = new Error('Cannot save profile graph, missing WebId URI')
273
- error.status = 400
274
- return Promise.reject(error)
275
- }
276
-
277
- const uri = userAccount.profileUri
278
-
279
- return this.store.putGraph(profileGraph, uri, contentType)
280
- }
281
-
282
- /**
283
- * Adds the certificate's Public Key related triples to a user's profile graph.
284
- *
285
- * @param certificate {WebIdTlsCertificate}
286
- * @param graph {Graph} Parsed WebID Profile graph
287
- *
288
- * @return {Graph}
289
- */
290
- addCertKeyToGraph (certificate, graph) {
291
- const webId = rdf.namedNode(certificate.webId)
292
- const key = rdf.namedNode(certificate.keyUri)
293
- const timeCreated = rdf.literal(certificate.date.toISOString(), ns.xsd('dateTime'))
294
- const modulus = rdf.literal(certificate.modulus, ns.xsd('hexBinary'))
295
- const exponent = rdf.literal(certificate.exponent, ns.xsd('int'))
296
- const title = rdf.literal('Created by solid-server')
297
- const label = rdf.literal(certificate.commonName)
298
-
299
- graph.add(webId, ns.cert('key'), key)
300
- graph.add(key, ns.rdf('type'), ns.cert('RSAPublicKey'))
301
- graph.add(key, ns.dct('title'), title)
302
- graph.add(key, ns.rdfs('label'), label)
303
- graph.add(key, ns.dct('created'), timeCreated)
304
- graph.add(key, ns.cert('modulus'), modulus)
305
- graph.add(key, ns.cert('exponent'), exponent)
306
-
307
- return graph
308
- }
309
-
310
- /**
311
- * Creates and returns a `UserAccount` instance from submitted user data
312
- * (typically something like `req.body`, from a signup form).
313
- *
314
- * @param userData {Object} Options hashmap, like `req.body`.
315
- * Either a `username` or a `webid` property is required.
316
- *
317
- * @param [userData.username] {string}
318
- * @param [uesrData.webid] {string}
319
- *
320
- * @param [userData.email] {string}
321
- * @param [userData.name] {string}
322
- *
323
- * @throws {Error} (via `accountWebIdFor()`) If in multiuser mode and no
324
- * username passed
325
- *
326
- * @return {UserAccount}
327
- */
328
- userAccountFrom (userData) {
329
- const userConfig = {
330
- username: userData.username,
331
- email: userData.email,
332
- name: userData.name,
333
- externalWebId: userData.externalWebId,
334
- localAccountId: userData.localAccountId,
335
- webId: userData.webid || userData.webId || userData.externalWebId,
336
- idp: this.host.serverUri
337
- }
338
- if (userConfig.username) {
339
- userConfig.username = userConfig.username.toLowerCase()
340
- }
341
-
342
- try {
343
- userConfig.webId = userConfig.webId || this.accountWebIdFor(userConfig.username)
344
- } catch (err) {
345
- if (err.message === 'Cannot construct uri for blank account name') {
346
- throw new Error('Username or web id is required')
347
- } else {
348
- throw err
349
- }
350
- }
351
-
352
- if (userConfig.username) {
353
- if (userConfig.externalWebId && !userConfig.localAccountId) {
354
- // External Web ID exists, derive the local account id from username
355
- userConfig.localAccountId = this.accountWebIdFor(userConfig.username)
356
- .split('//')[1] // drop the https://
357
- }
358
- } else { // no username - derive it from web id
359
- if (userConfig.externalWebId) {
360
- userConfig.username = userConfig.externalWebId
361
-
362
- // TODO find oidcIssuer from externalWebId
363
- // removed from idp https://github.com/solid/node-solid-server/pull/1566
364
- } else {
365
- userConfig.username = this.usernameFromWebId(userConfig.webId)
366
- }
367
- }
368
-
369
- return UserAccount.from(userConfig)
370
- }
371
-
372
- usernameFromWebId (webId) {
373
- if (!this.multiuser) {
374
- return DEFAULT_ADMIN_USERNAME
375
- }
376
-
377
- const profileUrl = url.parse(webId)
378
- const hostname = profileUrl.hostname
379
-
380
- return hostname.split('.')[0]
381
- }
382
-
383
- /**
384
- * Creates a user account storage folder (from a default account template).
385
- *
386
- * @param userAccount {UserAccount}
387
- *
388
- * @return {Promise}
389
- */
390
- createAccountFor (userAccount) {
391
- const template = AccountTemplate.for(userAccount)
392
-
393
- const templatePath = this.accountTemplatePath
394
- const accountDir = this.accountDirFor(userAccount.username)
395
-
396
- debug(`Creating account folder for ${userAccount.webId} at ${accountDir}`)
397
-
398
- return AccountTemplate.copyTemplateDir(templatePath, accountDir)
399
- .then(() => {
400
- return template.processAccount(accountDir)
401
- })
402
- }
403
-
404
- /**
405
- * Generates an expiring one-time-use token for password reset purposes
406
- * (the user's Web ID is saved in the token service).
407
- *
408
- * @param userAccount {UserAccount}
409
- *
410
- * @return {string} Generated token
411
- */
412
- generateResetToken (userAccount) {
413
- return this.tokenService.generate('reset-password', { webId: userAccount.webId })
414
- }
415
-
416
- /**
417
- * Generates an expiring one-time-use token for password reset purposes
418
- * (the user's Web ID is saved in the token service).
419
- *
420
- * @param userAccount {UserAccount}
421
- *
422
- * @return {string} Generated token
423
- */
424
- generateDeleteToken (userAccount) {
425
- return this.tokenService.generate('delete-account', {
426
- webId: userAccount.webId,
427
- email: userAccount.email
428
- })
429
- }
430
-
431
- /**
432
- * Validates that a token exists and is not expired, and returns the saved
433
- * token contents, or throws an error if invalid.
434
- * Does not consume / clear the token.
435
- *
436
- * @param token {string}
437
- *
438
- * @throws {Error} If missing or invalid token
439
- *
440
- * @return {Object|false} Saved token data object if verified, false otherwise
441
- */
442
- validateDeleteToken (token) {
443
- const tokenValue = this.tokenService.verify('delete-account', token)
444
-
445
- if (!tokenValue) {
446
- throw new Error('Invalid or expired delete account token')
447
- }
448
-
449
- return tokenValue
450
- }
451
-
452
- /**
453
- * Validates that a token exists and is not expired, and returns the saved
454
- * token contents, or throws an error if invalid.
455
- * Does not consume / clear the token.
456
- *
457
- * @param token {string}
458
- *
459
- * @throws {Error} If missing or invalid token
460
- *
461
- * @return {Object|false} Saved token data object if verified, false otherwise
462
- */
463
- validateResetToken (token) {
464
- const tokenValue = this.tokenService.verify('reset-password', token)
465
-
466
- if (!tokenValue) {
467
- throw new Error('Invalid or expired reset token')
468
- }
469
-
470
- return tokenValue
471
- }
472
-
473
- /**
474
- * Returns a password reset URL (to be emailed to the user upon request)
475
- *
476
- * @param token {string} One-time-use expiring token, via the TokenService
477
- * @param returnToUrl {string}
478
- *
479
- * @return {string}
480
- */
481
- passwordResetUrl (token, returnToUrl) {
482
- let resetUrl = url.resolve(this.host.serverUri,
483
- `/account/password/change?token=${token}`)
484
-
485
- if (returnToUrl) {
486
- resetUrl += `&returnToUrl=${returnToUrl}`
487
- }
488
-
489
- return resetUrl
490
- }
491
-
492
- /**
493
- * Returns a password reset URL (to be emailed to the user upon request)
494
- *
495
- * @param token {string} One-time-use expiring token, via the TokenService
496
- * @param returnToUrl {string}
497
- *
498
- * @return {string}
499
- */
500
- getAccountDeleteUrl (token) {
501
- return url.resolve(this.host.serverUri, `/account/delete/confirm?token=${token}`)
502
- }
503
-
504
- /**
505
- * Parses and returns an account recovery email stored in a user's root .acl
506
- *
507
- * @param userAccount {UserAccount}
508
- *
509
- * @return {Promise<string|undefined>}
510
- */
511
- loadAccountRecoveryEmail (userAccount) {
512
- return Promise.resolve()
513
- .then(() => {
514
- const rootAclUri = this.rootAclFor(userAccount)
515
-
516
- return this.store.getGraph(rootAclUri)
517
- })
518
- .then(rootAclGraph => {
519
- const matches = rootAclGraph.match(null, ns.acl('agent'))
520
-
521
- let recoveryMailto = matches.find(agent => {
522
- return agent.object.value.startsWith('mailto:')
523
- })
524
-
525
- if (recoveryMailto) {
526
- recoveryMailto = recoveryMailto.object.value.replace('mailto:', '')
527
- }
528
-
529
- return recoveryMailto
530
- })
531
- }
532
-
533
- verifyEmailDependencies (userAccount) {
534
- if (!this.emailService) {
535
- throw new Error('Email service is not set up')
536
- }
537
-
538
- if (userAccount && !userAccount.email) {
539
- throw new Error('Account recovery email has not been provided')
540
- }
541
- }
542
-
543
- sendDeleteAccountEmail (userAccount) {
544
- return Promise.resolve()
545
- .then(() => this.verifyEmailDependencies(userAccount))
546
- .then(() => this.generateDeleteToken(userAccount))
547
- .then(resetToken => {
548
- const deleteUrl = this.getAccountDeleteUrl(resetToken)
549
-
550
- const emailData = {
551
- to: userAccount.email,
552
- webId: userAccount.webId,
553
- deleteUrl: deleteUrl
554
- }
555
-
556
- return this.emailService.sendWithTemplate('delete-account', emailData)
557
- })
558
- }
559
-
560
- sendPasswordResetEmail (userAccount, returnToUrl) {
561
- return Promise.resolve()
562
- .then(() => this.verifyEmailDependencies(userAccount))
563
- .then(() => this.generateResetToken(userAccount))
564
- .then(resetToken => {
565
- const resetUrl = this.passwordResetUrl(resetToken, returnToUrl)
566
-
567
- const emailData = {
568
- to: userAccount.email,
569
- webId: userAccount.webId,
570
- resetUrl
571
- }
572
-
573
- return this.emailService.sendWithTemplate('reset-password', emailData)
574
- })
575
- }
576
-
577
- /**
578
- * Sends a Welcome email (on new user signup).
579
- *
580
- * @param newUser {UserAccount}
581
- * @param newUser.email {string}
582
- * @param newUser.webId {string}
583
- * @param newUser.name {string}
584
- *
585
- * @return {Promise}
586
- */
587
- sendWelcomeEmail (newUser) {
588
- const emailService = this.emailService
589
-
590
- if (!emailService || !newUser.email) {
591
- return Promise.resolve(null)
592
- }
593
-
594
- const emailData = {
595
- to: newUser.email,
596
- webid: newUser.webId,
597
- name: newUser.displayName
598
- }
599
-
600
- return emailService.sendWithTemplate('welcome', emailData)
601
- }
602
- }
603
-
604
- module.exports = AccountManager