mirror of
https://github.com/nextcloud/server.git
synced 2026-06-10 09:13:19 -04:00
Merge pull request #21126 from nextcloud/fix/make-translation-sanitization-optional-stable19
[stable19] Make the translation sanitization optional
This commit is contained in:
commit
bdb9f31cf1
20 changed files with 161 additions and 119 deletions
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
<template>
|
||||
<div id="security" class="section">
|
||||
<h2>{{ t('settings', 'Devices & sessions') }}</h2>
|
||||
<h2>{{ t('settings', 'Devices & sessions', {}, undefined, {sanitize: false}) }}</h2>
|
||||
<p class="settings-hint hidden-when-empty">
|
||||
{{ t('settings', 'Web, desktop and mobile clients currently logged in to your account.') }}
|
||||
</p>
|
||||
|
|
|
|||
33
core/js/dist/files_client.js
vendored
Normal file
33
core/js/dist/files_client.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
core/js/dist/files_client.js.map
vendored
Normal file
1
core/js/dist/files_client.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
2
core/js/dist/files_fileinfo.js
vendored
Normal file
2
core/js/dist/files_fileinfo.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
core/js/dist/files_fileinfo.js.map
vendored
Normal file
1
core/js/dist/files_fileinfo.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
2
core/js/dist/files_iedavclient.js
vendored
Normal file
2
core/js/dist/files_iedavclient.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
core/js/dist/files_iedavclient.js.map
vendored
Normal file
1
core/js/dist/files_iedavclient.js.map
vendored
Normal file
File diff suppressed because one or more lines are too long
32
core/js/dist/install.js
vendored
32
core/js/dist/install.js
vendored
File diff suppressed because one or more lines are too long
2
core/js/dist/install.js.map
vendored
2
core/js/dist/install.js.map
vendored
File diff suppressed because one or more lines are too long
38
core/js/dist/login.js
vendored
38
core/js/dist/login.js
vendored
File diff suppressed because one or more lines are too long
2
core/js/dist/login.js.map
vendored
2
core/js/dist/login.js.map
vendored
File diff suppressed because one or more lines are too long
98
core/js/dist/main.js
vendored
98
core/js/dist/main.js
vendored
File diff suppressed because one or more lines are too long
2
core/js/dist/main.js.map
vendored
2
core/js/dist/main.js.map
vendored
File diff suppressed because one or more lines are too long
32
core/js/dist/maintenance.js
vendored
32
core/js/dist/maintenance.js
vendored
File diff suppressed because one or more lines are too long
2
core/js/dist/maintenance.js.map
vendored
2
core/js/dist/maintenance.js.map
vendored
File diff suppressed because one or more lines are too long
4
core/js/dist/recommendedapps.js
vendored
4
core/js/dist/recommendedapps.js
vendored
File diff suppressed because one or more lines are too long
2
core/js/dist/recommendedapps.js.map
vendored
2
core/js/dist/recommendedapps.js.map
vendored
File diff suppressed because one or more lines are too long
|
|
@ -12,6 +12,7 @@ import _ from 'underscore'
|
|||
import $ from 'jquery'
|
||||
import DOMPurify from 'dompurify'
|
||||
import Handlebars from 'handlebars'
|
||||
import identity from 'lodash/fp/identity'
|
||||
import escapeHTML from 'escape-html'
|
||||
|
||||
import OC from './index'
|
||||
|
|
@ -84,15 +85,20 @@ const L10n = {
|
|||
* @param {number} [count] number to replace %n with
|
||||
* @param {array} [options] options array
|
||||
* @param {bool} [options.escape=true] enable/disable auto escape of placeholders (by default enabled)
|
||||
* @param {bool} [options.sanitize=true] enable/disable sanitization (by default enabled)
|
||||
* @returns {string}
|
||||
*/
|
||||
translate: function(app, text, vars, count, options) {
|
||||
const defaultOptions = {
|
||||
escape: true,
|
||||
sanitize: true,
|
||||
}
|
||||
const allOptions = options || {}
|
||||
_.defaults(allOptions, defaultOptions)
|
||||
|
||||
const optSanitize = allOptions.sanitize ? DOMPurify.sanitize : identity
|
||||
const optEscape = allOptions.escape ? escapeHTML : identity
|
||||
|
||||
// TODO: cache this function to avoid inline recreation
|
||||
// of the same function over and over again in case
|
||||
// translate() is used in a loop
|
||||
|
|
@ -101,13 +107,9 @@ const L10n = {
|
|||
function(a, b) {
|
||||
const r = vars[b]
|
||||
if (typeof r === 'string' || typeof r === 'number') {
|
||||
if (allOptions.escape) {
|
||||
return DOMPurify.sanitize(escapeHTML(r))
|
||||
} else {
|
||||
return DOMPurify.sanitize(r)
|
||||
}
|
||||
return optSanitize(optEscape(r))
|
||||
} else {
|
||||
return DOMPurify.sanitize(a)
|
||||
return optSanitize(a)
|
||||
}
|
||||
}
|
||||
)
|
||||
|
|
@ -120,9 +122,9 @@ const L10n = {
|
|||
}
|
||||
|
||||
if (typeof vars === 'object' || count !== undefined) {
|
||||
return DOMPurify.sanitize(_build(translation, vars, count))
|
||||
return optSanitize(_build(translation, vars, count))
|
||||
} else {
|
||||
return DOMPurify.sanitize(translation)
|
||||
return optSanitize(translation)
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue