Skip to content

Commit

Permalink
Merge branch 'fix/issue#1692' of https://github.com/solid/node-solid-…
Browse files Browse the repository at this point in the history
…server into fix/issue#1692
  • Loading branch information
bourgeoa committed Mar 29, 2024
2 parents d419882 + c68a304 commit 7f8ff3f
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 9 deletions.
9 changes: 8 additions & 1 deletion lib/ldp.js
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ class LDP {
}

async post (hostname, containerPath, stream, { container, slug, extension, contentType }) {
console.log('container:', container)
// POST without content type is forbidden
if (!contentType) {
throw error(400,
Expand All @@ -155,7 +156,13 @@ class LDP {

if (container) {
// the name of a container cannot be a valid auxiliary resource document
if (this._containsInvalidSuffixes(slug + '/')) slug = slug.split('.')[0]
while (this._containsInvalidSuffixes(slug + '/')) {
console.log('splitting slug', slug)
// slug = slug.split('.')[0]
const idx = slug.lastIndexOf('.')
slug = slug.substr(0, idx)
console.log('new slug', slug)
}
} else if (this.isAuxResource(slug, extension)) throw error(403, 'POST is not allowed for auxiliary resources')

if (slug.match(/\/|\||:/)) {
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@
"validate": "node ./test/validate-turtle.js",
"nyc": "cross-env NODE_TLS_REJECT_UNAUTHORIZED=0 nyc --reporter=text-summary mocha --recursive test/integration/ test/unit/",
"mocha": "cross-env NODE_TLS_REJECT_UNAUTHORIZED=0 mocha --recursive test/integration/ test/unit/",
"mocha-integration": "cross-env NODE_TLS_REJECT_UNAUTHORIZED=0 mocha --recursive test/integration/http-test.js",
"prepublishOnly": "npm test",
"postpublish": "git push --follow-tags",
"test": "npm run standard && npm run validate && npm run nyc",
Expand Down
25 changes: 18 additions & 7 deletions test/integration/http-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -891,13 +891,6 @@ describe('HTTP APIs', function () {
.set('content-type', 'text/turtle')
.expect(403, done)
})
it('should not error with 400 if slug contains invalid suffix', function (done) { // TODO find better name
server.post('/post-tests/')
.set('slug', 'put-resource.acl.ttl')
.send(postRequest1Body)
.set('content-type', 'text-turtle')
.expect(201, done)
})
it('should error with 400 if the body is empty and no content type is provided', function (done) {
server.post('/post-tests/')
.set('slug', 'post-resource-empty-fail')
Expand All @@ -921,6 +914,24 @@ describe('HTTP APIs', function () {
.expect(hasHeader('acl', suffixAcl))
.expect(201, done)
})
it('should create new resource even if slug contains invalid suffix', function (done) {
server.post('/post-tests/')
.set('slug', 'put-resource.acl.ttl')
.send(postRequest1Body)
.set('content-type', 'text-turtle')
.expect(hasHeader('describedBy', suffixMeta))
.expect(hasHeader('acl', suffixAcl))
.expect(201, done)
})
it('create container with recursive example', function (done) {
server.post('/post-tests/')
.set('content-type', 'text/turtle')
.set('slug', 'foo.bar.acl.meta')
.set('link', '<http://www.w3.org/ns/ldp#BasicContainer>; rel="type"')
.send(postRequest2Body)
.expect('location', /\/post-tests\/foo.bar\//)
.expect(201, done)
})
it('should fail return 404 if no parent container found', function (done) {
server.post('/hello.html/')
.send(postRequest1Body)
Expand Down
12 changes: 11 additions & 1 deletion test/integration/patch-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ describe('PATCH through text/n3', () => {
result: '@prefix : </new.n3#>.\n@prefix tim: </>.\n\ntim:x tim:y tim:z.\n\n'
}))

describe('on an N3 file that has an invalid uri', describePatch({
describe('on an N3 file that has an invalid uri (*.acl)', describePatch({
path: '/foo/bar.acl/test.n3',
exists: false,
patch: `<> a solid:InsertDeletePatch;
Expand All @@ -141,6 +141,16 @@ describe('PATCH through text/n3', () => {
text: 'contained reserved suffixes in path'
}))

describe('on an N3 file that has an invalid uri (*.meta)', describePatch({
path: '/foo/bar/xyz.meta/test.n3',
exists: false,
patch: `<> a solid:InsertDeletePatch;
solid:insers { <x> <y> <z>. }.`
}, {
status: 400,
text: 'contained reserved suffixes in path'
}))

describe('on a resource with read-only access', describePatch({
path: '/read-only.ttl',
patch: `<> a solid:InsertDeletePatch;
Expand Down

0 comments on commit 7f8ff3f

Please sign in to comment.