mirror of
https://github.com/CommunitySolidServer/CommunitySolidServer.git
synced 2024-10-03 14:55:10 +00:00
fix: Extract root as possible pod when using subdomains
This commit is contained in:
parent
5086f2280b
commit
8fff08a9b6
@ -7,6 +7,8 @@ import type { IdentifierGenerator } from './IdentifierGenerator';
|
|||||||
/**
|
/**
|
||||||
* Generates identifiers by using the name as a subdomain on the base URL.
|
* Generates identifiers by using the name as a subdomain on the base URL.
|
||||||
* Non-alphanumeric characters will be replaced with `-`.
|
* Non-alphanumeric characters will be replaced with `-`.
|
||||||
|
*
|
||||||
|
* When extracting the pod, the base URl is also seen as a pod as there is no issue of nested containers here.
|
||||||
*/
|
*/
|
||||||
export class SubdomainIdentifierGenerator implements IdentifierGenerator {
|
export class SubdomainIdentifierGenerator implements IdentifierGenerator {
|
||||||
private readonly baseParts: { scheme: string; rest: string };
|
private readonly baseParts: { scheme: string; rest: string };
|
||||||
@ -32,8 +34,8 @@ export class SubdomainIdentifierGenerator implements IdentifierGenerator {
|
|||||||
|
|
||||||
const idx = path.indexOf(this.baseParts.rest);
|
const idx = path.indexOf(this.baseParts.rest);
|
||||||
|
|
||||||
// If the idx is smaller than this, either there was no match, or there is no subdomain
|
// If the idx is smaller than this, there was no match
|
||||||
if (idx <= this.baseParts.scheme.length) {
|
if (idx < 0) {
|
||||||
throw new BadRequestHttpError(`Invalid identifier ${path}`);
|
throw new BadRequestHttpError(`Invalid identifier ${path}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,6 +30,11 @@ describe('A SubdomainIdentifierGenerator', (): void => {
|
|||||||
|
|
||||||
it('errors when extracting if there is no pod.', async(): Promise<void> => {
|
it('errors when extracting if there is no pod.', async(): Promise<void> => {
|
||||||
const identifier = { path: 'http://example.com/bar/baz' };
|
const identifier = { path: 'http://example.com/bar/baz' };
|
||||||
|
expect(generator.extractPod(identifier)).toEqual({ path: 'http://example.com/' });
|
||||||
|
});
|
||||||
|
|
||||||
|
it('errors when extracting if the domain is wrong.', async(): Promise<void> => {
|
||||||
|
const identifier = { path: 'http://foo.example.org/bar/baz' };
|
||||||
expect((): any => generator.extractPod(identifier)).toThrow(BadRequestHttpError);
|
expect((): any => generator.extractPod(identifier)).toThrow(BadRequestHttpError);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user