From ebe8964c9f281e379d7f4c4cda3d253dfab35807 Mon Sep 17 00:00:00 2001 From: Stephen Smith Date: Mon, 23 Aug 2021 09:31:21 -0400 Subject: [PATCH] 15159: Hide file preview when not secure and trustallcontent is false Arvados-DCO-1.1-Signed-off-by: Stephen Smith --- .../details-panel/collection-details.tsx | 4 ++-- .../details-panel/details-data.tsx | 7 ++++++- .../details-panel/details-panel.tsx | 20 ++++++++++++++++--- .../details-panel/file-details.tsx | 4 ++-- 4 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/views-components/details-panel/collection-details.tsx b/src/views-components/details-panel/collection-details.tsx index 3905427b..dcd2ee48 100644 --- a/src/views-components/details-panel/collection-details.tsx +++ b/src/views-components/details-panel/collection-details.tsx @@ -42,8 +42,8 @@ export class CollectionDetails extends DetailsData { return ['Details', 'Versions']; } - getDetails(tabNumber: number) { - switch (tabNumber) { + getDetails({tabNr}) { + switch (tabNr) { case 0: return this.getCollectionInfo(); case 1: diff --git a/src/views-components/details-panel/details-data.tsx b/src/views-components/details-panel/details-data.tsx index 0fae2ac4..bcca325c 100644 --- a/src/views-components/details-panel/details-data.tsx +++ b/src/views-components/details-panel/details-data.tsx @@ -5,6 +5,11 @@ import React from 'react'; import { DetailsResource } from "models/details"; +interface GetDetailsParams { + tabNr?: number + showPreview?: boolean +} + export abstract class DetailsData { constructor(protected item: T) { } @@ -17,5 +22,5 @@ export abstract class DetailsData { } abstract getIcon(className?: string): React.ReactElement; - abstract getDetails(tabNr?: number): React.ReactElement; + abstract getDetails({tabNr, showPreview}: GetDetailsParams): React.ReactElement; } diff --git a/src/views-components/details-panel/details-panel.tsx b/src/views-components/details-panel/details-panel.tsx index 38ac163e..058db81b 100644 --- a/src/views-components/details-panel/details-panel.tsx +++ b/src/views-components/details-panel/details-panel.tsx @@ -20,6 +20,8 @@ import { ProcessDetails } from "./process-details"; import { EmptyDetails } from "./empty-details"; import { DetailsData } from "./details-data"; import { DetailsResource } from "models/details"; +import { Config } from 'common/config'; +import { isInlineFileUrlSafe } from "../context-menu/actions/helpers"; import { getResource } from 'store/resources/resources'; import { toggleDetailsPanel, SLIDE_TIMEOUT, openDetailsPanel } from 'store/details-panel/details-panel-action'; import { FileDetails } from 'views-components/details-panel/file-details'; @@ -77,12 +79,13 @@ const getItem = (res: DetailsResource): DetailsData => { } }; -const mapStateToProps = ({ detailsPanel, resources, collectionPanelFiles }: RootState) => { +const mapStateToProps = ({ auth, detailsPanel, resources, collectionPanelFiles }: RootState) => { const resource = getResource(detailsPanel.resourceUuid)(resources) as DetailsResource | undefined; const file = resource ? undefined : getNode(detailsPanel.resourceUuid)(collectionPanelFiles); return { + authConfig: auth.config, isOpened: detailsPanel.isOpened, tabNr: detailsPanel.tabNr, res: resource || (file && file.value) || EMPTY_RESOURCE, @@ -101,6 +104,7 @@ const mapDispatchToProps = (dispatch: Dispatch) => ({ export interface DetailsPanelDataProps { onCloseDrawer: () => void; setActiveTab: (tabNr: number) => void; + authConfig: Config; isOpened: boolean; tabNr: number; res: DetailsResource; @@ -143,7 +147,17 @@ export const DetailsPanel = withStyles(styles)( } renderContent() { - const { classes, onCloseDrawer, res, tabNr } = this.props; + const { classes, onCloseDrawer, res, tabNr, authConfig } = this.props; + + let shouldShowInlinePreview = false; + if (!('kind' in res)) { + shouldShowInlinePreview = isInlineFileUrlSafe( + res ? res.url : "", + authConfig.keepWebServiceUrl, + authConfig.keepWebInlineServiceUrl + ) || authConfig.clusterConfig.Collections.TrustAllContent; + } + const item = getItem(res); return - {item.getDetails(tabNr)} + {item.getDetails({tabNr, showPreview: shouldShowInlinePreview})} ; } diff --git a/src/views-components/details-panel/file-details.tsx b/src/views-components/details-panel/file-details.tsx index 7c11eb8b..7b128c2c 100644 --- a/src/views-components/details-panel/file-details.tsx +++ b/src/views-components/details-panel/file-details.tsx @@ -18,13 +18,13 @@ export class FileDetails extends DetailsData; } - getDetails() { + getDetails({showPreview}) { const { item } = this; return item.type === CollectionFileType.FILE ? <> { - isImage(item.url) && <> + isImage(item.url) && showPreview && <> -- 2.30.2