Skip to content
This repository was archived by the owner on Nov 22, 2024. It is now read-only.

Commit a71dd35

Browse files
committed
added http_headers
1 parent c2c4adf commit a71dd35

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

CloudFlare/cloudflare.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ def __init__(self, config):
5353
self.max_request_retries = int(self.max_request_retries)
5454
except (TypeError, ValueError):
5555
self.max_request_retries = DEFAULT_MAX_REQUEST_RETRIES
56+
self.additional_http_headers = config['http_headers'] if 'http_headers' in config else None
5657
self.profile = config['profile']
5758
self.network = CFnetwork(
5859
use_sessions=self.use_sessions,
@@ -135,6 +136,14 @@ def _add_headers(self, method, data, files, content_type=None):
135136
self.headers['Content-Type'] = 'multipart/form-data'
136137
# however something isn't right and this works ... look at again later!
137138
del self.headers['Content-Type']
139+
if self.additional_http_headers:
140+
for h in self.additional_http_headers:
141+
t, v = h.split(':', 1)
142+
t = t.strip()
143+
v = v.strip()
144+
if len(v) > 0 and ((v[0] == '"' and v[-1] == '"') or (v[0] == "'" and v[-1] == "'")):
145+
v = v[1:-1]
146+
self.headers[t] = v
138147
return data, files
139148

140149
def _add_auth_headers(self, method):
@@ -978,7 +987,7 @@ def api_from_openapi(self, url=None):
978987

979988
return self._base.api_from_openapi(url)
980989

981-
def __init__(self, email=None, key=None, token=None, certtoken=None, debug=False, raw=False, use_sessions=True, profile=None, base_url=None, global_request_timeout=None, max_request_retries=None):
990+
def __init__(self, email=None, key=None, token=None, certtoken=None, debug=False, raw=False, use_sessions=True, profile=None, base_url=None, global_request_timeout=None, max_request_retries=None, http_headers=None):
982991
""" Cloudflare v4 API"""
983992

984993
self._base = None
@@ -1020,6 +1029,10 @@ def __init__(self, email=None, key=None, token=None, certtoken=None, debug=False
10201029
config['global_request_timeout'] = global_request_timeout
10211030
if max_request_retries is not None:
10221031
config['max_request_retries'] = max_request_retries
1032+
if http_headers is not None:
1033+
if not isinstance(http_headers, list):
1034+
raise TypeError('http_headers is not a list')
1035+
config['http_headers'] = http_headers
10231036

10241037
# we do not need to handle item.call values - they pass straight thru
10251038

CloudFlare/read_configs.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ def read_configs(profile=None):
2929

3030
config['global_request_timeout'] = os.getenv('CLOUDFLARE_GLOBAL_REQUEST_TIMEOUT')
3131
config['max_request_retries'] = os.getenv('CLOUDFLARE_MAX_REQUEST_RETRIES')
32+
config['http_headers'] = os.getenv('CLOUDFLARE_HTTP_HEADERS')
3233

3334
# grab values from config files
3435
cp = configparser.ConfigParser()
@@ -64,11 +65,15 @@ def read_configs(profile=None):
6465
if not cp.has_section(profile):
6566
raise ReadConfigError("%s: configuration section missing - configuration file only has these sections: %s" % (profile, ','.join(cp.sections()))) from None
6667

67-
for option in ['email', 'key', 'token', 'certtoken', 'extras', 'base_url', 'openapi_url', 'global_request_timeout', 'max_request_retries']:
68+
for option in ['email', 'key', 'token', 'certtoken', 'extras', 'base_url', 'openapi_url', 'global_request_timeout', 'max_request_retries', 'http_headers']:
6869
try:
6970
config_value = cp.get(profile, option)
7071
if option == 'extras':
72+
# we join all values together as one space seperated strings
7173
config[option] = re.sub(r"\s+", ' ', config_value)
74+
elif option == 'http_headers':
75+
# we keep lines as is for now
76+
config[option] = config_value
7277
else:
7378
config[option] = re.sub(r"\s+", '', config_value)
7479
if config[option] is None or config[option] == '':
@@ -87,9 +92,11 @@ def read_configs(profile=None):
8792
except (configparser.NoOptionError, configparser.NoSectionError):
8893
pass
8994

90-
# do any final cleanup - only needed for extras (which are multiline)
95+
# do any final cleanup - only needed for extras and http_headers (which are multiline)
9196
if 'extras' in config and config['extras'] is not None:
9297
config['extras'] = config['extras'].strip().split(' ')
98+
if 'http_headers' in config and config['http_headers'] is not None:
99+
config['http_headers'] = [h for h in config['http_headers'].split('\n') if len(h) > 0]
93100

94101
# remove blank entries
95102
for x in sorted(config.keys()):

0 commit comments

Comments
 (0)