feat: integrate pod creation

This commit is contained in:
Joachim Van Herwegen 2020-11-27 13:46:53 +01:00
parent f387b36dc2
commit 1a043aca3f
17 changed files with 132 additions and 0 deletions

View File

@ -13,6 +13,7 @@
"files-scs:config/presets/ldp/websockets.json",
"files-scs:config/presets/logging.json",
"files-scs:config/presets/middleware.json",
"files-scs:config/presets/pod-management.json",
"files-scs:config/presets/representation-conversion.json",
"files-scs:config/presets/setup.json",
"files-scs:config/presets/storage/backend/storage-memory.json",

View File

@ -13,6 +13,7 @@
"files-scs:config/presets/ldp/websockets.json",
"files-scs:config/presets/logging.json",
"files-scs:config/presets/middleware.json",
"files-scs:config/presets/pod-management.json",
"files-scs:config/presets/representation-conversion.json",
"files-scs:config/presets/setup.json",
"files-scs:config/presets/storage/backend/storage-filesystem.json",

View File

@ -13,6 +13,7 @@
"files-scs:config/presets/ldp/websockets.json",
"files-scs:config/presets/logging.json",
"files-scs:config/presets/middleware.json",
"files-scs:config/presets/pod-management.json",
"files-scs:config/presets/representation-conversion.json",
"files-scs:config/presets/setup.json",
"files-scs:config/presets/storage/backend/storage-filesystem.json",

View File

@ -13,6 +13,7 @@
"files-scs:config/presets/ldp/websockets.json",
"files-scs:config/presets/logging.json",
"files-scs:config/presets/middleware.json",
"files-scs:config/presets/pod-management.json",
"files-scs:config/presets/representation-conversion.json",
"files-scs:config/presets/setup.json",
"files-scs:config/presets/storage/backend/storage-filesystem.json",

View File

@ -13,6 +13,7 @@
"files-scs:config/presets/ldp/websockets.json",
"files-scs:config/presets/logging.json",
"files-scs:config/presets/middleware.json",
"files-scs:config/presets/pod-management.json",
"files-scs:config/presets/representation-conversion.json",
"files-scs:config/presets/setup.json",
"files-scs:config/presets/storage/backend/storage-sparql-endpoint.json",

View File

@ -20,6 +20,10 @@
{
"@id": "urn:solid-server:default:variable:loggingLevel",
"@type": "Variable"
},
{
"@id": "urn:solid-server:default:variable:podTemplateFolder",
"@type": "Variable"
}
]
}

View File

@ -25,6 +25,9 @@
{
"@id": "urn:solid-server:default:Middleware"
},
{
"@id": "urn:solid-server:default:PodManagerHandler"
},
{
"@id": "urn:solid-server:default:LdpHandler"
}

View File

@ -0,0 +1,51 @@
{
"@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^1.0.0/components/context.jsonld",
"@graph": [
{
"@id": "urn:solid-server:default:ResourcesGenerator",
"@type": "TemplatedResourcesGenerator",
"TemplatedResourcesGenerator:_templateFolder": {
"@id": "urn:solid-server:default:variable:podTemplateFolder"
},
"TemplatedResourcesGenerator:_factory": {
"@type": "ExtensionBasedMapperFactory"
},
"TemplatedResourcesGenerator:_engine": {
"@type": "HandlebarsTemplateEngine"
}
},
{
"@id": "urn:solid-server:default:PodManager",
"@type": "GeneratedPodManager",
"GeneratedPodManager:_store": {
"@id": "urn:solid-server:default:ResourceStore"
},
"GeneratedPodManager:_idGenerator": {
"@type": "SuffixIdentifierGenerator",
"SuffixIdentifierGenerator:_base": {
"@id": "urn:solid-server:default:variable:baseUrl"
}
},
"GeneratedPodManager:_resourcesGenerator": {
"@id": "urn:solid-server:default:ResourcesGenerator"
}
},
{
"@id": "urn:solid-server:default:PodManagerHandler",
"@type": "PodManagerHttpHandler",
"PodManagerHttpHandler:_args_requestPath": "/pods",
"PodManagerHttpHandler:_args_requestParser": {
"@id": "urn:solid-server:default:RequestParser"
},
"PodManagerHttpHandler:_args_agentParser": {
"@type": "AgentJsonParser"
},
"PodManagerHttpHandler:_args_manager": {
"@id": "urn:solid-server:default:PodManager"
},
"PodManagerHttpHandler:_args_responseWriter": {
"@id": "urn:solid-server:default:ResponseWriter"
}
}
]
}

View File

@ -86,6 +86,24 @@ export * from './src/logging/LogUtil';
export * from './src/logging/VoidLoggerFactory';
export * from './src/logging/WinstonLoggerFactory';
// Pods/Agent
export * from './src/pods/agent/Agent';
export * from './src/pods/agent/AgentJsonParser';
export * from './src/pods/agent/AgentParser';
// Pods/Generate
export * from './src/pods/generate/HandlebarsTemplateEngine';
export * from './src/pods/generate/IdentifierGenerator';
export * from './src/pods/generate/ResourcesGenerator';
export * from './src/pods/generate/SuffixIdentifierGenerator';
export * from './src/pods/generate/TemplateEngine';
export * from './src/pods/generate/TemplatedResourcesGenerator';
// Pods
export * from './src/pods/GeneratedPodManager';
export * from './src/pods/PodManager';
export * from './src/pods/PodManagerHttpHandler';
// Server
export * from './src/server/ExpressHttpServerFactory';
export * from './src/server/HttpHandler';

View File

@ -37,6 +37,7 @@ export const runCli = function({
port: { type: 'number', alias: 'p', default: 3000 },
rootFilePath: { type: 'string', alias: 'f' },
sparqlEndpoint: { type: 'string', alias: 's' },
podTemplateFolder: { type: 'string', alias: 't' },
})
.help();
@ -58,6 +59,8 @@ export const runCli = function({
'urn:solid-server:default:variable:port': params.port,
'urn:solid-server:default:variable:rootFilePath': params.rootFilePath ?? process.cwd(),
'urn:solid-server:default:variable:sparqlEndpoint': params.sparqlEndpoint,
'urn:solid-server:default:variable:podTemplateFolder':
params.podTemplateFolder ?? path.join(__dirname, '../../templates'),
},
}) as Setup;
return await setup.setup();

26
templates/.acl Normal file
View File

@ -0,0 +1,26 @@
# Root ACL resource for the agent account
@prefix acl: <http://www.w3.org/ns/auth/acl#>.
@prefix foaf: <http://xmlns.com/foaf/0.1/>.
# 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 <mailto:{{{email}}}>;{{/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.

View File

@ -0,0 +1,10 @@
@prefix foaf: <http://xmlns.com/foaf/0.1/>.
<>
a foaf:PersonalProfileDocument;
foaf:maker <{{webId}}>;
foaf:primaryTopic <{{webId}}>.
<{{webId}}>
a foaf:Person;
foaf:name "{{name}}".

View File

@ -6,6 +6,10 @@
"files-scs:config/presets/cli-params.json"
],
"@graph": [
{
"@id": "urn:solid-server:default:PodManagerHandler",
"@type": "Variable"
},
{
"@id": "urn:solid-server:default:LdpHandler",
"@type": "Variable"

View File

@ -10,6 +10,7 @@
"files-scs:config/presets/ldp/request-parser.json",
"files-scs:config/presets/ldp/websockets.json",
"files-scs:config/presets/middleware.json",
"files-scs:config/presets/pod-management.json",
"files-scs:config/presets/representation-conversion.json",
"files-scs:config/presets/storage/backend/storage-memory.json",
"files-scs:config/presets/storage/routing/no-routing.json",

View File

@ -21,6 +21,7 @@ describe('An Express server with middleware', (): void => {
beforeAll(async(): Promise<void> => {
const factory = await instantiateFromConfig(
'urn:solid-server:default:ExpressHttpServerFactory', 'middleware.json', {
'urn:solid-server:default:PodManagerHandler': new SimpleHttpHandler(),
'urn:solid-server:default:LdpHandler': new SimpleHttpHandler(),
'urn:solid-server:default:variable:port': port,
'urn:solid-server:default:variable:baseUrl': 'https://example.pod/',

View File

@ -16,6 +16,7 @@ describe('A server with the Solid WebSockets API behind a proxy', (): void => {
'urn:solid-server:default:ServerFactory', 'websockets.json', {
'urn:solid-server:default:variable:port': port,
'urn:solid-server:default:variable:baseUrl': 'https://example.pod/',
'urn:solid-server:default:variable:podTemplateFolder': 'templates',
},
) as HttpServerFactory;
server = factory.startServer(port);

View File

@ -44,6 +44,7 @@ describe('CliRunner', (): void => {
'urn:solid-server:default:variable:rootFilePath': process.cwd(),
'urn:solid-server:default:variable:sparqlEndpoint': undefined,
'urn:solid-server:default:variable:loggingLevel': 'info',
'urn:solid-server:default:variable:podTemplateFolder': path.join(__dirname, '../../../templates'),
},
},
);
@ -63,6 +64,7 @@ describe('CliRunner', (): void => {
'-f', '/root',
'-s', 'http://localhost:5000/sparql',
'-l', 'debug',
'-t', 'templates',
],
});
await mockSetup.setup();
@ -78,6 +80,7 @@ describe('CliRunner', (): void => {
'urn:solid-server:default:variable:rootFilePath': '/root',
'urn:solid-server:default:variable:sparqlEndpoint': 'http://localhost:5000/sparql',
'urn:solid-server:default:variable:loggingLevel': 'debug',
'urn:solid-server:default:variable:podTemplateFolder': 'templates',
},
},
);
@ -93,6 +96,7 @@ describe('CliRunner', (): void => {
'--rootFilePath', '/root',
'--sparqlEndpoint', 'http://localhost:5000/sparql',
'--loggingLevel', 'debug',
'--podTemplateFolder', 'templates',
],
});
await mockSetup.setup();
@ -108,6 +112,7 @@ describe('CliRunner', (): void => {
'urn:solid-server:default:variable:rootFilePath': '/root',
'urn:solid-server:default:variable:sparqlEndpoint': 'http://localhost:5000/sparql',
'urn:solid-server:default:variable:loggingLevel': 'debug',
'urn:solid-server:default:variable:podTemplateFolder': 'templates',
},
},
);