Fix XSS issue
This commit is contained in:
@ -1,3 +1,5 @@
|
||||
import * as DOMPurify from 'dompurify'
|
||||
|
||||
export function buildPlayer (video, player, videojs) {
|
||||
window.videojs = videojs
|
||||
require('videojs-overlay')
|
||||
@ -8,7 +10,7 @@ export function buildPlayer (video, player, videojs) {
|
||||
|
||||
const annotationsText = video.pluginData[fieldName]
|
||||
|
||||
const annotations = parseAnnotations(annotationsText)
|
||||
const annotations = parseAnnotations(video, annotationsText)
|
||||
if (!annotations) return
|
||||
|
||||
console.log('Will inject annotations in player.', annotations)
|
||||
@ -18,24 +20,27 @@ export function buildPlayer (video, player, videojs) {
|
||||
})
|
||||
}
|
||||
|
||||
function parseAnnotations (annotationsText) {
|
||||
const splitted = annotationsText.split(/\n\r?\n\r?/)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
return splitted.map(s => buildAnnotation(s))
|
||||
function parseAnnotations (video, annotationsText) {
|
||||
const splitted = annotationsText.split(/\n\r?\n\r?/)
|
||||
.filter(line => !!line)
|
||||
|
||||
return splitted.map(s => buildAnnotation(video, s))
|
||||
.filter(a => !!a)
|
||||
}
|
||||
|
||||
function buildAnnotation (text) {
|
||||
function buildAnnotation (video, text) {
|
||||
const splitted = text.split('\n')
|
||||
if (splitted.length < 2) {
|
||||
console.error('Cannot build annotation %s.', text)
|
||||
console.error('Cannot build annotation "%s".', text)
|
||||
return undefined
|
||||
}
|
||||
|
||||
const timestampsText = splitted.shift()
|
||||
const timestamps = buildTimestamps(timestampsText)
|
||||
if (!timestamps) {
|
||||
console.error('Cannot build timestamp %s of %s.', timestampsText, text)
|
||||
console.error('Cannot build timestamp "%s" of "%s".', timestampsText, text)
|
||||
return undefined
|
||||
}
|
||||
|
||||
@ -46,7 +51,7 @@ function buildAnnotation (text) {
|
||||
options = buildOptions(optionsText)
|
||||
|
||||
if (!options) {
|
||||
console.error('Cannot build options %s of %s.', optionsText, text)
|
||||
console.error('Cannot build options "%s" of "%s".', optionsText, text)
|
||||
} else {
|
||||
splitted.shift()
|
||||
}
|
||||
@ -58,7 +63,7 @@ function buildAnnotation (text) {
|
||||
|
||||
const result = {
|
||||
align,
|
||||
content
|
||||
content: DOMPurify.sanitize(content)
|
||||
}
|
||||
|
||||
result.start = timestamps.start || 0
|
||||
|
Reference in New Issue
Block a user