mirror of
https://github.com/CommunitySolidServer/CommunitySolidServer.git
synced 2024-10-03 14:55:10 +00:00
test: Add acl test for file paths with spaces
This commit is contained in:
parent
12e501844f
commit
dfb8ac938d
@ -1,6 +1,7 @@
|
|||||||
|
import { promises as fsPromises } from 'fs';
|
||||||
import fetch from 'cross-fetch';
|
import fetch from 'cross-fetch';
|
||||||
import type { ResourceStore, App } from '../../src/';
|
import type { ResourceStore, App } from '../../src/';
|
||||||
import { BasicRepresentation } from '../../src/';
|
import { BasicRepresentation, isSystemError, joinFilePath } from '../../src/';
|
||||||
import { AclHelper } from '../util/AclHelper';
|
import { AclHelper } from '../util/AclHelper';
|
||||||
import { deleteResource, getResource, postResource, putResource } from '../util/FetchUtil';
|
import { deleteResource, getResource, postResource, putResource } from '../util/FetchUtil';
|
||||||
import { getPort } from '../util/Util';
|
import { getPort } from '../util/Util';
|
||||||
@ -193,4 +194,43 @@ describe.each(stores)('An LDP handler with auth using %s', (name, { storeConfig,
|
|||||||
expect(response.status).toBe(401);
|
expect(response.status).toBe(401);
|
||||||
expect(response.headers.get('www-authenticate')).toBe('Bearer scope="openid webid"');
|
expect(response.headers.get('www-authenticate')).toBe('Bearer scope="openid webid"');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('supports file paths with spaces.', async(): Promise<void> => {
|
||||||
|
// Specific problem for file store, so only do this if the rootFilePath folder exists
|
||||||
|
try {
|
||||||
|
await fsPromises.lstat(rootFilePath);
|
||||||
|
} catch (error: unknown) {
|
||||||
|
if (isSystemError(error) && error.code === 'ENOENT') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Correct identifier when there are spaces
|
||||||
|
const identifier = { path: `${baseUrl}with%20spaces.txt` };
|
||||||
|
|
||||||
|
// Set acl specifically for this identifier
|
||||||
|
const acl = `@prefix acl: <http://www.w3.org/ns/auth/acl#>.
|
||||||
|
@prefix foaf: <http://xmlns.com/foaf/0.1/>.
|
||||||
|
<#authorization>
|
||||||
|
a acl:Authorization;
|
||||||
|
acl:agentClass foaf:Agent;
|
||||||
|
acl:mode acl:Read;
|
||||||
|
acl:accessTo <${identifier.path}>.`;
|
||||||
|
|
||||||
|
// Prevent other access to make sure there is no hierarchy bug
|
||||||
|
await aclHelper.setSimpleAcl(baseUrl, {
|
||||||
|
permissions: {},
|
||||||
|
agentClass: 'agent',
|
||||||
|
default: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
// Write files manually to make sure there are spaces
|
||||||
|
await fsPromises.writeFile(joinFilePath(rootFilePath, 'with spaces.txt.acl'), acl);
|
||||||
|
await fsPromises.writeFile(joinFilePath(rootFilePath, 'with spaces.txt'), 'valid data');
|
||||||
|
|
||||||
|
// GET file
|
||||||
|
const response = await getResource(identifier.path);
|
||||||
|
expect(await response.text()).toContain('valid data');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user