mirror of
https://github.com/elastic/kibana.git
synced 2025-06-27 18:51:07 -04:00
# Backport This will backport the following commits from `main` to `9.0`: - [[Canvas/PDF report] Allow canvas to generate PDF report (#224309)](https://github.com/elastic/kibana/pull/224309) <!--- Backport version: 10.0.1 --> ### Questions ? Please refer to the [Backport tool documentation](https://github.com/sorenlouv/backport) <!--BACKPORT [{"author":{"name":"Tim Sullivan","email":"tsullivan@users.noreply.github.com"},"sourceCommit":{"committedDate":"2025-06-17T22:47:22Z","message":"[Canvas/PDF report] Allow canvas to generate PDF report (#224309)\n\n## Summary\n\nCloses https://github.com/elastic/kibana/issues/224275\n\n**Context:** In https://github.com/elastic/kibana/pull/222273, we added\nrestrictions to the \"Reporting redirect app\" to make sure it could not\nbe abused by using unexpected locator types (such as the short URL\nlocator or the \"legacy\" locator type) when triggering redirects in the\nReporting headless browser. The restrictions are on the basis of a list\nof allowed locator types, which should be a list of every analytical app\nthat supports Reporting.\n\n**Problem:** Unfortunately that added a regression to Canvas PDF\nreporting, because the allow-list for locator types neglected to include\nthe Canvas locator type.\n\nThis PR solves the problem by adding the Canvas locator type to the set\nof allowed locator types.\n\n---------\n\nCo-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>","sha":"f5dee1347f019d4e98a45070eeb80356453a9827","branchLabelMapping":{"^v9.1.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:skip","backport:version","v8.15.6","v9.1.0","v8.19.0","v7.17.29","v9.0.3","v8.18.3","v8.17.8"],"title":"[Canvas/PDF report] Allow canvas to generate PDF report","number":224309,"url":"https://github.com/elastic/kibana/pull/224309","mergeCommit":{"message":"[Canvas/PDF report] Allow canvas to generate PDF report (#224309)\n\n## Summary\n\nCloses https://github.com/elastic/kibana/issues/224275\n\n**Context:** In https://github.com/elastic/kibana/pull/222273, we added\nrestrictions to the \"Reporting redirect app\" to make sure it could not\nbe abused by using unexpected locator types (such as the short URL\nlocator or the \"legacy\" locator type) when triggering redirects in the\nReporting headless browser. The restrictions are on the basis of a list\nof allowed locator types, which should be a list of every analytical app\nthat supports Reporting.\n\n**Problem:** Unfortunately that added a regression to Canvas PDF\nreporting, because the allow-list for locator types neglected to include\nthe Canvas locator type.\n\nThis PR solves the problem by adding the Canvas locator type to the set\nof allowed locator types.\n\n---------\n\nCo-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>","sha":"f5dee1347f019d4e98a45070eeb80356453a9827"}},"sourceBranch":"main","suggestedTargetBranches":["8.15","7.17","9.0","8.18","8.17"],"targetPullRequestStates":[{"branch":"8.15","label":"v8.15.6","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"},{"branch":"main","label":"v9.1.0","branchLabelMappingKey":"^v9.1.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/224309","number":224309,"mergeCommit":{"message":"[Canvas/PDF report] Allow canvas to generate PDF report (#224309)\n\n## Summary\n\nCloses https://github.com/elastic/kibana/issues/224275\n\n**Context:** In https://github.com/elastic/kibana/pull/222273, we added\nrestrictions to the \"Reporting redirect app\" to make sure it could not\nbe abused by using unexpected locator types (such as the short URL\nlocator or the \"legacy\" locator type) when triggering redirects in the\nReporting headless browser. The restrictions are on the basis of a list\nof allowed locator types, which should be a list of every analytical app\nthat supports Reporting.\n\n**Problem:** Unfortunately that added a regression to Canvas PDF\nreporting, because the allow-list for locator types neglected to include\nthe Canvas locator type.\n\nThis PR solves the problem by adding the Canvas locator type to the set\nof allowed locator types.\n\n---------\n\nCo-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>","sha":"f5dee1347f019d4e98a45070eeb80356453a9827"}},{"branch":"8.19","label":"v8.19.0","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"url":"https://github.com/elastic/kibana/pull/224335","number":224335,"state":"OPEN"},{"branch":"7.17","label":"v7.17.29","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"},{"branch":"9.0","label":"v9.0.3","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"},{"branch":"8.18","label":"v8.18.3","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"},{"branch":"8.17","label":"v8.17.8","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"}]}] BACKPORT-->
75 lines
2.7 KiB
TypeScript
75 lines
2.7 KiB
TypeScript
/*
|
|
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
* or more contributor license agreements. Licensed under the Elastic License
|
|
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
* 2.0.
|
|
*/
|
|
|
|
import expect from '@kbn/expect';
|
|
|
|
import { FtrProviderContext } from '../../ftr_provider_context';
|
|
|
|
export default function ({ getService, getPageObjects }: FtrProviderContext) {
|
|
const es = getService('es');
|
|
const kibanaServer = getService('kibanaServer');
|
|
const browser = getService('browser');
|
|
const log = getService('log');
|
|
const security = getService('security');
|
|
const { reporting, canvas } = getPageObjects(['reporting', 'canvas']);
|
|
const archive = 'x-pack/test/functional/fixtures/kbn_archiver/canvas/reports';
|
|
|
|
describe('Canvas PDF Report Generation', () => {
|
|
before('initialize tests', async () => {
|
|
log.debug('ReportingPage:initTests');
|
|
await security.role.create('test_canvas_user', {
|
|
elasticsearch: { cluster: [], indices: [], run_as: [] },
|
|
kibana: [
|
|
{
|
|
spaces: ['*'],
|
|
base: [],
|
|
feature: { canvas: ['read', 'generate_report'] },
|
|
},
|
|
],
|
|
});
|
|
await security.testUser.setRoles(['test_canvas_user']);
|
|
await kibanaServer.importExport.load(archive);
|
|
await browser.setWindowSize(1600, 850);
|
|
});
|
|
after('clean up archives', async () => {
|
|
await kibanaServer.importExport.unload(archive);
|
|
await es.deleteByQuery({
|
|
index: '.reporting-*',
|
|
refresh: true,
|
|
body: { query: { match_all: {} } },
|
|
});
|
|
});
|
|
|
|
describe('Print PDF button', () => {
|
|
it('creates a PDF with correct response headers', async function () {
|
|
// Generating and then comparing reports can take longer than the default 60s timeout
|
|
this.timeout(180000);
|
|
|
|
await canvas.goToListingPage();
|
|
await canvas.loadFirstWorkpad('The Very Cool Workpad for PDF Tests');
|
|
|
|
await reporting.openShareMenuItem('PDF Reports');
|
|
await reporting.clickGenerateReportButton();
|
|
|
|
const url = await reporting.getReportURL(60000);
|
|
const res = await reporting.getResponse(url ?? '');
|
|
|
|
expect(res.status).to.equal(200);
|
|
expect(res.get('content-type')).to.equal('application/pdf');
|
|
expect(res.get('content-disposition')).to.equal(
|
|
'attachment; filename=The%20Very%20Cool%20Workpad%20for%20PDF%20Tests.pdf'
|
|
);
|
|
|
|
const jobId = await reporting.getReportJobId(60000);
|
|
const reportInfo = await reporting.getReportInfo(jobId);
|
|
|
|
// verify "completed" status (no warnings)
|
|
expect(reportInfo).to.have.property('status', 'completed');
|
|
});
|
|
});
|
|
});
|
|
}
|