feat: Create configurations to integrate dynamic pod creation

This commit is contained in:
Joachim Van Herwegen 2021-02-25 17:08:27 +01:00
parent 6288003915
commit e500a82680
8 changed files with 300 additions and 0 deletions

View File

@ -0,0 +1,37 @@
{
"@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^0.0.0/components/context.jsonld",
"import": [
"files-scs:config/presets/acl.json",
"files-scs:config/presets/http.json",
"files-scs:config/presets/identifiers/suffix-identifiers.json",
"files-scs:config/presets/init.json",
"files-scs:config/presets/ldp.json",
"files-scs:config/presets/ldp/credentials-extractor.json",
"files-scs:config/presets/ldp/metadata-handler.json",
"files-scs:config/presets/ldp/operation-handler.json",
"files-scs:config/presets/ldp/permissions-extractor.json",
"files-scs:config/presets/ldp/response-writer.json",
"files-scs:config/presets/ldp/request-parser.json",
"files-scs:config/presets/ldp/websockets.json",
"files-scs:config/presets/logging.json",
"files-scs:config/presets/middleware.json",
"files-scs:config/presets/pod-dynamic.json",
"files-scs:config/presets/representation-conversion.json",
"files-scs:config/presets/static.json",
"files-scs:config/presets/storage/backend/storage-memory.json",
"files-scs:config/presets/storage-wrapper.json",
"files-scs:config/presets/cli-params.json"
],
"@graph": [
{
"comment": "This configuration sets up a server that allows for the creation of dynamic pods through pod provisioning."
},
{
"comment": "Which store to use for requests that do not match any pod",
"@id": "urn:solid-server:default:BaseUrlRouterRule",
"BaseUrlRouterRule:_baseStore": {
"@id": "urn:solid-server:default:MemoryResourceStore"
}
}
]
}

View File

@ -24,6 +24,11 @@
{ {
"@id": "urn:solid-server:default:variable:podTemplateFolder", "@id": "urn:solid-server:default:variable:podTemplateFolder",
"@type": "Variable" "@type": "Variable"
},
{
"comment": "Path to the JSON file used to store configuration for dynamic pods.",
"@id": "urn:solid-server:default:variable:podConfigJson",
"@type": "Variable"
} }
] ]
} }

View File

@ -0,0 +1,143 @@
{
"@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^0.0.0/components/context.jsonld",
"@graph": [
{
"comment": "Sets up all the classes that are specifically necessary for dynamic pod generation."
},
{
"@id": "urn:solid-server:default:PodConfigurationStorage",
"@type": "JsonFileStorage",
"JsonFileStorage:_filePath": "urn:solid-server:default:variable:podConfigJson",
"JsonFileStorage:_locker": {
"@id": "urn:solid-server:default:ResourceLocker"
}
},
{
"@id": "urn:solid-server:default:PodRoutingStorage",
"@type": "ResourceIdentifierStorage",
"ResourceIdentifierStorage:_source": {
"@type": "MemoryMapStorage"
}
},
{
"@id": "urn:solid-server:default:StoreFactory",
"@type": "BaseComponentsJsFactory"
},
{
"@id": "urn:solid-server:default:PodGenerator",
"@type": "TemplatedPodGenerator",
"TemplatedPodGenerator:_storeFactory": {
"@id": "urn:solid-server:default:StoreFactory"
},
"TemplatedPodGenerator:_variableHandler": {
"@type": "ParallelHandler",
"ParallelHandler:_handlers": [
{
"@type": "BaseUrlHandler"
},
{
"@type": "RootFilePathHandler",
"RootFilePathHandler:_fileMapper": {
"@type": "ExtensionBasedMapper",
"ExtensionBasedMapper:_base": {
"@id": "urn:solid-server:default:variable:baseUrl"
},
"ExtensionBasedMapper:_rootFilepath": {
"@id": "urn:solid-server:default:variable:rootFilePath"
},
"ExtensionBasedMapper:_overrideTypes_acl": "text/turtle",
"ExtensionBasedMapper:_overrideTypes_meta": "text/turtle"
}
}
]
},
"TemplatedPodGenerator:_configStorage": {
"@id": "urn:solid-server:default:PodConfigurationStorage"
}
},
{
"@id": "urn:solid-server:default:PodManager",
"@type": "ConfigPodManager",
"ConfigPodManager:_idGenerator": {
"@type": "SuffixIdentifierGenerator",
"SuffixIdentifierGenerator:_base": {
"@id": "urn:solid-server:default:variable:baseUrl"
}
},
"ConfigPodManager:_podGenerator": {
"@id": "urn:solid-server:default:PodGenerator"
},
"ConfigPodManager:_routingStorage": {
"@id": "urn:solid-server:default:PodRoutingStorage"
},
"ConfigPodManager:_resourcesGenerator": {
"@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:PodManagerHandler",
"@type": "PodManagerHttpHandler",
"PodManagerHttpHandler:_args_requestPath": "/pods",
"PodManagerHttpHandler:_args_requestParser": {
"@id": "urn:solid-server:default:RequestParser"
},
"PodManagerHttpHandler:_args_podSettingsParser": {
"@type": "PodSettingsJsonParser"
},
"PodManagerHttpHandler:_args_manager": {
"@id": "urn:solid-server:default:PodManager"
},
"PodManagerHttpHandler:_args_responseWriter": {
"@id": "urn:solid-server:default:ResponseWriter"
}
},
{
"@id": "urn:solid-server:default:Initializer",
"comment": "Add entry to initializer list",
"SequenceHandler:_handlers": {
"@type": "ConfigPodInitializer",
"ConfigPodInitializer:_storeFactory": {
"@id": "urn:solid-server:default:StoreFactory"
},
"ConfigPodInitializer:_configStorage": {
"@id": "urn:solid-server:default:PodConfigurationStorage"
},
"ConfigPodInitializer:_routingStorage": {
"@id": "urn:solid-server:default:PodRoutingStorage"
}
}
},
{
"@id": "urn:solid-server:default:BaseUrlRouterRule",
"@type": "BaseUrlRouterRule",
"BaseUrlRouterRule:_stores": {
"@id": "urn:solid-server:default:PodRoutingStorage"
}
},
{
"@id": "urn:solid-server:default:RoutingResourceStore",
"@type": "RoutingResourceStore",
"RoutingResourceStore:_rule": {
"@id": "urn:solid-server:default:BaseUrlRouterRule"
}
}
]
}

View File

@ -0,0 +1,51 @@
{
"@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^0.0.0/components/context.jsonld",
"import": [
"files-scs:config/presets/acl.json",
"files-scs:config/presets/representation-conversion.json",
"files-scs:config/presets/static.json"
],
"@graph": [
{
"comment": "Configures classes that are used by all other storage-*.json configurations."
},
{
"@id": "urn:solid-server:default:AuxiliaryStrategy",
"comment": "Copied from storage-wrapper.json since a variable is required in there",
"@type": "RoutingAuxiliaryStrategy",
"RoutingAuxiliaryStrategy:_sources": [
{
"@id": "urn:solid-server:default:AclStrategy"
}
]
},
{
"@id": "urn:solid-server:template:IdentifierStrategy",
"@type": "SingleRootIdentifierStrategy",
"SingleRootIdentifierStrategy:_baseUrl": {
"@id": "urn:solid-server:template:variable:baseUrl"
}
},
{
"@id": "urn:solid-server:template:ResourceStore",
"@type": "DataAccessorBasedStore",
"DataAccessorBasedStore:_accessor": {
"@id": "urn:solid-server:template:DataAccessor"
},
"DataAccessorBasedStore:_identifierStrategy": {
"@id": "urn:solid-server:template:IdentifierStrategy"
},
"DataAccessorBasedStore:_auxiliaryStrategy": {
"@id": "urn:solid-server:default:AuxiliaryStrategy"
}
},
{
"@id": "urn:solid-server:template:variable:baseUrl",
"@type": "Variable"
}
]
}

View File

@ -0,0 +1,37 @@
{
"@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^0.0.0/components/context.jsonld",
"import": [
"files-scs:config/templates/storage-defaults.json"
],
"@graph": [
{
"comment": "Sets up a file data accessor with corresponding extension based file mapper."
},
{
"@id": "urn:solid-server:template:FileIdentifierMapper",
"@type": "ExtensionBasedMapper",
"ExtensionBasedMapper:_base": {
"@id": "urn:solid-server:template:variable:baseUrl"
},
"ExtensionBasedMapper:_rootFilepath": {
"@id": "urn:solid-server:template:variable:rootFilePath"
},
"ExtensionBasedMapper:_overrideTypes_acl": "text/turtle",
"ExtensionBasedMapper:_overrideTypes_meta": "text/turtle"
},
{
"@id": "urn:solid-server:template:DataAccessor",
"@type": "FileDataAccessor",
"FileDataAccessor:_resourceMapper": {
"@id": "urn:solid-server:template:FileIdentifierMapper"
}
},
{
"@id": "urn:solid-server:template:variable:rootFilePath",
"@type": "Variable"
}
]
}

View File

@ -0,0 +1,19 @@
{
"@context": "https://linkedsoftwaredependencies.org/bundles/npm/@solid/community-server/^0.0.0/components/context.jsonld",
"import": [
"files-scs:config/templates/storage-defaults.json"
],
"@graph": [
{
"comment": "Sets up a memory data accessor."
},
{
"@id": "urn:solid-server:template:DataAccessor",
"@type": "InMemoryDataAccessor",
"InMemoryDataAccessor:_strategy": {
"@id": "urn:solid-server:template:IdentifierStrategy"
}
}
]
}

View File

@ -37,6 +37,7 @@ export class CliRunner {
port: { type: 'number', alias: 'p', default: 3000 }, port: { type: 'number', alias: 'p', default: 3000 },
rootFilePath: { type: 'string', alias: 'f', default: './' }, rootFilePath: { type: 'string', alias: 'f', default: './' },
sparqlEndpoint: { type: 'string', alias: 's' }, sparqlEndpoint: { type: 'string', alias: 's' },
podConfigJson: { type: 'string', default: './pod-config.json' },
}) })
.help(); .help();
@ -89,6 +90,8 @@ export class CliRunner {
'urn:solid-server:default:variable:sparqlEndpoint': params.sparqlEndpoint, 'urn:solid-server:default:variable:sparqlEndpoint': params.sparqlEndpoint,
'urn:solid-server:default:variable:podTemplateFolder': 'urn:solid-server:default:variable:podTemplateFolder':
this.resolveFilePath(params.podTemplateFolder, 'templates/pod'), this.resolveFilePath(params.podTemplateFolder, 'templates/pod'),
'urn:solid-server:default:variable:podConfigJson':
this.resolveFilePath(params.podConfigJson),
}; };
} }

View File

@ -60,6 +60,7 @@ describe('CliRunner', (): void => {
'urn:solid-server:default:variable:sparqlEndpoint': undefined, 'urn:solid-server:default:variable:sparqlEndpoint': undefined,
'urn:solid-server:default:variable:loggingLevel': 'info', 'urn:solid-server:default:variable:loggingLevel': 'info',
'urn:solid-server:default:variable:podTemplateFolder': joinFilePath(__dirname, '../../../templates/pod'), 'urn:solid-server:default:variable:podTemplateFolder': joinFilePath(__dirname, '../../../templates/pod'),
'urn:solid-server:default:variable:podConfigJson': '/var/cwd/pod-config.json',
}, },
}, },
); );
@ -79,6 +80,7 @@ describe('CliRunner', (): void => {
'-p', '4000', '-p', '4000',
'-s', 'http://localhost:5000/sparql', '-s', 'http://localhost:5000/sparql',
'-t', 'templates', '-t', 'templates',
'--podConfigJson', '/different-path.json',
], ],
}); });
@ -106,6 +108,7 @@ describe('CliRunner', (): void => {
'urn:solid-server:default:variable:port': 4000, 'urn:solid-server:default:variable:port': 4000,
'urn:solid-server:default:variable:rootFilePath': '/root', 'urn:solid-server:default:variable:rootFilePath': '/root',
'urn:solid-server:default:variable:sparqlEndpoint': 'http://localhost:5000/sparql', 'urn:solid-server:default:variable:sparqlEndpoint': 'http://localhost:5000/sparql',
'urn:solid-server:default:variable:podConfigJson': '/different-path.json',
}, },
}, },
); );
@ -123,6 +126,7 @@ describe('CliRunner', (): void => {
'--port', '4000', '--port', '4000',
'--rootFilePath', 'root', '--rootFilePath', 'root',
'--sparqlEndpoint', 'http://localhost:5000/sparql', '--sparqlEndpoint', 'http://localhost:5000/sparql',
'--podConfigJson', '/different-path.json',
], ],
}); });
@ -150,6 +154,7 @@ describe('CliRunner', (): void => {
'urn:solid-server:default:variable:port': 4000, 'urn:solid-server:default:variable:port': 4000,
'urn:solid-server:default:variable:rootFilePath': '/var/cwd/root', 'urn:solid-server:default:variable:rootFilePath': '/var/cwd/root',
'urn:solid-server:default:variable:sparqlEndpoint': 'http://localhost:5000/sparql', 'urn:solid-server:default:variable:sparqlEndpoint': 'http://localhost:5000/sparql',
'urn:solid-server:default:variable:podConfigJson': '/different-path.json',
}, },
}, },
); );