Skip to content

Commit

Permalink
restore legacy shim
Browse files Browse the repository at this point in the history
Restore the legacy shim for PDF job creation from the 7.x branch.
  • Loading branch information
tsullivan committed Aug 13, 2021
1 parent 8ea29b6 commit 6c4d699
Show file tree
Hide file tree
Showing 14 changed files with 645 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ const getMockJob = (base: object) => base as TaskPayloadPNG & TaskPayloadPDF;
test(`fails if no URL is passed`, async () => {
const fn = () => getFullUrls(mockConfig, getMockJob({}));
expect(fn).toThrowErrorMatchingInlineSnapshot(
`"No valid URL fields found in Job Params! Expected \`job.relativeUrl: string\` or \`job.relativeUrls: string[]\`"`
`"No valid URL fields found in Job Params! Expected \`job.relativeUrl\` or \`job.objects[{ relativeUrl }]\`"`
);
});

Expand All @@ -54,14 +54,7 @@ test(`fails if URLs are absolute for PNGs`, async () => {
test(`fails if URLs are file-protocols for PDF`, async () => {
const forceNow = '2000-01-01T00:00:00.000Z';
const relativeUrl = 'file://etc/passwd/#/something';
const fn = () =>
getFullUrls(
mockConfig,
getMockJob({
relativeUrls: [relativeUrl],
forceNow,
})
);
const fn = () => getFullUrls(mockConfig, getMockJob({ objects: [{ relativeUrl }], forceNow }));
expect(fn).toThrowErrorMatchingInlineSnapshot(
`"Found invalid URL(s), all URLs must be relative: file://etc/passwd/#/something"`
);
Expand All @@ -75,7 +68,7 @@ test(`fails if URLs are absolute for PDF`, async () => {
getFullUrls(
mockConfig,
getMockJob({
relativeUrls: [relativeUrl],
objects: [{ relativeUrl }],
forceNow,
})
);
Expand All @@ -86,13 +79,16 @@ test(`fails if URLs are absolute for PDF`, async () => {

test(`fails if any URLs are absolute or file's for PDF`, async () => {
const forceNow = '2000-01-01T00:00:00.000Z';
const relativeUrls = [
'/app/kibana#/something_aaa',
'http://169.254.169.254/latest/meta-data/iam/security-credentials/profileName/#/something',
'file://etc/passwd/#/something',
const objects = [
{ relativeUrl: '/app/kibana#/something_aaa' },
{
relativeUrl:
'http://169.254.169.254/latest/meta-data/iam/security-credentials/profileName/#/something',
},
{ relativeUrl: 'file://etc/passwd/#/something' },
];

const fn = () => getFullUrls(mockConfig, getMockJob({ relativeUrls, forceNow }));
const fn = () => getFullUrls(mockConfig, getMockJob({ objects, forceNow }));
expect(fn).toThrowErrorMatchingInlineSnapshot(
`"Found invalid URL(s), all URLs must be relative: http://169.254.169.254/latest/meta-data/iam/security-credentials/profileName/#/something file://etc/passwd/#/something"`
);
Expand All @@ -107,7 +103,7 @@ test(`fails if URL does not route to a visualization`, async () => {

test(`adds forceNow to hash's query, if it exists`, async () => {
const forceNow = '2000-01-01T00:00:00.000Z';
const urls = await getFullUrls(
const urls = getFullUrls(
mockConfig,
getMockJob({ relativeUrl: '/app/kibana#/something', forceNow })
);
Expand All @@ -120,7 +116,7 @@ test(`adds forceNow to hash's query, if it exists`, async () => {
test(`appends forceNow to hash's query, if it exists`, async () => {
const forceNow = '2000-01-01T00:00:00.000Z';

const urls = await getFullUrls(
const urls = getFullUrls(
mockConfig,
getMockJob({ relativeUrl: '/app/kibana#/something?_g=something', forceNow })
);
Expand All @@ -131,21 +127,21 @@ test(`appends forceNow to hash's query, if it exists`, async () => {
});

test(`doesn't append forceNow query to url, if it doesn't exists`, async () => {
const urls = await getFullUrls(mockConfig, getMockJob({ relativeUrl: '/app/kibana#/something' }));
const urls = getFullUrls(mockConfig, getMockJob({ relativeUrl: '/app/kibana#/something' }));

expect(urls[0]).toEqual('http://localhost:5601/sbp/app/kibana#/something');
});

test(`adds forceNow to each of multiple urls`, async () => {
const forceNow = '2000-01-01T00:00:00.000Z';
const urls = await getFullUrls(
const urls = getFullUrls(
mockConfig,
getMockJob({
relativeUrls: [
'/app/kibana#/something_aaa',
'/app/kibana#/something_bbb',
'/app/kibana#/something_ccc',
'/app/kibana#/something_ddd',
objects: [
{ relativeUrl: '/app/kibana#/something_aaa' },
{ relativeUrl: '/app/kibana#/something_bbb' },
{ relativeUrl: '/app/kibana#/something_ccc' },
{ relativeUrl: '/app/kibana#/something_ddd' },
],
forceNow,
})
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ function isPngJob(job: TaskPayloadPNG | TaskPayloadPDF): job is TaskPayloadPNG {
return (job as TaskPayloadPNG).relativeUrl !== undefined;
}
function isPdfJob(job: TaskPayloadPNG | TaskPayloadPDF): job is TaskPayloadPDF {
return (job as TaskPayloadPDF).relativeUrls !== undefined;
return (job as TaskPayloadPDF).objects !== undefined;
}

export function getFullUrls(config: ReportingConfig, job: TaskPayloadPDF | TaskPayloadPNG) {
Expand All @@ -39,17 +39,17 @@ export function getFullUrls(config: ReportingConfig, job: TaskPayloadPDF | TaskP
if (isPngJob(job)) {
relativeUrls = [job.relativeUrl];
} else if (isPdfJob(job)) {
relativeUrls = job.relativeUrls;
relativeUrls = job.objects.map((obj) => obj.relativeUrl);
} else {
throw new Error(
`No valid URL fields found in Job Params! Expected \`job.relativeUrl: string\` or \`job.relativeUrls: string[]\``
`No valid URL fields found in Job Params! Expected \`job.relativeUrl\` or \`job.objects[{ relativeUrl }]\``
);
}

validateUrls(relativeUrls);

const urls = relativeUrls.map((relativeUrl) => {
const parsedRelative: UrlWithStringQuery = urlParse(relativeUrl);
const parsedRelative: UrlWithStringQuery = urlParse(relativeUrl); // FIXME: '(urlStr: string): UrlWithStringQuery' is deprecated
const jobUrl = getAbsoluteUrl({
path: parsedRelative.pathname === null ? undefined : parsedRelative.pathname,
hash: parsedRelative.hash === null ? undefined : parsedRelative.hash,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,15 @@ const isBogusUrl = (url: string) => {
};

export const validateUrls = (urls: string[]): void => {
if (!Array.isArray(urls)) {
throw new Error('Invalid relativeUrls. String[] is expected.');
}
urls.forEach((url) => {
if (typeof url !== 'string') {
throw new Error('Invalid Relative URL in relativeUrls. String is expected.');
}
});

const badUrls = filter(urls, (url) => isBogusUrl(url));

if (badUrls.length) {
Expand Down
Loading

0 comments on commit 6c4d699

Please sign in to comment.