Skip to content

Commit 4d52960

Browse files
authored
Merge pull request #1010 from rubensworks/fix/profile-broken
Fix listings showing extensionless files incorrectly, Closes #1009
2 parents 959a74e + f8dbbac commit 4d52960

File tree

3 files changed

+21
-18
lines changed

3 files changed

+21
-18
lines changed

lib/ldp-container.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ const path = require('path')
1313

1414
async function addContainerStats (ldp, reqUri, filename, resourceGraph) {
1515
const containerStats = await ldp.stat(filename)
16-
addStats(resourceGraph, reqUri, containerStats)
16+
addStats(resourceGraph, reqUri, containerStats, filename)
1717
resourceGraph.add(
1818
resourceGraph.sym(reqUri),
1919
ns.rdf('type'),
@@ -24,7 +24,7 @@ async function addContainerStats (ldp, reqUri, filename, resourceGraph) {
2424
ns.ldp('Container'))
2525
}
2626

27-
async function addFile (ldp, resourceGraph, containerUri, reqUri, uri, container, file) {
27+
async function addFile (ldp, resourceGraph, containerUri, reqUri, container, file) {
2828
// Skip .meta and .acl
2929
if (file.endsWith(ldp.suffixMeta) || file.endsWith(ldp.suffixAcl)) {
3030
return null
@@ -42,7 +42,7 @@ async function addFile (ldp, resourceGraph, containerUri, reqUri, uri, container
4242
let memberUri = reqUri + (stats.isDirectory() ? '/' : '')
4343

4444
// Add fileStats to resource Graph
45-
addStats(resourceGraph, memberUri, stats)
45+
addStats(resourceGraph, memberUri, stats, file)
4646

4747
// Add to `contains` list
4848
resourceGraph.add(
@@ -106,7 +106,7 @@ async function addFile (ldp, resourceGraph, containerUri, reqUri, uri, container
106106
return null
107107
}
108108

109-
function addStats (resourceGraph, reqUri, stats) {
109+
function addStats (resourceGraph, reqUri, stats, filename) {
110110
resourceGraph.add(
111111
resourceGraph.sym(reqUri),
112112
ns.stat('mtime'), // Deprecate?
@@ -122,8 +122,8 @@ function addStats (resourceGraph, reqUri, stats) {
122122
ns.stat('size'),
123123
stats.size)
124124

125-
if (mime.lookup(reqUri)) { // Is the file has a well-known type,
126-
let type = 'http://www.w3.org/ns/iana/media-types/' + mime.lookup(reqUri) + '#Resource'
125+
if (mime.lookup(filename)) { // Is the file has a well-known type,
126+
let type = 'http://www.w3.org/ns/iana/media-types/' + mime.lookup(filename) + '#Resource'
127127
resourceGraph.add(
128128
resourceGraph.sym(reqUri),
129129
ns.rdf('type'), // convert MIME type to RDF

lib/ldp.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ class LDP {
113113
return this.readResource(url + this.suffixMeta)
114114
}
115115

116-
async listContainer (filename, reqUri, uri, containerData, contentType) {
116+
async listContainer (filename, reqUri, containerData, hostname) {
117117
const resourceGraph = $rdf.graph()
118118

119119
try {
@@ -129,9 +129,10 @@ class LDP {
129129
// read directory
130130
const files = await ldpContainer.readdir(filename)
131131
// iterate through all the files
132-
await Promise.all(files.map(file => {
133-
const fileUri = url.resolve(reqUri, encodeURIComponent(file))
134-
return ldpContainer.addFile(this, resourceGraph, reqUri, fileUri, uri, filename, file)
132+
await Promise.all(files.map(async file => {
133+
const { url: fileUri } = await this.resourceMapper.mapFileToUrl(
134+
{ path: path.join(filename, file), hostname })
135+
return await ldpContainer.addFile(this, resourceGraph, reqUri, fileUri, filename, file)
135136
}))
136137
} catch (err) {
137138
throw error(500, "Can't list container")
@@ -340,7 +341,6 @@ class LDP {
340341
} catch (err) {
341342
throw error(404, 'Can\'t find file requested: ' + options)
342343
}
343-
const baseUri = this.resourceMapper.resolveUrl(options.hostname)
344344

345345
// Just return, since resource exists
346346
if (!options.includeBody) {
@@ -355,7 +355,7 @@ class LDP {
355355
.catch(() => '') // Default to an empty meta file if it is missing
356356
let data
357357
try {
358-
data = await this.listContainer(filename, absContainerUri, baseUri, metaFile, contentType)
358+
data = await this.listContainer(filename, absContainerUri, metaFile, options.hostname)
359359
} catch (err) {
360360
debug.handlers('GET container -- Read error:' + err.message)
361361
throw err

test/integration/ldp-test.js

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -285,18 +285,18 @@ describe('LDP', function () {
285285
' dcterms:title "This is a container" ;' +
286286
' o:limit 500000.00 .', 'sampleContainer/basicContainerFile.ttl')
287287

288-
return ldp.listContainer(path.join(__dirname, '../resources/sampleContainer/'), 'https://server.tld/resources/sampleContainer/', 'https://server.tld', '', 'text/turtle')
288+
return ldp.listContainer(path.join(__dirname, '../resources/sampleContainer/'), 'https://server.tld/resources/sampleContainer/', '', 'server.tld')
289289
.then(data => {
290290
var graph = $rdf.graph()
291291
$rdf.parse(
292292
data,
293293
graph,
294-
'https://server.tld/sampleContainer',
294+
'https://localhost:8443/resources/sampleContainer',
295295
'text/turtle')
296296

297297
var basicContainerStatements = graph
298298
.each(
299-
$rdf.sym('https://server.tld/basicContainerFile.ttl'),
299+
$rdf.sym('https://localhost:8443/resources/sampleContainer/basicContainerFile.ttl'),
300300
ns.rdf('type'),
301301
undefined
302302
)
@@ -310,7 +310,7 @@ describe('LDP', function () {
310310

311311
var containerStatements = graph
312312
.each(
313-
$rdf.sym('https://server.tld/containerFile.ttl'),
313+
$rdf.sym('https://localhost:8443/resources/sampleContainer/containerFile.ttl'),
314314
ns.rdf('type'),
315315
undefined
316316
)
@@ -324,15 +324,18 @@ describe('LDP', function () {
324324
})
325325

326326
it('should ldp:contains the same files in dir', () => {
327-
ldp.listContainer(path.join(__dirname, '../resources/sampleContainer/'), 'https://server.tld/resources/sampleContainer/', 'https://server.tld', '', 'text/turtle')
327+
ldp.listContainer(path.join(__dirname, '../resources/sampleContainer/'), 'https://server.tld/resources/sampleContainer/', '', 'server.tld')
328328
.then(data => {
329329
fs.readdir(path.join(__dirname, '../resources/sampleContainer/'), function (err, expectedFiles) {
330+
// Strip dollar extension
331+
expectedFiles = expectedFiles.map(ldp.resourceMapper._removeDollarExtension)
332+
330333
if (err) {
331334
return Promise.reject(err)
332335
}
333336

334337
const graph = $rdf.graph()
335-
$rdf.parse(data, graph, 'https://server.tld/sampleContainer/', 'text/turtle')
338+
$rdf.parse(data, graph, 'https://localhost:8443/resources/sampleContainer/', 'text/turtle')
336339
const statements = graph.match(null, ns.ldp('contains'), null)
337340
const files = statements
338341
.map(s => s.object.value.replace(/.*\//, ''))

0 commit comments

Comments
 (0)