Skip to content

Commit

Permalink
fix job param pdf object shape expectation
Browse files Browse the repository at this point in the history
  • Loading branch information
tsullivan committed Dec 10, 2019
1 parent dd5fa50 commit bf4fe08
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -71,11 +71,7 @@ test(`fails if URLs are file-protocols for PDF`, async () => {
await expect(
getFullUrls({
job: {
objects: [
{
relativeUrl,
},
],
relativeUrls: [relativeUrl],
forceNow,
},
server: mockServer,
Expand All @@ -92,11 +88,7 @@ test(`fails if URLs are absolute for PDF`, async () => {
await expect(
getFullUrls({
job: {
objects: [
{
relativeUrl,
},
],
relativeUrls: [relativeUrl],
forceNow,
},
server: mockServer,
Expand All @@ -108,28 +100,21 @@ 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 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 relativeUrls = [
'/app/kibana#/something_aaa',
'http://169.254.169.254/latest/meta-data/iam/security-credentials/profileName/#/something',
'file://etc/passwd/#/something',
];
await expect(
getFullUrls({
job: {
objects,
relativeUrls,
forceNow,
},
server: mockServer,
} as FullUrlsOpts)
).rejects.toMatchInlineSnapshot(
`[Error: Found invalid URL(s), all URLs must be relative: ${objects[1].relativeUrl} ${objects[2].relativeUrl}]`
`[Error: Found invalid URL(s), all URLs must be relative: ${relativeUrls[1]} ${relativeUrls[2]}]`
);
});

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

export async function getFullUrls<JobDocPayloadType>({
Expand Down Expand Up @@ -48,7 +48,7 @@ export async function getFullUrls<JobDocPayloadType>({
if (isPngJob(job)) {
relativeUrls = [job.relativeUrl];
} else if (isPdfJob(job)) {
relativeUrls = job.objects.map(obj => obj.relativeUrl);
relativeUrls = job.relativeUrls;
} else {
throw new Error(
`No valid URL fields found in Job Params! Expected \`job.relativeUrl\` or \`job.objects[{ relativeUrl }]\``
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
* you may not use this file except in compliance with the Elastic License.
*/

import { PLUGIN_ID, PDF_JOB_TYPE } from '../../../../common/constants';
import {
CreateJobFactory,
ESQueueCreateJobFn,
Expand All @@ -13,26 +12,16 @@ import {
ConditionalHeaders,
} from '../../../../types';
import { validateUrls } from '../../../../common/validate_urls';
import { LevelLogger } from '../../../../server/lib';
import { cryptoFactory } from '../../../../server/lib/crypto';
import { JobParamsPDF } from '../../types';

interface CreateJobFnOpts {
objectType: any;
title: string;
relativeUrls: string[];
browserTimezone: string;
layout: any;
}

export const createJobFactory: CreateJobFactory<ESQueueCreateJobFn<
JobParamsPDF
>> = function createJobFactoryFn(server: ServerFacade) {
const logger = LevelLogger.createForServer(server, [PLUGIN_ID, PDF_JOB_TYPE, 'create']);
const crypto = cryptoFactory(server);

return async function createJobFn(
{ objectType, title, relativeUrls, browserTimezone, layout }: CreateJobFnOpts,
{ title, relativeUrls, browserTimezone, layout }: JobParamsPDF,
headers: ConditionalHeaders['headers'],
request: RequestFacade
) {
Expand All @@ -41,14 +30,13 @@ export const createJobFactory: CreateJobFactory<ESQueueCreateJobFn<
validateUrls(relativeUrls);

return {
type: objectType, // Note: this changes the shape of the job params object
title,
objects: relativeUrls.map(u => ({ relativeUrl: u })),
headers: serializedEncryptedHeaders,
browserTimezone,
layout,
basePath: request.getBasePath(),
browserTimezone,
forceNow: new Date().toISOString(),
headers: serializedEncryptedHeaders,
layout,
relativeUrls,
title,
};
};
};
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import { JobDocPayload, ServerFacade, RequestFacade } from '../../types';

// Job params: structure of incoming user request data, after being parsed from RISON
export interface JobParamsPDF {
objectType: string;
title: string;
relativeUrls: string[];
browserTimezone: string;
Expand All @@ -22,7 +21,5 @@ export interface JobDocPayloadPDF extends JobDocPayload<JobParamsPDF> {
browserTimezone: string;
forceNow?: string;
layout: LayoutParams;
objects: Array<{
relativeUrl: string;
}>;
relativeUrls: string[];
}

0 comments on commit bf4fe08

Please sign in to comment.