Skip to content

Commit a6305d2

Browse files
authored
Merge pull request #461 from nextcloud/backport/459/stable20
[stable20] Fix hide download and printing
2 parents c2f189d + be83853 commit a6305d2

12 files changed

+64
-161
lines changed

.github/workflows/phpunit.yml

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,7 @@ jobs:
2929
with:
3030
repository: nextcloud/server
3131
ref: ${{ github.base_ref }}
32-
33-
- name: Checkout submodules
34-
shell: bash
35-
run: |
36-
auth_header="$(git config --local --get http.https://github.com/.extraheader)"
37-
git submodule sync --recursive
38-
git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1
32+
submodules: true
3933

4034
- name: Checkout app
4135
uses: actions/checkout@v2
@@ -84,7 +78,7 @@ jobs:
8478

8579
services:
8680
mysql:
87-
image: mariadb
81+
image: mariadb:10.5
8882
ports:
8983
- 4444:3306/tcp
9084
env:
@@ -97,13 +91,7 @@ jobs:
9791
with:
9892
repository: nextcloud/server
9993
ref: ${{ github.base_ref }}
100-
101-
- name: Checkout submodules
102-
shell: bash
103-
run: |
104-
auth_header="$(git config --local --get http.https://github.com/.extraheader)"
105-
git submodule sync --recursive
106-
git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1
94+
submodules: true
10795

10896
- name: Checkout app
10997
uses: actions/checkout@v2
@@ -168,13 +156,7 @@ jobs:
168156
with:
169157
repository: nextcloud/server
170158
ref: ${{ github.base_ref }}
171-
172-
- name: Checkout submodules
173-
shell: bash
174-
run: |
175-
auth_header="$(git config --local --get http.https://github.com/.extraheader)"
176-
git submodule sync --recursive
177-
git -c "http.extraheader=$auth_header" -c protocol.version=2 submodule update --init --force --recursive --depth=1
159+
submodules: true
178160

179161
- name: Checkout app
180162
uses: actions/checkout@v2

js/files_pdfviewer-main.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/files_pdfviewer-main.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/files_pdfviewer-public.js

Lines changed: 3 additions & 24 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/files_pdfviewer-public.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/files_pdfviewer-workersrc.js

Lines changed: 3 additions & 24 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
/*!
2+
* The buffer module from node.js, for the browser.
3+
*
4+
* @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
5+
* @license MIT
6+
*/

js/files_pdfviewer-workersrc.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/public.js

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,14 @@ window.addEventListener('DOMContentLoaded', function() {
3838
const page = location.hash.split('page=')[1] || 0
3939
const contentElmt = document.getElementById('files-public-content')
4040
const sharingTokenElmt = document.getElementById('sharingToken')
41-
const footerElmt = document.querySelector('#app-content > footer')
41+
const footerElmt = document.querySelector('body > footer')
4242

4343
const sharingToken = sharingTokenElmt.value
4444
const downloadUrl = generateUrl('/s/{token}/download', { token: sharingToken })
4545
const viewerUrl = generateUrl('/apps/files_pdfviewer/?file={downloadUrl}#page={page}', { downloadUrl, page })
4646

4747
// Create viewer frame
4848
const viewerNode = document.createElement('iframe')
49-
viewerNode.src = viewerUrl
5049
viewerNode.style.height = '100%'
5150
viewerNode.style.width = '100%'
5251
viewerNode.style.position = 'absolute'
@@ -55,10 +54,45 @@ window.addEventListener('DOMContentLoaded', function() {
5554
if (contentElmt) {
5655
contentElmt.innerHTML = ''
5756
contentElmt.appendChild(viewerNode)
57+
viewerNode.src = viewerUrl
5858
footerElmt.style.display = 'none'
5959
} else {
6060
logger.error('Unable to inject the PDF Viewer')
6161
}
62+
63+
// When pdf viewer is loaded
64+
addEventListener('load', function() {
65+
// If we forbid download, prevent interaction
66+
if (!canDownload()) {
67+
const pdfViewer = viewerNode.contentDocument.querySelector('.pdfViewer')
68+
const PDFViewerApplication = viewerNode.contentWindow.PDFViewerApplication
69+
70+
if (pdfViewer) {
71+
pdfViewer.classList.add('disabledTextSelection')
72+
}
73+
74+
if (PDFViewerApplication) {
75+
// Disable printing service when downloads are hidden, as even if the
76+
// buttons in the UI are hidden the printing could still be triggered
77+
// with Ctrl|Meta+P.
78+
// Abuse the "supportsPrinting" parameter, which signals that the
79+
// browser does not fully support printing, to make PDFViewer disable
80+
// the printing service.
81+
// "supportsPrinting" is a getter function, so it needs to be deleted
82+
// before replacing it with a simple value.
83+
delete PDFViewerApplication.supportsPrinting
84+
PDFViewerApplication.supportsPrinting = false
85+
86+
// When printing is not supported a warning is shown by the default
87+
// "beforePrint" function when trying to print. That function needs to
88+
// be replaced with an empty one to prevent that warning to be shown.
89+
PDFViewerApplication.beforePrint = function() {
90+
}
91+
}
92+
93+
logger.info('Download, printing and user interaction disabled')
94+
}
95+
})
6296
} else {
6397
logger.error('But this does not appear to be a public page')
6498
}

src/utils/canDownload.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,4 @@
2222
*/
2323

2424
const hideDownloadElmt = document.getElementById('hideDownload')
25-
// true = hidden download
2625
export default () => !hideDownloadElmt || (hideDownloadElmt && hideDownloadElmt.value !== 'true')

0 commit comments

Comments
 (0)