diff --git a/src/identity/interaction/email-password/handler/RegistrationHandler.ts b/src/identity/interaction/email-password/handler/RegistrationHandler.ts index 62b548e1c4..354ecad547 100644 --- a/src/identity/interaction/email-password/handler/RegistrationHandler.ts +++ b/src/identity/interaction/email-password/handler/RegistrationHandler.ts @@ -135,7 +135,11 @@ export class RegistrationHandler extends HttpHandler { if (result.createPod) { podBaseUrl = podBaseUrl ?? this.identifierGenerator.generate(result.podName!); try { - await this.podManager.createPod(podBaseUrl, { ...result.data, webId: result.webId! }); + await this.podManager.createPod(podBaseUrl, { + ...result.data, + podBaseUrl: podBaseUrl.path, + webId: result.webId! + }); } catch (error: unknown) { // In case pod creation errors we don't want to keep the account if (result.register) { diff --git a/templates/pod/README$.md.hbs b/templates/pod/README$.md.hbs new file mode 100644 index 0000000000..5d3e5d8478 --- /dev/null +++ b/templates/pod/README$.md.hbs @@ -0,0 +1,22 @@ +# Welcome to your pod + +## A place to store your data +Your pod is a **secure storage space** for your documents and data. +
+You can choose to share those with other people and apps. + +As the owner of this pod, +identified by {{webId}}, +you have access to all of your documents. + +## Working with your pod +The easiest way to interact with pods +is through Solid apps. +
+For example, +you can open your pod in [Databrowser](https://solid.github.io/mashlib/dist/browse.html?uri={{podBaseUrl}}). + +## Learn more +The [Solid website](https://solidproject.org/) +and the people on its [forum](https://forum.solidproject.org/) +will be glad to help you on your journey. diff --git a/templates/pod/README.acl.hbs b/templates/pod/README.acl.hbs new file mode 100644 index 0000000000..2fdd88b2f7 --- /dev/null +++ b/templates/pod/README.acl.hbs @@ -0,0 +1,12 @@ +@prefix acl: . +@prefix foaf: . + +<#public> + acl:accessTo <./README>; + acl:agentClass foaf:Agent; + acl:mode acl:Read. + +<#owner> + acl:accessTo <./README>; + acl:agent <{{webId}}>; + acl:mode acl:Read, acl:Write, acl:Control. diff --git a/test/unit/identity/interaction/email-password/handler/RegistrationHandler.test.ts b/test/unit/identity/interaction/email-password/handler/RegistrationHandler.test.ts index dcefd7f2bb..67e6b5368e 100644 --- a/test/unit/identity/interaction/email-password/handler/RegistrationHandler.test.ts +++ b/test/unit/identity/interaction/email-password/handler/RegistrationHandler.test.ts @@ -20,6 +20,7 @@ describe('A RegistrationHandler', (): void => { const password = 'superSecretPassword'; const confirmPassword = password; const podName = 'alice'; + const podBaseUrl = 'http://test.com/alice/'; // Strings instead of booleans because this is form data const createWebId = 'true'; const register = 'true'; @@ -178,7 +179,8 @@ describe('A RegistrationHandler', (): void => { expect(identifierGenerator.generate).toHaveBeenCalledTimes(1); expect(identifierGenerator.generate).toHaveBeenLastCalledWith(podName); expect(podManager.createPod).toHaveBeenCalledTimes(1); - expect(podManager.createPod).toHaveBeenLastCalledWith({ path: `${baseUrl}${podName}/` }, params); + expect(podManager.createPod).toHaveBeenLastCalledWith( + { path: `${baseUrl}${podName}/` }, { podBaseUrl, ...params }); expect(accountStore.create).toHaveBeenCalledTimes(0); expect(accountStore.verify).toHaveBeenCalledTimes(0); @@ -198,7 +200,8 @@ describe('A RegistrationHandler', (): void => { expect(identifierGenerator.generate).toHaveBeenLastCalledWith(podName); (params as any).oidcIssuer = baseUrl; expect(podManager.createPod).toHaveBeenCalledTimes(1); - expect(podManager.createPod).toHaveBeenLastCalledWith({ path: `${baseUrl}${podName}/` }, params); + expect(podManager.createPod).toHaveBeenLastCalledWith( + { path: `${baseUrl}${podName}/` }, { podBaseUrl, ...params }); expect(accountStore.verify).toHaveBeenCalledTimes(1); expect(accountStore.verify).toHaveBeenLastCalledWith(email); @@ -219,7 +222,8 @@ describe('A RegistrationHandler', (): void => { expect(identifierGenerator.generate).toHaveBeenLastCalledWith(podName); (params as any).oidcIssuer = baseUrl; expect(podManager.createPod).toHaveBeenCalledTimes(1); - expect(podManager.createPod).toHaveBeenLastCalledWith({ path: `${baseUrl}${podName}/` }, params); + expect(podManager.createPod).toHaveBeenLastCalledWith( + { path: `${baseUrl}${podName}/` }, { podBaseUrl, ...params }); expect(accountStore.deleteAccount).toHaveBeenCalledTimes(1); expect(accountStore.deleteAccount).toHaveBeenLastCalledWith(email); @@ -239,9 +243,9 @@ describe('A RegistrationHandler', (): void => { expect(accountStore.create).toHaveBeenLastCalledWith(email, generatedWebID, password); expect(accountStore.verify).toHaveBeenCalledTimes(1); expect(accountStore.verify).toHaveBeenLastCalledWith(email); - const podParams = { ...params, oidcIssuer: baseUrl, webId: generatedWebID }; expect(podManager.createPod).toHaveBeenCalledTimes(1); - expect(podManager.createPod).toHaveBeenLastCalledWith({ path: `${baseUrl}${podName}/` }, podParams); + expect(podManager.createPod).toHaveBeenLastCalledWith( + { path: `${baseUrl}${podName}/` }, { ...params, podBaseUrl, oidcIssuer: baseUrl, webId: generatedWebID }); expect(ownershipValidator.handleSafe).toHaveBeenCalledTimes(0); expect(accountStore.deleteAccount).toHaveBeenCalledTimes(0);