solid-server 5.8.7 → 5.8.8-22f4cfec

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (685) hide show
  1. package/CHANGELOG.md +0 -0
  2. package/CONTRIBUTING.md +0 -0
  3. package/CONTRIBUTORS.md +0 -0
  4. package/Dockerfile +0 -0
  5. package/LICENSE.md +0 -0
  6. package/README.md +0 -0
  7. package/bin/config.json +0 -0
  8. package/bin/lib/cli-utils.mjs +54 -0
  9. package/bin/lib/cli.mjs +44 -0
  10. package/bin/lib/{init.js → init.mjs} +93 -94
  11. package/bin/lib/{invalidUsernames.js → invalidUsernames.mjs} +136 -148
  12. package/bin/lib/{migrateLegacyResources.js → migrateLegacyResources.mjs} +64 -69
  13. package/bin/lib/{options.js → options.mjs} +379 -405
  14. package/bin/lib/{start.js → start.mjs} +124 -148
  15. package/bin/lib/{updateIndex.js → updateIndex.mjs} +55 -56
  16. package/bin/solid +2 -2
  17. package/bin/solid-test +0 -0
  18. package/common/css/bootstrap.min.css +6 -0
  19. package/common/css/solid.css +0 -0
  20. package/common/fonts/glyphicons-halflings-regular.eot +0 -0
  21. package/common/fonts/glyphicons-halflings-regular.svg +0 -0
  22. package/common/fonts/glyphicons-halflings-regular.ttf +0 -0
  23. package/common/fonts/glyphicons-halflings-regular.woff +0 -0
  24. package/common/fonts/glyphicons-halflings-regular.woff2 +0 -0
  25. package/common/img/solid-emblem.svg +0 -0
  26. package/common/js/auth-buttons.js +0 -0
  27. package/common/js/auth-buttons.mjs +57 -0
  28. package/common/js/index-buttons.js +0 -0
  29. package/common/js/index-buttons.mjs +43 -0
  30. package/common/js/solid.js +0 -0
  31. package/common/js/solid.mjs +456 -0
  32. package/common/well-known/security.txt +0 -0
  33. package/config/defaults.js +0 -0
  34. package/config/defaults.mjs +22 -0
  35. package/config/templates/emails/delete-account.js +49 -0
  36. package/config/templates/emails/delete-account.mjs +31 -0
  37. package/config/templates/emails/invalid-username.js +30 -0
  38. package/config/templates/emails/invalid-username.mjs +27 -0
  39. package/config/templates/emails/reset-password.js +49 -0
  40. package/config/templates/emails/reset-password.mjs +31 -0
  41. package/config/templates/emails/welcome.js +39 -0
  42. package/config/templates/emails/welcome.mjs +23 -0
  43. package/config/templates/new-account/favicon.ico +0 -0
  44. package/config/templates/new-account/favicon.ico.acl +26 -0
  45. package/config/templates/new-account/profile/card$.ttl +26 -0
  46. package/config/templates/new-account/robots.txt +3 -0
  47. package/config/templates/new-account/robots.txt.acl +26 -0
  48. package/config/templates/new-account/settings/prefs.ttl +15 -0
  49. package/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
  50. package/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
  51. package/{default-templates/new-account/.meta.acl → config/templates/new-account/settings/publicTypeIndex.ttl.acl} +4 -4
  52. package/config/templates/new-account/settings/serverSide.ttl.acl +13 -0
  53. package/config/templates/new-account/settings/serverSide.ttl.inactive +12 -0
  54. package/config/templates/server/favicon.ico +0 -0
  55. package/{.well-known/.acl → config/templates/server/favicon.ico.acl} +2 -2
  56. package/config/templates/server/index.html +54 -0
  57. package/config/templates/server/robots.txt +3 -0
  58. package/{default-templates/server/.well-known/.acl → config/templates/server/robots.txt.acl} +2 -2
  59. package/config/usernames-blacklist.json +0 -0
  60. package/config/views/account/account-deleted.hbs +17 -0
  61. package/config/views/account/delete-confirm.hbs +51 -0
  62. package/config/views/account/delete-link-sent.hbs +17 -0
  63. package/config/views/account/delete.hbs +51 -0
  64. package/config/views/account/invalid-username.hbs +22 -0
  65. package/config/views/account/register-disabled.hbs +6 -0
  66. package/config/views/account/register-form.hbs +133 -0
  67. package/config/views/account/register.hbs +24 -0
  68. package/config/views/auth/auth-hidden-fields.hbs +8 -0
  69. package/config/views/auth/change-password.hbs +58 -0
  70. package/config/views/auth/goodbye.hbs +23 -0
  71. package/config/views/auth/login-required.hbs +34 -0
  72. package/config/views/auth/login-tls.hbs +11 -0
  73. package/config/views/auth/login-username-password.hbs +28 -0
  74. package/config/views/auth/login.hbs +55 -0
  75. package/config/views/auth/no-permission.hbs +29 -0
  76. package/config/views/auth/password-changed.hbs +27 -0
  77. package/config/views/auth/reset-link-sent.hbs +21 -0
  78. package/config/views/auth/reset-password.hbs +52 -0
  79. package/config/views/auth/sharing.hbs +49 -0
  80. package/config/views/shared/create-account.hbs +8 -0
  81. package/config/views/shared/error.hbs +5 -0
  82. package/config.json-default +0 -0
  83. package/coverage/tmp/coverage-2260-1766832656715-0.json +1 -0
  84. package/coverage/tmp/coverage-2261-1766832635310-0.json +1 -0
  85. package/default-templates/emails/delete-account.js +0 -0
  86. package/default-templates/emails/delete-account.mjs +31 -0
  87. package/default-templates/emails/invalid-username.js +0 -0
  88. package/default-templates/emails/invalid-username.mjs +27 -0
  89. package/default-templates/emails/reset-password.js +0 -0
  90. package/default-templates/emails/reset-password.mjs +31 -0
  91. package/default-templates/emails/welcome.js +0 -0
  92. package/default-templates/emails/welcome.mjs +23 -0
  93. package/default-templates/new-account/favicon.ico +0 -0
  94. package/default-templates/new-account/favicon.ico.acl +0 -0
  95. package/default-templates/new-account/profile/card$.ttl +0 -0
  96. package/default-templates/new-account/robots.txt +0 -0
  97. package/default-templates/new-account/robots.txt.acl +0 -0
  98. package/default-templates/new-account/settings/prefs.ttl +0 -0
  99. package/default-templates/new-account/settings/privateTypeIndex.ttl +0 -0
  100. package/default-templates/new-account/settings/publicTypeIndex.ttl +0 -0
  101. package/default-templates/new-account/settings/publicTypeIndex.ttl.acl +0 -0
  102. package/default-templates/new-account/settings/serverSide.ttl.acl +0 -0
  103. package/default-templates/new-account/settings/serverSide.ttl.inactive +0 -0
  104. package/default-templates/server/favicon.ico +0 -0
  105. package/default-templates/server/favicon.ico.acl +0 -0
  106. package/default-templates/server/index.html +0 -0
  107. package/default-templates/server/robots.txt +0 -0
  108. package/default-templates/server/robots.txt.acl +0 -0
  109. package/default-views/account/account-deleted.hbs +0 -0
  110. package/default-views/account/delete-confirm.hbs +0 -0
  111. package/default-views/account/delete-link-sent.hbs +0 -0
  112. package/default-views/account/delete.hbs +0 -0
  113. package/default-views/account/invalid-username.hbs +0 -0
  114. package/default-views/account/register-disabled.hbs +0 -0
  115. package/default-views/account/register-form.hbs +0 -0
  116. package/default-views/account/register.hbs +0 -0
  117. package/default-views/auth/auth-hidden-fields.hbs +0 -0
  118. package/default-views/auth/change-password.hbs +0 -0
  119. package/default-views/auth/goodbye.hbs +0 -0
  120. package/default-views/auth/login-required.hbs +0 -0
  121. package/default-views/auth/login-tls.hbs +0 -0
  122. package/default-views/auth/login-username-password.hbs +0 -0
  123. package/default-views/auth/login.hbs +0 -0
  124. package/default-views/auth/no-permission.hbs +0 -0
  125. package/default-views/auth/password-changed.hbs +0 -0
  126. package/default-views/auth/reset-link-sent.hbs +0 -0
  127. package/default-views/auth/reset-password.hbs +0 -0
  128. package/default-views/auth/sharing.hbs +0 -0
  129. package/default-views/shared/create-account.hbs +0 -0
  130. package/default-views/shared/error.hbs +0 -0
  131. package/docker-compose.yml +0 -0
  132. package/docker-image/CONTRIBUTING.md +33 -0
  133. package/docker-image/Makefile +32 -0
  134. package/docker-image/README.md +65 -0
  135. package/docker-image/examples/docker-compose.all-in-one.yml +76 -0
  136. package/docker-image/examples/docker-compose.nginx.yml +51 -0
  137. package/docker-image/examples/docker-compose.simple.yml +34 -0
  138. package/docker-image/src/Dockerfile +34 -0
  139. package/docker-image/src/checks.sh +56 -0
  140. package/docker-image/src/create-temporary-cert.sh +14 -0
  141. package/docker-image/src/entrypoint.sh +8 -0
  142. package/{common/img/.gitkeep → docker-image/test/__init__.py} +0 -0
  143. package/docker-image/test/conftest.py +15 -0
  144. package/docker-image/test/test_image_foundations.py +51 -0
  145. package/docker-image/test/test_non_accessible_key_cert.py +36 -0
  146. package/docker-image/test/test_precondition_checks.py +41 -0
  147. package/docker-image/test/test_solid_default_config.py +66 -0
  148. package/docker-image/test/test_volumes.py +55 -0
  149. package/docker-image/test/wait_for_container.py +8 -0
  150. package/docs/how-to-delete-your-account.md +0 -0
  151. package/docs/login-and-grant-access-to-application.md +0 -0
  152. package/examples/custom-error-handling.js +0 -0
  153. package/examples/custom-error-handling.mjs +29 -0
  154. package/examples/ldp-with-webid.js +0 -0
  155. package/examples/ldp-with-webid.mjs +12 -0
  156. package/examples/simple-express-app.js +0 -0
  157. package/examples/simple-express-app.mjs +20 -0
  158. package/examples/simple-ldp-server.js +0 -0
  159. package/examples/simple-ldp-server.mjs +8 -0
  160. package/favicon.ico +0 -0
  161. package/favicon.ico.acl +0 -0
  162. package/index.cjs +4 -0
  163. package/index.html +0 -0
  164. package/index.mjs +23 -0
  165. package/lib/{acl-checker.js → acl-checker.mjs} +13 -15
  166. package/lib/api/accounts/{user-accounts.js → user-accounts.mjs} +17 -16
  167. package/lib/api/authn/{force-user.js → force-user.mjs} +5 -4
  168. package/lib/api/authn/index.mjs +8 -0
  169. package/lib/api/authn/{webid-oidc.js → webid-oidc.mjs} +27 -20
  170. package/lib/api/authn/{webid-tls.js → webid-tls.mjs} +12 -11
  171. package/lib/api/index.mjs +7 -0
  172. package/lib/{capability-discovery.js → capability-discovery.mjs} +3 -6
  173. package/lib/common/{fs-utils.js → fs-utils.mjs} +35 -43
  174. package/lib/common/template-utils.mjs +29 -0
  175. package/lib/common/{user-utils.js → user-utils.mjs} +24 -28
  176. package/lib/{create-app.js → create-app.mjs} +372 -361
  177. package/lib/{create-server.js → create-server.mjs} +32 -11
  178. package/lib/debug.mjs +37 -0
  179. package/lib/handlers/{allow.js → allow.mjs} +79 -83
  180. package/lib/handlers/{auth-proxy.js → auth-proxy.mjs} +4 -5
  181. package/lib/handlers/{copy.js → copy.mjs} +37 -39
  182. package/lib/handlers/{cors-proxy.js → cors-proxy.mjs} +9 -11
  183. package/lib/handlers/{delete.js → delete.mjs} +20 -22
  184. package/lib/handlers/{error-pages.js → error-pages.mjs} +144 -212
  185. package/lib/handlers/{get.js → get.mjs} +254 -252
  186. package/lib/handlers/{index.js → index.mjs} +7 -8
  187. package/lib/handlers/{notify.js → notify.mjs} +8 -10
  188. package/lib/handlers/{options.js → options.mjs} +3 -5
  189. package/lib/handlers/patch/{n3-patch-parser.js → n3-patch-parser.mjs} +57 -59
  190. package/lib/handlers/patch/{sparql-update-parser.js → sparql-update-parser.mjs} +14 -16
  191. package/lib/handlers/{patch.js → patch.mjs} +241 -235
  192. package/lib/handlers/{post.js → post.mjs} +101 -99
  193. package/lib/handlers/{put.js → put.mjs} +101 -105
  194. package/lib/handlers/{restrict-to-top-domain.js → restrict-to-top-domain.mjs} +2 -2
  195. package/lib/{header.js → header.mjs} +138 -143
  196. package/lib/{http-error.js → http-error.mjs} +35 -34
  197. package/lib/{ldp-container.js → ldp-container.mjs} +10 -12
  198. package/lib/ldp-copy.mjs +82 -0
  199. package/lib/ldp-middleware.mjs +38 -0
  200. package/lib/{ldp.js → ldp.mjs} +286 -75
  201. package/lib/{lock.js → lock.mjs} +10 -10
  202. package/lib/{metadata.js → metadata.mjs} +11 -11
  203. package/lib/models/account-manager.mjs +297 -0
  204. package/lib/models/account-template.mjs +70 -0
  205. package/lib/models/authenticator.mjs +161 -0
  206. package/lib/models/oidc-manager.mjs +23 -0
  207. package/lib/models/solid-host.mjs +63 -0
  208. package/lib/models/user-account.mjs +50 -0
  209. package/lib/models/webid-tls-certificate.mjs +97 -0
  210. package/lib/{payment-pointer-discovery.js → payment-pointer-discovery.mjs} +5 -8
  211. package/lib/{rdf-notification-template.js → rdf-notification-template.mjs} +3 -5
  212. package/lib/requests/add-cert-request.mjs +70 -0
  213. package/lib/requests/auth-request.mjs +151 -0
  214. package/lib/requests/{create-account-request.js → create-account-request.mjs} +249 -452
  215. package/lib/requests/delete-account-confirm-request.mjs +85 -0
  216. package/lib/requests/{delete-account-request.js → delete-account-request.mjs} +73 -134
  217. package/lib/requests/login-request.mjs +89 -0
  218. package/lib/requests/{password-change-request.js → password-change-request.mjs} +132 -201
  219. package/lib/requests/{password-reset-email-request.js → password-reset-email-request.mjs} +123 -202
  220. package/lib/requests/password-reset-request.mjs +47 -0
  221. package/lib/requests/register-request.mjs +48 -0
  222. package/lib/requests/{sharing-request.js → sharing-request.mjs} +174 -261
  223. package/lib/{resource-mapper.js → resource-mapper.mjs} +7 -6
  224. package/lib/{server-config.js → server-config.mjs} +15 -20
  225. package/lib/services/{blacklist-service.js → blacklist-service.mjs} +36 -33
  226. package/lib/services/email-service.mjs +76 -0
  227. package/lib/services/{token-service.js → token-service.mjs} +36 -44
  228. package/lib/{utils.js → utils.mjs} +309 -254
  229. package/lib/webid/{index.js → index.mjs} +9 -13
  230. package/lib/webid/lib/{get.js → get.mjs} +31 -35
  231. package/lib/webid/lib/{parse.js → parse.mjs} +10 -12
  232. package/lib/webid/lib/verify.mjs +77 -0
  233. package/lib/webid/tls/generate.mjs +53 -0
  234. package/lib/webid/tls/index.mjs +7 -0
  235. package/package.json +60 -40
  236. package/renovate.json +0 -0
  237. package/robots.txt +0 -0
  238. package/robots.txt.acl +0 -0
  239. package/solid-server-5.8.8.tgz +0 -0
  240. package/static/account-recovery.html +0 -0
  241. package/static/popup-redirect.html +0 -0
  242. package/static/signup.html +0 -0
  243. package/static/signup.html.acl +0 -0
  244. package/test/index.mjs +168 -0
  245. package/test/integration/account-creation-tls-test.mjs +127 -0
  246. package/test/integration/account-manager-test.mjs +151 -0
  247. package/test/integration/account-template-test.mjs +136 -0
  248. package/test/integration/acl-oidc-test.mjs +1048 -0
  249. package/test/integration/acl-tls-test.mjs +964 -0
  250. package/test/integration/auth-proxy-test.mjs +144 -0
  251. package/test/integration/authentication-oidc-test.mjs +812 -0
  252. package/test/integration/authentication-oidc-with-strict-origins-turned-off-test.mjs +638 -0
  253. package/test/integration/capability-discovery-test.mjs +116 -0
  254. package/test/integration/cors-proxy-test.mjs +145 -0
  255. package/test/integration/errors-oidc-test.mjs +109 -0
  256. package/test/integration/errors-test.mjs +49 -0
  257. package/test/integration/formats-test.mjs +136 -0
  258. package/test/integration/header-test.mjs +101 -0
  259. package/test/integration/http-copy-test.mjs +109 -0
  260. package/test/integration/http-test.mjs +1197 -0
  261. package/test/integration/ldp-test.mjs +528 -0
  262. package/test/integration/oidc-manager-test.mjs +42 -0
  263. package/test/integration/params-test.mjs +192 -0
  264. package/test/integration/patch-sparql-update-test.mjs +195 -0
  265. package/test/integration/patch-test.mjs +590 -0
  266. package/test/integration/payment-pointer-test.mjs +155 -0
  267. package/test/integration/prep-test.mjs +314 -0
  268. package/test/integration/quota-test.mjs +51 -0
  269. package/test/integration/special-root-acl-handling-test.mjs +68 -0
  270. package/test/integration/validate-tts-test.mjs +57 -0
  271. package/test/integration/www-account-creation-oidc-test.mjs +311 -0
  272. package/test/keys/cert.pem +21 -0
  273. package/test/keys/client-cert.pem +19 -0
  274. package/test/keys/client-key.pem +27 -0
  275. package/test/keys/key.pem +27 -0
  276. package/test/keys/user1-cert.pem +23 -0
  277. package/test/keys/user1-key.pem +28 -0
  278. package/test/keys/user2-cert.pem +23 -0
  279. package/test/keys/user2-key.pem +27 -0
  280. package/test/mocha.opts +2 -0
  281. package/test/resources/Makefile +146 -0
  282. package/test/resources/accounts/alice.localhost/profile/card +0 -0
  283. package/test/resources/accounts/db/oidc/op/clients/_key_5319f8e8e4ea3214c2e92b252520d355.json +1 -0
  284. package/test/resources/accounts/db/oidc/op/provider.json +763 -0
  285. package/test/resources/accounts/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A3457.json +1 -0
  286. package/test/resources/accounts/localhost/samplePublicContainer/nicola.jpg +0 -0
  287. package/test/resources/accounts/tim.localhost/hello.html +9 -0
  288. package/test/resources/accounts/tim.localhost/profile/card +0 -0
  289. package/test/resources/accounts-acl/config/templates/emails/welcome-test.js +39 -0
  290. package/test/resources/accounts-acl/config/templates/new-account/favicon.ico +0 -0
  291. package/test/resources/accounts-acl/config/templates/new-account/favicon.ico.acl +26 -0
  292. package/test/resources/accounts-acl/config/templates/new-account/index.html +28 -0
  293. package/test/resources/accounts-acl/config/templates/new-account/index.html.acl +22 -0
  294. package/test/resources/accounts-acl/config/templates/new-account/profile/card +27 -0
  295. package/{default-templates/new-account/inbox/.acl → test/resources/accounts-acl/config/templates/new-account/profile/card.acl} +5 -6
  296. package/test/resources/accounts-acl/config/templates/new-account/settings/prefs.ttl +9 -0
  297. package/test/resources/accounts-acl/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
  298. package/test/resources/accounts-acl/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
  299. package/test/resources/accounts-acl/config/templates/new-account/settings/publicTypeIndex.ttl.acl +25 -0
  300. package/test/resources/accounts-acl/config/templates/new-account/settings/serverSide.ttl +14 -0
  301. package/test/resources/accounts-acl/config/templates/server/index.html +35 -0
  302. package/{.acl → test/resources/accounts-acl/config/templates/server/index.html.acl} +4 -3
  303. package/test/resources/accounts-acl/config/views/account/register.hbs +58 -0
  304. package/test/resources/accounts-acl/config/views/auth/consent.hbs +49 -0
  305. package/test/resources/accounts-acl/config/views/auth/goodbye.hbs +20 -0
  306. package/test/resources/accounts-acl/config/views/auth/login-required.hbs +0 -0
  307. package/test/resources/accounts-acl/config/views/auth/login.hbs +51 -0
  308. package/test/resources/accounts-acl/config/views/auth/no-permission.hbs +0 -0
  309. package/test/resources/accounts-acl/db/oidc/op/clients/_key_77bb3b35edb1f3f7b887c25d1211a491.json +1 -0
  310. package/test/resources/accounts-acl/db/oidc/op/provider.json +763 -0
  311. package/test/resources/accounts-acl/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7777.json +1 -0
  312. package/test/resources/accounts-acl/localhost/favicon.ico +0 -0
  313. package/test/resources/accounts-acl/localhost/index.html +35 -0
  314. package/{default-templates/server/.acl → test/resources/accounts-acl/localhost/index.html.acl} +4 -3
  315. package/test/resources/accounts-acl/nicola.localhost/index.html +1 -0
  316. package/test/resources/accounts-acl/nicola.localhost/index.html.acl +10 -0
  317. package/test/resources/accounts-acl/quota/settings/serverSide.ttl +11 -0
  318. package/test/resources/accounts-acl/tim.localhost/append-acl/abc.ttl +1 -0
  319. package/test/resources/accounts-acl/tim.localhost/append-acl/abc.ttl.acl +8 -0
  320. package/test/resources/accounts-acl/tim.localhost/append-acl/abc2.ttl +1 -0
  321. package/test/resources/accounts-acl/tim.localhost/append-acl/abc2.ttl.acl +8 -0
  322. package/test/resources/accounts-acl/tim.localhost/fake-account/hello.html +9 -0
  323. package/test/resources/accounts-acl/tim.localhost/group/test-folder/group-listing-error.ttl +1 -0
  324. package/test/resources/accounts-acl/tim.localhost/group/test-folder/group-listing.ttl +14 -0
  325. package/test/resources/accounts-acl/tim.localhost/group/test-folder/some-other-file.txt +1 -0
  326. package/test/resources/accounts-acl/tim.localhost/multi-server/protected.txt +1 -0
  327. package/test/resources/accounts-acl/tim.localhost/multi-server/protected.txt.acl +8 -0
  328. package/test/resources/accounts-acl/tim.localhost/no-acl/test-file.html +1 -0
  329. package/test/resources/accounts-acl/tim.localhost/read-acl/deeper-tree/acls-only-on-top/example.ttl +1 -0
  330. package/test/resources/accounts-acl/tim.localhost/write-acl/test-file$.txt +1 -0
  331. package/test/resources/accounts-scenario/alice/db/oidc/op/clients/_key_9c0fd8442675a1afbe5115b9ae300c65.json +1 -0
  332. package/test/resources/accounts-scenario/alice/db/oidc/op/provider.json +761 -0
  333. package/test/resources/accounts-scenario/alice/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7000.json +1 -0
  334. package/test/resources/accounts-scenario/alice/private-for-alice.txt +1 -0
  335. package/test/resources/accounts-scenario/alice/private-for-alice.txt.acl +12 -0
  336. package/test/resources/accounts-scenario/alice/profile/card$.ttl +10 -0
  337. package/test/resources/accounts-scenario/bob/db/oidc/op/clients/_key_f15f340b6dc71b68d20eca0d7e87a972.json +1 -0
  338. package/test/resources/accounts-scenario/bob/db/oidc/op/provider.json +761 -0
  339. package/test/resources/accounts-scenario/bob/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7001.json +1 -0
  340. package/test/resources/accounts-scenario/bob/profile/card$.ttl +5 -0
  341. package/test/resources/accounts-scenario/bob/shared-with-alice.txt +1 -0
  342. package/test/resources/accounts-scenario/bob/shared-with-alice.txt.acl +15 -0
  343. package/test/resources/accounts-scenario/charlie/db/oidc/op/clients/_key_7c634dfe325475cc8750e19c72acf6d9.json +1 -0
  344. package/test/resources/accounts-scenario/charlie/db/oidc/op/provider.json +759 -0
  345. package/test/resources/accounts-scenario/charlie/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A5002.json +1 -0
  346. package/test/resources/accounts-scenario/charlie/profile/card$.ttl +5 -0
  347. package/test/resources/accounts-strict-origin-off/alice/db/oidc/op/clients/_key_3f1cecaefd21253767f6e047bd9b572f.json +1 -0
  348. package/test/resources/accounts-strict-origin-off/alice/db/oidc/op/provider.json +763 -0
  349. package/test/resources/accounts-strict-origin-off/alice/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7010.json +1 -0
  350. package/test/resources/accounts-strict-origin-off/alice/private-for-alice.txt +1 -0
  351. package/test/resources/accounts-strict-origin-off/alice/private-for-alice.txt.acl +12 -0
  352. package/test/resources/accounts-strict-origin-off/alice/profile/card$.ttl +10 -0
  353. package/test/resources/accounts-strict-origin-off/bob/db/oidc/op/clients/_key_a17f603b5907c97a5fac61a2eea7ecb2.json +1 -0
  354. package/test/resources/accounts-strict-origin-off/bob/db/oidc/op/provider.json +763 -0
  355. package/test/resources/accounts-strict-origin-off/bob/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7011.json +1 -0
  356. package/test/resources/accounts-strict-origin-off/bob/shared-with-alice.txt +1 -0
  357. package/test/resources/accounts-strict-origin-off/bob/shared-with-alice.txt.acl +15 -0
  358. package/test/resources/acl-tls/config/templates/emails/delete-account.js +49 -0
  359. package/test/resources/acl-tls/config/templates/emails/invalid-username.js +30 -0
  360. package/test/resources/acl-tls/config/templates/emails/reset-password.js +49 -0
  361. package/test/resources/acl-tls/config/templates/emails/welcome.js +39 -0
  362. package/test/resources/acl-tls/config/templates/new-account/favicon.ico +0 -0
  363. package/test/resources/acl-tls/config/templates/new-account/favicon.ico.acl +26 -0
  364. package/test/resources/acl-tls/config/templates/new-account/profile/card$.ttl +26 -0
  365. package/test/resources/acl-tls/config/templates/new-account/robots.txt +3 -0
  366. package/test/resources/acl-tls/config/templates/new-account/robots.txt.acl +26 -0
  367. package/test/resources/acl-tls/config/templates/new-account/settings/prefs.ttl +15 -0
  368. package/test/resources/acl-tls/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
  369. package/test/resources/acl-tls/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
  370. package/test/resources/acl-tls/config/templates/new-account/settings/publicTypeIndex.ttl.acl +25 -0
  371. package/test/resources/acl-tls/config/templates/new-account/settings/serverSide.ttl.acl +13 -0
  372. package/test/resources/acl-tls/config/templates/new-account/settings/serverSide.ttl.inactive +12 -0
  373. package/test/resources/acl-tls/config/templates/server/favicon.ico +0 -0
  374. package/test/resources/acl-tls/config/templates/server/favicon.ico.acl +15 -0
  375. package/test/resources/acl-tls/config/templates/server/index.html +55 -0
  376. package/test/resources/acl-tls/config/templates/server/robots.txt +3 -0
  377. package/test/resources/acl-tls/config/templates/server/robots.txt.acl +15 -0
  378. package/test/resources/acl-tls/config/views/account/account-deleted.hbs +17 -0
  379. package/test/resources/acl-tls/config/views/account/delete-confirm.hbs +51 -0
  380. package/test/resources/acl-tls/config/views/account/delete-link-sent.hbs +17 -0
  381. package/test/resources/acl-tls/config/views/account/delete.hbs +51 -0
  382. package/test/resources/acl-tls/config/views/account/invalid-username.hbs +22 -0
  383. package/test/resources/acl-tls/config/views/account/register-disabled.hbs +6 -0
  384. package/test/resources/acl-tls/config/views/account/register-form.hbs +147 -0
  385. package/test/resources/acl-tls/config/views/account/register.hbs +24 -0
  386. package/test/resources/acl-tls/config/views/auth/auth-hidden-fields.hbs +8 -0
  387. package/test/resources/acl-tls/config/views/auth/change-password.hbs +58 -0
  388. package/test/resources/acl-tls/config/views/auth/goodbye.hbs +23 -0
  389. package/test/resources/acl-tls/config/views/auth/login-required.hbs +34 -0
  390. package/test/resources/acl-tls/config/views/auth/login-tls.hbs +11 -0
  391. package/test/resources/acl-tls/config/views/auth/login-username-password.hbs +28 -0
  392. package/test/resources/acl-tls/config/views/auth/login.hbs +55 -0
  393. package/test/resources/acl-tls/config/views/auth/no-permission.hbs +29 -0
  394. package/test/resources/acl-tls/config/views/auth/password-changed.hbs +27 -0
  395. package/test/resources/acl-tls/config/views/auth/reset-link-sent.hbs +21 -0
  396. package/test/resources/acl-tls/config/views/auth/reset-password.hbs +52 -0
  397. package/test/resources/acl-tls/config/views/auth/sharing.hbs +49 -0
  398. package/test/resources/acl-tls/config/views/shared/create-account.hbs +8 -0
  399. package/test/resources/acl-tls/config/views/shared/error.hbs +5 -0
  400. package/test/resources/acl-tls/localhost/favicon.ico +0 -0
  401. package/test/resources/acl-tls/localhost/favicon.ico.acl +15 -0
  402. package/test/resources/acl-tls/localhost/index.html +48 -0
  403. package/test/resources/acl-tls/localhost/robots.txt +3 -0
  404. package/test/resources/acl-tls/localhost/robots.txt.acl +15 -0
  405. package/test/resources/acl-tls/tim.localhost/append-acl/abc.ttl +1 -0
  406. package/test/resources/acl-tls/tim.localhost/append-acl/abc.ttl.acl +8 -0
  407. package/test/resources/acl-tls/tim.localhost/append-acl/abc2.ttl +1 -0
  408. package/test/resources/acl-tls/tim.localhost/append-acl/abc2.ttl.acl +8 -0
  409. package/test/resources/acl-tls/tim.localhost/fake-account/hello.html +9 -0
  410. package/test/resources/acl-tls/tim.localhost/no-acl/test-file.html +1 -0
  411. package/test/resources/acl-tls/tim.localhost/profile/card$.ttl +17 -0
  412. package/test/resources/acl-tls/write-acl/test-file$.ttl +1 -0
  413. package/test/resources/auth-proxy/index.html +0 -0
  414. package/test/resources/auth-proxy/index.html.acl +0 -0
  415. package/test/resources/config/templates/emails/delete-account.js +49 -0
  416. package/test/resources/config/templates/emails/delete-account.mjs +31 -0
  417. package/test/resources/config/templates/emails/invalid-username.js +30 -0
  418. package/test/resources/config/templates/emails/invalid-username.mjs +27 -0
  419. package/test/resources/config/templates/emails/reset-password.js +49 -0
  420. package/test/resources/config/templates/emails/reset-password.mjs +31 -0
  421. package/test/resources/config/templates/emails/welcome.js +39 -0
  422. package/test/resources/config/templates/emails/welcome.mjs +23 -0
  423. package/test/resources/config/templates/new-account/favicon.ico +0 -0
  424. package/test/resources/config/templates/new-account/favicon.ico.acl +26 -0
  425. package/test/resources/config/templates/new-account/profile/card$.ttl +26 -0
  426. package/test/resources/config/templates/new-account/robots.txt +3 -0
  427. package/test/resources/config/templates/new-account/robots.txt.acl +26 -0
  428. package/test/resources/config/templates/new-account/settings/prefs.ttl +15 -0
  429. package/test/resources/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
  430. package/test/resources/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
  431. package/test/resources/config/templates/new-account/settings/publicTypeIndex.ttl.acl +25 -0
  432. package/test/resources/config/templates/new-account/settings/serverSide.ttl.acl +13 -0
  433. package/test/resources/config/templates/new-account/settings/serverSide.ttl.inactive +12 -0
  434. package/test/resources/config/templates/server/favicon.ico +0 -0
  435. package/test/resources/config/templates/server/favicon.ico.acl +15 -0
  436. package/test/resources/config/templates/server/index.html +54 -0
  437. package/test/resources/config/templates/server/robots.txt +3 -0
  438. package/test/resources/config/templates/server/robots.txt.acl +15 -0
  439. package/test/resources/config/views/account/account-deleted.hbs +17 -0
  440. package/test/resources/config/views/account/delete-confirm.hbs +51 -0
  441. package/test/resources/config/views/account/delete-link-sent.hbs +17 -0
  442. package/test/resources/config/views/account/delete.hbs +51 -0
  443. package/test/resources/config/views/account/invalid-username.hbs +22 -0
  444. package/test/resources/config/views/account/register-disabled.hbs +6 -0
  445. package/test/resources/config/views/account/register-form.hbs +133 -0
  446. package/test/resources/config/views/account/register.hbs +24 -0
  447. package/test/resources/config/views/auth/auth-hidden-fields.hbs +8 -0
  448. package/test/resources/config/views/auth/change-password.hbs +58 -0
  449. package/test/resources/config/views/auth/goodbye.hbs +23 -0
  450. package/test/resources/config/views/auth/login-required.hbs +34 -0
  451. package/test/resources/config/views/auth/login-tls.hbs +11 -0
  452. package/test/resources/config/views/auth/login-username-password.hbs +28 -0
  453. package/test/resources/config/views/auth/login.hbs +55 -0
  454. package/test/resources/config/views/auth/no-permission.hbs +29 -0
  455. package/test/resources/config/views/auth/password-changed.hbs +27 -0
  456. package/test/resources/config/views/auth/reset-link-sent.hbs +21 -0
  457. package/test/resources/config/views/auth/reset-password.hbs +52 -0
  458. package/test/resources/config/views/auth/sharing.hbs +49 -0
  459. package/test/resources/config/views/shared/create-account.hbs +8 -0
  460. package/test/resources/config/views/shared/error.hbs +5 -0
  461. package/test/resources/empty.spatch +0 -0
  462. package/test/resources/errorPages/401.html +5 -0
  463. package/test/resources/errorPages/403.html +5 -0
  464. package/test/resources/errorPages/404.html +5 -0
  465. package/test/resources/errorPages/405.html +5 -0
  466. package/test/resources/errorPages/415.html +5 -0
  467. package/test/resources/errorPages/500.html +5 -0
  468. package/test/resources/example_spkac.cnf +1 -0
  469. package/test/resources/external-servers/example.com/jwks.json +81 -0
  470. package/test/resources/external-servers/example.com/openid-configuration.json +53 -0
  471. package/test/resources/favicon.ico +0 -0
  472. package/test/resources/favicon.ico.acl +15 -0
  473. package/test/resources/headers/index.html +0 -0
  474. package/test/resources/headers/public-ra +0 -0
  475. package/test/resources/headers/public-ra.acl +7 -0
  476. package/test/resources/headers/user-rw-public-r +0 -0
  477. package/test/resources/headers/user-rw-public-r.acl +12 -0
  478. package/test/resources/headers/user-rwac-public-0 +0 -0
  479. package/test/resources/headers/user-rwac-public-0.acl +7 -0
  480. package/test/resources/hello.html +3 -0
  481. package/test/resources/invalid1.ttl +13 -0
  482. package/test/resources/invalid2.ttl +9 -0
  483. package/test/resources/ldpatch-example-final.ttl +23 -0
  484. package/test/resources/ldpatch-example-initial.ttl +22 -0
  485. package/test/resources/ldpatch-example-patch-1.spatch +8 -0
  486. package/test/resources/ldpatch-example-patch-2.spatch +12 -0
  487. package/test/resources/ldpatch-example-patch-3.spatch +14 -0
  488. package/test/resources/ldpatch-example-patch.ldpatch +25 -0
  489. package/test/resources/ldpatch-example-patch.spatch +24 -0
  490. package/test/resources/lennon.jsonld +7 -0
  491. package/test/resources/lfs-0.sparql +9 -0
  492. package/test/resources/lfs-1-final.json +10 -0
  493. package/test/resources/lfs-1.sparql +11 -0
  494. package/test/resources/messaging-scenario/user1.databox.me/profile/card +21 -0
  495. package/test/resources/nicola.jpg +0 -0
  496. package/test/resources/patch/append-only.ttl +2 -0
  497. package/test/resources/patch/append-only.ttl.acl +6 -0
  498. package/test/resources/patch/favicon.ico +0 -0
  499. package/test/resources/patch/favicon.ico.acl +15 -0
  500. package/test/resources/patch/index.html +0 -0
  501. package/test/resources/patch/read-append.ttl +2 -0
  502. package/test/resources/patch/read-append.ttl.acl +6 -0
  503. package/test/resources/patch/read-only.ttl +2 -0
  504. package/test/resources/patch/read-only.ttl.acl +6 -0
  505. package/test/resources/patch/read-write.ttl +2 -0
  506. package/test/resources/patch/read-write.ttl.acl +6 -0
  507. package/test/resources/patch/robots.txt +3 -0
  508. package/test/resources/patch/robots.txt.acl +15 -0
  509. package/test/resources/patch/write-only.ttl +2 -0
  510. package/test/resources/patch/write-only.ttl.acl +6 -0
  511. package/test/resources/patch-1-initial.ttl +3 -0
  512. package/test/resources/patch-2-final.ttl +2 -0
  513. package/test/resources/patch-2-initial.ttl +3 -0
  514. package/test/resources/patch-2.spatch +2 -0
  515. package/test/resources/patch-2n.spatch +2 -0
  516. package/test/resources/patch-3-final.ttl +28 -0
  517. package/test/resources/patch-4-final.ttl +29 -0
  518. package/test/resources/patch-5-final.ttl +1 -0
  519. package/test/resources/patch-5-initial.ttl +3 -0
  520. package/test/resources/patch-5.spatch +2 -0
  521. package/test/resources/put-input-2.html +13 -0
  522. package/test/resources/put-input.txt +6 -0
  523. package/test/resources/robots.txt +3 -0
  524. package/test/resources/robots.txt.acl +15 -0
  525. package/test/resources/sampleContainer/blank +0 -0
  526. package/test/resources/sampleContainer/cert.pkcs +0 -0
  527. package/test/resources/sampleContainer/example.ttl.old +1 -0
  528. package/test/resources/sampleContainer/example1.ttl +12 -0
  529. package/test/resources/sampleContainer/example2.ttl +3 -0
  530. package/test/resources/sampleContainer/example3.ttl +7 -0
  531. package/test/resources/sampleContainer/example4$.ttl +7 -0
  532. package/test/resources/sampleContainer/filename with spaces.txt +0 -0
  533. package/test/resources/sampleContainer/index.html +9 -0
  534. package/test/resources/sampleContainer/post2.ttl +6 -0
  535. package/test/resources/sampleContainer/put1.ttl +13 -0
  536. package/test/resources/sampleContainer/solid.png +0 -0
  537. package/test/resources/sampleContainer/user1.pfx +0 -0
  538. package/test/resources/sampleContainer/user2.pfx +0 -0
  539. package/test/resources/sampleContainer2/example1.ttl +10 -0
  540. package/test/resources/sampleContainer2/example2.ttl +7 -0
  541. package/test/resources/timbl.jpg +0 -0
  542. package/test/scenarios.md +23 -0
  543. package/test/surface/docker/cookie/Dockerfile +6 -0
  544. package/test/surface/docker/cookie/app/index.js +29 -0
  545. package/test/surface/docker/cookie/app/package-lock.json +13 -0
  546. package/test/surface/docker/cookie/app/package.json +14 -0
  547. package/test/surface/docker/server/Dockerfile +19 -0
  548. package/test/surface/docker/server/config/defaults.js +10 -0
  549. package/test/surface/docker/server/config/templates/emails/delete-account.js +49 -0
  550. package/test/surface/docker/server/config/templates/emails/invalid-username.js +30 -0
  551. package/test/surface/docker/server/config/templates/emails/reset-password.js +49 -0
  552. package/test/surface/docker/server/config/templates/emails/welcome.js +39 -0
  553. package/test/surface/docker/server/config/templates/new-account/favicon.ico +0 -0
  554. package/test/surface/docker/server/config/templates/new-account/favicon.ico.acl +26 -0
  555. package/test/surface/docker/server/config/templates/new-account/profile/card$.ttl +26 -0
  556. package/test/surface/docker/server/config/templates/new-account/robots.txt +3 -0
  557. package/test/surface/docker/server/config/templates/new-account/robots.txt.acl +26 -0
  558. package/test/surface/docker/server/config/templates/new-account/settings/prefs.ttl +15 -0
  559. package/test/surface/docker/server/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
  560. package/test/surface/docker/server/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
  561. package/test/surface/docker/server/config/templates/new-account/settings/publicTypeIndex.ttl.acl +25 -0
  562. package/test/surface/docker/server/config/templates/new-account/settings/serverSide.ttl.acl +13 -0
  563. package/test/surface/docker/server/config/templates/new-account/settings/serverSide.ttl.inactive +12 -0
  564. package/test/surface/docker/server/config/templates/server/favicon.ico +0 -0
  565. package/test/surface/docker/server/config/templates/server/favicon.ico.acl +15 -0
  566. package/test/surface/docker/server/config/templates/server/index.html +55 -0
  567. package/test/surface/docker/server/config/templates/server/robots.txt +3 -0
  568. package/test/surface/docker/server/config/templates/server/robots.txt.acl +15 -0
  569. package/test/surface/docker/server/config/usernames-blacklist.json +4 -0
  570. package/test/surface/docker/server/config/views/account/account-deleted.hbs +17 -0
  571. package/test/surface/docker/server/config/views/account/delete-confirm.hbs +51 -0
  572. package/test/surface/docker/server/config/views/account/delete-link-sent.hbs +17 -0
  573. package/test/surface/docker/server/config/views/account/delete.hbs +51 -0
  574. package/test/surface/docker/server/config/views/account/invalid-username.hbs +22 -0
  575. package/test/surface/docker/server/config/views/account/register-disabled.hbs +6 -0
  576. package/test/surface/docker/server/config/views/account/register-form.hbs +147 -0
  577. package/test/surface/docker/server/config/views/account/register.hbs +24 -0
  578. package/test/surface/docker/server/config/views/auth/auth-hidden-fields.hbs +8 -0
  579. package/test/surface/docker/server/config/views/auth/change-password.hbs +58 -0
  580. package/test/surface/docker/server/config/views/auth/goodbye.hbs +23 -0
  581. package/test/surface/docker/server/config/views/auth/login-required.hbs +34 -0
  582. package/test/surface/docker/server/config/views/auth/login-tls.hbs +11 -0
  583. package/test/surface/docker/server/config/views/auth/login-username-password.hbs +28 -0
  584. package/test/surface/docker/server/config/views/auth/login.hbs +55 -0
  585. package/test/surface/docker/server/config/views/auth/no-permission.hbs +29 -0
  586. package/test/surface/docker/server/config/views/auth/password-changed.hbs +27 -0
  587. package/test/surface/docker/server/config/views/auth/reset-link-sent.hbs +21 -0
  588. package/test/surface/docker/server/config/views/auth/reset-password.hbs +52 -0
  589. package/test/surface/docker/server/config/views/auth/sharing.hbs +49 -0
  590. package/test/surface/docker/server/config/views/shared/create-account.hbs +8 -0
  591. package/test/surface/docker/server/config/views/shared/error.hbs +5 -0
  592. package/test/surface/docker/server/config.json +22 -0
  593. package/test/surface/docker/server/data/favicon.ico +0 -0
  594. package/test/surface/docker/server/data/favicon.ico.acl +26 -0
  595. package/test/surface/docker/server/data/index.html +48 -0
  596. package/test/surface/docker/server/data/profile/card$.ttl +31 -0
  597. package/test/surface/docker/server/data/robots.txt +3 -0
  598. package/test/surface/docker/server/data/robots.txt.acl +26 -0
  599. package/test/surface/docker/server/data/settings/prefs.ttl +15 -0
  600. package/test/surface/docker/server/data/settings/privateTypeIndex.ttl +4 -0
  601. package/test/surface/docker/server/data/settings/publicTypeIndex.ttl +4 -0
  602. package/test/surface/docker/server/data/settings/publicTypeIndex.ttl.acl +25 -0
  603. package/test/surface/docker/server/data/settings/serverSide.ttl +0 -0
  604. package/test/surface/docker/server/data/settings/serverSide.ttl.acl +13 -0
  605. package/test/surface/docker/server/data/settings/serverSide.ttl.inactive +12 -0
  606. package/test/surface/docker/server/env.list +4 -0
  607. package/test/surface/docker/solid-crud/Dockerfile +4 -0
  608. package/test/surface/docker/web-access-control/Dockerfile +1 -0
  609. package/test/surface/docker/webid-provider/Dockerfile +1 -0
  610. package/test/surface/run-solid-test-suite.sh +75 -0
  611. package/test/surface/server-env.list +5 -0
  612. package/test/surface/solid-crud-tests-env.list +5 -0
  613. package/test/surface/thirdparty-config.json +23 -0
  614. package/test/surface/thirdparty-env.list +6 -0
  615. package/test/surface/web-access-control-tests-env.list +6 -0
  616. package/test/surface/webid-provider-tests-env.list +4 -0
  617. package/test/test-helpers.mjs +63 -0
  618. package/test/unit/account-manager-test.mjs +610 -0
  619. package/test/unit/account-template-test.mjs +59 -0
  620. package/test/unit/acl-checker-test.mjs +51 -0
  621. package/test/unit/add-cert-request-test.mjs +120 -0
  622. package/test/unit/auth-handlers-test.mjs +108 -0
  623. package/test/unit/auth-proxy-test.mjs +224 -0
  624. package/test/unit/auth-request-test.mjs +96 -0
  625. package/test/unit/authenticator-test.mjs +34 -0
  626. package/test/unit/blacklist-service-test.mjs +49 -0
  627. package/test/unit/create-account-request-test.mjs +306 -0
  628. package/test/unit/delete-account-confirm-request-test.mjs +234 -0
  629. package/test/unit/delete-account-request-test.mjs +180 -0
  630. package/test/unit/email-service-test.mjs +166 -0
  631. package/test/unit/email-welcome-test.mjs +81 -0
  632. package/test/unit/error-pages-test.mjs +100 -0
  633. package/test/unit/esm-imports.test.mjs +149 -0
  634. package/test/unit/force-user-test.mjs +73 -0
  635. package/test/unit/getAvailableUrl-test.mjs +30 -0
  636. package/test/unit/getTrustedOrigins-test.mjs +20 -0
  637. package/test/unit/login-request-test.mjs +246 -0
  638. package/test/unit/oidc-manager-test.mjs +50 -0
  639. package/test/unit/password-authenticator-test.mjs +125 -0
  640. package/test/unit/password-change-request-test.mjs +259 -0
  641. package/test/unit/password-reset-email-request-test.mjs +234 -0
  642. package/test/unit/resource-mapper-test.mjs +673 -0
  643. package/test/unit/solid-host-test.mjs +119 -0
  644. package/test/unit/tls-authenticator-test.mjs +174 -0
  645. package/test/unit/token-service-test.mjs +82 -0
  646. package/test/unit/user-account-test.mjs +38 -0
  647. package/test/unit/user-accounts-api-test.mjs +59 -0
  648. package/test/unit/user-utils-test.mjs +64 -0
  649. package/test/unit/utils-test.mjs +114 -0
  650. package/test/utils/index.mjs +167 -0
  651. package/test/utils.mjs +205 -0
  652. package/test/validate-turtle.mjs +43 -0
  653. package/.github/workflows/ci.yml +0 -113
  654. package/.nvmrc +0 -1
  655. package/.snyk +0 -35
  656. package/bin/lib/cli-utils.js +0 -85
  657. package/bin/lib/cli.js +0 -39
  658. package/bin/solid.js +0 -3
  659. package/default-templates/new-account/.acl +0 -26
  660. package/default-templates/new-account/.meta +0 -5
  661. package/default-templates/new-account/.well-known/.acl +0 -19
  662. package/default-templates/new-account/private/.acl +0 -10
  663. package/default-templates/new-account/profile/.acl +0 -19
  664. package/default-templates/new-account/public/.acl +0 -19
  665. package/default-templates/new-account/settings/.acl +0 -20
  666. package/index.js +0 -3
  667. package/lib/api/authn/index.js +0 -5
  668. package/lib/api/index.js +0 -6
  669. package/lib/common/template-utils.js +0 -50
  670. package/lib/debug.js +0 -18
  671. package/lib/ldp-copy.js +0 -73
  672. package/lib/ldp-middleware.js +0 -40
  673. package/lib/models/account-manager.js +0 -604
  674. package/lib/models/account-template.js +0 -156
  675. package/lib/models/authenticator.js +0 -337
  676. package/lib/models/oidc-manager.js +0 -53
  677. package/lib/models/solid-host.js +0 -131
  678. package/lib/models/user-account.js +0 -113
  679. package/lib/models/webid-tls-certificate.js +0 -184
  680. package/lib/requests/add-cert-request.js +0 -138
  681. package/lib/requests/auth-request.js +0 -234
  682. package/lib/requests/delete-account-confirm-request.js +0 -170
  683. package/lib/requests/login-request.js +0 -205
  684. package/lib/services/email-service.js +0 -162
  685. package/lib/webid/tls/index.js +0 -185
@@ -1,468 +1,265 @@
1
- 'use strict'
2
-
3
- const AuthRequest = require('./auth-request')
4
- const WebIdTlsCertificate = require('../models/webid-tls-certificate')
5
- const debug = require('../debug').accounts
6
- const blacklistService = require('../services/blacklist-service')
7
- const { isValidUsername } = require('../common/user-utils')
8
-
9
- /**
10
- * Represents a 'create new user account' http request (either a POST to the
11
- * `/accounts/api/new` endpoint, or a GET to `/register`).
12
- *
13
- * Intended just for browser-based requests; to create new user accounts from
14
- * a command line, use the `AccountManager` class directly.
15
- *
16
- * This is an abstract class, subclasses are created (for example
17
- * `CreateOidcAccountRequest`) depending on which Authentication mode the server
18
- * is running in.
19
- *
20
- * @class CreateAccountRequest
21
- */
22
- class CreateAccountRequest extends AuthRequest {
23
- /**
24
- * @param [options={}] {Object}
25
- * @param [options.accountManager] {AccountManager}
26
- * @param [options.userAccount] {UserAccount}
27
- * @param [options.session] {Session} e.g. req.session
28
- * @param [options.response] {HttpResponse}
29
- * @param [options.returnToUrl] {string} If present, redirect the agent to
30
- * this url on successful account creation
31
- * @param [options.enforceToc] {boolean} Whether or not to enforce the service provider's T&C
32
- * @param [options.tocUri] {string} URI to the service provider's T&C
33
- * @param [options.acceptToc] {boolean} Whether or not user has accepted T&C
34
- */
35
- constructor (options) {
36
- super(options)
37
-
38
- this.username = options.username
39
- this.userAccount = options.userAccount
40
- this.acceptToc = options.acceptToc
41
- this.disablePasswordChecks = options.disablePasswordChecks
1
+ import AuthRequest from './auth-request.mjs'
2
+ import WebIdTlsCertificate from '../models/webid-tls-certificate.mjs'
3
+ import debugModule from '../debug.mjs'
4
+ import blacklistService from '../services/blacklist-service.mjs'
5
+ import { isValidUsername } from '../common/user-utils.mjs'
6
+
7
+ const debug = debugModule.accounts
8
+
9
+ export class CreateAccountRequest extends AuthRequest {
10
+ constructor (options) {
11
+ super(options)
12
+ this.username = options.username
13
+ this.userAccount = options.userAccount
14
+ this.acceptToc = options.acceptToc
15
+ this.disablePasswordChecks = options.disablePasswordChecks
42
16
  }
43
-
44
- /**
45
- * Factory method, creates an appropriate CreateAccountRequest subclass from
46
- * an HTTP request (browser form submit), depending on the authn method.
47
- *
48
- * @param req
49
- * @param res
50
- *
51
- * @throws {Error} If required parameters are missing (via
52
- * `userAccountFrom()`), or it encounters an unsupported authentication
53
- * scheme.
54
- *
55
- * @return {CreateOidcAccountRequest|CreateTlsAccountRequest}
56
- */
57
- static fromParams (req, res) {
58
- const options = AuthRequest.requestOptions(req, res)
59
-
60
- const locals = req.app.locals
61
- const authMethod = locals.authMethod
62
- const accountManager = locals.accountManager
63
-
64
- const body = req.body || {}
65
-
66
- if (body.username) {
67
- options.username = body.username.toLowerCase()
68
- options.userAccount = accountManager.userAccountFrom(body)
69
- }
70
-
71
- options.enforceToc = locals.enforceToc
72
- options.tocUri = locals.tocUri
73
- options.disablePasswordChecks = locals.disablePasswordChecks
74
-
75
- switch (authMethod) {
76
- case 'oidc':
77
- options.password = body.password
78
- return new CreateOidcAccountRequest(options)
79
- case 'tls':
80
- options.spkac = body.spkac
81
- return new CreateTlsAccountRequest(options)
82
- default:
83
- throw new TypeError('Unsupported authentication scheme')
84
- }
17
+
18
+ static fromParams (req, res) {
19
+ const options = AuthRequest.requestOptions(req, res)
20
+ const locals = req.app.locals
21
+ const authMethod = locals.authMethod
22
+ const accountManager = locals.accountManager
23
+ const body = req.body || {}
24
+ if (body.username) {
25
+ options.username = body.username.toLowerCase()
26
+ options.userAccount = accountManager.userAccountFrom(body)
27
+ }
28
+ options.enforceToc = locals.enforceToc
29
+ options.tocUri = locals.tocUri
30
+ options.disablePasswordChecks = locals.disablePasswordChecks
31
+ switch (authMethod) {
32
+ case 'oidc':
33
+ options.password = body.password
34
+ return new CreateOidcAccountRequest(options)
35
+ case 'tls':
36
+ options.spkac = body.spkac
37
+ return new CreateTlsAccountRequest(options)
38
+ default:
39
+ throw new TypeError('Unsupported authentication scheme')
40
+ }
85
41
  }
86
-
87
- static async post (req, res) {
88
- const request = CreateAccountRequest.fromParams(req, res)
89
-
90
- try {
91
- request.validate()
92
- await request.createAccount()
93
- } catch (error) {
94
- request.error(error, req.body)
95
- }
42
+
43
+ static async post (req, res) {
44
+ const request = CreateAccountRequest.fromParams(req, res)
45
+ try {
46
+ request.validate()
47
+ await request.createAccount()
48
+ } catch (error) {
49
+ request.error(error, req.body)
50
+ }
96
51
  }
97
-
98
- static get (req, res) {
99
- const request = CreateAccountRequest.fromParams(req, res)
100
-
101
- return Promise.resolve()
102
- .then(() => request.renderForm())
103
- .catch(error => request.error(error))
52
+
53
+ static get (req, res) {
54
+ const request = CreateAccountRequest.fromParams(req, res)
55
+ return Promise.resolve()
56
+ .then(() => request.renderForm())
57
+ .catch(error => request.error(error))
104
58
  }
105
-
106
- /**
107
- * Renders the Register form
108
- */
109
- renderForm (error, data = {}) {
110
- const authMethod = this.accountManager.authMethod
111
-
112
- const params = Object.assign({}, this.authQueryParams, {
113
- enforceToc: this.enforceToc,
114
- loginUrl: this.loginUrl(),
115
- multiuser: this.accountManager.multiuser,
116
- registerDisabled: authMethod === 'tls',
117
- returnToUrl: this.returnToUrl,
118
- tocUri: this.tocUri,
119
- disablePasswordChecks: this.disablePasswordChecks,
120
- username: data.username,
121
- name: data.name,
122
- email: data.email,
123
- acceptToc: data.acceptToc
124
- })
125
-
126
- if (error) {
127
- params.error = error.message
128
- this.response.status(error.statusCode)
129
- }
130
-
131
- this.response.render('account/register', params)
59
+
60
+ renderForm (error, data = {}) {
61
+ const authMethod = this.accountManager.authMethod
62
+ const params = Object.assign({}, this.authQueryParams, {
63
+ enforceToc: this.enforceToc,
64
+ loginUrl: this.loginUrl(),
65
+ multiuser: this.accountManager.multiuser,
66
+ registerDisabled: authMethod === 'tls',
67
+ returnToUrl: this.returnToUrl,
68
+ tocUri: this.tocUri,
69
+ disablePasswordChecks: this.disablePasswordChecks,
70
+ username: data.username,
71
+ name: data.name,
72
+ email: data.email,
73
+ acceptToc: data.acceptToc
74
+ })
75
+ if (error) {
76
+ params.error = error.message
77
+ this.response.status(error.statusCode)
78
+ }
79
+ this.response.render('account/register', params)
132
80
  }
133
-
134
- /**
135
- * Creates an account for a given user (from a POST to `/api/accounts/new`)
136
- *
137
- * @throws {Error} If errors were encountering while validating the username.
138
- *
139
- * @return {Promise<UserAccount>} Resolves with newly created account instance
140
- */
141
- async createAccount () {
142
- const userAccount = this.userAccount
143
- const accountManager = this.accountManager
144
-
145
- if (userAccount.externalWebId) {
146
- const error = new Error('Linked users not currently supported, sorry (external WebID without TLS?)')
147
- error.statusCode = 400
148
- throw error
149
- }
150
- this.cancelIfUsernameInvalid(userAccount)
151
- this.cancelIfBlacklistedUsername(userAccount)
152
- await this.cancelIfAccountExists(userAccount)
153
- await this.createAccountStorage(userAccount)
154
- await this.saveCredentialsFor(userAccount)
155
- await this.sendResponse(userAccount)
156
-
157
- // 'return' not used deliberately, no need to block and wait for email
158
- if (userAccount && userAccount.email) {
159
- debug('Sending Welcome email')
160
- accountManager.sendWelcomeEmail(userAccount)
161
- }
162
-
163
- return userAccount
81
+
82
+ async createAccount () {
83
+ const userAccount = this.userAccount
84
+ const accountManager = this.accountManager
85
+ if (userAccount.externalWebId) {
86
+ const error = new Error('Linked users not currently supported, sorry (external WebID without TLS?)')
87
+ error.statusCode = 400
88
+ throw error
89
+ }
90
+ this.cancelIfUsernameInvalid(userAccount)
91
+ this.cancelIfBlacklistedUsername(userAccount)
92
+ await this.cancelIfAccountExists(userAccount)
93
+ await this.createAccountStorage(userAccount)
94
+ await this.saveCredentialsFor(userAccount)
95
+ await this.sendResponse(userAccount)
96
+ if (userAccount && userAccount.email) {
97
+ debug('Sending Welcome email')
98
+ accountManager.sendWelcomeEmail(userAccount)
99
+ }
100
+ return userAccount
164
101
  }
165
-
166
- /**
167
- * Rejects with an error if an account already exists, otherwise simply
168
- * resolves with the account.
169
- *
170
- * @param userAccount {UserAccount} Instance of the account to be created
171
- *
172
- * @return {Promise<UserAccount>} Chainable
173
- */
174
- cancelIfAccountExists (userAccount) {
175
- const accountManager = this.accountManager
176
-
177
- return accountManager.accountExists(userAccount.username)
178
- .then(exists => {
179
- if (exists) {
180
- debug(`Canceling account creation, ${userAccount.webId} already exists`)
181
- const error = new Error('Account creation failed')
182
- error.status = 400
183
- throw error
184
- }
185
- // Account does not exist, proceed
186
- return userAccount
187
- })
102
+
103
+ cancelIfAccountExists (userAccount) {
104
+ const accountManager = this.accountManager
105
+ return accountManager.accountExists(userAccount.username)
106
+ .then(exists => {
107
+ if (exists) {
108
+ debug(`Canceling account creation, ${userAccount.webId} already exists`)
109
+ const error = new Error('Account creation failed')
110
+ error.status = 400
111
+ throw error
112
+ }
113
+ return userAccount
114
+ })
188
115
  }
189
-
190
- /**
191
- * Creates the root storage folder, initializes default containers and
192
- * resources for the new account.
193
- *
194
- * @param userAccount {UserAccount} Instance of the account to be created
195
- *
196
- * @throws {Error} If errors were encountering while creating new account
197
- * resources.
198
- *
199
- * @return {Promise<UserAccount>} Chainable
200
- */
201
- createAccountStorage (userAccount) {
202
- return this.accountManager.createAccountFor(userAccount)
203
- .catch(error => {
204
- error.message = 'Error creating account storage: ' + error.message
205
- throw error
206
- })
207
- .then(() => {
208
- debug('Account storage resources created')
209
- return userAccount
210
- })
116
+
117
+ createAccountStorage (userAccount) {
118
+ return this.accountManager.createAccountFor(userAccount)
119
+ .catch(error => {
120
+ error.message = 'Error creating account storage: ' + error.message
121
+ throw error
122
+ })
123
+ .then(() => {
124
+ debug('Account storage resources created')
125
+ return userAccount
126
+ })
211
127
  }
212
-
213
- /**
214
- * Check if a username is a valid slug.
215
- *
216
- * @param userAccount {UserAccount} Instance of the account to be created
217
- *
218
- * @throws {Error} If errors were encountering while validating the
219
- * username.
220
- *
221
- * @return {UserAccount} Chainable
222
- */
223
- cancelIfUsernameInvalid (userAccount) {
224
- if (!userAccount.username || !isValidUsername(userAccount.username)) {
225
- debug('Invalid username ' + userAccount.username)
226
- const error = new Error('Invalid username (contains invalid characters)')
227
- error.status = 400
228
- throw error
229
- }
230
-
231
- return userAccount
128
+
129
+ cancelIfUsernameInvalid (userAccount) {
130
+ if (!userAccount.username || !isValidUsername(userAccount.username)) {
131
+ debug('Invalid username ' + userAccount.username)
132
+ const error = new Error('Invalid username (contains invalid characters)')
133
+ error.status = 400
134
+ throw error
135
+ }
136
+ return userAccount
232
137
  }
233
-
234
- /**
235
- * Check if a username is a valid slug.
236
- *
237
- * @param userAccount {UserAccount} Instance of the account to be created
238
- *
239
- * @throws {Error} If username is blacklisted
240
- *
241
- * @return {UserAccount} Chainable
242
- */
243
- cancelIfBlacklistedUsername (userAccount) {
244
- const validUsername = blacklistService.validate(userAccount.username)
245
- if (!validUsername) {
246
- debug('Invalid username ' + userAccount.username)
247
- const error = new Error('Invalid username (username is blacklisted)')
248
- error.status = 400
249
- throw error
250
- }
251
-
252
- return userAccount
138
+
139
+ cancelIfBlacklistedUsername (userAccount) {
140
+ const validUsername = blacklistService.validate(userAccount.username)
141
+ if (!validUsername) {
142
+ debug('Invalid username ' + userAccount.username)
143
+ const error = new Error('Invalid username (username is blacklisted)')
144
+ error.status = 400
145
+ throw error
146
+ }
147
+ return userAccount
148
+ }
149
+ }
150
+
151
+ export class CreateOidcAccountRequest extends CreateAccountRequest {
152
+ constructor (options) {
153
+ super(options)
154
+ this.password = options.password
253
155
  }
254
- }
255
-
256
- /**
257
- * Models a Create Account request for a server using WebID-OIDC (OpenID Connect)
258
- * as a primary authentication mode. Handles saving user credentials to the
259
- * `UserStore`, etc.
260
- *
261
- * @class CreateOidcAccountRequest
262
- * @extends CreateAccountRequest
263
- */
264
- class CreateOidcAccountRequest extends CreateAccountRequest {
265
- /**
266
- * @constructor
267
- *
268
- * @param [options={}] {Object} See `CreateAccountRequest` constructor docstring
269
- * @param [options.password] {string} Password, as entered by the user at signup
270
- * @param [options.acceptToc] {boolean} Whether or not user has accepted T&C
271
- */
272
- constructor (options) {
273
- super(options)
274
-
275
- this.password = options.password
156
+
157
+ validate () {
158
+ let error
159
+ if (!this.username) {
160
+ error = new Error('Username required')
161
+ error.statusCode = 400
162
+ throw error
163
+ }
164
+ if (!this.password) {
165
+ error = new Error('Password required')
166
+ error.statusCode = 400
167
+ throw error
168
+ }
169
+ if (this.enforceToc && !this.acceptToc) {
170
+ error = new Error('Accepting Terms & Conditions is required for this service')
171
+ error.statusCode = 400
172
+ throw error
173
+ }
276
174
  }
277
-
278
- /**
279
- * Validates the Login request (makes sure required parameters are present),
280
- * and throws an error if not.
281
- *
282
- * @throws {Error} If missing required params
283
- */
284
- validate () {
285
- let error
286
-
287
- if (!this.username) {
288
- error = new Error('Username required')
289
- error.statusCode = 400
290
- throw error
291
- }
292
-
293
- if (!this.password) {
294
- error = new Error('Password required')
295
- error.statusCode = 400
296
- throw error
297
- }
298
-
299
- if (this.enforceToc && !this.acceptToc) {
300
- error = new Error('Accepting Terms & Conditions is required for this service')
301
- error.statusCode = 400
302
- throw error
303
- }
175
+
176
+ saveCredentialsFor (userAccount) {
177
+ return this.userStore.createUser(userAccount, this.password)
178
+ .then(() => {
179
+ debug('User credentials stored')
180
+ return userAccount
181
+ })
304
182
  }
305
-
306
- /**
307
- * Generate salted password hash, etc.
308
- *
309
- * @param userAccount {UserAccount}
310
- *
311
- * @return {Promise<null|Graph>}
312
- */
313
- saveCredentialsFor (userAccount) {
314
- return this.userStore.createUser(userAccount, this.password)
315
- .then(() => {
316
- debug('User credentials stored')
317
- return userAccount
318
- })
183
+
184
+ sendResponse (userAccount) {
185
+ const redirectUrl = this.returnToUrl || userAccount.podUri
186
+ this.response.redirect(redirectUrl)
187
+ return userAccount
188
+ }
189
+ }
190
+
191
+ export class CreateTlsAccountRequest extends CreateAccountRequest {
192
+ constructor (options) {
193
+ super(options)
194
+ this.spkac = options.spkac
195
+ this.certificate = null
319
196
  }
320
-
321
- /**
322
- * Generate the response for the account creation
323
- *
324
- * @param userAccount {UserAccount}
325
- *
326
- * @return {UserAccount}
327
- */
328
- sendResponse (userAccount) {
329
- const redirectUrl = this.returnToUrl || userAccount.podUri
330
- this.response.redirect(redirectUrl)
331
-
332
- return userAccount
197
+
198
+ validate () {
199
+ let error
200
+ if (!this.username) {
201
+ error = new Error('Username required')
202
+ error.statusCode = 400
203
+ throw error
204
+ }
205
+ if (this.enforceToc && !this.acceptToc) {
206
+ error = new Error('Accepting Terms & Conditions is required for this service')
207
+ error.statusCode = 400
208
+ throw error
209
+ }
333
210
  }
334
- }
335
-
336
- /**
337
- * Models a Create Account request for a server using WebID-TLS as primary
338
- * authentication mode. Handles generating and saving a TLS certificate, etc.
339
- *
340
- * @class CreateTlsAccountRequest
341
- * @extends CreateAccountRequest
342
- */
343
- class CreateTlsAccountRequest extends CreateAccountRequest {
344
- /**
345
- * @constructor
346
- *
347
- * @param [options={}] {Object} See `CreateAccountRequest` constructor docstring
348
- * @param [options.spkac] {string}
349
- * @param [options.acceptToc] {boolean} Whether or not user has accepted T&C
350
- */
351
- constructor (options) {
352
- super(options)
353
-
354
- this.spkac = options.spkac
355
- this.certificate = null
211
+
212
+ generateTlsCertificate (userAccount) {
213
+ if (!this.spkac) {
214
+ debug('Missing spkac param, not generating cert during account creation')
215
+ return Promise.resolve(userAccount)
216
+ }
217
+ return Promise.resolve()
218
+ .then(() => {
219
+ const host = this.accountManager.host
220
+ return WebIdTlsCertificate.fromSpkacPost(this.spkac, userAccount, host)
221
+ .generateCertificate()
222
+ })
223
+ .catch(err => {
224
+ err.status = 400
225
+ err.message = 'Error generating a certificate: ' + err.message
226
+ throw err
227
+ })
228
+ .then(certificate => {
229
+ debug('Generated a WebID-TLS certificate as part of account creation')
230
+ this.certificate = certificate
231
+ return userAccount
232
+ })
356
233
  }
357
-
358
- /**
359
- * Validates the Signup request (makes sure required parameters are present),
360
- * and throws an error if not.
361
- *
362
- * @throws {Error} If missing required params
363
- */
364
- validate () {
365
- let error
366
-
367
- if (!this.username) {
368
- error = new Error('Username required')
369
- error.statusCode = 400
370
- throw error
371
- }
372
-
373
- if (this.enforceToc && !this.acceptToc) {
374
- error = new Error('Accepting Terms & Conditions is required for this service')
375
- error.statusCode = 400
376
- throw error
377
- }
234
+
235
+ saveCredentialsFor (userAccount) {
236
+ return this.generateTlsCertificate(userAccount)
237
+ .then(userAccount => {
238
+ if (this.certificate) {
239
+ return this.accountManager
240
+ .addCertKeyToProfile(this.certificate, userAccount)
241
+ .then(() => {
242
+ debug('Saved generated WebID-TLS certificate to profile')
243
+ })
244
+ } else {
245
+ debug('No certificate generated, no need to save to profile')
246
+ }
247
+ })
248
+ .then(() => {
249
+ return userAccount
250
+ })
378
251
  }
379
-
380
- /**
381
- * Generates a new X.509v3 RSA certificate (if `spkac` was passed in) and
382
- * adds it to the user account. Used for storage in an agent's WebID
383
- * Profile, for WebID-TLS authentication.
384
- *
385
- * @param userAccount {UserAccount}
386
- * @param userAccount.webId {string} An agent's WebID URI
387
- *
388
- * @throws {Error} HTTP 400 error if errors were encountering during
389
- * certificate generation.
390
- *
391
- * @return {Promise<UserAccount>} Chainable
392
- */
393
- generateTlsCertificate (userAccount) {
394
- if (!this.spkac) {
395
- debug('Missing spkac param, not generating cert during account creation')
396
- return Promise.resolve(userAccount)
397
- }
398
-
399
- return Promise.resolve()
400
- .then(() => {
401
- const host = this.accountManager.host
402
- return WebIdTlsCertificate.fromSpkacPost(this.spkac, userAccount, host)
403
- .generateCertificate()
404
- })
405
- .catch(err => {
406
- err.status = 400
407
- err.message = 'Error generating a certificate: ' + err.message
408
- throw err
409
- })
410
- .then(certificate => {
411
- debug('Generated a WebID-TLS certificate as part of account creation')
412
- this.certificate = certificate
413
- return userAccount
414
- })
415
- }
416
-
417
- /**
418
- * Generates a WebID-TLS certificate and saves it to the user's profile
419
- * graph.
420
- *
421
- * @param userAccount {UserAccount}
422
- *
423
- * @return {Promise<UserAccount>} Chainable
424
- */
425
- saveCredentialsFor (userAccount) {
426
- return this.generateTlsCertificate(userAccount)
427
- .then(userAccount => {
428
- if (this.certificate) {
429
- return this.accountManager
430
- .addCertKeyToProfile(this.certificate, userAccount)
431
- .then(() => {
432
- debug('Saved generated WebID-TLS certificate to profile')
433
- })
434
- } else {
435
- debug('No certificate generated, no need to save to profile')
436
- }
437
- })
438
- .then(() => {
439
- return userAccount
440
- })
441
- }
442
-
443
- /**
444
- * Writes the generated TLS certificate to the http Response object.
445
- *
446
- * @param userAccount {UserAccount}
447
- *
448
- * @return {UserAccount} Chainable
449
- */
450
- sendResponse (userAccount) {
451
- const res = this.response
452
- res.set('User', userAccount.webId)
453
- res.status(200)
454
-
455
- if (this.certificate) {
456
- res.set('Content-Type', 'application/x-x509-user-cert')
457
- res.send(this.certificate.toDER())
458
- } else {
459
- res.end()
460
- }
461
-
462
- return userAccount
463
- }
464
- }
465
-
466
- module.exports = CreateAccountRequest
467
- module.exports.CreateAccountRequest = CreateAccountRequest
468
- module.exports.CreateTlsAccountRequest = CreateTlsAccountRequest
252
+
253
+ sendResponse (userAccount) {
254
+ const res = this.response
255
+ res.set('User', userAccount.webId)
256
+ res.status(200)
257
+ if (this.certificate) {
258
+ res.set('Content-Type', 'application/x-x509-user-cert')
259
+ res.send(this.certificate.toDER())
260
+ } else {
261
+ res.end()
262
+ }
263
+ return userAccount
264
+ }
265
+ }