solid-server 5.8.7 → 5.8.8-8d509db1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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-2254-1766613200322-0.json +1 -0
- package/coverage/tmp/coverage-2255-1766613179053-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.js → get.mjs} +31 -35
- 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 +46 -26
- 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 +573 -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_30860bb5cf6ba07e80ed7b2e7178c7ad.json +1 -0
- package/test/resources/accounts/db/oidc/op/provider.json +419 -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 +419 -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_e46bcfe080c59f5cbb53a559d6a272cb.json +1 -0
- package/test/resources/accounts-scenario/alice/db/oidc/op/provider.json +417 -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_e7fd102ec26a3dcd5916751e01a62315.json +1 -0
- package/test/resources/accounts-scenario/bob/db/oidc/op/provider.json +417 -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_0eec962830f849876695b69df76a3137.json +1 -0
- package/test/resources/accounts-scenario/charlie/db/oidc/op/provider.json +415 -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_7d536a1f8c6eb86f41261e171a8af79a.json +1 -0
- package/test/resources/accounts-strict-origin-off/alice/db/oidc/op/provider.json +419 -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_0ed30b9e076814c6f6445582302487c2.json +1 -0
- package/test/resources/accounts-strict-origin-off/bob/db/oidc/op/provider.json +419 -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/tls/index.js +0 -185
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
test: ## run testinfra tests against the project
|
|
2
|
+
docker run --rm -t \
|
|
3
|
+
-v $(shell pwd):/project \
|
|
4
|
+
-v /var/run/docker.sock:/var/run/docker.sock:ro \
|
|
5
|
+
-e SOLID_SERVER_VERSION="${SOLID_SERVER_VERSION}" \
|
|
6
|
+
aveltens/docker-testinfra
|
|
7
|
+
|
|
8
|
+
lint: ## run hadolint against the Dockerfile
|
|
9
|
+
docker run --rm -i hadolint/hadolint < src/Dockerfile
|
|
10
|
+
|
|
11
|
+
build: ## build the docker image
|
|
12
|
+
cd src && docker build --tag nodesolidserver/node-solid-server .
|
|
13
|
+
|
|
14
|
+
inspect: build ## run a shell in the docker image
|
|
15
|
+
docker run --rm -it --entrypoint sh nodesolidserver/node-solid-server
|
|
16
|
+
|
|
17
|
+
start: build ## start solid-server docker container
|
|
18
|
+
docker run --rm \
|
|
19
|
+
-it -d \
|
|
20
|
+
-p 8443:8443 \
|
|
21
|
+
-u "$(id -u):$(id -g)" \
|
|
22
|
+
-v $(shell pwd)/data:/opt/solid/data \
|
|
23
|
+
--name solid-server \
|
|
24
|
+
nodesolidserver/node-solid-server
|
|
25
|
+
|
|
26
|
+
stop: ## stop the solid-server docker container
|
|
27
|
+
docker stop solid-server
|
|
28
|
+
|
|
29
|
+
attach: ## execute a shell in the running solid-server docker container
|
|
30
|
+
docker exec -it solid-server sh
|
|
31
|
+
|
|
32
|
+
.PHONY: test build inspect run attach
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# NSS Docker image
|
|
2
|
+
|
|
3
|
+
Containerized version of node-solid-server
|
|
4
|
+
|
|
5
|
+
## How to use
|
|
6
|
+
|
|
7
|
+
For quickly trying out this image or solid-server in general you can run:
|
|
8
|
+
```bash
|
|
9
|
+
docker run -p 8443:8443 nodesolidserver/node-solid-server
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
You will be able to access the server via `https://localhost:8443` then. It will use auto-generated self-signed certificates and is **not suited for production use**. For a production server you will have to create some real certificates and configure environment variables, like SOLID_SERVER_URI, SOLID_SSL_KEY and SOLID_SSL_CERT. Take a look at the examples folder [at GitHub](https://github.com/angelo-v/docker-solid-server/tree/master/examples) for details.
|
|
13
|
+
|
|
14
|
+
### Environment variables
|
|
15
|
+
|
|
16
|
+
All solid configuration flags can be set by an equivalent environment variable.
|
|
17
|
+
The official solid-server documentation
|
|
18
|
+
[explains them in detail](https://github.com/solid/node-solid-server#extra-flags-expert).
|
|
19
|
+
|
|
20
|
+
### Docker compose
|
|
21
|
+
|
|
22
|
+
For a productive setup you may want to use docker-compose. Example setups can be found
|
|
23
|
+
in the [examples folder](https://github.com/angelo-v/docker-solid-server/tree/master/examples). Here is an overview of what is in there:
|
|
24
|
+
|
|
25
|
+
#### Simple setup without proxy
|
|
26
|
+
|
|
27
|
+
`./examples/docker-compose.simple.yml`
|
|
28
|
+
|
|
29
|
+
Run solid-server directly on HTTPS port 443 without a proxy in between.
|
|
30
|
+
You will need to have your certificates ready and mount them into the container.
|
|
31
|
+
|
|
32
|
+
#### Running solid behind nginx proxy
|
|
33
|
+
|
|
34
|
+
`./examples/docker-compose.nginx.yml`
|
|
35
|
+
|
|
36
|
+
Run solid-server on port 8443 behind a nginx proxy on 443. You will need to setup an nginx container with letsencrypt companion [as described here](https://github.com/JrCs/docker-letsencrypt-nginx-proxy-companion).
|
|
37
|
+
|
|
38
|
+
When using nginx to proxy HTTPS connections to Solid you will need to specify HTTPS in the local service URI:
|
|
39
|
+
|
|
40
|
+
`proxy_pass https://127.0.0.1:8443;`
|
|
41
|
+
|
|
42
|
+
This approach is useful if you do not wish to grant Solid access to your HTTPS certificates, as nginx does not validate
|
|
43
|
+
the self-signed certificates that Solid generates for its proxy_pass connection.
|
|
44
|
+
|
|
45
|
+
#### All-in one nginx proxy + letsencrypt + solid server
|
|
46
|
+
|
|
47
|
+
`./examples/docker-compose.all-in-one.yml`
|
|
48
|
+
|
|
49
|
+
Run solid-server on port 8443 behind a [nginx proxy](https://hub.docker.com/r/jwilder/nginx-proxy/) on 443, including
|
|
50
|
+
certificate generation via [letsencrypt companion](https://github.com/JrCs/docker-letsencrypt-nginx-proxy-companion).
|
|
51
|
+
|
|
52
|
+
#### Other setups
|
|
53
|
+
|
|
54
|
+
The setup you need is not presented here? Feel free to ask, or provide a Pull Request
|
|
55
|
+
with your solution.
|
|
56
|
+
|
|
57
|
+
## Feedback & Discussion
|
|
58
|
+
|
|
59
|
+
There is a [topic in the Solid Forum](https://forum.solidproject.org/t/official-solid-docker-image/748/5),
|
|
60
|
+
you are welcome to join in.
|
|
61
|
+
|
|
62
|
+
## Contributing
|
|
63
|
+
|
|
64
|
+
If you would like to contribute to the development of this image,
|
|
65
|
+
see [CONTRIBUTING.md](./CONTRIBUTING.md)
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# This example assumes, that you are not running another application or proxy on ports 80 / 443.
|
|
2
|
+
# It provides an all-in-one solution to start a docker-server together with an nginx proxy and
|
|
3
|
+
# automatic letsencrypt certificate generation and renewal.
|
|
4
|
+
#
|
|
5
|
+
# It is based on https://github.com/JrCs/docker-letsencrypt-nginx-proxy-companion/blob/master/docs/Docker-Compose.md
|
|
6
|
+
#
|
|
7
|
+
# Adjust any line that is commented with (!):
|
|
8
|
+
# 1. Change any occurrence of the domain `solid.example` to your actual domain
|
|
9
|
+
# 2. Adjust the `latest` tag to a specific version you want to use.
|
|
10
|
+
|
|
11
|
+
version: '3.7'
|
|
12
|
+
services:
|
|
13
|
+
nginx:
|
|
14
|
+
container_name: nginx
|
|
15
|
+
image: jwilder/nginx-proxy:latest
|
|
16
|
+
restart: always
|
|
17
|
+
ports:
|
|
18
|
+
- "80:80"
|
|
19
|
+
- "443:443"
|
|
20
|
+
volumes:
|
|
21
|
+
- nginx-conf:/etc/nginx/conf.d
|
|
22
|
+
- vhostd:/etc/nginx/vhost.d
|
|
23
|
+
- html:/usr/share/nginx/html
|
|
24
|
+
- /var/run/docker.sock:/tmp/docker.sock:ro
|
|
25
|
+
- certs:/etc/nginx/certs:ro
|
|
26
|
+
|
|
27
|
+
letsencrypt:
|
|
28
|
+
container_name: letsencrypt
|
|
29
|
+
image: jrcs/letsencrypt-nginx-proxy-companion:latest
|
|
30
|
+
restart: always
|
|
31
|
+
environment:
|
|
32
|
+
- "NGINX_PROXY_CONTAINER=nginx"
|
|
33
|
+
volumes:
|
|
34
|
+
- nginx-conf:/etc/nginx/conf.d
|
|
35
|
+
- vhostd:/etc/nginx/vhost.d
|
|
36
|
+
- html:/usr/share/nginx/html
|
|
37
|
+
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
38
|
+
- certs:/etc/nginx/certs
|
|
39
|
+
|
|
40
|
+
server:
|
|
41
|
+
image: nodesolidserver/node-solid-server:latest # (!) use specific version tag here
|
|
42
|
+
|
|
43
|
+
# this ensures automatic container start, when host reboots
|
|
44
|
+
restart: always
|
|
45
|
+
|
|
46
|
+
expose:
|
|
47
|
+
- 8443
|
|
48
|
+
|
|
49
|
+
volumes:
|
|
50
|
+
# mount local directories to the container
|
|
51
|
+
# (!) the host directories have to exist and be owned by UID 1000
|
|
52
|
+
- /opt/solid/data:/opt/solid/data
|
|
53
|
+
- /opt/solid/.db:/opt/solid/.db
|
|
54
|
+
- /opt/solid/config:/opt/solid/config
|
|
55
|
+
- certs:/opt/solid/certs
|
|
56
|
+
|
|
57
|
+
environment:
|
|
58
|
+
# (!) use your actual SOLID_SERVER_URI
|
|
59
|
+
- "SOLID_SERVER_URI=https://solid.example"
|
|
60
|
+
# (!) adjust path to the letsencrypt key and cert
|
|
61
|
+
- "SOLID_SSL_KEY=/opt/solid/certs/solid.example/key.pem"
|
|
62
|
+
- "SOLID_SSL_CERT=/opt/solid/certs/solid.example/fullchain.pem"
|
|
63
|
+
# (!) use your actual host name
|
|
64
|
+
- "VIRTUAL_HOST=solid.example"
|
|
65
|
+
- "VIRTUAL_PORT=8443"
|
|
66
|
+
- "VIRTUAL_PROTO=https"
|
|
67
|
+
# (!) use your actual host name
|
|
68
|
+
- "LETSENCRYPT_HOST=solid.example"
|
|
69
|
+
# (!) use your actual email
|
|
70
|
+
- "LETSENCRYPT_EMAIL=your@mail.example"
|
|
71
|
+
|
|
72
|
+
volumes:
|
|
73
|
+
nginx-conf:
|
|
74
|
+
vhostd:
|
|
75
|
+
html:
|
|
76
|
+
certs:
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# This example assumes, that you are running a jwilders/nginx proxy
|
|
2
|
+
# with certificate generation by a letsencrypt companion container
|
|
3
|
+
# as described here:
|
|
4
|
+
#
|
|
5
|
+
# https://github.com/JrCs/docker-letsencrypt-nginx-proxy-companion/blob/master/docs/Docker-Compose.md
|
|
6
|
+
#
|
|
7
|
+
# This should provide a docker volume containing the generated certificates.
|
|
8
|
+
# We will use the same cert and key as the webproxy for the actual solid server. While it seems to
|
|
9
|
+
# work, I am not sure if it is actually a good idea. Please file an issue if you want to discuss this.
|
|
10
|
+
|
|
11
|
+
# Adjust any line that is commented with (!):
|
|
12
|
+
# 1. Change any occurrence of the domain `solid.example` to your actual domain
|
|
13
|
+
# 2. Adjust the `latest` tag to a specific version you want to use.
|
|
14
|
+
|
|
15
|
+
version: '3.7'
|
|
16
|
+
services:
|
|
17
|
+
server:
|
|
18
|
+
image: nodesolidserver/node-solid-server:latest # (!) use specific version tag here
|
|
19
|
+
|
|
20
|
+
# this ensures automatic container start, when host reboots
|
|
21
|
+
restart: always
|
|
22
|
+
|
|
23
|
+
expose:
|
|
24
|
+
- 8443
|
|
25
|
+
|
|
26
|
+
volumes:
|
|
27
|
+
# mount local directories to the container
|
|
28
|
+
# (!) the host directories have to exist and be owned by UID 1000
|
|
29
|
+
- /opt/solid/data:/opt/solid/data
|
|
30
|
+
- /opt/solid/.db:/opt/solid/.db
|
|
31
|
+
- /opt/solid/config:/opt/solid/config
|
|
32
|
+
- nginxproxy_certs:/opt/solid/certs
|
|
33
|
+
|
|
34
|
+
environment:
|
|
35
|
+
# (!) use your actual SOLID_SERVER_URI
|
|
36
|
+
- "SOLID_SERVER_URI=https://solid.example"
|
|
37
|
+
# (!) adjust path to the letsencrypt key and cert
|
|
38
|
+
- "SOLID_SSL_KEY=/opt/solid/certs/solid.example/key.pem"
|
|
39
|
+
- "SOLID_SSL_CERT=/opt/solid/certs/solid.example/fullchain.pem"
|
|
40
|
+
# (!) use your actual host name
|
|
41
|
+
- "VIRTUAL_HOST=solid.example"
|
|
42
|
+
- "VIRTUAL_PORT=8443"
|
|
43
|
+
- "VIRTUAL_PROTO=https"
|
|
44
|
+
# (!) use your actual host name
|
|
45
|
+
- "LETSENCRYPT_HOST=solid.example"
|
|
46
|
+
# (!) use your actual email
|
|
47
|
+
- "LETSENCRYPT_EMAIL=your@mail.example"
|
|
48
|
+
volumes:
|
|
49
|
+
# (!) mount certificates from an external volume from your nginx setup
|
|
50
|
+
nginxproxy_certs:
|
|
51
|
+
external: true
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# This file is an example for running solid server directly on port 443 with
|
|
2
|
+
# existing (letsencrypt) certificates and without reverse proxy.
|
|
3
|
+
|
|
4
|
+
# To use it adjust any line that is commented with (!):
|
|
5
|
+
# 1. Change any occurrence of the domain `solid.example` to your actual domain
|
|
6
|
+
# 2. Adjust the `latest` tag to a specific version you want to use.
|
|
7
|
+
|
|
8
|
+
version: '3.7'
|
|
9
|
+
services:
|
|
10
|
+
server:
|
|
11
|
+
image: nodesolidserver/node-solid-server:latest # (!) use specific version tag here
|
|
12
|
+
|
|
13
|
+
# this ensures automatic container start, when host reboots
|
|
14
|
+
restart: always
|
|
15
|
+
|
|
16
|
+
ports:
|
|
17
|
+
- 443:8443
|
|
18
|
+
|
|
19
|
+
volumes:
|
|
20
|
+
# mount local directories to the container
|
|
21
|
+
# (!) the host directories have to exist and be owned by UID 1000
|
|
22
|
+
- /opt/solid/data:/opt/solid/data
|
|
23
|
+
- /opt/solid/.db:/opt/solid/.db
|
|
24
|
+
- /opt/solid/config:/opt/solid/config
|
|
25
|
+
|
|
26
|
+
# (!) mount existing TLS certificates, e.g. from letsencrypt
|
|
27
|
+
# (!) ensure that the key and fullchain files are readable by UID 1000
|
|
28
|
+
- /etc/letsencrypt/live/solid.example/:/opt/solid/certs
|
|
29
|
+
|
|
30
|
+
environment:
|
|
31
|
+
# (!) use your actual SOLID_SERVER_URI
|
|
32
|
+
- "SOLID_SERVER_URI=https://solid.example"
|
|
33
|
+
- "SOLID_SSL_KEY=/opt/solid/certs/key.pem"
|
|
34
|
+
- "SOLID_SSL_CERT=/opt/solid/certs/fullchain.pem"
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
FROM node:20-alpine
|
|
2
|
+
|
|
3
|
+
# hadolint ignore=DL3018
|
|
4
|
+
RUN apk add --no-cache openssl
|
|
5
|
+
|
|
6
|
+
ARG SOLID_SERVER_VERSION=latest
|
|
7
|
+
RUN npm install -g solid-server@${SOLID_SERVER_VERSION}
|
|
8
|
+
|
|
9
|
+
# image configuration
|
|
10
|
+
ENV SOLID_HOME=/opt/solid
|
|
11
|
+
ENV PROCESS_USER=node
|
|
12
|
+
ENV TEMPORARY_CERT_NAME=solid-temporary
|
|
13
|
+
|
|
14
|
+
WORKDIR ${SOLID_HOME}
|
|
15
|
+
COPY ./entrypoint.sh ./entrypoint.sh
|
|
16
|
+
COPY ./checks.sh ./checks.sh
|
|
17
|
+
COPY ./create-temporary-cert.sh ./create-temporary-cert.sh
|
|
18
|
+
RUN chown --recursive ${PROCESS_USER}:${PROCESS_USER} ${SOLID_HOME}
|
|
19
|
+
|
|
20
|
+
USER ${PROCESS_USER}
|
|
21
|
+
|
|
22
|
+
# solid configuration
|
|
23
|
+
ENV SOLID_ROOT=${SOLID_HOME}/data
|
|
24
|
+
ENV SOLID_SSL_KEY=${SOLID_HOME}/${TEMPORARY_CERT_NAME}.key
|
|
25
|
+
ENV SOLID_SSL_CERT=${SOLID_HOME}/${TEMPORARY_CERT_NAME}.crt
|
|
26
|
+
ENV SOLID_PORT=8443
|
|
27
|
+
ENV SOLID_CORS_PROXY=false
|
|
28
|
+
ENV DEBUG=solid:*
|
|
29
|
+
|
|
30
|
+
VOLUME $SOLID_HOME
|
|
31
|
+
|
|
32
|
+
ENTRYPOINT ["./entrypoint.sh"]
|
|
33
|
+
|
|
34
|
+
CMD ["start"]
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
|
|
3
|
+
echo "checking preconditions..."
|
|
4
|
+
|
|
5
|
+
checks_failed=0
|
|
6
|
+
|
|
7
|
+
check_failed()
|
|
8
|
+
{
|
|
9
|
+
checks_failed=$((checks_failed + 1))
|
|
10
|
+
}
|
|
11
|
+
check_if_writable()
|
|
12
|
+
{
|
|
13
|
+
# checks if the given dir is writable, if it exists
|
|
14
|
+
# it's ok if the dir does not exist at all, because it will be created
|
|
15
|
+
# during solid server startup then and have the correct permissions
|
|
16
|
+
dir=$1
|
|
17
|
+
if [ -d "${dir}" ]; then
|
|
18
|
+
if [ -w "${dir}" ]; then
|
|
19
|
+
echo "✓ ${dir} is accessible by $(whoami)"
|
|
20
|
+
else
|
|
21
|
+
echo "✗ ${dir} not writable by $(whoami)"
|
|
22
|
+
check_failed
|
|
23
|
+
fi
|
|
24
|
+
fi
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
check_if_file_readable()
|
|
28
|
+
{
|
|
29
|
+
# checks if the given file exists and is readable
|
|
30
|
+
file=$1
|
|
31
|
+
if [ -e "${file}" ]; then
|
|
32
|
+
if [ -r "${file}" ]; then
|
|
33
|
+
echo "✓ ${file} is accessible by $(whoami)"
|
|
34
|
+
else
|
|
35
|
+
echo "✗ ${file} not readable by $(whoami)"
|
|
36
|
+
check_failed
|
|
37
|
+
fi
|
|
38
|
+
else
|
|
39
|
+
echo "✗ ${file} does not exist"
|
|
40
|
+
check_failed
|
|
41
|
+
fi
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
check_if_writable "${SOLID_HOME}/config"
|
|
45
|
+
check_if_writable "${SOLID_HOME}/data"
|
|
46
|
+
check_if_writable "${SOLID_HOME}/.db"
|
|
47
|
+
check_if_file_readable "${SOLID_SSL_KEY}"
|
|
48
|
+
check_if_file_readable "${SOLID_SSL_CERT}"
|
|
49
|
+
|
|
50
|
+
if [ "$checks_failed" -gt 0 ]; then
|
|
51
|
+
echo "Finished: ERROR"
|
|
52
|
+
exit 1
|
|
53
|
+
else
|
|
54
|
+
echo "Finished: SUCCESS"
|
|
55
|
+
exit 0;
|
|
56
|
+
fi
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/bin/sh
|
|
2
|
+
set -e
|
|
3
|
+
|
|
4
|
+
NAME=$1
|
|
5
|
+
|
|
6
|
+
if [ -z $NAME ]; then
|
|
7
|
+
echo "Usage: ./create-temporary-cert.sh some-name"
|
|
8
|
+
exit 1
|
|
9
|
+
fi
|
|
10
|
+
|
|
11
|
+
openssl req -nodes -x509 -days 3 -newkey rsa:2048 \
|
|
12
|
+
-keyout ./$NAME.key \
|
|
13
|
+
-out ./$NAME.crt \
|
|
14
|
+
-subj "/O=$NAME/OU=$NAME/CN=$NAME"
|
|
File without changes
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import docker
|
|
2
|
+
import pytest
|
|
3
|
+
import os
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
@pytest.fixture(scope="session")
|
|
7
|
+
def client():
|
|
8
|
+
return docker.from_env()
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@pytest.fixture(scope="session")
|
|
12
|
+
def image(client):
|
|
13
|
+
img, _ = client.images.build(path='./src', dockerfile='Dockerfile',
|
|
14
|
+
buildargs={"SOLID_SERVER_VERSION": os.environ['SOLID_SERVER_VERSION']})
|
|
15
|
+
return img
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import docker
|
|
2
|
+
import pytest
|
|
3
|
+
|
|
4
|
+
testinfra_hosts = ['docker://test_container']
|
|
5
|
+
|
|
6
|
+
@pytest.fixture(scope="module", autouse=True)
|
|
7
|
+
def container(client, image):
|
|
8
|
+
container = client.containers.run(
|
|
9
|
+
image.id,
|
|
10
|
+
name="test_container",
|
|
11
|
+
detach=True,
|
|
12
|
+
tty=True,
|
|
13
|
+
entrypoint="sh",
|
|
14
|
+
command="-"
|
|
15
|
+
)
|
|
16
|
+
yield container
|
|
17
|
+
container.remove(force=True)
|
|
18
|
+
|
|
19
|
+
def test_current_user_is_node(host):
|
|
20
|
+
assert host.user().name == "node"
|
|
21
|
+
assert host.user().group == "node"
|
|
22
|
+
|
|
23
|
+
def test_solid_home_dir_exists_and_owned_by_node(host):
|
|
24
|
+
solid_root = host.file("/opt/solid")
|
|
25
|
+
assert solid_root.is_directory
|
|
26
|
+
assert solid_root.user == "node"
|
|
27
|
+
assert solid_root.group == "node"
|
|
28
|
+
|
|
29
|
+
def test_node_command_is_available(host):
|
|
30
|
+
assert host.exists("node")
|
|
31
|
+
|
|
32
|
+
def test_node_version_is_20(host):
|
|
33
|
+
assert host.check_output("node --version").startswith('v20')
|
|
34
|
+
|
|
35
|
+
def test_openssl_command_is_available(host):
|
|
36
|
+
assert host.exists("openssl")
|
|
37
|
+
|
|
38
|
+
def test_entrypoint_exist(host):
|
|
39
|
+
entrypoint = host.file("/opt/solid/entrypoint.sh")
|
|
40
|
+
assert entrypoint.is_file
|
|
41
|
+
assert entrypoint.user == "node"
|
|
42
|
+
assert entrypoint.group == "node"
|
|
43
|
+
|
|
44
|
+
def test_create_temporary_cert_exist(host):
|
|
45
|
+
create_temporary_cert = host.file("/opt/solid/create-temporary-cert.sh")
|
|
46
|
+
assert create_temporary_cert.is_file
|
|
47
|
+
assert create_temporary_cert.user == "node"
|
|
48
|
+
assert create_temporary_cert.group == "node"
|
|
49
|
+
|
|
50
|
+
def test_solid_command_is_available(host):
|
|
51
|
+
assert host.exists("solid")
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# coding=utf-8
|
|
2
|
+
import docker
|
|
3
|
+
import pytest
|
|
4
|
+
|
|
5
|
+
import os
|
|
6
|
+
|
|
7
|
+
from test.wait_for_container import wait_for_container
|
|
8
|
+
|
|
9
|
+
testinfra_hosts = ['docker://test_container']
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@pytest.fixture(scope="module", autouse=True)
|
|
13
|
+
def container(client, image):
|
|
14
|
+
container = client.containers.run(
|
|
15
|
+
image.id,
|
|
16
|
+
name="test_container",
|
|
17
|
+
environment=[
|
|
18
|
+
# just using to files that exist but are not readable by node
|
|
19
|
+
"SOLID_SSL_KEY=/root",
|
|
20
|
+
"SOLID_SSL_CERT=/etc/shadow"
|
|
21
|
+
],
|
|
22
|
+
detach=True,
|
|
23
|
+
tty=True
|
|
24
|
+
)
|
|
25
|
+
wait_for_container(container, "Finished: ERROR")
|
|
26
|
+
yield container
|
|
27
|
+
container.remove(force=True)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def test_container_fails_with_errors(container):
|
|
31
|
+
assert container.status == "created"
|
|
32
|
+
logs = str(container.logs())
|
|
33
|
+
assert "/root not readable by node" in logs
|
|
34
|
+
assert "/etc/shadow not readable by node" in logs
|
|
35
|
+
assert "Finished: ERROR" in logs
|
|
36
|
+
assert not "Finished: SUCCESS" in logs
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# coding=utf-8
|
|
2
|
+
import docker
|
|
3
|
+
import pytest
|
|
4
|
+
|
|
5
|
+
from test.wait_for_container import wait_for_container
|
|
6
|
+
|
|
7
|
+
testinfra_hosts = ['docker://test_container']
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@pytest.fixture(scope="module", autouse=True)
|
|
11
|
+
def container(client, image):
|
|
12
|
+
container = client.containers.run(
|
|
13
|
+
image.id,
|
|
14
|
+
name="test_container",
|
|
15
|
+
volumes={
|
|
16
|
+
'missing_data': {'bind': '/opt/solid/data'},
|
|
17
|
+
'missing_db': {'bind': '/opt/solid/.db'},
|
|
18
|
+
'missing_config': {'bind': '/opt/solid/config'}
|
|
19
|
+
},
|
|
20
|
+
environment=[
|
|
21
|
+
"SOLID_SSL_KEY=/missing/key",
|
|
22
|
+
"SOLID_SSL_CERT=/missing/cert"
|
|
23
|
+
],
|
|
24
|
+
detach=True,
|
|
25
|
+
tty=True
|
|
26
|
+
)
|
|
27
|
+
wait_for_container(container, "Finished: ERROR")
|
|
28
|
+
yield container
|
|
29
|
+
container.remove(force=True)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def test_container_fails_with_errors(container):
|
|
33
|
+
assert container.status == "created"
|
|
34
|
+
logs = str(container.logs())
|
|
35
|
+
assert "/opt/solid/config not writable by node" in logs
|
|
36
|
+
assert "/opt/solid/data not writable by node" in logs
|
|
37
|
+
assert "/opt/solid/.db not writable by node" in logs
|
|
38
|
+
assert "/missing/key does not exist" in logs
|
|
39
|
+
assert "/missing/cert does not exist" in logs
|
|
40
|
+
assert "Finished: ERROR" in logs
|
|
41
|
+
assert not "Finished: SUCCESS" in logs
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
|
|
3
|
+
from test.wait_for_container import wait_for_container
|
|
4
|
+
|
|
5
|
+
testinfra_hosts = ['docker://test_container']
|
|
6
|
+
|
|
7
|
+
@pytest.fixture(scope="module", autouse=True)
|
|
8
|
+
def container(client, image):
|
|
9
|
+
container = client.containers.run(
|
|
10
|
+
image.id,
|
|
11
|
+
name="test_container",
|
|
12
|
+
detach=True,
|
|
13
|
+
tty=True
|
|
14
|
+
)
|
|
15
|
+
wait_for_container(container)
|
|
16
|
+
yield container
|
|
17
|
+
container.remove(force=True)
|
|
18
|
+
|
|
19
|
+
def test_solid_data_dir_exists_and_owned_by_node(host):
|
|
20
|
+
solid_data = host.file("/opt/solid/data/")
|
|
21
|
+
assert solid_data.exists
|
|
22
|
+
assert solid_data.is_directory
|
|
23
|
+
assert solid_data.user == "node"
|
|
24
|
+
assert solid_data.group == "node"
|
|
25
|
+
|
|
26
|
+
def test_solid_db_dir_exists_and_owned_by_node(host):
|
|
27
|
+
solid_db = host.file("/opt/solid/.db/")
|
|
28
|
+
assert solid_db.exists
|
|
29
|
+
assert solid_db.is_directory
|
|
30
|
+
assert solid_db.user == "node"
|
|
31
|
+
assert solid_db.group == "node"
|
|
32
|
+
|
|
33
|
+
def test_solid_config_dir_exists_and_owned_by_node(host):
|
|
34
|
+
solid_config = host.file("/opt/solid/config/")
|
|
35
|
+
assert solid_config.exists
|
|
36
|
+
assert solid_config.is_directory
|
|
37
|
+
assert solid_config.user == "node"
|
|
38
|
+
assert solid_config.group == "node"
|
|
39
|
+
|
|
40
|
+
def test_temporary_tls_cert_exists(host):
|
|
41
|
+
cert = host.file("/opt/solid/solid-temporary.crt")
|
|
42
|
+
assert cert.exists
|
|
43
|
+
assert cert.is_file
|
|
44
|
+
assert cert.user == "node"
|
|
45
|
+
assert cert.group == "node"
|
|
46
|
+
|
|
47
|
+
def test_temporary_tls_key_exists(host):
|
|
48
|
+
key = host.file("/opt/solid/solid-temporary.key")
|
|
49
|
+
assert key.exists
|
|
50
|
+
assert key.is_file
|
|
51
|
+
assert key.user == "node"
|
|
52
|
+
assert key.group == "node"
|
|
53
|
+
|
|
54
|
+
def test_certificate_and_key_are_used(host):
|
|
55
|
+
env = host.check_output("env")
|
|
56
|
+
assert "SOLID_SSL_KEY=/opt/solid/solid-temporary.key" in env
|
|
57
|
+
assert "SOLID_SSL_CERT=/opt/solid/solid-temporary.crt" in env
|
|
58
|
+
|
|
59
|
+
def test_solid_is_running(host):
|
|
60
|
+
solid = host.process.get(comm="node")
|
|
61
|
+
assert solid.args == "node /usr/local/bin/solid start"
|
|
62
|
+
assert solid.user == "node"
|
|
63
|
+
assert solid.group == "node"
|
|
64
|
+
|
|
65
|
+
def test_solid_is_listening_on_port_8443(host):
|
|
66
|
+
assert host.socket("tcp://0.0.0.0:8443").is_listening
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import docker
|
|
2
|
+
import pytest
|
|
3
|
+
|
|
4
|
+
from test.wait_for_container import wait_for_container
|
|
5
|
+
|
|
6
|
+
testinfra_hosts = ['docker://test_container']
|
|
7
|
+
|
|
8
|
+
@pytest.fixture(scope="module", autouse=True)
|
|
9
|
+
def solid_server(client, image):
|
|
10
|
+
container = client.containers.run(
|
|
11
|
+
image.id,
|
|
12
|
+
name="solid_server",
|
|
13
|
+
detach=True,
|
|
14
|
+
tty=True
|
|
15
|
+
)
|
|
16
|
+
wait_for_container(container)
|
|
17
|
+
yield container
|
|
18
|
+
container.remove(force=True)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@pytest.fixture(scope="module", autouse=True)
|
|
22
|
+
def container(client, solid_server):
|
|
23
|
+
container = client.containers.run(
|
|
24
|
+
'alpine',
|
|
25
|
+
name="test_container",
|
|
26
|
+
detach=True,
|
|
27
|
+
tty=True,
|
|
28
|
+
volumes_from=solid_server.id
|
|
29
|
+
)
|
|
30
|
+
yield container
|
|
31
|
+
container.remove(force=True)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def test_solid_data_dir_is_mounted(host):
|
|
35
|
+
solid_data = host.file("/opt/solid/data/")
|
|
36
|
+
assert solid_data.exists
|
|
37
|
+
assert solid_data.is_directory
|
|
38
|
+
assert solid_data.uid == 1000
|
|
39
|
+
assert solid_data.gid == 1000
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def test_solid_db_dir_is_mounted(host):
|
|
43
|
+
solid_db = host.file("/opt/solid/.db/")
|
|
44
|
+
assert solid_db.exists
|
|
45
|
+
assert solid_db.is_directory
|
|
46
|
+
assert solid_db.uid == 1000
|
|
47
|
+
assert solid_db.gid == 1000
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def test_solid_config_dir_is_mounted(host):
|
|
51
|
+
solid_config = host.file("/opt/solid/config/")
|
|
52
|
+
assert solid_config.exists
|
|
53
|
+
assert solid_config.is_directory
|
|
54
|
+
assert solid_config.uid == 1000
|
|
55
|
+
assert solid_config.gid == 1000
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import time
|
|
2
|
+
|
|
3
|
+
def wait_for_container(container, message="running on"):
|
|
4
|
+
count = 0
|
|
5
|
+
while (not message in str(container.logs())) and (count < 10):
|
|
6
|
+
count = count + 1
|
|
7
|
+
time.sleep(1)
|
|
8
|
+
assert message in str(container.logs()), 'Expected message not present until timeout. Waited for "%s"' % message
|
|
File without changes
|
|
File without changes
|
|
File without changes
|