mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 01:38:56 -04:00
[backport] Using content-disposition
pkg for non-US font titles in reporting (… (#31718)
This commit is contained in:
parent
8b53f3478b
commit
f0acbe40cf
4 changed files with 34 additions and 17 deletions
|
@ -157,6 +157,7 @@
|
|||
"classnames": "2.2.5",
|
||||
"concat-stream": "1.5.1",
|
||||
"constate": "^0.9.0",
|
||||
"content-disposition": "0.5.3",
|
||||
"copy-to-clipboard": "^3.0.8",
|
||||
"cronstrue": "^1.51.0",
|
||||
"d3": "3.5.6",
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
import boom from 'boom';
|
||||
import { oncePerServer } from './once_per_server';
|
||||
import { jobsQueryFactory } from './jobs_query';
|
||||
import { getDocumentPayloadFactory } from './get_document_payload';
|
||||
import { getDocumentPayloadFactory } from '../routes/lib/get_document_payload';
|
||||
import { WHITELISTED_JOB_CONTENT_TYPES } from '../../common/constants';
|
||||
|
||||
function jobResponseHandlerFn(server) {
|
||||
|
|
|
@ -4,12 +4,20 @@
|
|||
* you may not use this file except in compliance with the Elastic License.
|
||||
*/
|
||||
|
||||
import { oncePerServer } from './once_per_server';
|
||||
// @ts-ignore
|
||||
import contentDisposition from 'content-disposition';
|
||||
// @ts-ignore
|
||||
import { oncePerServer } from '../../lib/once_per_server';
|
||||
|
||||
function getDocumentPayloadFn(server) {
|
||||
const DEFAULT_TITLE = 'report';
|
||||
|
||||
const getTitle = (exportType: any, title?: string): string =>
|
||||
`${title || DEFAULT_TITLE}.${exportType.jobContentExtension}`;
|
||||
|
||||
function getDocumentPayloadFn(server: any) {
|
||||
const exportTypesRegistry = server.plugins.reporting.exportTypesRegistry;
|
||||
|
||||
function encodeContent(content, exportType) {
|
||||
function encodeContent(content: string, exportType: any) {
|
||||
switch (exportType.jobContentEncoding) {
|
||||
case 'base64':
|
||||
return Buffer.from(content, 'base64');
|
||||
|
@ -18,42 +26,44 @@ function getDocumentPayloadFn(server) {
|
|||
}
|
||||
}
|
||||
|
||||
function getCompleted(output, jobType, title) {
|
||||
const exportType = exportTypesRegistry.get(item => item.jobType === jobType);
|
||||
function getCompleted(output: any, jobType: string, title: any) {
|
||||
const exportType = exportTypesRegistry.get((item: any) => item.jobType === jobType);
|
||||
const filename = getTitle(exportType, title);
|
||||
|
||||
return {
|
||||
statusCode: 200,
|
||||
content: encodeContent(output.content, exportType),
|
||||
contentType: output.content_type,
|
||||
headers: {
|
||||
'Content-Disposition': `inline; filename="${title || 'report'}.${exportType.jobContentExtension}"`
|
||||
}
|
||||
'Content-Disposition': contentDisposition(filename, { type: 'inline' }),
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
function getFailure(output) {
|
||||
function getFailure(output: any) {
|
||||
return {
|
||||
statusCode: 500,
|
||||
content: {
|
||||
message: 'Reporting generation failed',
|
||||
reason: output.content
|
||||
reason: output.content,
|
||||
},
|
||||
contentType: 'application/json'
|
||||
contentType: 'application/json',
|
||||
};
|
||||
}
|
||||
|
||||
function getIncomplete(status) {
|
||||
function getIncomplete(status: any) {
|
||||
return {
|
||||
statusCode: 503,
|
||||
content: status,
|
||||
contentType: 'application/json',
|
||||
headers: {
|
||||
'retry-after': 30
|
||||
}
|
||||
'retry-after': 30,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
return function getDocumentPayload(doc) {
|
||||
const { status, output, jobtype: jobType, payload: { title } = {} } = doc._source;
|
||||
return function getDocumentPayload(doc: any) {
|
||||
const { status, output, jobtype: jobType, payload: { title } = { title: '' } } = doc._source;
|
||||
|
||||
if (status === 'completed') {
|
||||
return getCompleted(output, jobType, title);
|
||||
|
@ -69,4 +79,3 @@ function getDocumentPayloadFn(server) {
|
|||
}
|
||||
|
||||
export const getDocumentPayloadFactory = oncePerServer(getDocumentPayloadFn);
|
||||
|
|
@ -5994,6 +5994,13 @@ content-disposition@0.5.2:
|
|||
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
|
||||
integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ=
|
||||
|
||||
content-disposition@0.5.3:
|
||||
version "0.5.3"
|
||||
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
|
||||
integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
|
||||
dependencies:
|
||||
safe-buffer "5.1.2"
|
||||
|
||||
content-type-parser@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue