From 1b499f111066a98a4819dbfcd28b13d64bbc6d97 Mon Sep 17 00:00:00 2001 From: Alex ORLUC <alex.orluc@maarch.org> Date: Mon, 6 Apr 2020 12:34:30 +0200 Subject: [PATCH] FEAT #13670 TIME 1 fix safe url window open --- .../document-list/folder-document-list.component.ts | 9 ++++++++- .../followed-document-list.component.ts | 9 ++++++++- src/frontend/app/home/home.component.ts | 13 ++++++++++--- src/frontend/app/list/basket-list.component.ts | 9 ++++++++- 4 files changed, 34 insertions(+), 6 deletions(-) diff --git a/src/frontend/app/folder/document-list/folder-document-list.component.ts b/src/frontend/app/folder/document-list/folder-document-list.component.ts index 5ca8c4ec15a..0f14a49909e 100644 --- a/src/frontend/app/folder/document-list/folder-document-list.component.ts +++ b/src/frontend/app/folder/document-list/folder-document-list.component.ts @@ -407,7 +407,14 @@ export class FolderDocumentListComponent implements OnInit, OnDestroy { } viewDocument(row: any) { - window.open('../../rest/resources/' + row.resId + '/content?mode=view', '_blank'); + this.http.get(`../../rest/resources/${row.resId}/content?mode=view`, { responseType: 'blob' }) + .subscribe((data: any) => { + const file = new Blob([data], { type: 'application/pdf' }); + const fileURL = URL.createObjectURL(file); + const newWindow = window.open(); + newWindow.document.write(`<iframe style="width: 100%;height: 100%;margin: 0;padding: 0;" src="${fileURL}" frameborder="0" allowfullscreen></iframe>`); + newWindow.document.title = row.chrono; + }); } } export interface BasketList { diff --git a/src/frontend/app/home/followed-list/followed-document-list.component.ts b/src/frontend/app/home/followed-list/followed-document-list.component.ts index b2425f6db67..1d29098018a 100644 --- a/src/frontend/app/home/followed-list/followed-document-list.component.ts +++ b/src/frontend/app/home/followed-list/followed-document-list.component.ts @@ -350,7 +350,14 @@ export class FollowedDocumentListComponent implements OnInit, OnDestroy { } viewDocument(row: any) { - window.open('../../rest/resources/' + row.resId + '/content?mode=view', '_blank'); + this.http.get(`../../rest/resources/${row.resId}/content?mode=view`, { responseType: 'blob' }) + .subscribe((data: any) => { + const file = new Blob([data], { type: 'application/pdf' }); + const fileURL = URL.createObjectURL(file); + const newWindow = window.open(); + newWindow.document.write(`<iframe style="width: 100%;height: 100%;margin: 0;padding: 0;" src="${fileURL}" frameborder="0" allowfullscreen></iframe>`); + newWindow.document.title = row.chrono; + }); } } export interface BasketList { diff --git a/src/frontend/app/home/home.component.ts b/src/frontend/app/home/home.component.ts index c4364f60228..235555410c3 100644 --- a/src/frontend/app/home/home.component.ts +++ b/src/frontend/app/home/home.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit, QueryList, ViewChildren } from '@angular/core'; +import { Component, OnInit, QueryList, ViewChildren, AfterViewInit } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { LANG } from '../translate.component'; import { MatDialog } from '@angular/material/dialog'; @@ -17,7 +17,7 @@ declare var $: any; styleUrls: ['home.component.scss'], providers: [AppService] }) -export class HomeComponent implements OnInit { +export class HomeComponent implements OnInit, AfterViewInit { lang: any = LANG; loading: boolean = false; @@ -78,7 +78,14 @@ export class HomeComponent implements OnInit { } viewDocument(row: any) { - window.open('../../rest/resources/' + row.res_id + '/content?mode=view', '_blank'); + this.http.get(`../../rest/resources/${row.res_id}/content?mode=view`, { responseType: 'blob' }) + .subscribe((data: any) => { + const file = new Blob([data], { type: 'application/pdf' }); + const fileURL = URL.createObjectURL(file); + const newWindow = window.open(); + newWindow.document.write(`<iframe style="width: 100%;height: 100%;margin: 0;padding: 0;" src="${fileURL}" frameborder="0" allowfullscreen></iframe>`); + newWindow.document.title = row.alt_identifier; + }); } viewThumbnail(row: any) { diff --git a/src/frontend/app/list/basket-list.component.ts b/src/frontend/app/list/basket-list.component.ts index 413764f9f64..67ef4e6ce55 100755 --- a/src/frontend/app/list/basket-list.component.ts +++ b/src/frontend/app/list/basket-list.component.ts @@ -482,7 +482,14 @@ export class BasketListComponent implements OnInit, OnDestroy { } viewDocument(row: any) { - window.open('../../rest/resources/' + row.resId + '/content?mode=view', '_blank'); + this.http.get(`../../rest/resources/${row.resId}/content?mode=view`, { responseType: 'blob' }) + .subscribe((data: any) => { + const file = new Blob([data], { type: 'application/pdf' }); + const fileURL = URL.createObjectURL(file); + const newWindow = window.open(); + newWindow.document.write(`<iframe style="width: 100%;height: 100%;margin: 0;padding: 0;" src="${fileURL}" frameborder="0" allowfullscreen></iframe>`); + newWindow.document.title = row.chrono; + }); } toggleMailTracking(row: any) { -- GitLab