diff --git a/config/app/README.md b/config/app/README.md
index 29bc738f7..1e7b2965a 100644
--- a/config/app/README.md
+++ b/config/app/README.md
@@ -8,4 +8,15 @@ This is the entry point to the main server setup.
## Init
Contains a list of initializer that need to be run when starting the server.
-* *default*: The default setup that makes sure the root container has the necessary resources.
+* *default*: The default setup. The ParallelHandler can be used to add custom Initializers.
+* *initialize-root*: Makes sure the root container has the necessary resources to function properly.
+ This is only relevant if setup is disabled but root container access is still required.
+* *initialize-prefilled-root*: Similar to `initialize-root` but adds some introductory resources to the root container.
+
+## Setup
+Handles the setup page the first time the server is started.
+* *disabled*: Disables the setup page. Root container access will be impossible unless handled by the Init config above.
+ Registration and pod creation is still possible if that feature is enabled.
+* *optional*: Setup is available at `/setup` but the server can already be used.
+ Everyone can access the setup page so make sure to complete that as soon as possible.
+* *required*: All requests will be redirected to the setup page until setup is completed.
diff --git a/config/app/init/default.json b/config/app/init/default.json
index 2eecaf4c5..6a41eecf4 100644
--- a/config/app/init/default.json
+++ b/config/app/init/default.json
@@ -1,8 +1,7 @@
{
"@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^1.0.0/components/context.jsonld",
"import": [
- "files-scs:config/app/init/base/init.json",
- "files-scs:config/app/init/initializers/root.json"
+ "files-scs:config/app/init/base/init.json"
],
"@graph": [
{
@@ -10,7 +9,10 @@
"@id": "urn:solid-server:default:ParallelInitializer",
"@type": "ParallelHandler",
"handlers": [
- { "@id": "urn:solid-server:default:RootInitializer" }
+ {
+ "comment": "This handler is here because having this array empty gives Components.js errors.",
+ "@type": "StaticHandler"
+ }
]
}
]
diff --git a/config/app/init/initialize-prefilled-root.json b/config/app/init/initialize-prefilled-root.json
new file mode 100644
index 000000000..a9ef56542
--- /dev/null
+++ b/config/app/init/initialize-prefilled-root.json
@@ -0,0 +1,17 @@
+{
+ "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^1.0.0/components/context.jsonld",
+ "import": [
+ "files-scs:config/app/init/base/init.json",
+ "files-scs:config/app/init/initializers/prefilled-root.json"
+ ],
+ "@graph": [
+ {
+ "comment": "These handlers are called whenever the server is started, and can be used to ensure that all necessary resources for booting are available.",
+ "@id": "urn:solid-server:default:ParallelInitializer",
+ "@type": "ParallelHandler",
+ "handlers": [
+ { "@id": "urn:solid-server:default:RootInitializer" }
+ ]
+ }
+ ]
+}
diff --git a/config/app/init/initialize-root.json b/config/app/init/initialize-root.json
new file mode 100644
index 000000000..2eecaf4c5
--- /dev/null
+++ b/config/app/init/initialize-root.json
@@ -0,0 +1,17 @@
+{
+ "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^1.0.0/components/context.jsonld",
+ "import": [
+ "files-scs:config/app/init/base/init.json",
+ "files-scs:config/app/init/initializers/root.json"
+ ],
+ "@graph": [
+ {
+ "comment": "These handlers are called whenever the server is started, and can be used to ensure that all necessary resources for booting are available.",
+ "@id": "urn:solid-server:default:ParallelInitializer",
+ "@type": "ParallelHandler",
+ "handlers": [
+ { "@id": "urn:solid-server:default:RootInitializer" }
+ ]
+ }
+ ]
+}
diff --git a/config/app/init/initializers/prefilled-root.json b/config/app/init/initializers/prefilled-root.json
new file mode 100644
index 000000000..ab25afa90
--- /dev/null
+++ b/config/app/init/initializers/prefilled-root.json
@@ -0,0 +1,18 @@
+{
+ "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^1.0.0/components/context.jsonld",
+ "@graph": [
+ {
+ "comment": "Makes sure the root container exists and contains the necessary resources.",
+ "@id": "urn:solid-server:default:RootInitializer",
+ "@type": "RootInitializer",
+ "baseUrl": { "@id": "urn:solid-server:default:variable:baseUrl" },
+ "store": { "@id": "urn:solid-server:default:ResourceStore" },
+ "generator": {
+ "@type": "TemplatedResourcesGenerator",
+ "templateFolder": "@css:templates/root/prefilled",
+ "factory": { "@type": "ExtensionBasedMapperFactory" },
+ "templateEngine": { "@type": "HandlebarsTemplateEngine" }
+ }
+ }
+ ]
+}
diff --git a/config/app/init/initializers/root.json b/config/app/init/initializers/root.json
index ef92f7275..852c44771 100644
--- a/config/app/init/initializers/root.json
+++ b/config/app/init/initializers/root.json
@@ -9,7 +9,7 @@
"store": { "@id": "urn:solid-server:default:ResourceStore" },
"generator": {
"@type": "TemplatedResourcesGenerator",
- "templateFolder": "@css:templates/root",
+ "templateFolder": "@css:templates/root/empty",
"factory": { "@type": "ExtensionBasedMapperFactory" },
"templateEngine": { "@type": "HandlebarsTemplateEngine" }
}
diff --git a/config/app/setup/disabled.json b/config/app/setup/disabled.json
new file mode 100644
index 000000000..93e8e08d4
--- /dev/null
+++ b/config/app/setup/disabled.json
@@ -0,0 +1,13 @@
+{
+ "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^1.0.0/components/context.jsonld",
+ "import": [
+ "files-scs:config/app/init/initializers/root.json"
+ ],
+ "@graph": [
+ {
+ "comment": "Completely disables the setup page.",
+ "@id": "urn:solid-server:default:SetupHandler",
+ "@type": "UnsupportedAsyncHandler"
+ }
+ ]
+}
diff --git a/config/app/setup/handlers/redirect.json b/config/app/setup/handlers/redirect.json
new file mode 100644
index 000000000..35d391b0a
--- /dev/null
+++ b/config/app/setup/handlers/redirect.json
@@ -0,0 +1,14 @@
+{
+ "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^1.0.0/components/context.jsonld",
+ "@graph": [
+ {
+ "comment": "Redirects all request to the setup.",
+ "@id": "urn:solid-server:default:SetupRedirectHandler",
+ "@type": "RedirectAllHttpHandler",
+ "args_baseUrl": { "@id": "urn:solid-server:default:variable:baseUrl" },
+ "args_target": "/setup",
+ "args_targetExtractor": { "@id": "urn:solid-server:default:TargetExtractor" },
+ "args_responseWriter": { "@id": "urn:solid-server:default:ResponseWriter" }
+ },
+ ]
+}
diff --git a/config/app/setup/handlers/setup.json b/config/app/setup/handlers/setup.json
new file mode 100644
index 000000000..a1c82a25e
--- /dev/null
+++ b/config/app/setup/handlers/setup.json
@@ -0,0 +1,34 @@
+{
+ "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^1.0.0/components/context.jsonld",
+ "import": [
+ "files-scs:config/app/init/initializers/root.json"
+ ],
+ "@graph": [
+ {
+ "comment": "Handles everything related to the first-time server setup.",
+ "@id": "urn:solid-server:default:SetupHttpHandler",
+ "@type": "SetupHttpHandler",
+ "args_requestParser": { "@id": "urn:solid-server:default:RequestParser" },
+ "args_errorHandler": { "@id": "urn:solid-server:default:ErrorHandler" },
+ "args_responseWriter": { "@id": "urn:solid-server:default:ResponseWriter" },
+ "args_initializer": { "@id": "urn:solid-server:default:RootInitializer" },
+ "args_registrationManager": { "@id": "urn:solid-server:default:SetupRegistrationManager" },
+ "args_converter": { "@id": "urn:solid-server:default:RepresentationConverter" },
+ "args_storageKey": "setupCompleted-1.0",
+ "args_storage": { "@id": "urn:solid-server:default:SetupStorage" },
+ "args_viewTemplate": "@css:templates/setup/index.html.ejs",
+ "args_responseTemplate": "@css:templates/setup/response.html.ejs"
+ },
+ {
+ "comment": "Separate manager from the RegistrationHandler in case registration is disabled.",
+ "@id": "urn:solid-server:default:SetupRegistrationManager",
+ "@type": "RegistrationManager",
+ "args_baseUrl": { "@id": "urn:solid-server:default:variable:baseUrl" },
+ "args_webIdSuffix": "/profile/card#me",
+ "args_identifierGenerator": { "@id": "urn:solid-server:default:IdentifierGenerator" },
+ "args_ownershipValidator": { "@id": "urn:solid-server:auth:password:OwnershipValidator" },
+ "args_accountStore": { "@id": "urn:solid-server:auth:password:AccountStore" },
+ "args_podManager": { "@id": "urn:solid-server:default:PodManager" }
+ }
+ ]
+}
diff --git a/config/app/setup/optional.json b/config/app/setup/optional.json
new file mode 100644
index 000000000..a52a08a76
--- /dev/null
+++ b/config/app/setup/optional.json
@@ -0,0 +1,24 @@
+{
+ "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^1.0.0/components/context.jsonld",
+ "import": [
+ "files-scs:config/app/setup/handlers/setup.json"
+ ],
+ "@graph": [
+ {
+ "comment": "Combines both the redirect and the setup.",
+ "@id": "urn:solid-server:default:SetupHandler",
+ "@type": "ConditionalHandler",
+ "storageKey": "setupCompleted-1.0",
+ "storageValue": true,
+ "storage": { "@id": "urn:solid-server:default:SetupStorage" },
+ "source": {
+ "@type": "RouterHandler",
+ "args_baseUrl": { "@id": "urn:solid-server:default:variable:baseUrl" },
+ "args_targetExtractor": { "@id": "urn:solid-server:default:TargetExtractor" },
+ "args_allowedMethods": [ "*" ],
+ "args_allowedPathNames": [ "/setup" ],
+ "args_handler": { "@id": "urn:solid-server:default:SetupHttpHandler" }
+ }
+ }
+ ]
+}
diff --git a/config/app/setup/required.json b/config/app/setup/required.json
new file mode 100644
index 000000000..33e4c5c9d
--- /dev/null
+++ b/config/app/setup/required.json
@@ -0,0 +1,31 @@
+{
+ "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^1.0.0/components/context.jsonld",
+ "import": [
+ "files-scs:config/app/setup/handlers/redirect.json",
+ "files-scs:config/app/setup/handlers/setup.json"
+ ],
+ "@graph": [
+ {
+ "comment": "Combines both the redirect and the setup.",
+ "@id": "urn:solid-server:default:SetupHandler",
+ "@type": "ConditionalHandler",
+ "storageKey": "setupCompleted-1.0",
+ "storageValue": true,
+ "storage": { "@id": "urn:solid-server:default:SetupStorage" },
+ "source": {
+ "@type": "WaterfallHandler",
+ "handlers": [
+ { "@id": "urn:solid-server:default:SetupRedirectHandler" },
+ {
+ "@type": "RouterHandler",
+ "args_baseUrl": { "@id": "urn:solid-server:default:variable:baseUrl" },
+ "args_targetExtractor": { "@id": "urn:solid-server:default:TargetExtractor" },
+ "args_allowedMethods": [ "*" ],
+ "args_allowedPathNames": [ "/setup" ],
+ "args_handler": { "@id": "urn:solid-server:default:SetupHttpHandler" }
+ }
+ ]
+ }
+ }
+ ]
+}
diff --git a/config/default.json b/config/default.json
index 71f0a800f..1e519ead6 100644
--- a/config/default.json
+++ b/config/default.json
@@ -2,7 +2,8 @@
"@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^1.0.0/components/context.jsonld",
"import": [
"files-scs:config/app/main/default.json",
- "files-scs:config/app/init/default.json",
+ "files-scs:config/app/init/initialize-prefilled-root.json",
+ "files-scs:config/app/setup/optional.json",
"files-scs:config/http/handler/default.json",
"files-scs:config/http/middleware/websockets.json",
"files-scs:config/http/server-factory/websockets.json",
diff --git a/config/dynamic.json b/config/dynamic.json
index 05248946f..3dc1fc05b 100644
--- a/config/dynamic.json
+++ b/config/dynamic.json
@@ -3,6 +3,7 @@
"import": [
"files-scs:config/app/main/default.json",
"files-scs:config/app/init/default.json",
+ "files-scs:config/app/setup/required.json",
"files-scs:config/http/handler/default.json",
"files-scs:config/http/middleware/websockets.json",
"files-scs:config/http/server-factory/websockets.json",
diff --git a/config/example-https-file.json b/config/example-https-file.json
index 04c1fe27b..ea2d1ce56 100644
--- a/config/example-https-file.json
+++ b/config/example-https-file.json
@@ -3,6 +3,7 @@
"import": [
"files-scs:config/app/main/default.json",
"files-scs:config/app/init/default.json",
+ "files-scs:config/app/setup/required.json",
"files-scs:config/http/handler/default.json",
"files-scs:config/http/middleware/websockets.json",
diff --git a/config/file-no-setup.json b/config/file-no-setup.json
new file mode 100644
index 000000000..b2cc81153
--- /dev/null
+++ b/config/file-no-setup.json
@@ -0,0 +1,38 @@
+{
+ "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^1.0.0/components/context.jsonld",
+ "import": [
+ "files-scs:config/app/main/default.json",
+ "files-scs:config/app/init/initialize-root.json",
+ "files-scs:config/app/setup/disabled.json",
+ "files-scs:config/http/handler/default.json",
+ "files-scs:config/http/middleware/websockets.json",
+ "files-scs:config/http/server-factory/websockets.json",
+ "files-scs:config/http/static/default.json",
+ "files-scs:config/identity/email/default.json",
+ "files-scs:config/identity/handler/default.json",
+ "files-scs:config/identity/ownership/token.json",
+ "files-scs:config/identity/pod/static.json",
+ "files-scs:config/identity/registration/enabled.json",
+ "files-scs:config/ldp/authentication/dpop-bearer.json",
+ "files-scs:config/ldp/authorization/webacl.json",
+ "files-scs:config/ldp/handler/default.json",
+ "files-scs:config/ldp/metadata-parser/default.json",
+ "files-scs:config/ldp/metadata-writer/default.json",
+ "files-scs:config/ldp/permissions/acl.json",
+ "files-scs:config/storage/backend/file.json",
+ "files-scs:config/storage/key-value/resource-store.json",
+ "files-scs:config/storage/middleware/default.json",
+ "files-scs:config/util/auxiliary/acl.json",
+ "files-scs:config/util/identifiers/suffix.json",
+ "files-scs:config/util/index/default.json",
+ "files-scs:config/util/logging/winston.json",
+ "files-scs:config/util/representation-conversion/default.json",
+ "files-scs:config/util/resource-locker/memory.json",
+ "files-scs:config/util/variables/default.json"
+ ],
+ "@graph": [
+ {
+ "comment": "A single-pod server that stores its resources on disk."
+ }
+ ]
+}
diff --git a/config/file.json b/config/file.json
index 03bf127a9..b8190db4a 100644
--- a/config/file.json
+++ b/config/file.json
@@ -3,6 +3,7 @@
"import": [
"files-scs:config/app/main/default.json",
"files-scs:config/app/init/default.json",
+ "files-scs:config/app/setup/required.json",
"files-scs:config/http/handler/default.json",
"files-scs:config/http/middleware/websockets.json",
"files-scs:config/http/server-factory/websockets.json",
diff --git a/config/http/handler/default.json b/config/http/handler/default.json
index 14001848d..0de9adf89 100644
--- a/config/http/handler/default.json
+++ b/config/http/handler/default.json
@@ -1,5 +1,8 @@
{
"@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^1.0.0/components/context.jsonld",
+ "import": [
+ "files-scs:config/app/init/initializers/root.json"
+ ],
"@graph": [
{
"comment": "These are all the handlers a request will go through until it is handled.",
@@ -11,6 +14,7 @@
"@type": "WaterfallHandler",
"handlers": [
{ "@id": "urn:solid-server:default:StaticAssetHandler" },
+ { "@id": "urn:solid-server:default:SetupHandler" },
{ "@id": "urn:solid-server:default:IdentityProviderHandler" },
{ "@id": "urn:solid-server:default:LdpHandler" }
]
diff --git a/config/memory-subdomains.json b/config/memory-subdomains.json
index 51fbe6611..a60168ccd 100644
--- a/config/memory-subdomains.json
+++ b/config/memory-subdomains.json
@@ -2,7 +2,8 @@
"@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^1.0.0/components/context.jsonld",
"import": [
"files-scs:config/app/main/default.json",
- "files-scs:config/app/init/default.json",
+ "files-scs:config/app/init/initialize-root.json",
+ "files-scs:config/app/setup/optional.json",
"files-scs:config/http/handler/default.json",
"files-scs:config/http/middleware/websockets.json",
"files-scs:config/http/server-factory/websockets.json",
diff --git a/config/path-routing.json b/config/path-routing.json
index 8714594eb..8cca10147 100644
--- a/config/path-routing.json
+++ b/config/path-routing.json
@@ -2,7 +2,8 @@
"@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^1.0.0/components/context.jsonld",
"import": [
"files-scs:config/app/main/default.json",
- "files-scs:config/app/init/default.json",
+ "files-scs:config/app/init/initialize-root.json",
+ "files-scs:config/app/setup/disabled.json",
"files-scs:config/http/handler/default.json",
"files-scs:config/http/middleware/websockets.json",
"files-scs:config/http/server-factory/websockets.json",
diff --git a/config/sparql-endpoint-no-setup.json b/config/sparql-endpoint-no-setup.json
new file mode 100644
index 000000000..15ce12c11
--- /dev/null
+++ b/config/sparql-endpoint-no-setup.json
@@ -0,0 +1,41 @@
+{
+ "@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^1.0.0/components/context.jsonld",
+ "import": [
+ "files-scs:config/app/main/default.json",
+ "files-scs:config/app/init/initialize-root.json",
+ "files-scs:config/app/setup/disabled.json",
+ "files-scs:config/http/handler/default.json",
+ "files-scs:config/http/middleware/websockets.json",
+ "files-scs:config/http/server-factory/websockets.json",
+ "files-scs:config/http/static/default.json",
+ "files-scs:config/identity/email/default.json",
+ "files-scs:config/identity/handler/default.json",
+ "files-scs:config/identity/ownership/token.json",
+ "files-scs:config/identity/pod/static.json",
+ "files-scs:config/identity/registration/enabled.json",
+ "files-scs:config/ldp/authentication/dpop-bearer.json",
+ "files-scs:config/ldp/authorization/webacl.json",
+ "files-scs:config/ldp/handler/default.json",
+ "files-scs:config/ldp/metadata-parser/default.json",
+ "files-scs:config/ldp/metadata-writer/default.json",
+ "files-scs:config/ldp/permissions/acl.json",
+ "files-scs:config/storage/backend/sparql.json",
+ "files-scs:config/storage/key-value/memory.json",
+ "files-scs:config/storage/middleware/default.json",
+ "files-scs:config/util/auxiliary/acl.json",
+ "files-scs:config/util/identifiers/suffix.json",
+ "files-scs:config/util/index/default.json",
+ "files-scs:config/util/logging/winston.json",
+ "files-scs:config/util/representation-conversion/default.json",
+ "files-scs:config/util/resource-locker/memory.json",
+ "files-scs:config/util/variables/default.json"
+ ],
+ "@graph": [
+ {
+ "comment": [
+ "A single-pod server that stores its resources in a SPARQL endpoint.",
+ "This server only supports RDF data. For this reason it can not use its resource store for internal key/value storage."
+ ]
+ }
+ ]
+}
diff --git a/config/sparql-endpoint.json b/config/sparql-endpoint.json
index e27fc343a..5d82ac86b 100644
--- a/config/sparql-endpoint.json
+++ b/config/sparql-endpoint.json
@@ -3,6 +3,7 @@
"import": [
"files-scs:config/app/main/default.json",
"files-scs:config/app/init/default.json",
+ "files-scs:config/app/setup/required.json",
"files-scs:config/http/handler/default.json",
"files-scs:config/http/middleware/websockets.json",
"files-scs:config/http/server-factory/websockets.json",
diff --git a/config/storage/key-value/memory.json b/config/storage/key-value/memory.json
index 5777bb5f1..783f86b79 100644
--- a/config/storage/key-value/memory.json
+++ b/config/storage/key-value/memory.json
@@ -28,6 +28,11 @@
"comment": "Storage used for account management.",
"@id": "urn:solid-server:default:AccountStorage",
"@type": "MemoryMapStorage"
+ },
+ {
+ "comment": "Storage used by setup components.",
+ "@id": "urn:solid-server:default:SetupStorage",
+ "@type": "MemoryMapStorage"
}
]
}
diff --git a/config/storage/key-value/resource-store.json b/config/storage/key-value/resource-store.json
index 38efa90a3..be4a89174 100644
--- a/config/storage/key-value/resource-store.json
+++ b/config/storage/key-value/resource-store.json
@@ -47,6 +47,14 @@
"baseUrl": { "@id": "urn:solid-server:default:variable:baseUrl" },
"container": "/.internal/accounts/"
},
+ {
+ "comment": "Storage used by setup components.",
+ "@id": "urn:solid-server:default:SetupStorage",
+ "@type": "JsonResourceStorage",
+ "source": { "@id": "urn:solid-server:default:ResourceStore" },
+ "baseUrl": { "@id": "urn:solid-server:default:variable:baseUrl" },
+ "container": "/.internal/setup/"
+ },
{
"comment": "Block external access to the storage containers to avoid exposing internal data.",
"@id": "urn:solid-server:default:PathBasedAuthorizer",
diff --git a/src/index.ts b/src/index.ts
index 82e90e6a6..703558162 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -317,6 +317,7 @@ export * from './util/handlers/BooleanHandler';
export * from './util/handlers/ConditionalHandler';
export * from './util/handlers/ParallelHandler';
export * from './util/handlers/SequenceHandler';
+export * from './util/handlers/StaticHandler';
export * from './util/handlers/UnsupportedAsyncHandler';
export * from './util/handlers/WaterfallHandler';
diff --git a/src/util/handlers/StaticHandler.ts b/src/util/handlers/StaticHandler.ts
new file mode 100644
index 000000000..38f47a610
--- /dev/null
+++ b/src/util/handlers/StaticHandler.ts
@@ -0,0 +1,22 @@
+import { AsyncHandler } from './AsyncHandler';
+
+/**
+ * A handler that always resolves and always returns the stored value.
+ * Will return undefined if no value is stored.
+ *
+ * The generic type extends `any` due to Components.js requirements.
+ */
+// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint
+export class StaticHandler
+ Your new Pod is located at <%= podBaseUrl %>.
+
+ Your new WebID is <%= webId %>.
+
+ Via your email address <%= email %>,
+ <% if (authenticating) { %>
+ you can now log in
+ <% } else { %>
+ this server lets you log in to Solid apps
+ <% } %>
+ with your WebID <%= webId %>
+
+ You will need to add the triple
+ Your new Pod
+
+ You can store your documents and data there.
+ Your new WebID
+
+ You can use this identifier to interact with Solid pods and apps.
+ Your new account
+ <%= `<${webId}>
+ to your existing WebID document <%= webId %>
+ to indicate that you trust this server as a login provider.
+
- Your new Pod is located at <%= podBaseUrl %>.
-
- You can store your documents and data there.
-
- Your new WebID is <%= webId %>.
-
- You can use this identifier to interact with Solid pods and apps.
-
- Via your email address <%= email %>, - <% if (authenticating) { %> - you can now log in - <% } else { %> - this server lets you log in to Solid apps - <% } %> - with your WebID <%= webId %> -
- <% if (!createWebId) { %> -
- You will need to add the triple
- <%= `<${webId}>
- to your existing WebID document <%= webId %>
- to indicate that you trust this server as a login provider.
-
.acl
.
+ by modifying .acl
.
+ This server implements + the Solid protocol + so you can create your own Solid Pod + and identity. +
+ ++ Before making this server public, + you might want to disable Pod registration + by changing + the configuration. +
+ ++ The default configuration stores data only in memory, + so be sure to choose a configuration that saves data to disk. + If you are exposing this server publicly, + read the guidelines below. +
+
+ When using the file-based version of the server,
+ you can easily choose any folder on your disk to use as root.
+
+ Use the --help
switch to learn more.
+
+ To make sure the server is set up exactly as you want it, + please fill in the form below. +
+
+ In case you want to automate the server initialization and want to get rid of this setup screen,
+ update your config with new imports from config/app/setup/
and possibly config/app/init/
.
+
+ You have chosen to allow the root container to be accessible.
+ Prevent public write and control access to the root
+ by modifying .acl
.
+
+ Learn more about Solid + at solidproject.org. +
++ You are warmly invited + to share your experiences + and to report any bugs you encounter. +
diff --git a/test/integration/LdpHandlerWithoutAuth.test.ts b/test/integration/LdpHandlerWithoutAuth.test.ts index 762626296..a2d3603a7 100644 --- a/test/integration/LdpHandlerWithoutAuth.test.ts +++ b/test/integration/LdpHandlerWithoutAuth.test.ts @@ -72,13 +72,6 @@ describe.each(stores)('An LDP handler allowing all requests %s', (name, { storeC expect(response.headers.get('link')).toContain(`<${PIM.Storage}>; rel="type"`); }); - it('can read the root container index page when asking for HTML.', async(): Promise