fix: Extract root as possible pod when using subdomains

This commit is contained in:
Joachim Van Herwegen 2024-02-27 09:08:36 +01:00
parent 5086f2280b
commit 8fff08a9b6
2 changed files with 9 additions and 2 deletions

View File

@ -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}`);
} }

View File

@ -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);
}); });
}); });