-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathtransforms.py
More file actions
99 lines (82 loc) · 3.14 KB
/
transforms.py
File metadata and controls
99 lines (82 loc) · 3.14 KB
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
import config
import logging
from flask import current_app as app
conf = config.Config().data
# Some plugins will need to be automatically transformed, such as the
# rate-limiting plugin
def plugins_transformations (namespace, yaml):
traverse_plugins (yaml)
def proxy_cache (plugin, plugin_configs=None):
override_config = conf['plugins']['proxy_cache']
if 'config' in plugin:
plugin_config = plugin['config']
else:
plugin['config'] = {}
plugin_config = plugin['config']
for k, v in override_config.items():
plugin_config[k] = v
def upstream_jwt (plugin, plugin_configs=None):
override_config = conf['plugins']['upstream_jwt']
if 'config' in plugin:
plugin_config = plugin['config']
else:
plugin['config'] = {}
plugin_config = plugin['config']
for k, v in override_config.items():
plugin_config[k] = v
def rate_limiting (plugin, plugin_configs=None):
override_config = conf['plugins']['rate_limiting']
if '_config' in plugin:
if not plugin_configs == None:
if plugin['_config'] not in plugin_configs:
plugin_configs[plugin['_config']] = {}
plugin_config = plugin_configs[plugin['_config']]
else:
plugin_configs = {plugin['_config']: {}}
plugin_config = plugin_configs[plugin['_config']]
elif 'config' in plugin:
plugin_config = plugin['config']
else:
plugin['config'] = {}
plugin_config = plugin['config']
policy = "redis"
if 'policy' in plugin_config and plugin_config['policy'] == 'local':
policy = 'local'
else:
for k, v in override_config.items():
plugin_config[k] = v
plugin_config['policy'] = policy
# Add null values to the following if they are not specified
for nval in ['second', 'minute', 'hour', 'day', 'month', 'year', 'header_name']:
if nval not in plugin_config:
plugin_config[nval] = None
# Add these defaults if not defined
defaults = {
"enabled": True,
"protocols": [
"http",
"https"
]
}
for k, v in defaults.items():
if k not in plugin:
plugin[k] = v
def traverse_plugins (yaml, plugin_configs = None):
if plugin_configs == None:
if '_plugin_configs' in yaml:
plugin_configs = yaml['_plugin_configs']
traversables = ['services', 'routes', 'plugins', 'upstreams', 'consumers', 'certificates']
for k in yaml:
if k in traversables:
for item in yaml[k]:
if k == 'plugins':
if item['name'] == 'rate-limiting':
rate_limiting(item, plugin_configs)
elif item['name'] == 'proxy-cache':
proxy_cache(item, plugin_configs)
elif item['name'] == 'kong-upstream-jwt':
upstream_jwt(item, plugin_configs)
traverse_plugins (item, plugin_configs)
def add_version_if_missing(yaml):
if "_format_version" not in yaml or yaml["_format_version"] != "3.0":
yaml["_format_version"] = "3.0"