File : core/htmlSanitizer/HTMLSanitizerData.js

1
/*
2
Copyright - 2017 2023 - wwwouaiebe - Contact: https://www.ouaie.be/
3
4
This  program is free software;
5
you can redistribute it and/or modify it under the terms of the
6
GNU General Public License as published by the Free Software Foundation;
7
either version 3 of the License, or any later version.
8
9
This program is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
GNU General Public License for more details.
13
14
You should have received a copy of the GNU General Public License
15
along with this program; if not, write to the Free Software
16
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17
*/
18
19
/*
20
Changes:
21
Doc reviewed ...
22
Tests ...
23
*/
24
25
/* ------------------------------------------------------------------------------------------------------------------------- */
26
/**
27
this class contains the validity map for the HTMLSanitizer
28
*/
29
/* ------------------------------------------------------------------------------------------------------------------------- */
30
31
class HTMLSanitizerData {
32
33
    /**
34
    The validity map
35
    @type {Map}
36
    */
37
38
    #validityMap = new Map ( );
39
40
    /**
41
    The constructor
42
    */
43
44
    constructor ( ) {
45
46
        Object.freeze ( this );
47
48
        /*
49
        WARNING :
50
51
            never put script as valid tag !!!
52
53
            never put event handler starting with on... as valid attribute !!!
54
55
        */
56
57
        this.#validityMap.set ( 'a', [ 'href', 'target' ] );
58
        this.#validityMap.set ( 'div', [ ] );
59
        this.#validityMap.set ( 'del', [ ] );
60
        this.#validityMap.set ( 'em', [ ] );
61
        this.#validityMap.set ( 'figcaption', [ ] );
62
        this.#validityMap.set ( 'figure', [ ] );
63
        this.#validityMap.set ( 'h1', [ ] );
64
        this.#validityMap.set ( 'h2', [ ] );
65
        this.#validityMap.set ( 'h3', [ ] );
66
        this.#validityMap.set ( 'h4', [ ] );
67
        this.#validityMap.set ( 'h5', [ ] );
68
        this.#validityMap.set ( 'h6', [ ] );
69
        this.#validityMap.set ( 'hr', [ ] );
70
        this.#validityMap.set ( 'img', [ 'src', 'alt', 'width', 'height' ] );
71
        this.#validityMap.set ( 'ins', [ ] );
72
        this.#validityMap.set ( 'li', [ ] );
73
        this.#validityMap.set ( 'mark', [ ] );
74
        this.#validityMap.set ( 'ol', [ ] );
75
        this.#validityMap.set ( 'p', [ ] );
76
        this.#validityMap.set ( 's', [ ] );
77
        this.#validityMap.set ( 'small', [ ] );
78
        this.#validityMap.set ( 'strong', [ ] );
79
        this.#validityMap.set ( 'span', [ ] );
80
        this.#validityMap.set ( 'sub', [ ] );
81
        this.#validityMap.set ( 'sup', [ ] );
82
        this.#validityMap.set ( 'ul', [ ] );
83
84
        this.#validityMap.set ( 'svg', [ 'xmlns', 'viewBox', 'class' ] );
85
        this.#validityMap.set ( 'text', [ 'x', 'y', 'text-anchor' ] );
86
        this.#validityMap.set ( 'polyline', [ 'points', 'class', 'transform' ] );
87
88
        this.#validityMap.set ( '\u0023text', [] );
89
    }
90
91
    /**
92
    get the valid attributes for a node name
93
    @param {String} nodeName the name of the node for witch the valid attrbutes are asked.
94
    Warning: the node name must be a valid node name verified with the getValidNodeName.
95
    @return {Array.<String>} the valid attributes names
96
    */
97
98
    getValidAttributesNames ( nodeName ) {
99
        return this.#validityMap.get ( nodeName ).concat ( [ 'id', 'class', 'dir', 'title' ] );
100
    }
101
102
    /**
103
    verify that a node name is a valid node name
104
    @param {String} nodeName The node name
105
    @return {String} the node name or an empty string if the given node name is invalid
106
    */
107
108
    getValidNodeName ( nodeName ) {
109
        const validNodeName = nodeName.toLowerCase ( );
110
        return this.#validityMap.get ( validNodeName ) ? validNodeName : '';
111
    }
112
113
}
114
115
export default HTMLSanitizerData;
116
117
/* --- End of file --------------------------------------------------------------------------------------------------------- */
118