change(tracker): change input sanitization handling
This commit is contained in:
parent
c8bd105c6c
commit
3c17c128de
2 changed files with 11 additions and 13 deletions
|
|
@ -11,12 +11,11 @@ export declare const enum SanitizeLevel {
|
|||
export interface Options {
|
||||
obscureTextEmails: boolean
|
||||
obscureTextNumbers: boolean
|
||||
customCallback: boolean
|
||||
domSanitizer: (node: Node) => SanitizeLevel
|
||||
domSanitizer?: (node: Node) => SanitizeLevel
|
||||
}
|
||||
|
||||
export default class Sanitizer {
|
||||
private readonly masked: Set<number> = new Set()
|
||||
private readonly obscured: Set<number> = new Set()
|
||||
private readonly hiddenContainers: Set<number> = new Set()
|
||||
private readonly options: Options
|
||||
|
||||
|
|
@ -25,8 +24,6 @@ export default class Sanitizer {
|
|||
{
|
||||
obscureTextEmails: true,
|
||||
obscureTextNumbers: false,
|
||||
customCallback: false,
|
||||
domSanitizer: () => SanitizeLevel.Plain,
|
||||
},
|
||||
options,
|
||||
)
|
||||
|
|
@ -34,11 +31,11 @@ export default class Sanitizer {
|
|||
|
||||
handleNode(id: number, parentID: number, node: Node) {
|
||||
if (
|
||||
this.masked.has(parentID) ||
|
||||
this.obscured.has(parentID) ||
|
||||
(isElementNode(node) &&
|
||||
(hasOpenreplayAttribute(node, 'masked') || hasOpenreplayAttribute(node, 'obscured')))
|
||||
) {
|
||||
this.masked.add(id)
|
||||
this.obscured.add(id)
|
||||
}
|
||||
if (
|
||||
this.hiddenContainers.has(parentID) ||
|
||||
|
|
@ -48,11 +45,11 @@ export default class Sanitizer {
|
|||
this.hiddenContainers.add(id)
|
||||
}
|
||||
|
||||
if (this.options.customCallback) {
|
||||
if (this.options.domSanitizer !== undefined) {
|
||||
const sanitizeLevel = this.options.domSanitizer(node)
|
||||
if (sanitizeLevel > 0) {
|
||||
const maskedSet =
|
||||
sanitizeLevel === SanitizeLevel.Hidden ? this.hiddenContainers : this.masked
|
||||
sanitizeLevel === SanitizeLevel.Hidden ? this.hiddenContainers : this.obscured
|
||||
|
||||
maskedSet.add(id)
|
||||
}
|
||||
|
|
@ -60,7 +57,7 @@ export default class Sanitizer {
|
|||
}
|
||||
|
||||
sanitize(id: number, data: string): string {
|
||||
if (this.masked.has(id)) {
|
||||
if (this.obscured.has(id)) {
|
||||
// TODO: is it the best place to put trim() ? Might trimmed spaces be considered in layout in certain cases?
|
||||
return data
|
||||
.trim()
|
||||
|
|
@ -79,7 +76,7 @@ export default class Sanitizer {
|
|||
}
|
||||
|
||||
isMasked(id: number): boolean {
|
||||
return this.masked.has(id)
|
||||
return this.obscured.has(id)
|
||||
}
|
||||
isMaskedContainer(id: number) {
|
||||
return this.hiddenContainers.has(id)
|
||||
|
|
@ -94,7 +91,7 @@ export default class Sanitizer {
|
|||
}
|
||||
|
||||
clear(): void {
|
||||
this.masked.clear()
|
||||
this.obscured.clear()
|
||||
this.hiddenContainers.clear()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -103,10 +103,11 @@ export default function (app: App, opts: Partial<Options>): void {
|
|||
function sendInputValue(id: number, node: TextEditableElement | HTMLSelectElement): void {
|
||||
let value = node.value
|
||||
let inputMode: InputMode = options.defaultInputMode
|
||||
|
||||
if (node.type === 'password' || hasOpenreplayAttribute(node, 'hidden')) {
|
||||
inputMode = InputMode.Hidden
|
||||
} else if (
|
||||
hasOpenreplayAttribute(node, 'obscured') ||
|
||||
app.sanitizer.isMasked(id) ||
|
||||
(inputMode === InputMode.Plain &&
|
||||
((options.obscureInputNumbers && node.type !== 'date' && /\d\d\d\d/.test(value)) ||
|
||||
(options.obscureInputDates && node.type === 'date') ||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue