mirror of
https://github.com/CommunitySolidServer/CommunitySolidServer.git
synced 2024-10-03 14:55:10 +00:00
fix: Make sure all URI characters are correctly encoded
This commit is contained in:
@@ -26,8 +26,14 @@ describe('A BasicTargetExtractor', (): void => {
|
||||
)).resolves.toEqual({ path: 'https://test.com/url' });
|
||||
});
|
||||
|
||||
it('decodes relevant percent encodings.', async(): Promise<void> => {
|
||||
it('encodes relevant characters.', async(): Promise<void> => {
|
||||
await expect(extractor.handle({ url: '/a%20path%26/name', headers: { host: 'test.com' }} as any))
|
||||
.resolves.toEqual({ path: 'http://test.com/a%20path&/name' });
|
||||
.resolves.toEqual({ path: 'http://test.com/a%20path%26/name' });
|
||||
|
||||
await expect(extractor.handle({ url: '/a path%26/name', headers: { host: 'test.com' }} as any))
|
||||
.resolves.toEqual({ path: 'http://test.com/a%20path%26/name' });
|
||||
|
||||
await expect(extractor.handle({ url: '/path&%26/name', headers: { host: 'test.com' }} as any))
|
||||
.resolves.toEqual({ path: 'http://test.com/path%26%26/name' });
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
import streamifyArray from 'streamify-array';
|
||||
import { UnsupportedHttpError } from '../../../src/util/errors/UnsupportedHttpError';
|
||||
import { ensureTrailingSlash, matchingMediaType, readableToString, toCanonicalUrl } from '../../../src/util/Util';
|
||||
import {
|
||||
decodeUriPathComponents,
|
||||
encodeUriPathComponents,
|
||||
ensureTrailingSlash,
|
||||
matchingMediaType,
|
||||
readableToString,
|
||||
toCanonicalUriPath,
|
||||
} from '../../../src/util/Util';
|
||||
|
||||
describe('Util function', (): void => {
|
||||
describe('ensureTrailingSlash', (): void => {
|
||||
@@ -33,14 +39,17 @@ describe('Util function', (): void => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('toCanonicalUrl', (): void => {
|
||||
it('makes sure only the necessary parts are encoded.', async(): Promise<void> => {
|
||||
expect(toCanonicalUrl('http://test.com/a%20path%26/name'))
|
||||
.toEqual('http://test.com/a%20path&/name');
|
||||
describe('UriPath functions', (): void => {
|
||||
it('makes sure only the necessary parts are encoded with toCanonicalUriPath.', async(): Promise<void> => {
|
||||
expect(toCanonicalUriPath('/a%20path&/name')).toEqual('/a%20path%26/name');
|
||||
});
|
||||
|
||||
it('errors on invalid URLs.', async(): Promise<void> => {
|
||||
expect((): any => toCanonicalUrl('notAnUrl')).toThrow(new UnsupportedHttpError('Invalid URL notAnUrl'));
|
||||
it('decodes all parts of a path with decodeUriPathComponents.', async(): Promise<void> => {
|
||||
expect(decodeUriPathComponents('/a%20path&/name')).toEqual('/a path&/name');
|
||||
});
|
||||
|
||||
it('encodes all parts of a path with encodeUriPathComponents.', async(): Promise<void> => {
|
||||
expect(encodeUriPathComponents('/a%20path&/name')).toEqual('/a%2520path%26/name');
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user