If you did not mean to delete your account, ignore this email.
+`
+ }
+}
+
+module.exports.render = render
diff --git a/test/resources/acl-tls/config/templates/emails/invalid-username.js b/test/resources/acl-tls/config/templates/emails/invalid-username.js
new file mode 100644
index 000000000..8a7497fc5
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/emails/invalid-username.js
@@ -0,0 +1,30 @@
+module.exports.render = render
+
+function render (data) {
+ return {
+ subject: `Invalid username for account ${data.accountUri}`,
+
+ /**
+ * Text version
+ */
+ text: `Hi,
+
+We're sorry to inform you that the username for account ${data.accountUri} is not allowed after changes to username policy.
+
+This account has been set to be deleted at ${data.dateOfRemoval}.
+
+${data.supportEmail ? `Please contact ${data.supportEmail} if you want to move your account.` : ''}`,
+
+ /**
+ * HTML version
+ */
+ html: `
Hi,
+
+
We're sorry to inform you that the username for account ${data.accountUri} is not allowed after changes to username policy.
+
+
This account has been set to be deleted at ${data.dateOfRemoval}.
+
+${data.supportEmail ? `
Please contact ${data.supportEmail} if you want to move your account.
` : ''}
+`
+ }
+}
diff --git a/test/resources/acl-tls/config/templates/emails/reset-password.js b/test/resources/acl-tls/config/templates/emails/reset-password.js
new file mode 100644
index 000000000..fb18972cc
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/emails/reset-password.js
@@ -0,0 +1,49 @@
+'use strict'
+
+/**
+ * Returns a partial Email object (minus the `to` and `from` properties),
+ * suitable for sending with Nodemailer.
+ *
+ * Used to send a Reset Password email, upon user request
+ *
+ * @param data {Object}
+ *
+ * @param data.resetUrl {string}
+ * @param data.webId {string}
+ *
+ * @return {Object}
+ */
+function render (data) {
+ return {
+ subject: 'Account password reset',
+
+ /**
+ * Text version
+ */
+ text: `Hi,
+
+We received a request to reset your password for your Solid account, ${data.webId}
+
+To reset your password, click on the following link:
+
+${data.resetUrl}
+
+If you did not mean to reset your password, ignore this email, your password will not change.`,
+
+ /**
+ * HTML version
+ */
+ html: `
Hi,
+
+
We received a request to reset your password for your Solid account, ${data.webId}
+
+
To reset your password, click on the following link:
If you did not mean to reset your password, ignore this email, your password will not change.
+`
+ }
+}
+
+module.exports.render = render
diff --git a/test/resources/acl-tls/config/templates/emails/welcome.js b/test/resources/acl-tls/config/templates/emails/welcome.js
new file mode 100644
index 000000000..bce554462
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/emails/welcome.js
@@ -0,0 +1,39 @@
+'use strict'
+
+/**
+ * Returns a partial Email object (minus the `to` and `from` properties),
+ * suitable for sending with Nodemailer.
+ *
+ * Used to send a Welcome email after a new user account has been created.
+ *
+ * @param data {Object}
+ *
+ * @param data.webid {string}
+ *
+ * @return {Object}
+ */
+function render (data) {
+ return {
+ subject: 'Welcome to Solid',
+
+ /**
+ * Text version of the Welcome email
+ */
+ text: `Welcome to Solid!
+
+Your account has been created.
+
+Your Web Id: ${data.webid}`,
+
+ /**
+ * HTML version of the Welcome email
+ */
+ html: `
Welcome to Solid!
+
+
Your account has been created.
+
+
Your Web Id: ${data.webid}
`
+ }
+}
+
+module.exports.render = render
diff --git a/test/resources/acl-tls/config/templates/new-account/.acl b/test/resources/acl-tls/config/templates/new-account/.acl
new file mode 100644
index 000000000..9f2213c84
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/new-account/.acl
@@ -0,0 +1,26 @@
+# Root ACL resource for the user account
+@prefix acl: .
+@prefix foaf: .
+
+# The homepage is readable by the public
+<#public>
+ a acl:Authorization;
+ acl:agentClass foaf:Agent;
+ acl:accessTo >;
+ acl:mode acl:Read.
+
+# The owner has full access to every resource in their pod.
+# Other agents have no access rights,
+# unless specifically authorized in other .acl resources.
+<#owner>
+ a acl:Authorization;
+ acl:agent <{{webId}}>;
+ # Optional owner email, to be used for account recovery:
+ {{#if email}}acl:agent ;{{/if}}
+ # Set the access to the root storage folder itself
+ acl:accessTo >;
+ # All resources will inherit this authorization, by default
+ acl:default >;
+ # The owner has all of the access modes allowed
+ acl:mode
+ acl:Read, acl:Write, acl:Control.
diff --git a/test/resources/acl-tls/config/templates/new-account/.meta b/test/resources/acl-tls/config/templates/new-account/.meta
new file mode 100644
index 000000000..591051f43
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/new-account/.meta
@@ -0,0 +1,5 @@
+# Root Meta resource for the user account
+# Used to discover the account's WebID URI, given the account URI
+<{{webId}}>
+
+ >.
diff --git a/test/resources/acl-tls/config/templates/new-account/.meta.acl b/test/resources/acl-tls/config/templates/new-account/.meta.acl
new file mode 100644
index 000000000..c297ce822
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/new-account/.meta.acl
@@ -0,0 +1,25 @@
+# ACL resource for the Root Meta
+# Should be public-readable (since the root meta is used for WebID discovery)
+
+@prefix acl: .
+@prefix foaf: .
+
+<#owner>
+ a acl:Authorization;
+
+ acl:agent
+ <{{webId}}>;
+
+ acl:accessTo ;
+
+ acl:mode
+ acl:Read, acl:Write, acl:Control.
+
+<#public>
+ a acl:Authorization;
+
+ acl:agentClass foaf:Agent; # everyone
+
+ acl:accessTo ;
+
+ acl:mode acl:Read.
diff --git a/test/resources/acl-tls/config/templates/new-account/.well-known/.acl b/test/resources/acl-tls/config/templates/new-account/.well-known/.acl
new file mode 100644
index 000000000..9e13201e2
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/new-account/.well-known/.acl
@@ -0,0 +1,19 @@
+# ACL resource for the well-known folder
+@prefix acl: .
+@prefix foaf: .
+
+# The owner has all permissions
+<#owner>
+ a acl:Authorization;
+ acl:agent <{{webId}}>;
+ acl:accessTo <./>;
+ acl:defaultForNew <./>;
+ acl:mode acl:Read, acl:Write, acl:Control.
+
+# The public has read permissions
+<#public>
+ a acl:Authorization;
+ acl:agentClass foaf:Agent;
+ acl:accessTo <./>;
+ acl:defaultForNew <./>;
+ acl:mode acl:Read.
diff --git a/test/resources/acl-tls/config/templates/new-account/favicon.ico b/test/resources/acl-tls/config/templates/new-account/favicon.ico
new file mode 100644
index 000000000..764acb205
Binary files /dev/null and b/test/resources/acl-tls/config/templates/new-account/favicon.ico differ
diff --git a/test/resources/acl-tls/config/templates/new-account/favicon.ico.acl b/test/resources/acl-tls/config/templates/new-account/favicon.ico.acl
new file mode 100644
index 000000000..01e11d075
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/new-account/favicon.ico.acl
@@ -0,0 +1,26 @@
+# ACL for the default favicon.ico resource
+# Individual users will be able to override it as they wish
+# Public-readable
+
+@prefix acl: .
+@prefix foaf: .
+
+<#owner>
+ a acl:Authorization;
+
+ acl:agent
+ <{{webId}}>;
+
+ acl:accessTo ;
+
+ acl:mode
+ acl:Read, acl:Write, acl:Control.
+
+<#public>
+ a acl:Authorization;
+
+ acl:agentClass foaf:Agent; # everyone
+
+ acl:accessTo ;
+
+ acl:mode acl:Read.
diff --git a/test/resources/acl-tls/config/templates/new-account/inbox/.acl b/test/resources/acl-tls/config/templates/new-account/inbox/.acl
new file mode 100644
index 000000000..17b8e4bb7
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/new-account/inbox/.acl
@@ -0,0 +1,26 @@
+# ACL resource for the profile Inbox
+
+@prefix acl: .
+@prefix foaf: .
+
+<#owner>
+ a acl:Authorization;
+
+ acl:agent
+ <{{webId}}>;
+
+ acl:accessTo <./>;
+ acl:default <./>;
+
+ acl:mode
+ acl:Read, acl:Write, acl:Control.
+
+# Public-appendable but NOT public-readable
+<#public>
+ a acl:Authorization;
+
+ acl:agentClass foaf:Agent; # everyone
+
+ acl:accessTo <./>;
+
+ acl:mode acl:Append.
diff --git a/test/resources/acl-tls/config/templates/new-account/private/.acl b/test/resources/acl-tls/config/templates/new-account/private/.acl
new file mode 100644
index 000000000..1fae7fb55
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/new-account/private/.acl
@@ -0,0 +1,10 @@
+# ACL resource for the private folder
+@prefix acl: .
+
+# The owner has all permissions
+<#owner>
+ a acl:Authorization;
+ acl:agent <{{webId}}>;
+ acl:accessTo <./>;
+ acl:defaultForNew <./>;
+ acl:mode acl:Read, acl:Write, acl:Control.
diff --git a/test/resources/acl-tls/config/templates/new-account/profile/.acl b/test/resources/acl-tls/config/templates/new-account/profile/.acl
new file mode 100644
index 000000000..a3cfaedc4
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/new-account/profile/.acl
@@ -0,0 +1,19 @@
+# ACL resource for the profile folder
+@prefix acl: .
+@prefix foaf: .
+
+# The owner has all permissions
+<#owner>
+ a acl:Authorization;
+ acl:agent <{{webId}}>;
+ acl:accessTo <./>;
+ acl:defaultForNew <./>;
+ acl:mode acl:Read, acl:Write, acl:Control.
+
+# The public has read permissions
+<#public>
+ a acl:Authorization;
+ acl:agentClass foaf:Agent;
+ acl:accessTo <./>;
+ acl:defaultForNew <./>;
+ acl:mode acl:Read.
diff --git a/test/resources/acl-tls/config/templates/new-account/profile/card$.ttl b/test/resources/acl-tls/config/templates/new-account/profile/card$.ttl
new file mode 100644
index 000000000..063bc61cf
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/new-account/profile/card$.ttl
@@ -0,0 +1,25 @@
+@prefix solid: .
+@prefix foaf: .
+@prefix pim: .
+@prefix schema: .
+@prefix ldp: .
+
+<>
+ a foaf:PersonalProfileDocument ;
+ foaf:maker <{{webId}}> ;
+ foaf:primaryTopic <{{webId}}> .
+
+<{{webId}}>
+ a foaf:Person ;
+ a schema:Person ;
+
+ foaf:name "{{name}}" ;
+
+ solid:account > ; # link to the account uri
+ pim:storage > ; # root storage
+
+ ldp:inbox ;
+
+ pim:preferencesFile ; # private settings/preferences
+ solid:publicTypeIndex ;
+ solid:privateTypeIndex .
diff --git a/test/resources/acl-tls/config/templates/new-account/public/.acl b/test/resources/acl-tls/config/templates/new-account/public/.acl
new file mode 100644
index 000000000..210555a83
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/new-account/public/.acl
@@ -0,0 +1,19 @@
+# ACL resource for the public folder
+@prefix acl: .
+@prefix foaf: .
+
+# The owner has all permissions
+<#owner>
+ a acl:Authorization;
+ acl:agent <{{webId}}>;
+ acl:accessTo <./>;
+ acl:default <./>;
+ acl:mode acl:Read, acl:Write, acl:Control.
+
+# The public has read permissions
+<#public>
+ a acl:Authorization;
+ acl:agentClass foaf:Agent;
+ acl:accessTo <./>;
+ acl:default <./>;
+ acl:mode acl:Read.
diff --git a/test/resources/acl-tls/config/templates/new-account/robots.txt b/test/resources/acl-tls/config/templates/new-account/robots.txt
new file mode 100644
index 000000000..8c27a0227
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/new-account/robots.txt
@@ -0,0 +1,3 @@
+User-agent: *
+# Allow all crawling (subject to ACLs as usual, of course)
+Disallow:
diff --git a/test/resources/acl-tls/config/templates/new-account/robots.txt.acl b/test/resources/acl-tls/config/templates/new-account/robots.txt.acl
new file mode 100644
index 000000000..2326c86c2
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/new-account/robots.txt.acl
@@ -0,0 +1,26 @@
+# ACL for the default robots.txt resource
+# Individual users will be able to override it as they wish
+# Public-readable
+
+@prefix acl: .
+@prefix foaf: .
+
+<#owner>
+ a acl:Authorization;
+
+ acl:agent
+ <{{webId}}>;
+
+ acl:accessTo ;
+
+ acl:mode
+ acl:Read, acl:Write, acl:Control.
+
+<#public>
+ a acl:Authorization;
+
+ acl:agentClass foaf:Agent; # everyone
+
+ acl:accessTo ;
+
+ acl:mode acl:Read.
diff --git a/test/resources/acl-tls/config/templates/new-account/settings/.acl b/test/resources/acl-tls/config/templates/new-account/settings/.acl
new file mode 100644
index 000000000..921e65570
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/new-account/settings/.acl
@@ -0,0 +1,20 @@
+# ACL resource for the /settings/ container
+@prefix acl: .
+
+<#owner>
+ a acl:Authorization;
+
+ acl:agent
+ <{{webId}}>;
+
+ # Set the access to the root storage folder itself
+ acl:accessTo <./>;
+
+ # All settings resources will be private, by default, unless overridden
+ acl:default <./>;
+
+ # The owner has all of the access modes allowed
+ acl:mode
+ acl:Read, acl:Write, acl:Control.
+
+# Private, no public access modes
diff --git a/test/resources/acl-tls/config/templates/new-account/settings/prefs.ttl b/test/resources/acl-tls/config/templates/new-account/settings/prefs.ttl
new file mode 100644
index 000000000..72ef47b88
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/new-account/settings/prefs.ttl
@@ -0,0 +1,15 @@
+@prefix dct: .
+@prefix pim: .
+@prefix foaf: .
+@prefix solid: .
+
+<>
+ a pim:ConfigurationFile;
+
+ dct:title "Preferences file" .
+
+{{#if email}}<{{webId}}> foaf:mbox .{{/if}}
+
+<{{webId}}>
+ solid:publicTypeIndex ;
+ solid:privateTypeIndex .
diff --git a/test/resources/acl-tls/config/templates/new-account/settings/privateTypeIndex.ttl b/test/resources/acl-tls/config/templates/new-account/settings/privateTypeIndex.ttl
new file mode 100644
index 000000000..b6fee77e6
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/new-account/settings/privateTypeIndex.ttl
@@ -0,0 +1,4 @@
+@prefix solid: .
+<>
+ a solid:TypeIndex ;
+ a solid:UnlistedDocument.
diff --git a/test/resources/acl-tls/config/templates/new-account/settings/publicTypeIndex.ttl b/test/resources/acl-tls/config/templates/new-account/settings/publicTypeIndex.ttl
new file mode 100644
index 000000000..433486252
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/new-account/settings/publicTypeIndex.ttl
@@ -0,0 +1,4 @@
+@prefix solid: .
+<>
+ a solid:TypeIndex ;
+ a solid:ListedDocument.
diff --git a/test/resources/acl-tls/config/templates/new-account/settings/publicTypeIndex.ttl.acl b/test/resources/acl-tls/config/templates/new-account/settings/publicTypeIndex.ttl.acl
new file mode 100644
index 000000000..6a1901462
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/new-account/settings/publicTypeIndex.ttl.acl
@@ -0,0 +1,25 @@
+# ACL resource for the Public Type Index
+
+@prefix acl: .
+@prefix foaf: .
+
+<#owner>
+ a acl:Authorization;
+
+ acl:agent
+ <{{webId}}>;
+
+ acl:accessTo <./publicTypeIndex.ttl>;
+
+ acl:mode
+ acl:Read, acl:Write, acl:Control.
+
+# Public-readable
+<#public>
+ a acl:Authorization;
+
+ acl:agentClass foaf:Agent; # everyone
+
+ acl:accessTo <./publicTypeIndex.ttl>;
+
+ acl:mode acl:Read.
diff --git a/test/resources/acl-tls/config/templates/new-account/settings/serverSide.ttl.acl b/test/resources/acl-tls/config/templates/new-account/settings/serverSide.ttl.acl
new file mode 100644
index 000000000..fdcc53288
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/new-account/settings/serverSide.ttl.acl
@@ -0,0 +1,13 @@
+@prefix acl: .
+@prefix foaf: .
+
+<#owner>
+ a acl:Authorization;
+
+ acl:agent
+ <{{webId}}>;
+
+ acl:accessTo <./serverSide.ttl>;
+
+ acl:mode acl:Read .
+
diff --git a/test/resources/acl-tls/config/templates/new-account/settings/serverSide.ttl.inactive b/test/resources/acl-tls/config/templates/new-account/settings/serverSide.ttl.inactive
new file mode 100644
index 000000000..3cad13211
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/new-account/settings/serverSide.ttl.inactive
@@ -0,0 +1,12 @@
+@prefix dct: .
+@prefix pim: .
+@prefix solid: .
+
+<>
+ a pim:ConfigurationFile;
+
+ dct:description "Administrative settings for the POD that the user can only read." .
+
+>
+ solid:storageQuota "25000000" .
+
diff --git a/test/resources/acl-tls/config/templates/server/.acl b/test/resources/acl-tls/config/templates/server/.acl
new file mode 100644
index 000000000..05a9842d9
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/server/.acl
@@ -0,0 +1,10 @@
+# Root ACL resource for the root
+@prefix acl: .
+@prefix foaf: .
+
+<#public>
+ a acl:Authorization;
+ acl:agentClass foaf:Agent; # everyone
+ acl:accessTo >;
+ acl:default ;
+ acl:mode acl:Read.
diff --git a/test/resources/acl-tls/config/templates/server/.well-known/.acl b/test/resources/acl-tls/config/templates/server/.well-known/.acl
new file mode 100644
index 000000000..6cacb3779
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/server/.well-known/.acl
@@ -0,0 +1,15 @@
+# ACL for the default .well-known/ resource
+# Server operators will be able to override it as they wish
+# Public-readable
+
+@prefix acl: .
+@prefix foaf: .
+
+<#public>
+ a acl:Authorization;
+
+ acl:agentClass foaf:Agent; # everyone
+
+ acl:accessTo ;
+
+ acl:mode acl:Read.
diff --git a/test/resources/acl-tls/config/templates/server/favicon.ico b/test/resources/acl-tls/config/templates/server/favicon.ico
new file mode 100644
index 000000000..764acb205
Binary files /dev/null and b/test/resources/acl-tls/config/templates/server/favicon.ico differ
diff --git a/test/resources/acl-tls/config/templates/server/favicon.ico.acl b/test/resources/acl-tls/config/templates/server/favicon.ico.acl
new file mode 100644
index 000000000..e76838bb8
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/server/favicon.ico.acl
@@ -0,0 +1,15 @@
+# ACL for the default favicon.ico resource
+# Server operators will be able to override it as they wish
+# Public-readable
+
+@prefix acl: .
+@prefix foaf: .
+
+<#public>
+ a acl:Authorization;
+
+ acl:agentClass foaf:Agent; # everyone
+
+ acl:accessTo ;
+
+ acl:mode acl:Read.
diff --git a/test/resources/acl-tls/config/templates/server/index.html b/test/resources/acl-tls/config/templates/server/index.html
new file mode 100644
index 000000000..37df7b336
--- /dev/null
+++ b/test/resources/acl-tls/config/templates/server/index.html
@@ -0,0 +1,55 @@
+
+
+
+
+
+ Welcome to Solid
+
+
+
+
+
+
+
+
+
+
+
+
+
Welcome to the Solid Prototype
+
+
+
+ This is a prototype implementation of a Solid server.
+
+ It is a fully functional server, but there are no security or stability guarantees.
+
+ If you have not already done so, please create an account.
+
Solid allows you to precisely choose what other people and apps can read and write in a Pod. This version of the authorization user interface (node-solid-server V5.1) only supports the toggle of global access permissions to all of the data in your Pod.
+
If you don’t want to set these permissions at a global level, uncheck all of the boxes below, then click authorize. This will add the application origin to your authorization list, without granting it permission to any of your data yet. You will then need to manage those permissions yourself by setting them explicitly in the places you want this application to access.
+
+
+
+
By clicking Authorize, any app from {{app_origin}} will be able to:
+
+
+
+
+
This server (node-solid-server V5.1) only implements a limited subset of OpenID Connect, and doesn’t yet support token issuance for applications. OIDC Token Issuance and fine-grained management through this authorization user interface is currently in the development backlog for node-solid-server
+{{/if}}
diff --git a/test/resources/acl-tls/localhost/.acl b/test/resources/acl-tls/localhost/.acl
new file mode 100644
index 000000000..05a9842d9
--- /dev/null
+++ b/test/resources/acl-tls/localhost/.acl
@@ -0,0 +1,10 @@
+# Root ACL resource for the root
+@prefix acl: .
+@prefix foaf: .
+
+<#public>
+ a acl:Authorization;
+ acl:agentClass foaf:Agent; # everyone
+ acl:accessTo >;
+ acl:default ;
+ acl:mode acl:Read.
diff --git a/test/resources/acl-tls/localhost/.well-known/.acl b/test/resources/acl-tls/localhost/.well-known/.acl
new file mode 100644
index 000000000..6cacb3779
--- /dev/null
+++ b/test/resources/acl-tls/localhost/.well-known/.acl
@@ -0,0 +1,15 @@
+# ACL for the default .well-known/ resource
+# Server operators will be able to override it as they wish
+# Public-readable
+
+@prefix acl: .
+@prefix foaf: .
+
+<#public>
+ a acl:Authorization;
+
+ acl:agentClass foaf:Agent; # everyone
+
+ acl:accessTo ;
+
+ acl:mode acl:Read.
diff --git a/test/resources/acl-tls/localhost/favicon.ico b/test/resources/acl-tls/localhost/favicon.ico
new file mode 100644
index 000000000..764acb205
Binary files /dev/null and b/test/resources/acl-tls/localhost/favicon.ico differ
diff --git a/test/resources/acl-tls/localhost/favicon.ico.acl b/test/resources/acl-tls/localhost/favicon.ico.acl
new file mode 100644
index 000000000..e76838bb8
--- /dev/null
+++ b/test/resources/acl-tls/localhost/favicon.ico.acl
@@ -0,0 +1,15 @@
+# ACL for the default favicon.ico resource
+# Server operators will be able to override it as they wish
+# Public-readable
+
+@prefix acl: .
+@prefix foaf: .
+
+<#public>
+ a acl:Authorization;
+
+ acl:agentClass foaf:Agent; # everyone
+
+ acl:accessTo ;
+
+ acl:mode acl:Read.
diff --git a/test/resources/acl-tls/localhost/index.html b/test/resources/acl-tls/localhost/index.html
new file mode 100644
index 000000000..c0d68c8c5
--- /dev/null
+++ b/test/resources/acl-tls/localhost/index.html
@@ -0,0 +1,48 @@
+
+
+
+
+
+ Welcome to Solid
+
+
+
+
+
+
+
+
+
+
+
+
+
Welcome to the Solid Prototype
+
+
+
+ This is a prototype implementation of a Solid server.
+
+ It is a fully functional server, but there are no security or stability guarantees.
+
+ If you have not already done so, please create an account.
+