-
Notifications
You must be signed in to change notification settings - Fork 11
/
patch_web_xml.py
72 lines (62 loc) · 2.6 KB
/
patch_web_xml.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
"""/* Copyright (C) 2020, Specify Collections Consortium
*
* Specify Collections Consortium, Biodiversity Institute, University of Kansas,
* 1345 Jayhawk Boulevard, Lawrence, Kansas, 66045, USA, [email protected]
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/"""
import sys
from lxml import etree
def add_init_param(element, name, value):
param = etree.SubElement(element, 'init-param')
n = etree.SubElement(param, 'param-name')
n.text = name
v = etree.SubElement(param, 'param-value')
v.text = value
webxml = etree.parse(sys.argv[1])
root = webxml.getroot()
addcrossorigin = True
for c in root:
if c.tag == etree.Comment:
continue
if c.tag.endswith('filter'):
for fn in c:
if fn.tag == etree.Comment:
continue
if fn.tag.endswith('filter-name') and fn.text == 'cross-origin':
addcrossorigin = False
break
if not addcrossorigin:
break
if addcrossorigin:
crfilter = etree.SubElement(root, 'filter')
fname = etree.SubElement(crfilter, 'filter-name')
fname.text = 'cross-origin'
fclass = etree.SubElement(crfilter, 'filter-class')
fclass.text = 'org.eclipse.jetty.servlets.CrossOriginFilter'
add_init_param(crfilter, 'allowedOrigins','http://localhost')
add_init_param(crfilter, 'allowedMethods', 'GET,POST,DELETE,PUT,HEAD,OPTIONS')
add_init_param(crfilter, 'allowedHeaders','origin, content-type, cache-control, accept, options, authorization, x-requested-with')
add_init_param(crfilter, 'supportsCredentials','true')
add_init_param(crfilter, 'chainPreflight','false')
crmapping = etree.SubElement(root, 'filter-mapping')
fname = etree.SubElement(crmapping, 'filter-name')
fname.text = 'cross-origin'
pattern = etree.SubElement(crmapping, 'url-pattern')
pattern.text = '/*'
root.insert(0, crfilter)
root.insert(1, crmapping)
# Done.
webxml.write(sys.stdout)