solid-server 5.8.6 → 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.
- package/CHANGELOG.md +0 -0
- package/CONTRIBUTING.md +0 -0
- package/CONTRIBUTORS.md +0 -0
- package/Dockerfile +0 -0
- package/LICENSE.md +0 -0
- package/README.md +0 -0
- package/bin/config.json +0 -0
- package/bin/lib/cli-utils.mjs +54 -0
- package/bin/lib/cli.mjs +44 -0
- package/bin/lib/{init.js → init.mjs} +93 -94
- package/bin/lib/{invalidUsernames.js → invalidUsernames.mjs} +136 -148
- package/bin/lib/{migrateLegacyResources.js → migrateLegacyResources.mjs} +64 -69
- package/bin/lib/{options.js → options.mjs} +379 -405
- package/bin/lib/{start.js → start.mjs} +124 -148
- package/bin/lib/{updateIndex.js → updateIndex.mjs} +55 -56
- package/bin/solid +2 -2
- package/bin/solid-test +0 -0
- package/common/css/bootstrap.min.css +6 -0
- package/common/css/solid.css +0 -0
- package/common/fonts/glyphicons-halflings-regular.eot +0 -0
- package/common/fonts/glyphicons-halflings-regular.svg +0 -0
- package/common/fonts/glyphicons-halflings-regular.ttf +0 -0
- package/common/fonts/glyphicons-halflings-regular.woff +0 -0
- package/common/fonts/glyphicons-halflings-regular.woff2 +0 -0
- package/common/img/solid-emblem.svg +0 -0
- package/common/js/auth-buttons.js +0 -0
- package/common/js/auth-buttons.mjs +57 -0
- package/common/js/index-buttons.js +0 -0
- package/common/js/index-buttons.mjs +43 -0
- package/common/js/solid.js +0 -0
- package/common/js/solid.mjs +456 -0
- package/common/well-known/security.txt +0 -0
- package/config/defaults.js +0 -0
- package/config/defaults.mjs +22 -0
- package/config/templates/emails/delete-account.js +49 -0
- package/config/templates/emails/delete-account.mjs +31 -0
- package/config/templates/emails/invalid-username.js +30 -0
- package/config/templates/emails/invalid-username.mjs +27 -0
- package/config/templates/emails/reset-password.js +49 -0
- package/config/templates/emails/reset-password.mjs +31 -0
- package/config/templates/emails/welcome.js +39 -0
- package/config/templates/emails/welcome.mjs +23 -0
- package/config/templates/new-account/favicon.ico +0 -0
- package/config/templates/new-account/favicon.ico.acl +26 -0
- package/config/templates/new-account/profile/card$.ttl +26 -0
- package/config/templates/new-account/robots.txt +3 -0
- package/config/templates/new-account/robots.txt.acl +26 -0
- package/config/templates/new-account/settings/prefs.ttl +15 -0
- package/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
- package/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
- package/{default-templates/new-account/.meta.acl → config/templates/new-account/settings/publicTypeIndex.ttl.acl} +4 -4
- package/config/templates/new-account/settings/serverSide.ttl.acl +13 -0
- package/config/templates/new-account/settings/serverSide.ttl.inactive +12 -0
- package/config/templates/server/favicon.ico +0 -0
- package/{.well-known/.acl → config/templates/server/favicon.ico.acl} +2 -2
- package/config/templates/server/index.html +54 -0
- package/config/templates/server/robots.txt +3 -0
- package/{default-templates/server/.well-known/.acl → config/templates/server/robots.txt.acl} +2 -2
- package/config/usernames-blacklist.json +0 -0
- package/config/views/account/account-deleted.hbs +17 -0
- package/config/views/account/delete-confirm.hbs +51 -0
- package/config/views/account/delete-link-sent.hbs +17 -0
- package/config/views/account/delete.hbs +51 -0
- package/config/views/account/invalid-username.hbs +22 -0
- package/config/views/account/register-disabled.hbs +6 -0
- package/config/views/account/register-form.hbs +133 -0
- package/config/views/account/register.hbs +24 -0
- package/config/views/auth/auth-hidden-fields.hbs +8 -0
- package/config/views/auth/change-password.hbs +58 -0
- package/config/views/auth/goodbye.hbs +23 -0
- package/config/views/auth/login-required.hbs +34 -0
- package/config/views/auth/login-tls.hbs +11 -0
- package/config/views/auth/login-username-password.hbs +28 -0
- package/config/views/auth/login.hbs +55 -0
- package/config/views/auth/no-permission.hbs +29 -0
- package/config/views/auth/password-changed.hbs +27 -0
- package/config/views/auth/reset-link-sent.hbs +21 -0
- package/config/views/auth/reset-password.hbs +52 -0
- package/config/views/auth/sharing.hbs +49 -0
- package/config/views/shared/create-account.hbs +8 -0
- package/config/views/shared/error.hbs +5 -0
- package/config.json-default +0 -0
- package/coverage/tmp/coverage-2260-1766832656715-0.json +1 -0
- package/coverage/tmp/coverage-2261-1766832635310-0.json +1 -0
- package/default-templates/emails/delete-account.js +0 -0
- package/default-templates/emails/delete-account.mjs +31 -0
- package/default-templates/emails/invalid-username.js +0 -0
- package/default-templates/emails/invalid-username.mjs +27 -0
- package/default-templates/emails/reset-password.js +0 -0
- package/default-templates/emails/reset-password.mjs +31 -0
- package/default-templates/emails/welcome.js +0 -0
- package/default-templates/emails/welcome.mjs +23 -0
- package/default-templates/new-account/favicon.ico +0 -0
- package/default-templates/new-account/favicon.ico.acl +0 -0
- package/default-templates/new-account/profile/card$.ttl +0 -0
- package/default-templates/new-account/robots.txt +0 -0
- package/default-templates/new-account/robots.txt.acl +0 -0
- package/default-templates/new-account/settings/prefs.ttl +0 -0
- package/default-templates/new-account/settings/privateTypeIndex.ttl +0 -0
- package/default-templates/new-account/settings/publicTypeIndex.ttl +0 -0
- package/default-templates/new-account/settings/publicTypeIndex.ttl.acl +0 -0
- package/default-templates/new-account/settings/serverSide.ttl.acl +0 -0
- package/default-templates/new-account/settings/serverSide.ttl.inactive +0 -0
- package/default-templates/server/favicon.ico +0 -0
- package/default-templates/server/favicon.ico.acl +0 -0
- package/default-templates/server/index.html +0 -0
- package/default-templates/server/robots.txt +0 -0
- package/default-templates/server/robots.txt.acl +0 -0
- package/default-views/account/account-deleted.hbs +0 -0
- package/default-views/account/delete-confirm.hbs +0 -0
- package/default-views/account/delete-link-sent.hbs +0 -0
- package/default-views/account/delete.hbs +0 -0
- package/default-views/account/invalid-username.hbs +0 -0
- package/default-views/account/register-disabled.hbs +0 -0
- package/default-views/account/register-form.hbs +0 -0
- package/default-views/account/register.hbs +0 -0
- package/default-views/auth/auth-hidden-fields.hbs +0 -0
- package/default-views/auth/change-password.hbs +0 -0
- package/default-views/auth/goodbye.hbs +0 -0
- package/default-views/auth/login-required.hbs +0 -0
- package/default-views/auth/login-tls.hbs +0 -0
- package/default-views/auth/login-username-password.hbs +0 -0
- package/default-views/auth/login.hbs +0 -0
- package/default-views/auth/no-permission.hbs +0 -0
- package/default-views/auth/password-changed.hbs +0 -0
- package/default-views/auth/reset-link-sent.hbs +0 -0
- package/default-views/auth/reset-password.hbs +0 -0
- package/default-views/auth/sharing.hbs +0 -0
- package/default-views/shared/create-account.hbs +0 -0
- package/default-views/shared/error.hbs +0 -0
- package/docker-compose.yml +0 -0
- package/docker-image/CONTRIBUTING.md +33 -0
- package/docker-image/Makefile +32 -0
- package/docker-image/README.md +65 -0
- package/docker-image/examples/docker-compose.all-in-one.yml +76 -0
- package/docker-image/examples/docker-compose.nginx.yml +51 -0
- package/docker-image/examples/docker-compose.simple.yml +34 -0
- package/docker-image/src/Dockerfile +34 -0
- package/docker-image/src/checks.sh +56 -0
- package/docker-image/src/create-temporary-cert.sh +14 -0
- package/docker-image/src/entrypoint.sh +8 -0
- package/{common/img/.gitkeep → docker-image/test/__init__.py} +0 -0
- package/docker-image/test/conftest.py +15 -0
- package/docker-image/test/test_image_foundations.py +51 -0
- package/docker-image/test/test_non_accessible_key_cert.py +36 -0
- package/docker-image/test/test_precondition_checks.py +41 -0
- package/docker-image/test/test_solid_default_config.py +66 -0
- package/docker-image/test/test_volumes.py +55 -0
- package/docker-image/test/wait_for_container.py +8 -0
- package/docs/how-to-delete-your-account.md +0 -0
- package/docs/login-and-grant-access-to-application.md +0 -0
- package/examples/custom-error-handling.js +0 -0
- package/examples/custom-error-handling.mjs +29 -0
- package/examples/ldp-with-webid.js +0 -0
- package/examples/ldp-with-webid.mjs +12 -0
- package/examples/simple-express-app.js +0 -0
- package/examples/simple-express-app.mjs +20 -0
- package/examples/simple-ldp-server.js +0 -0
- package/examples/simple-ldp-server.mjs +8 -0
- package/favicon.ico +0 -0
- package/favicon.ico.acl +0 -0
- package/index.cjs +4 -0
- package/index.html +0 -0
- package/index.mjs +23 -0
- package/lib/{acl-checker.js → acl-checker.mjs} +13 -15
- package/lib/api/accounts/{user-accounts.js → user-accounts.mjs} +17 -16
- package/lib/api/authn/{force-user.js → force-user.mjs} +5 -4
- package/lib/api/authn/index.mjs +8 -0
- package/lib/api/authn/{webid-oidc.js → webid-oidc.mjs} +27 -20
- package/lib/api/authn/{webid-tls.js → webid-tls.mjs} +12 -11
- package/lib/api/index.mjs +7 -0
- package/lib/{capability-discovery.js → capability-discovery.mjs} +3 -6
- package/lib/common/{fs-utils.js → fs-utils.mjs} +35 -43
- package/lib/common/template-utils.mjs +29 -0
- package/lib/common/{user-utils.js → user-utils.mjs} +24 -28
- package/lib/{create-app.js → create-app.mjs} +372 -361
- package/lib/{create-server.js → create-server.mjs} +32 -11
- package/lib/debug.mjs +37 -0
- package/lib/handlers/{allow.js → allow.mjs} +79 -83
- package/lib/handlers/{auth-proxy.js → auth-proxy.mjs} +4 -5
- package/lib/handlers/{copy.js → copy.mjs} +37 -39
- package/lib/handlers/{cors-proxy.js → cors-proxy.mjs} +9 -11
- package/lib/handlers/{delete.js → delete.mjs} +20 -22
- package/lib/handlers/{error-pages.js → error-pages.mjs} +144 -212
- package/lib/handlers/{get.js → get.mjs} +254 -252
- package/lib/handlers/{index.js → index.mjs} +7 -8
- package/lib/handlers/{notify.js → notify.mjs} +8 -10
- package/lib/handlers/{options.js → options.mjs} +3 -5
- package/lib/handlers/patch/{n3-patch-parser.js → n3-patch-parser.mjs} +57 -59
- package/lib/handlers/patch/{sparql-update-parser.js → sparql-update-parser.mjs} +14 -16
- package/lib/handlers/{patch.js → patch.mjs} +241 -235
- package/lib/handlers/{post.js → post.mjs} +101 -99
- package/lib/handlers/{put.js → put.mjs} +101 -105
- package/lib/handlers/{restrict-to-top-domain.js → restrict-to-top-domain.mjs} +2 -2
- package/lib/{header.js → header.mjs} +138 -143
- package/lib/{http-error.js → http-error.mjs} +35 -34
- package/lib/{ldp-container.js → ldp-container.mjs} +10 -12
- package/lib/ldp-copy.mjs +82 -0
- package/lib/ldp-middleware.mjs +38 -0
- package/lib/{ldp.js → ldp.mjs} +286 -75
- package/lib/{lock.js → lock.mjs} +10 -10
- package/lib/{metadata.js → metadata.mjs} +11 -11
- package/lib/models/account-manager.mjs +297 -0
- package/lib/models/account-template.mjs +70 -0
- package/lib/models/authenticator.mjs +161 -0
- package/lib/models/oidc-manager.mjs +23 -0
- package/lib/models/solid-host.mjs +63 -0
- package/lib/models/user-account.mjs +50 -0
- package/lib/models/webid-tls-certificate.mjs +97 -0
- package/lib/{payment-pointer-discovery.js → payment-pointer-discovery.mjs} +5 -8
- package/lib/{rdf-notification-template.js → rdf-notification-template.mjs} +3 -5
- package/lib/requests/add-cert-request.mjs +70 -0
- package/lib/requests/auth-request.mjs +151 -0
- package/lib/requests/{create-account-request.js → create-account-request.mjs} +249 -452
- package/lib/requests/delete-account-confirm-request.mjs +85 -0
- package/lib/requests/{delete-account-request.js → delete-account-request.mjs} +73 -134
- package/lib/requests/login-request.mjs +89 -0
- package/lib/requests/{password-change-request.js → password-change-request.mjs} +132 -201
- package/lib/requests/{password-reset-email-request.js → password-reset-email-request.mjs} +123 -202
- package/lib/requests/password-reset-request.mjs +47 -0
- package/lib/requests/register-request.mjs +48 -0
- package/lib/requests/{sharing-request.js → sharing-request.mjs} +174 -261
- package/lib/{resource-mapper.js → resource-mapper.mjs} +7 -6
- package/lib/{server-config.js → server-config.mjs} +15 -20
- package/lib/services/{blacklist-service.js → blacklist-service.mjs} +36 -33
- package/lib/services/email-service.mjs +76 -0
- package/lib/services/{token-service.js → token-service.mjs} +36 -44
- package/lib/{utils.js → utils.mjs} +309 -254
- package/lib/webid/{index.js → index.mjs} +9 -13
- package/lib/webid/lib/get.mjs +31 -0
- package/lib/webid/lib/{parse.js → parse.mjs} +10 -12
- package/lib/webid/lib/verify.mjs +77 -0
- package/lib/webid/tls/generate.mjs +53 -0
- package/lib/webid/tls/index.mjs +7 -0
- package/package.json +61 -41
- package/renovate.json +0 -0
- package/robots.txt +0 -0
- package/robots.txt.acl +0 -0
- package/solid-server-5.8.8.tgz +0 -0
- package/static/account-recovery.html +0 -0
- package/static/popup-redirect.html +0 -0
- package/static/signup.html +0 -0
- package/static/signup.html.acl +0 -0
- package/test/index.mjs +168 -0
- package/test/integration/account-creation-tls-test.mjs +127 -0
- package/test/integration/account-manager-test.mjs +151 -0
- package/test/integration/account-template-test.mjs +136 -0
- package/test/integration/acl-oidc-test.mjs +1048 -0
- package/test/integration/acl-tls-test.mjs +964 -0
- package/test/integration/auth-proxy-test.mjs +144 -0
- package/test/integration/authentication-oidc-test.mjs +812 -0
- package/test/integration/authentication-oidc-with-strict-origins-turned-off-test.mjs +638 -0
- package/test/integration/capability-discovery-test.mjs +116 -0
- package/test/integration/cors-proxy-test.mjs +145 -0
- package/test/integration/errors-oidc-test.mjs +109 -0
- package/test/integration/errors-test.mjs +49 -0
- package/test/integration/formats-test.mjs +136 -0
- package/test/integration/header-test.mjs +101 -0
- package/test/integration/http-copy-test.mjs +109 -0
- package/test/integration/http-test.mjs +1197 -0
- package/test/integration/ldp-test.mjs +528 -0
- package/test/integration/oidc-manager-test.mjs +42 -0
- package/test/integration/params-test.mjs +192 -0
- package/test/integration/patch-sparql-update-test.mjs +195 -0
- package/test/integration/patch-test.mjs +590 -0
- package/test/integration/payment-pointer-test.mjs +155 -0
- package/test/integration/prep-test.mjs +314 -0
- package/test/integration/quota-test.mjs +51 -0
- package/test/integration/special-root-acl-handling-test.mjs +68 -0
- package/test/integration/validate-tts-test.mjs +57 -0
- package/test/integration/www-account-creation-oidc-test.mjs +311 -0
- package/test/keys/cert.pem +21 -0
- package/test/keys/client-cert.pem +19 -0
- package/test/keys/client-key.pem +27 -0
- package/test/keys/key.pem +27 -0
- package/test/keys/user1-cert.pem +23 -0
- package/test/keys/user1-key.pem +28 -0
- package/test/keys/user2-cert.pem +23 -0
- package/test/keys/user2-key.pem +27 -0
- package/test/mocha.opts +2 -0
- package/test/resources/Makefile +146 -0
- package/test/resources/accounts/alice.localhost/profile/card +0 -0
- package/test/resources/accounts/db/oidc/op/clients/_key_5319f8e8e4ea3214c2e92b252520d355.json +1 -0
- package/test/resources/accounts/db/oidc/op/provider.json +763 -0
- package/test/resources/accounts/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A3457.json +1 -0
- package/test/resources/accounts/localhost/samplePublicContainer/nicola.jpg +0 -0
- package/test/resources/accounts/tim.localhost/hello.html +9 -0
- package/test/resources/accounts/tim.localhost/profile/card +0 -0
- package/test/resources/accounts-acl/config/templates/emails/welcome-test.js +39 -0
- package/test/resources/accounts-acl/config/templates/new-account/favicon.ico +0 -0
- package/test/resources/accounts-acl/config/templates/new-account/favicon.ico.acl +26 -0
- package/test/resources/accounts-acl/config/templates/new-account/index.html +28 -0
- package/test/resources/accounts-acl/config/templates/new-account/index.html.acl +22 -0
- package/test/resources/accounts-acl/config/templates/new-account/profile/card +27 -0
- package/{default-templates/new-account/inbox/.acl → test/resources/accounts-acl/config/templates/new-account/profile/card.acl} +5 -6
- package/test/resources/accounts-acl/config/templates/new-account/settings/prefs.ttl +9 -0
- package/test/resources/accounts-acl/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
- package/test/resources/accounts-acl/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
- package/test/resources/accounts-acl/config/templates/new-account/settings/publicTypeIndex.ttl.acl +25 -0
- package/test/resources/accounts-acl/config/templates/new-account/settings/serverSide.ttl +14 -0
- package/test/resources/accounts-acl/config/templates/server/index.html +35 -0
- package/{.acl → test/resources/accounts-acl/config/templates/server/index.html.acl} +4 -3
- package/test/resources/accounts-acl/config/views/account/register.hbs +58 -0
- package/test/resources/accounts-acl/config/views/auth/consent.hbs +49 -0
- package/test/resources/accounts-acl/config/views/auth/goodbye.hbs +20 -0
- package/test/resources/accounts-acl/config/views/auth/login-required.hbs +0 -0
- package/test/resources/accounts-acl/config/views/auth/login.hbs +51 -0
- package/test/resources/accounts-acl/config/views/auth/no-permission.hbs +0 -0
- package/test/resources/accounts-acl/db/oidc/op/clients/_key_77bb3b35edb1f3f7b887c25d1211a491.json +1 -0
- package/test/resources/accounts-acl/db/oidc/op/provider.json +763 -0
- package/test/resources/accounts-acl/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7777.json +1 -0
- package/test/resources/accounts-acl/localhost/favicon.ico +0 -0
- package/test/resources/accounts-acl/localhost/index.html +35 -0
- package/{default-templates/server/.acl → test/resources/accounts-acl/localhost/index.html.acl} +4 -3
- package/test/resources/accounts-acl/nicola.localhost/index.html +1 -0
- package/test/resources/accounts-acl/nicola.localhost/index.html.acl +10 -0
- package/test/resources/accounts-acl/quota/settings/serverSide.ttl +11 -0
- package/test/resources/accounts-acl/tim.localhost/append-acl/abc.ttl +1 -0
- package/test/resources/accounts-acl/tim.localhost/append-acl/abc.ttl.acl +8 -0
- package/test/resources/accounts-acl/tim.localhost/append-acl/abc2.ttl +1 -0
- package/test/resources/accounts-acl/tim.localhost/append-acl/abc2.ttl.acl +8 -0
- package/test/resources/accounts-acl/tim.localhost/fake-account/hello.html +9 -0
- package/test/resources/accounts-acl/tim.localhost/group/test-folder/group-listing-error.ttl +1 -0
- package/test/resources/accounts-acl/tim.localhost/group/test-folder/group-listing.ttl +14 -0
- package/test/resources/accounts-acl/tim.localhost/group/test-folder/some-other-file.txt +1 -0
- package/test/resources/accounts-acl/tim.localhost/multi-server/protected.txt +1 -0
- package/test/resources/accounts-acl/tim.localhost/multi-server/protected.txt.acl +8 -0
- package/test/resources/accounts-acl/tim.localhost/no-acl/test-file.html +1 -0
- package/test/resources/accounts-acl/tim.localhost/read-acl/deeper-tree/acls-only-on-top/example.ttl +1 -0
- package/test/resources/accounts-acl/tim.localhost/write-acl/test-file$.txt +1 -0
- package/test/resources/accounts-scenario/alice/db/oidc/op/clients/_key_9c0fd8442675a1afbe5115b9ae300c65.json +1 -0
- package/test/resources/accounts-scenario/alice/db/oidc/op/provider.json +761 -0
- package/test/resources/accounts-scenario/alice/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7000.json +1 -0
- package/test/resources/accounts-scenario/alice/private-for-alice.txt +1 -0
- package/test/resources/accounts-scenario/alice/private-for-alice.txt.acl +12 -0
- package/test/resources/accounts-scenario/alice/profile/card$.ttl +10 -0
- package/test/resources/accounts-scenario/bob/db/oidc/op/clients/_key_f15f340b6dc71b68d20eca0d7e87a972.json +1 -0
- package/test/resources/accounts-scenario/bob/db/oidc/op/provider.json +761 -0
- package/test/resources/accounts-scenario/bob/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7001.json +1 -0
- package/test/resources/accounts-scenario/bob/profile/card$.ttl +5 -0
- package/test/resources/accounts-scenario/bob/shared-with-alice.txt +1 -0
- package/test/resources/accounts-scenario/bob/shared-with-alice.txt.acl +15 -0
- package/test/resources/accounts-scenario/charlie/db/oidc/op/clients/_key_7c634dfe325475cc8750e19c72acf6d9.json +1 -0
- package/test/resources/accounts-scenario/charlie/db/oidc/op/provider.json +759 -0
- package/test/resources/accounts-scenario/charlie/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A5002.json +1 -0
- package/test/resources/accounts-scenario/charlie/profile/card$.ttl +5 -0
- package/test/resources/accounts-strict-origin-off/alice/db/oidc/op/clients/_key_3f1cecaefd21253767f6e047bd9b572f.json +1 -0
- package/test/resources/accounts-strict-origin-off/alice/db/oidc/op/provider.json +763 -0
- package/test/resources/accounts-strict-origin-off/alice/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7010.json +1 -0
- package/test/resources/accounts-strict-origin-off/alice/private-for-alice.txt +1 -0
- package/test/resources/accounts-strict-origin-off/alice/private-for-alice.txt.acl +12 -0
- package/test/resources/accounts-strict-origin-off/alice/profile/card$.ttl +10 -0
- package/test/resources/accounts-strict-origin-off/bob/db/oidc/op/clients/_key_a17f603b5907c97a5fac61a2eea7ecb2.json +1 -0
- package/test/resources/accounts-strict-origin-off/bob/db/oidc/op/provider.json +763 -0
- package/test/resources/accounts-strict-origin-off/bob/db/oidc/rp/clients/_key_https%3A%2F%2Flocalhost%3A7011.json +1 -0
- package/test/resources/accounts-strict-origin-off/bob/shared-with-alice.txt +1 -0
- package/test/resources/accounts-strict-origin-off/bob/shared-with-alice.txt.acl +15 -0
- package/test/resources/acl-tls/config/templates/emails/delete-account.js +49 -0
- package/test/resources/acl-tls/config/templates/emails/invalid-username.js +30 -0
- package/test/resources/acl-tls/config/templates/emails/reset-password.js +49 -0
- package/test/resources/acl-tls/config/templates/emails/welcome.js +39 -0
- package/test/resources/acl-tls/config/templates/new-account/favicon.ico +0 -0
- package/test/resources/acl-tls/config/templates/new-account/favicon.ico.acl +26 -0
- package/test/resources/acl-tls/config/templates/new-account/profile/card$.ttl +26 -0
- package/test/resources/acl-tls/config/templates/new-account/robots.txt +3 -0
- package/test/resources/acl-tls/config/templates/new-account/robots.txt.acl +26 -0
- package/test/resources/acl-tls/config/templates/new-account/settings/prefs.ttl +15 -0
- package/test/resources/acl-tls/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
- package/test/resources/acl-tls/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
- package/test/resources/acl-tls/config/templates/new-account/settings/publicTypeIndex.ttl.acl +25 -0
- package/test/resources/acl-tls/config/templates/new-account/settings/serverSide.ttl.acl +13 -0
- package/test/resources/acl-tls/config/templates/new-account/settings/serverSide.ttl.inactive +12 -0
- package/test/resources/acl-tls/config/templates/server/favicon.ico +0 -0
- package/test/resources/acl-tls/config/templates/server/favicon.ico.acl +15 -0
- package/test/resources/acl-tls/config/templates/server/index.html +55 -0
- package/test/resources/acl-tls/config/templates/server/robots.txt +3 -0
- package/test/resources/acl-tls/config/templates/server/robots.txt.acl +15 -0
- package/test/resources/acl-tls/config/views/account/account-deleted.hbs +17 -0
- package/test/resources/acl-tls/config/views/account/delete-confirm.hbs +51 -0
- package/test/resources/acl-tls/config/views/account/delete-link-sent.hbs +17 -0
- package/test/resources/acl-tls/config/views/account/delete.hbs +51 -0
- package/test/resources/acl-tls/config/views/account/invalid-username.hbs +22 -0
- package/test/resources/acl-tls/config/views/account/register-disabled.hbs +6 -0
- package/test/resources/acl-tls/config/views/account/register-form.hbs +147 -0
- package/test/resources/acl-tls/config/views/account/register.hbs +24 -0
- package/test/resources/acl-tls/config/views/auth/auth-hidden-fields.hbs +8 -0
- package/test/resources/acl-tls/config/views/auth/change-password.hbs +58 -0
- package/test/resources/acl-tls/config/views/auth/goodbye.hbs +23 -0
- package/test/resources/acl-tls/config/views/auth/login-required.hbs +34 -0
- package/test/resources/acl-tls/config/views/auth/login-tls.hbs +11 -0
- package/test/resources/acl-tls/config/views/auth/login-username-password.hbs +28 -0
- package/test/resources/acl-tls/config/views/auth/login.hbs +55 -0
- package/test/resources/acl-tls/config/views/auth/no-permission.hbs +29 -0
- package/test/resources/acl-tls/config/views/auth/password-changed.hbs +27 -0
- package/test/resources/acl-tls/config/views/auth/reset-link-sent.hbs +21 -0
- package/test/resources/acl-tls/config/views/auth/reset-password.hbs +52 -0
- package/test/resources/acl-tls/config/views/auth/sharing.hbs +49 -0
- package/test/resources/acl-tls/config/views/shared/create-account.hbs +8 -0
- package/test/resources/acl-tls/config/views/shared/error.hbs +5 -0
- package/test/resources/acl-tls/localhost/favicon.ico +0 -0
- package/test/resources/acl-tls/localhost/favicon.ico.acl +15 -0
- package/test/resources/acl-tls/localhost/index.html +48 -0
- package/test/resources/acl-tls/localhost/robots.txt +3 -0
- package/test/resources/acl-tls/localhost/robots.txt.acl +15 -0
- package/test/resources/acl-tls/tim.localhost/append-acl/abc.ttl +1 -0
- package/test/resources/acl-tls/tim.localhost/append-acl/abc.ttl.acl +8 -0
- package/test/resources/acl-tls/tim.localhost/append-acl/abc2.ttl +1 -0
- package/test/resources/acl-tls/tim.localhost/append-acl/abc2.ttl.acl +8 -0
- package/test/resources/acl-tls/tim.localhost/fake-account/hello.html +9 -0
- package/test/resources/acl-tls/tim.localhost/no-acl/test-file.html +1 -0
- package/test/resources/acl-tls/tim.localhost/profile/card$.ttl +17 -0
- package/test/resources/acl-tls/write-acl/test-file$.ttl +1 -0
- package/test/resources/auth-proxy/index.html +0 -0
- package/test/resources/auth-proxy/index.html.acl +0 -0
- package/test/resources/config/templates/emails/delete-account.js +49 -0
- package/test/resources/config/templates/emails/delete-account.mjs +31 -0
- package/test/resources/config/templates/emails/invalid-username.js +30 -0
- package/test/resources/config/templates/emails/invalid-username.mjs +27 -0
- package/test/resources/config/templates/emails/reset-password.js +49 -0
- package/test/resources/config/templates/emails/reset-password.mjs +31 -0
- package/test/resources/config/templates/emails/welcome.js +39 -0
- package/test/resources/config/templates/emails/welcome.mjs +23 -0
- package/test/resources/config/templates/new-account/favicon.ico +0 -0
- package/test/resources/config/templates/new-account/favicon.ico.acl +26 -0
- package/test/resources/config/templates/new-account/profile/card$.ttl +26 -0
- package/test/resources/config/templates/new-account/robots.txt +3 -0
- package/test/resources/config/templates/new-account/robots.txt.acl +26 -0
- package/test/resources/config/templates/new-account/settings/prefs.ttl +15 -0
- package/test/resources/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
- package/test/resources/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
- package/test/resources/config/templates/new-account/settings/publicTypeIndex.ttl.acl +25 -0
- package/test/resources/config/templates/new-account/settings/serverSide.ttl.acl +13 -0
- package/test/resources/config/templates/new-account/settings/serverSide.ttl.inactive +12 -0
- package/test/resources/config/templates/server/favicon.ico +0 -0
- package/test/resources/config/templates/server/favicon.ico.acl +15 -0
- package/test/resources/config/templates/server/index.html +54 -0
- package/test/resources/config/templates/server/robots.txt +3 -0
- package/test/resources/config/templates/server/robots.txt.acl +15 -0
- package/test/resources/config/views/account/account-deleted.hbs +17 -0
- package/test/resources/config/views/account/delete-confirm.hbs +51 -0
- package/test/resources/config/views/account/delete-link-sent.hbs +17 -0
- package/test/resources/config/views/account/delete.hbs +51 -0
- package/test/resources/config/views/account/invalid-username.hbs +22 -0
- package/test/resources/config/views/account/register-disabled.hbs +6 -0
- package/test/resources/config/views/account/register-form.hbs +133 -0
- package/test/resources/config/views/account/register.hbs +24 -0
- package/test/resources/config/views/auth/auth-hidden-fields.hbs +8 -0
- package/test/resources/config/views/auth/change-password.hbs +58 -0
- package/test/resources/config/views/auth/goodbye.hbs +23 -0
- package/test/resources/config/views/auth/login-required.hbs +34 -0
- package/test/resources/config/views/auth/login-tls.hbs +11 -0
- package/test/resources/config/views/auth/login-username-password.hbs +28 -0
- package/test/resources/config/views/auth/login.hbs +55 -0
- package/test/resources/config/views/auth/no-permission.hbs +29 -0
- package/test/resources/config/views/auth/password-changed.hbs +27 -0
- package/test/resources/config/views/auth/reset-link-sent.hbs +21 -0
- package/test/resources/config/views/auth/reset-password.hbs +52 -0
- package/test/resources/config/views/auth/sharing.hbs +49 -0
- package/test/resources/config/views/shared/create-account.hbs +8 -0
- package/test/resources/config/views/shared/error.hbs +5 -0
- package/test/resources/empty.spatch +0 -0
- package/test/resources/errorPages/401.html +5 -0
- package/test/resources/errorPages/403.html +5 -0
- package/test/resources/errorPages/404.html +5 -0
- package/test/resources/errorPages/405.html +5 -0
- package/test/resources/errorPages/415.html +5 -0
- package/test/resources/errorPages/500.html +5 -0
- package/test/resources/example_spkac.cnf +1 -0
- package/test/resources/external-servers/example.com/jwks.json +81 -0
- package/test/resources/external-servers/example.com/openid-configuration.json +53 -0
- package/test/resources/favicon.ico +0 -0
- package/test/resources/favicon.ico.acl +15 -0
- package/test/resources/headers/index.html +0 -0
- package/test/resources/headers/public-ra +0 -0
- package/test/resources/headers/public-ra.acl +7 -0
- package/test/resources/headers/user-rw-public-r +0 -0
- package/test/resources/headers/user-rw-public-r.acl +12 -0
- package/test/resources/headers/user-rwac-public-0 +0 -0
- package/test/resources/headers/user-rwac-public-0.acl +7 -0
- package/test/resources/hello.html +3 -0
- package/test/resources/invalid1.ttl +13 -0
- package/test/resources/invalid2.ttl +9 -0
- package/test/resources/ldpatch-example-final.ttl +23 -0
- package/test/resources/ldpatch-example-initial.ttl +22 -0
- package/test/resources/ldpatch-example-patch-1.spatch +8 -0
- package/test/resources/ldpatch-example-patch-2.spatch +12 -0
- package/test/resources/ldpatch-example-patch-3.spatch +14 -0
- package/test/resources/ldpatch-example-patch.ldpatch +25 -0
- package/test/resources/ldpatch-example-patch.spatch +24 -0
- package/test/resources/lennon.jsonld +7 -0
- package/test/resources/lfs-0.sparql +9 -0
- package/test/resources/lfs-1-final.json +10 -0
- package/test/resources/lfs-1.sparql +11 -0
- package/test/resources/messaging-scenario/user1.databox.me/profile/card +21 -0
- package/test/resources/nicola.jpg +0 -0
- package/test/resources/patch/append-only.ttl +2 -0
- package/test/resources/patch/append-only.ttl.acl +6 -0
- package/test/resources/patch/favicon.ico +0 -0
- package/test/resources/patch/favicon.ico.acl +15 -0
- package/test/resources/patch/index.html +0 -0
- package/test/resources/patch/read-append.ttl +2 -0
- package/test/resources/patch/read-append.ttl.acl +6 -0
- package/test/resources/patch/read-only.ttl +2 -0
- package/test/resources/patch/read-only.ttl.acl +6 -0
- package/test/resources/patch/read-write.ttl +2 -0
- package/test/resources/patch/read-write.ttl.acl +6 -0
- package/test/resources/patch/robots.txt +3 -0
- package/test/resources/patch/robots.txt.acl +15 -0
- package/test/resources/patch/write-only.ttl +2 -0
- package/test/resources/patch/write-only.ttl.acl +6 -0
- package/test/resources/patch-1-initial.ttl +3 -0
- package/test/resources/patch-2-final.ttl +2 -0
- package/test/resources/patch-2-initial.ttl +3 -0
- package/test/resources/patch-2.spatch +2 -0
- package/test/resources/patch-2n.spatch +2 -0
- package/test/resources/patch-3-final.ttl +28 -0
- package/test/resources/patch-4-final.ttl +29 -0
- package/test/resources/patch-5-final.ttl +1 -0
- package/test/resources/patch-5-initial.ttl +3 -0
- package/test/resources/patch-5.spatch +2 -0
- package/test/resources/put-input-2.html +13 -0
- package/test/resources/put-input.txt +6 -0
- package/test/resources/robots.txt +3 -0
- package/test/resources/robots.txt.acl +15 -0
- package/test/resources/sampleContainer/blank +0 -0
- package/test/resources/sampleContainer/cert.pkcs +0 -0
- package/test/resources/sampleContainer/example.ttl.old +1 -0
- package/test/resources/sampleContainer/example1.ttl +12 -0
- package/test/resources/sampleContainer/example2.ttl +3 -0
- package/test/resources/sampleContainer/example3.ttl +7 -0
- package/test/resources/sampleContainer/example4$.ttl +7 -0
- package/test/resources/sampleContainer/filename with spaces.txt +0 -0
- package/test/resources/sampleContainer/index.html +9 -0
- package/test/resources/sampleContainer/post2.ttl +6 -0
- package/test/resources/sampleContainer/put1.ttl +13 -0
- package/test/resources/sampleContainer/solid.png +0 -0
- package/test/resources/sampleContainer/user1.pfx +0 -0
- package/test/resources/sampleContainer/user2.pfx +0 -0
- package/test/resources/sampleContainer2/example1.ttl +10 -0
- package/test/resources/sampleContainer2/example2.ttl +7 -0
- package/test/resources/timbl.jpg +0 -0
- package/test/scenarios.md +23 -0
- package/test/surface/docker/cookie/Dockerfile +6 -0
- package/test/surface/docker/cookie/app/index.js +29 -0
- package/test/surface/docker/cookie/app/package-lock.json +13 -0
- package/test/surface/docker/cookie/app/package.json +14 -0
- package/test/surface/docker/server/Dockerfile +19 -0
- package/test/surface/docker/server/config/defaults.js +10 -0
- package/test/surface/docker/server/config/templates/emails/delete-account.js +49 -0
- package/test/surface/docker/server/config/templates/emails/invalid-username.js +30 -0
- package/test/surface/docker/server/config/templates/emails/reset-password.js +49 -0
- package/test/surface/docker/server/config/templates/emails/welcome.js +39 -0
- package/test/surface/docker/server/config/templates/new-account/favicon.ico +0 -0
- package/test/surface/docker/server/config/templates/new-account/favicon.ico.acl +26 -0
- package/test/surface/docker/server/config/templates/new-account/profile/card$.ttl +26 -0
- package/test/surface/docker/server/config/templates/new-account/robots.txt +3 -0
- package/test/surface/docker/server/config/templates/new-account/robots.txt.acl +26 -0
- package/test/surface/docker/server/config/templates/new-account/settings/prefs.ttl +15 -0
- package/test/surface/docker/server/config/templates/new-account/settings/privateTypeIndex.ttl +4 -0
- package/test/surface/docker/server/config/templates/new-account/settings/publicTypeIndex.ttl +4 -0
- package/test/surface/docker/server/config/templates/new-account/settings/publicTypeIndex.ttl.acl +25 -0
- package/test/surface/docker/server/config/templates/new-account/settings/serverSide.ttl.acl +13 -0
- package/test/surface/docker/server/config/templates/new-account/settings/serverSide.ttl.inactive +12 -0
- package/test/surface/docker/server/config/templates/server/favicon.ico +0 -0
- package/test/surface/docker/server/config/templates/server/favicon.ico.acl +15 -0
- package/test/surface/docker/server/config/templates/server/index.html +55 -0
- package/test/surface/docker/server/config/templates/server/robots.txt +3 -0
- package/test/surface/docker/server/config/templates/server/robots.txt.acl +15 -0
- package/test/surface/docker/server/config/usernames-blacklist.json +4 -0
- package/test/surface/docker/server/config/views/account/account-deleted.hbs +17 -0
- package/test/surface/docker/server/config/views/account/delete-confirm.hbs +51 -0
- package/test/surface/docker/server/config/views/account/delete-link-sent.hbs +17 -0
- package/test/surface/docker/server/config/views/account/delete.hbs +51 -0
- package/test/surface/docker/server/config/views/account/invalid-username.hbs +22 -0
- package/test/surface/docker/server/config/views/account/register-disabled.hbs +6 -0
- package/test/surface/docker/server/config/views/account/register-form.hbs +147 -0
- package/test/surface/docker/server/config/views/account/register.hbs +24 -0
- package/test/surface/docker/server/config/views/auth/auth-hidden-fields.hbs +8 -0
- package/test/surface/docker/server/config/views/auth/change-password.hbs +58 -0
- package/test/surface/docker/server/config/views/auth/goodbye.hbs +23 -0
- package/test/surface/docker/server/config/views/auth/login-required.hbs +34 -0
- package/test/surface/docker/server/config/views/auth/login-tls.hbs +11 -0
- package/test/surface/docker/server/config/views/auth/login-username-password.hbs +28 -0
- package/test/surface/docker/server/config/views/auth/login.hbs +55 -0
- package/test/surface/docker/server/config/views/auth/no-permission.hbs +29 -0
- package/test/surface/docker/server/config/views/auth/password-changed.hbs +27 -0
- package/test/surface/docker/server/config/views/auth/reset-link-sent.hbs +21 -0
- package/test/surface/docker/server/config/views/auth/reset-password.hbs +52 -0
- package/test/surface/docker/server/config/views/auth/sharing.hbs +49 -0
- package/test/surface/docker/server/config/views/shared/create-account.hbs +8 -0
- package/test/surface/docker/server/config/views/shared/error.hbs +5 -0
- package/test/surface/docker/server/config.json +22 -0
- package/test/surface/docker/server/data/favicon.ico +0 -0
- package/test/surface/docker/server/data/favicon.ico.acl +26 -0
- package/test/surface/docker/server/data/index.html +48 -0
- package/test/surface/docker/server/data/profile/card$.ttl +31 -0
- package/test/surface/docker/server/data/robots.txt +3 -0
- package/test/surface/docker/server/data/robots.txt.acl +26 -0
- package/test/surface/docker/server/data/settings/prefs.ttl +15 -0
- package/test/surface/docker/server/data/settings/privateTypeIndex.ttl +4 -0
- package/test/surface/docker/server/data/settings/publicTypeIndex.ttl +4 -0
- package/test/surface/docker/server/data/settings/publicTypeIndex.ttl.acl +25 -0
- package/test/surface/docker/server/data/settings/serverSide.ttl +0 -0
- package/test/surface/docker/server/data/settings/serverSide.ttl.acl +13 -0
- package/test/surface/docker/server/data/settings/serverSide.ttl.inactive +12 -0
- package/test/surface/docker/server/env.list +4 -0
- package/test/surface/docker/solid-crud/Dockerfile +4 -0
- package/test/surface/docker/web-access-control/Dockerfile +1 -0
- package/test/surface/docker/webid-provider/Dockerfile +1 -0
- package/test/surface/run-solid-test-suite.sh +75 -0
- package/test/surface/server-env.list +5 -0
- package/test/surface/solid-crud-tests-env.list +5 -0
- package/test/surface/thirdparty-config.json +23 -0
- package/test/surface/thirdparty-env.list +6 -0
- package/test/surface/web-access-control-tests-env.list +6 -0
- package/test/surface/webid-provider-tests-env.list +4 -0
- package/test/test-helpers.mjs +63 -0
- package/test/unit/account-manager-test.mjs +610 -0
- package/test/unit/account-template-test.mjs +59 -0
- package/test/unit/acl-checker-test.mjs +51 -0
- package/test/unit/add-cert-request-test.mjs +120 -0
- package/test/unit/auth-handlers-test.mjs +108 -0
- package/test/unit/auth-proxy-test.mjs +224 -0
- package/test/unit/auth-request-test.mjs +96 -0
- package/test/unit/authenticator-test.mjs +34 -0
- package/test/unit/blacklist-service-test.mjs +49 -0
- package/test/unit/create-account-request-test.mjs +306 -0
- package/test/unit/delete-account-confirm-request-test.mjs +234 -0
- package/test/unit/delete-account-request-test.mjs +180 -0
- package/test/unit/email-service-test.mjs +166 -0
- package/test/unit/email-welcome-test.mjs +81 -0
- package/test/unit/error-pages-test.mjs +100 -0
- package/test/unit/esm-imports.test.mjs +149 -0
- package/test/unit/force-user-test.mjs +73 -0
- package/test/unit/getAvailableUrl-test.mjs +30 -0
- package/test/unit/getTrustedOrigins-test.mjs +20 -0
- package/test/unit/login-request-test.mjs +246 -0
- package/test/unit/oidc-manager-test.mjs +50 -0
- package/test/unit/password-authenticator-test.mjs +125 -0
- package/test/unit/password-change-request-test.mjs +259 -0
- package/test/unit/password-reset-email-request-test.mjs +234 -0
- package/test/unit/resource-mapper-test.mjs +673 -0
- package/test/unit/solid-host-test.mjs +119 -0
- package/test/unit/tls-authenticator-test.mjs +174 -0
- package/test/unit/token-service-test.mjs +82 -0
- package/test/unit/user-account-test.mjs +38 -0
- package/test/unit/user-accounts-api-test.mjs +59 -0
- package/test/unit/user-utils-test.mjs +64 -0
- package/test/unit/utils-test.mjs +114 -0
- package/test/utils/index.mjs +167 -0
- package/test/utils.mjs +205 -0
- package/test/validate-turtle.mjs +43 -0
- package/.github/workflows/ci.yml +0 -113
- package/.nvmrc +0 -1
- package/.snyk +0 -35
- package/bin/lib/cli-utils.js +0 -85
- package/bin/lib/cli.js +0 -39
- package/bin/solid.js +0 -3
- package/default-templates/new-account/.acl +0 -26
- package/default-templates/new-account/.meta +0 -5
- package/default-templates/new-account/.well-known/.acl +0 -19
- package/default-templates/new-account/private/.acl +0 -10
- package/default-templates/new-account/profile/.acl +0 -19
- package/default-templates/new-account/public/.acl +0 -19
- package/default-templates/new-account/settings/.acl +0 -20
- package/index.js +0 -3
- package/lib/api/authn/index.js +0 -5
- package/lib/api/index.js +0 -6
- package/lib/common/template-utils.js +0 -50
- package/lib/debug.js +0 -18
- package/lib/ldp-copy.js +0 -73
- package/lib/ldp-middleware.js +0 -40
- package/lib/models/account-manager.js +0 -604
- package/lib/models/account-template.js +0 -156
- package/lib/models/authenticator.js +0 -337
- package/lib/models/oidc-manager.js +0 -53
- package/lib/models/solid-host.js +0 -131
- package/lib/models/user-account.js +0 -113
- package/lib/models/webid-tls-certificate.js +0 -184
- package/lib/requests/add-cert-request.js +0 -138
- package/lib/requests/auth-request.js +0 -234
- package/lib/requests/delete-account-confirm-request.js +0 -170
- package/lib/requests/login-request.js +0 -205
- package/lib/services/email-service.js +0 -162
- package/lib/webid/lib/get.js +0 -27
- package/lib/webid/tls/index.js +0 -185
|
@@ -1,156 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const path = require('path')
|
|
4
|
-
const mime = require('mime-types')
|
|
5
|
-
const recursiveRead = require('recursive-readdir')
|
|
6
|
-
const fsUtils = require('../common/fs-utils')
|
|
7
|
-
const templateUtils = require('../common/template-utils')
|
|
8
|
-
const LDP = require('../ldp')
|
|
9
|
-
const { URL } = require('url')
|
|
10
|
-
|
|
11
|
-
const TEMPLATE_EXTENSIONS = ['.acl', '.meta', '.json', '.hbs', '.handlebars']
|
|
12
|
-
const TEMPLATE_FILES = ['card']
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Performs account folder initialization from an account template
|
|
16
|
-
* (see `./default-templates/new-account/`, for example).
|
|
17
|
-
*
|
|
18
|
-
* @class AccountTemplate
|
|
19
|
-
*/
|
|
20
|
-
class AccountTemplate {
|
|
21
|
-
/**
|
|
22
|
-
* @constructor
|
|
23
|
-
* @param [options={}] {Object}
|
|
24
|
-
* @param [options.substitutions={}] {Object} Hashmap of key/value Handlebars
|
|
25
|
-
* template substitutions.
|
|
26
|
-
* @param [options.rdfMimeTypes] {Array<string>} List of MIME types that are
|
|
27
|
-
* likely to contain RDF templates.
|
|
28
|
-
* @param [options.templateExtensions] {Array<string>} List of extensions likely
|
|
29
|
-
* to contain templates.
|
|
30
|
-
* @param [options.templateFiles] {Array<string>} List of reserved file names
|
|
31
|
-
* (such as the profile `card`) likely to contain templates.
|
|
32
|
-
*/
|
|
33
|
-
constructor (options = {}) {
|
|
34
|
-
this.substitutions = options.substitutions || {}
|
|
35
|
-
this.templateExtensions = options.templateExtensions || TEMPLATE_EXTENSIONS
|
|
36
|
-
this.templateFiles = options.templateFiles || TEMPLATE_FILES
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Factory method, returns an AccountTemplate for a given user account.
|
|
41
|
-
*
|
|
42
|
-
* @param userAccount {UserAccount}
|
|
43
|
-
* @param [options={}] {Object}
|
|
44
|
-
*
|
|
45
|
-
* @return {AccountTemplate}
|
|
46
|
-
*/
|
|
47
|
-
static for (userAccount, options = {}) {
|
|
48
|
-
const substitutions = AccountTemplate.templateSubstitutionsFor(userAccount)
|
|
49
|
-
|
|
50
|
-
options = Object.assign({ substitutions }, options)
|
|
51
|
-
|
|
52
|
-
return new AccountTemplate(options)
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Creates a new account directory by copying the account template to a new
|
|
57
|
-
* destination (the account dir path).
|
|
58
|
-
*
|
|
59
|
-
* @param templatePath {string}
|
|
60
|
-
* @param accountPath {string}
|
|
61
|
-
*
|
|
62
|
-
* @return {Promise}
|
|
63
|
-
*/
|
|
64
|
-
static copyTemplateDir (templatePath, accountPath) {
|
|
65
|
-
return fsUtils.copyTemplateDir(templatePath, accountPath)
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Returns a template substitutions key/value object for a given user account.
|
|
70
|
-
*
|
|
71
|
-
* @param userAccount {UserAccount}
|
|
72
|
-
*
|
|
73
|
-
* @return {Object}
|
|
74
|
-
*/
|
|
75
|
-
static templateSubstitutionsFor (userAccount) {
|
|
76
|
-
const webUri = new URL(userAccount.webId)
|
|
77
|
-
const podRelWebId = userAccount.webId.replace(webUri.origin, '')
|
|
78
|
-
const substitutions = {
|
|
79
|
-
name: userAccount.displayName,
|
|
80
|
-
webId: userAccount.externalWebId ? userAccount.webId : podRelWebId,
|
|
81
|
-
email: userAccount.email,
|
|
82
|
-
idp: userAccount.idp
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
return substitutions
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Returns a flat list of all the files in an account dir (and all its subdirs).
|
|
90
|
-
*
|
|
91
|
-
* @param accountPath {string}
|
|
92
|
-
*
|
|
93
|
-
* @return {Promise<Array<string>>}
|
|
94
|
-
*/
|
|
95
|
-
readAccountFiles (accountPath) {
|
|
96
|
-
return new Promise((resolve, reject) => {
|
|
97
|
-
recursiveRead(accountPath, (error, files) => {
|
|
98
|
-
if (error) { return reject(error) }
|
|
99
|
-
|
|
100
|
-
resolve(files)
|
|
101
|
-
})
|
|
102
|
-
})
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Returns a list of all of the files in an account dir that are likely to
|
|
107
|
-
* contain Handlebars templates (and which need to be processed).
|
|
108
|
-
*
|
|
109
|
-
* @param accountPath {string}
|
|
110
|
-
*
|
|
111
|
-
* @return {Promise<Array<string>>}
|
|
112
|
-
*/
|
|
113
|
-
readTemplateFiles (accountPath) {
|
|
114
|
-
return this.readAccountFiles(accountPath)
|
|
115
|
-
.then(files => {
|
|
116
|
-
return files.filter((file) => { return this.isTemplate(file) })
|
|
117
|
-
})
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
/**
|
|
121
|
-
* Reads and processes each file in a user account that is likely to contain
|
|
122
|
-
* Handlebars templates. Performs template substitutions on each one.
|
|
123
|
-
*
|
|
124
|
-
* @param accountPath {string}
|
|
125
|
-
*
|
|
126
|
-
* @return {Promise}
|
|
127
|
-
*/
|
|
128
|
-
processAccount (accountPath) {
|
|
129
|
-
return this.readTemplateFiles(accountPath)
|
|
130
|
-
.then(files => Promise.all(files.map(path => templateUtils.processHandlebarFile(path, this.substitutions))))
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
/**
|
|
134
|
-
* Tests whether a given file path is a template file (and so should be
|
|
135
|
-
* processed by Handlebars).
|
|
136
|
-
*
|
|
137
|
-
* @param filePath {string}
|
|
138
|
-
*
|
|
139
|
-
* @return {boolean}
|
|
140
|
-
*/
|
|
141
|
-
isTemplate (filePath) {
|
|
142
|
-
const parsed = path.parse(filePath)
|
|
143
|
-
|
|
144
|
-
const mimeType = mime.lookup(filePath)
|
|
145
|
-
const isRdf = LDP.mimeTypeIsRdf(mimeType)
|
|
146
|
-
const isTemplateExtension = this.templateExtensions.includes(parsed.ext)
|
|
147
|
-
const isTemplateFile = this.templateFiles.includes(parsed.base) ||
|
|
148
|
-
this.templateExtensions.includes(parsed.base) // the '/.acl' case
|
|
149
|
-
|
|
150
|
-
return isRdf || isTemplateExtension || isTemplateFile
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
module.exports = AccountTemplate
|
|
155
|
-
module.exports.TEMPLATE_EXTENSIONS = TEMPLATE_EXTENSIONS
|
|
156
|
-
module.exports.TEMPLATE_FILES = TEMPLATE_FILES
|
|
@@ -1,337 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
|
|
3
|
-
const debug = require('./../debug').authentication
|
|
4
|
-
const validUrl = require('valid-url')
|
|
5
|
-
const webid = require('../webid/tls')
|
|
6
|
-
const provider = require('@solid/oidc-auth-manager/src/preferred-provider')
|
|
7
|
-
const { domainMatches } = require('@solid/oidc-auth-manager/src/oidc-manager')
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Abstract Authenticator class, representing a local login strategy.
|
|
11
|
-
* To subclass, implement `fromParams()` and `findValidUser()`.
|
|
12
|
-
* Used by the `LoginRequest` handler class.
|
|
13
|
-
*
|
|
14
|
-
* @abstract
|
|
15
|
-
* @class Authenticator
|
|
16
|
-
*/
|
|
17
|
-
class Authenticator {
|
|
18
|
-
constructor (options) {
|
|
19
|
-
this.accountManager = options.accountManager
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* @param req {IncomingRequest}
|
|
24
|
-
* @param options {Object}
|
|
25
|
-
*/
|
|
26
|
-
static fromParams (req, options) {
|
|
27
|
-
throw new Error('Must override method')
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* @returns {Promise<UserAccount>}
|
|
32
|
-
*/
|
|
33
|
-
findValidUser () {
|
|
34
|
-
throw new Error('Must override method')
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Authenticates user via Username+Password.
|
|
40
|
-
*/
|
|
41
|
-
class PasswordAuthenticator extends Authenticator {
|
|
42
|
-
/**
|
|
43
|
-
* @constructor
|
|
44
|
-
* @param options {Object}
|
|
45
|
-
*
|
|
46
|
-
* @param [options.username] {string} Unique identifier submitted by user
|
|
47
|
-
* from the Login form. Can be one of:
|
|
48
|
-
* - An account name (e.g. 'alice'), if server is in Multi-User mode
|
|
49
|
-
* - A WebID URI (e.g. 'https://alice.example.com/#me')
|
|
50
|
-
*
|
|
51
|
-
* @param [options.password] {string} Plaintext password as submitted by user
|
|
52
|
-
*
|
|
53
|
-
* @param [options.userStore] {UserStore}
|
|
54
|
-
*
|
|
55
|
-
* @param [options.accountManager] {AccountManager}
|
|
56
|
-
*/
|
|
57
|
-
constructor (options) {
|
|
58
|
-
super(options)
|
|
59
|
-
|
|
60
|
-
this.userStore = options.userStore
|
|
61
|
-
this.username = options.username
|
|
62
|
-
this.password = options.password
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Factory method, returns an initialized instance of PasswordAuthenticator
|
|
67
|
-
* from an incoming http request.
|
|
68
|
-
*
|
|
69
|
-
* @param req {IncomingRequest}
|
|
70
|
-
* @param [req.body={}] {Object}
|
|
71
|
-
* @param [req.body.username] {string}
|
|
72
|
-
* @param [req.body.password] {string}
|
|
73
|
-
*
|
|
74
|
-
* @param options {Object}
|
|
75
|
-
*
|
|
76
|
-
* @param [options.accountManager] {AccountManager}
|
|
77
|
-
* @param [options.userStore] {UserStore}
|
|
78
|
-
*
|
|
79
|
-
* @return {PasswordAuthenticator}
|
|
80
|
-
*/
|
|
81
|
-
static fromParams (req, options) {
|
|
82
|
-
const body = req.body || {}
|
|
83
|
-
|
|
84
|
-
options.username = body.username
|
|
85
|
-
options.password = body.password
|
|
86
|
-
|
|
87
|
-
return new PasswordAuthenticator(options)
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Ensures required parameters are present,
|
|
92
|
-
* and throws an error if not.
|
|
93
|
-
*
|
|
94
|
-
* @throws {Error} If missing required params
|
|
95
|
-
*/
|
|
96
|
-
validate () {
|
|
97
|
-
let error
|
|
98
|
-
|
|
99
|
-
if (!this.username) {
|
|
100
|
-
error = new Error('Username required')
|
|
101
|
-
error.statusCode = 400
|
|
102
|
-
throw error
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
if (!this.password) {
|
|
106
|
-
error = new Error('Password required')
|
|
107
|
-
error.statusCode = 400
|
|
108
|
-
throw error
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* Loads a user from the user store, and if one is found and the
|
|
114
|
-
* password matches, returns a `UserAccount` instance for that user.
|
|
115
|
-
*
|
|
116
|
-
* @throws {Error} If failures to load user are encountered
|
|
117
|
-
*
|
|
118
|
-
* @return {Promise<UserAccount>}
|
|
119
|
-
*/
|
|
120
|
-
findValidUser () {
|
|
121
|
-
let error
|
|
122
|
-
let userOptions
|
|
123
|
-
|
|
124
|
-
return Promise.resolve()
|
|
125
|
-
.then(() => this.validate())
|
|
126
|
-
.then(() => {
|
|
127
|
-
if (validUrl.isUri(this.username)) {
|
|
128
|
-
// A WebID URI was entered into the username field
|
|
129
|
-
userOptions = { webId: this.username }
|
|
130
|
-
} else {
|
|
131
|
-
// A regular username
|
|
132
|
-
userOptions = { username: this.username }
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
const user = this.accountManager.userAccountFrom(userOptions)
|
|
136
|
-
|
|
137
|
-
debug(`Attempting to login user: ${user.id}`)
|
|
138
|
-
|
|
139
|
-
return this.userStore.findUser(user.id)
|
|
140
|
-
})
|
|
141
|
-
.then(foundUser => {
|
|
142
|
-
if (!foundUser) {
|
|
143
|
-
// CWE - CWE-200: Exposure of Sensitive Information to an Unauthorized Actor (4.13)
|
|
144
|
-
// https://cwe.mitre.org/data/definitions/200.html
|
|
145
|
-
error = new Error('Invalid username/password combination.') // no detail for security 'No user found for that username')
|
|
146
|
-
error.statusCode = 400
|
|
147
|
-
throw error
|
|
148
|
-
}
|
|
149
|
-
if (foundUser.link) {
|
|
150
|
-
throw new Error('Linked users not currently supported, sorry (external WebID without TLS?)')
|
|
151
|
-
}
|
|
152
|
-
return this.userStore.matchPassword(foundUser, this.password)
|
|
153
|
-
})
|
|
154
|
-
.then(validUser => {
|
|
155
|
-
if (!validUser) {
|
|
156
|
-
// CWE - CWE-200: Exposure of Sensitive Information to an Unauthorized Actor (4.13)
|
|
157
|
-
// https://cwe.mitre.org/data/definitions/200.html
|
|
158
|
-
error = new Error('Invalid username/password combination.') // no detail for security 'User found but no password match')
|
|
159
|
-
error.statusCode = 400
|
|
160
|
-
throw error
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
debug('User found, password matches')
|
|
164
|
-
|
|
165
|
-
return this.accountManager.userAccountFrom(validUser)
|
|
166
|
-
})
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Authenticates a user via a WebID-TLS client side certificate.
|
|
172
|
-
*/
|
|
173
|
-
class TlsAuthenticator extends Authenticator {
|
|
174
|
-
/**
|
|
175
|
-
* @constructor
|
|
176
|
-
* @param options {Object}
|
|
177
|
-
*
|
|
178
|
-
* @param [options.accountManager] {AccountManager}
|
|
179
|
-
*
|
|
180
|
-
* @param [options.connection] {Socket} req.connection
|
|
181
|
-
*/
|
|
182
|
-
constructor (options) {
|
|
183
|
-
super(options)
|
|
184
|
-
|
|
185
|
-
this.connection = options.connection
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* Factory method, returns an initialized instance of TlsAuthenticator
|
|
190
|
-
* from an incoming http request.
|
|
191
|
-
*
|
|
192
|
-
* @param req {IncomingRequest}
|
|
193
|
-
* @param req.connection {Socket}
|
|
194
|
-
*
|
|
195
|
-
* @param options {Object}
|
|
196
|
-
* @param [options.accountManager] {AccountManager}
|
|
197
|
-
*
|
|
198
|
-
* @return {TlsAuthenticator}
|
|
199
|
-
*/
|
|
200
|
-
static fromParams (req, options) {
|
|
201
|
-
options.connection = req.connection
|
|
202
|
-
|
|
203
|
-
return new TlsAuthenticator(options)
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
/**
|
|
207
|
-
* Requests a client certificate from the current TLS connection via
|
|
208
|
-
* renegotiation, extracts and verifies the user's WebID URI,
|
|
209
|
-
* and makes sure that WebID is hosted on this server.
|
|
210
|
-
*
|
|
211
|
-
* @throws {Error} If error is encountered extracting the WebID URI from
|
|
212
|
-
* certificate, or if the user's account is hosted by a remote system.
|
|
213
|
-
*
|
|
214
|
-
* @return {Promise<UserAccount>}
|
|
215
|
-
*/
|
|
216
|
-
findValidUser () {
|
|
217
|
-
return this.renegotiateTls()
|
|
218
|
-
|
|
219
|
-
.then(() => this.getCertificate())
|
|
220
|
-
|
|
221
|
-
.then(cert => this.extractWebId(cert))
|
|
222
|
-
|
|
223
|
-
.then(webId => this.loadUser(webId))
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
/**
|
|
227
|
-
* Renegotiates the current TLS connection to ask for a client certificate.
|
|
228
|
-
*
|
|
229
|
-
* @throws {Error}
|
|
230
|
-
*
|
|
231
|
-
* @returns {Promise}
|
|
232
|
-
*/
|
|
233
|
-
renegotiateTls () {
|
|
234
|
-
const connection = this.connection
|
|
235
|
-
|
|
236
|
-
return new Promise((resolve, reject) => {
|
|
237
|
-
// Typically, certificates for WebID-TLS are not signed or self-signed,
|
|
238
|
-
// and would hence be rejected by Node.js for security reasons.
|
|
239
|
-
// However, since WebID-TLS instead dereferences the profile URL to validate ownership,
|
|
240
|
-
// we can safely skip the security check.
|
|
241
|
-
connection.renegotiate({ requestCert: true, rejectUnauthorized: false }, (error) => {
|
|
242
|
-
if (error) {
|
|
243
|
-
debug('Error renegotiating TLS:', error)
|
|
244
|
-
|
|
245
|
-
return reject(error)
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
resolve()
|
|
249
|
-
})
|
|
250
|
-
})
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
/**
|
|
254
|
-
* Requests and returns a client TLS certificate from the current connection.
|
|
255
|
-
*
|
|
256
|
-
* @throws {Error} If no certificate is presented, or if it is empty.
|
|
257
|
-
*
|
|
258
|
-
* @return {Promise<X509Certificate|null>}
|
|
259
|
-
*/
|
|
260
|
-
getCertificate () {
|
|
261
|
-
const certificate = this.connection.getPeerCertificate()
|
|
262
|
-
|
|
263
|
-
if (!certificate || !Object.keys(certificate).length) {
|
|
264
|
-
debug('No client certificate detected')
|
|
265
|
-
|
|
266
|
-
throw new Error('No client certificate detected. ' +
|
|
267
|
-
'(You may need to restart your browser to retry.)')
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
return certificate
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
/**
|
|
274
|
-
* Extracts (and verifies) the WebID URI from a client certificate.
|
|
275
|
-
*
|
|
276
|
-
* @param certificate {X509Certificate}
|
|
277
|
-
*
|
|
278
|
-
* @return {Promise<string>} WebID URI
|
|
279
|
-
*/
|
|
280
|
-
extractWebId (certificate) {
|
|
281
|
-
return new Promise((resolve, reject) => {
|
|
282
|
-
this.verifyWebId(certificate, (error, webId) => {
|
|
283
|
-
if (error) {
|
|
284
|
-
debug('Error processing certificate:', error)
|
|
285
|
-
|
|
286
|
-
return reject(error)
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
resolve(webId)
|
|
290
|
-
})
|
|
291
|
-
})
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
/**
|
|
295
|
-
* Performs WebID-TLS verification (requests the WebID Profile from the
|
|
296
|
-
* WebID URI extracted from certificate, and makes sure the public key
|
|
297
|
-
* from the profile matches the key from certificate).
|
|
298
|
-
*
|
|
299
|
-
* @param certificate {X509Certificate}
|
|
300
|
-
* @param callback {Function} Gets invoked with signature `callback(error, webId)`
|
|
301
|
-
*/
|
|
302
|
-
verifyWebId (certificate, callback) {
|
|
303
|
-
debug('Verifying WebID URI')
|
|
304
|
-
|
|
305
|
-
webid.verify(certificate, callback)
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
discoverProviderFor (webId) {
|
|
309
|
-
return provider.discoverProviderFor(webId)
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
/**
|
|
313
|
-
* Returns a user account instance for a given Web ID.
|
|
314
|
-
*
|
|
315
|
-
* @param webId {string}
|
|
316
|
-
*
|
|
317
|
-
* @return {UserAccount}
|
|
318
|
-
*/
|
|
319
|
-
loadUser (webId) {
|
|
320
|
-
const serverUri = this.accountManager.host.serverUri
|
|
321
|
-
|
|
322
|
-
if (domainMatches(serverUri, webId)) {
|
|
323
|
-
// This is a locally hosted Web ID
|
|
324
|
-
return this.accountManager.userAccountFrom({ webId })
|
|
325
|
-
} else {
|
|
326
|
-
debug(`WebID URI ${JSON.stringify(webId)} is not a local account, using it as an external WebID`)
|
|
327
|
-
|
|
328
|
-
return this.accountManager.userAccountFrom({ webId, username: webId, externalWebId: true })
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
module.exports = {
|
|
334
|
-
Authenticator,
|
|
335
|
-
PasswordAuthenticator,
|
|
336
|
-
TlsAuthenticator
|
|
337
|
-
}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
/* eslint-disable node/no-deprecated-api */
|
|
3
|
-
|
|
4
|
-
const url = require('url')
|
|
5
|
-
const path = require('path')
|
|
6
|
-
const debug = require('../debug').authentication
|
|
7
|
-
|
|
8
|
-
const OidcManager = require('@solid/oidc-auth-manager')
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Returns an instance of the OIDC Authentication Manager, initialized from
|
|
12
|
-
* argv / config.json server parameters.
|
|
13
|
-
*
|
|
14
|
-
* @param argv {Object} Config hashmap
|
|
15
|
-
*
|
|
16
|
-
* @param argv.host {SolidHost} Initialized SolidHost instance, including
|
|
17
|
-
* `serverUri`.
|
|
18
|
-
*
|
|
19
|
-
* @param [argv.dbPath='./db/oidc'] {string} Path to the auth-related storage
|
|
20
|
-
* directory (users, tokens, client registrations, etc, will be stored there).
|
|
21
|
-
*
|
|
22
|
-
* @param argv.saltRounds {number} Number of bcrypt password salt rounds
|
|
23
|
-
*
|
|
24
|
-
* @param [argv.delayBeforeRegisteringInitialClient] {number} Number of
|
|
25
|
-
* milliseconds to delay before initializing a local RP client.
|
|
26
|
-
*
|
|
27
|
-
* @return {OidcManager} Initialized instance, includes a UserStore,
|
|
28
|
-
* OIDC Clients store, a Resource Authenticator, and an OIDC Provider.
|
|
29
|
-
*/
|
|
30
|
-
function fromServerConfig (argv) {
|
|
31
|
-
const providerUri = argv.host.serverUri
|
|
32
|
-
const authCallbackUri = url.resolve(providerUri, '/api/oidc/rp')
|
|
33
|
-
const postLogoutUri = url.resolve(providerUri, '/goodbye')
|
|
34
|
-
|
|
35
|
-
const dbPath = path.join(argv.dbPath, 'oidc')
|
|
36
|
-
|
|
37
|
-
const options = {
|
|
38
|
-
debug,
|
|
39
|
-
providerUri,
|
|
40
|
-
dbPath,
|
|
41
|
-
authCallbackUri,
|
|
42
|
-
postLogoutUri,
|
|
43
|
-
saltRounds: argv.saltRounds,
|
|
44
|
-
delayBeforeRegisteringInitialClient: argv.delayBeforeRegisteringInitialClient,
|
|
45
|
-
host: { debug }
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
return OidcManager.from(options)
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
module.exports = {
|
|
52
|
-
fromServerConfig
|
|
53
|
-
}
|
package/lib/models/solid-host.js
DELETED
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
'use strict'
|
|
2
|
-
/* eslint-disable node/no-deprecated-api */
|
|
3
|
-
|
|
4
|
-
const url = require('url')
|
|
5
|
-
const defaults = require('../../config/defaults')
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Represents the URI that a Solid server is installed on, and manages user
|
|
9
|
-
* account URI creation.
|
|
10
|
-
*
|
|
11
|
-
* @class SolidHost
|
|
12
|
-
*/
|
|
13
|
-
class SolidHost {
|
|
14
|
-
/**
|
|
15
|
-
* @constructor
|
|
16
|
-
* @param [options={}]
|
|
17
|
-
* @param [options.port] {number}
|
|
18
|
-
* @param [options.serverUri] {string} Fully qualified URI that this Solid
|
|
19
|
-
* server is listening on, e.g. `https://solid.community`
|
|
20
|
-
* @param [options.live] {boolean} Whether to turn on WebSockets / LDP live
|
|
21
|
-
* @param [options.root] {string} Path to root data directory
|
|
22
|
-
* @param [options.multiuser] {boolean} Multiuser mode
|
|
23
|
-
* @param [options.webid] {boolean} Enable WebID-related functionality
|
|
24
|
-
* (account creation and authentication)
|
|
25
|
-
*/
|
|
26
|
-
constructor (options = {}) {
|
|
27
|
-
this.port = options.port || defaults.port
|
|
28
|
-
this.serverUri = options.serverUri || defaults.serverUri
|
|
29
|
-
|
|
30
|
-
this.parsedUri = url.parse(this.serverUri)
|
|
31
|
-
this.host = this.parsedUri.host
|
|
32
|
-
this.hostname = this.parsedUri.hostname
|
|
33
|
-
this.live = options.live
|
|
34
|
-
this.root = options.root
|
|
35
|
-
this.multiuser = options.multiuser
|
|
36
|
-
this.webid = options.webid
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Factory method, returns an instance of `SolidHost`.
|
|
41
|
-
*
|
|
42
|
-
* @param [options={}] {Object} See `constructor()` docstring.
|
|
43
|
-
*
|
|
44
|
-
* @return {SolidHost}
|
|
45
|
-
*/
|
|
46
|
-
static from (options = {}) {
|
|
47
|
-
return new SolidHost(options)
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Composes and returns an account URI for a given username, in multi-user mode.
|
|
52
|
-
* Usage:
|
|
53
|
-
*
|
|
54
|
-
* ```
|
|
55
|
-
* // host.serverUri === 'https://example.com'
|
|
56
|
-
*
|
|
57
|
-
* host.accountUriFor('alice') // -> 'https://alice.example.com'
|
|
58
|
-
* ```
|
|
59
|
-
*
|
|
60
|
-
* @param accountName {string}
|
|
61
|
-
*
|
|
62
|
-
* @throws {TypeError} If no accountName given, or if serverUri not initialized
|
|
63
|
-
* @return {string}
|
|
64
|
-
*/
|
|
65
|
-
accountUriFor (accountName) {
|
|
66
|
-
if (!accountName) {
|
|
67
|
-
throw TypeError('Cannot construct uri for blank account name')
|
|
68
|
-
}
|
|
69
|
-
if (!this.parsedUri) {
|
|
70
|
-
throw TypeError('Cannot construct account, host not initialized with serverUri')
|
|
71
|
-
}
|
|
72
|
-
return this.parsedUri.protocol + '//' + accountName + '.' + this.host
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Determines whether the given user is allowed to restore a session
|
|
77
|
-
* from the given origin.
|
|
78
|
-
*
|
|
79
|
-
* @param userId {?string}
|
|
80
|
-
* @param origin {?string}
|
|
81
|
-
* @return {boolean}
|
|
82
|
-
*/
|
|
83
|
-
allowsSessionFor (userId, origin, trustedOrigins) {
|
|
84
|
-
// Allow no user or an empty origin
|
|
85
|
-
if (!userId || !origin) return true
|
|
86
|
-
// Allow the server and subdomains
|
|
87
|
-
const originHost = getHostName(origin)
|
|
88
|
-
const serverHost = getHostName(this.serverUri)
|
|
89
|
-
if (originHost === serverHost) return true
|
|
90
|
-
if (originHost.endsWith('.' + serverHost)) return true
|
|
91
|
-
// Allow the user's own domain
|
|
92
|
-
const userHost = getHostName(userId)
|
|
93
|
-
if (originHost === userHost) return true
|
|
94
|
-
if (trustedOrigins.includes(origin)) return true
|
|
95
|
-
return false
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
/**
|
|
99
|
-
* Returns the /authorize endpoint URL object (used in login requests, etc).
|
|
100
|
-
*
|
|
101
|
-
* @return {URL}
|
|
102
|
-
*/
|
|
103
|
-
get authEndpoint () {
|
|
104
|
-
const authUrl = url.resolve(this.serverUri, '/authorize')
|
|
105
|
-
return url.parse(authUrl)
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Returns a cookie domain, based on the current host's serverUri.
|
|
110
|
-
*
|
|
111
|
-
* @return {string|null}
|
|
112
|
-
*/
|
|
113
|
-
get cookieDomain () {
|
|
114
|
-
let cookieDomain = null
|
|
115
|
-
|
|
116
|
-
if (this.hostname.split('.').length > 1) {
|
|
117
|
-
// For single-level domains like 'localhost', do not set the cookie domain
|
|
118
|
-
// See section on 'domain' attribute at https://curl.haxx.se/rfc/cookie_spec.html
|
|
119
|
-
cookieDomain = '.' + this.hostname
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
return cookieDomain
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
function getHostName (url) {
|
|
127
|
-
const match = url.match(/^\w+:\/*([^/]+)/)
|
|
128
|
-
return match ? match[1] : ''
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
module.exports = SolidHost
|