Skip to content

Commit

Permalink
added API support for third param - used by /zones/:id/firewall/waf/p…
Browse files Browse the repository at this point in the history
…ackages/:id/groups/:id & /zones/:id/firewall/waf/packages/:id/rules/:id
  • Loading branch information
mahtin committed Dec 29, 2016
1 parent 9c59aa3 commit d5529e4
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 57 deletions.
109 changes: 58 additions & 51 deletions CloudFlare/cloudflare.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def call_with_no_auth(self, method,
api_call_part1,
api_call_part2=None,
api_call_part3=None,
identifier1=None, identifier2=None,
identifier1=None, identifier2=None, identifier3=None,
params=None, data=None):
""" Cloudflare v4 API"""

Expand All @@ -48,14 +48,14 @@ def call_with_no_auth(self, method,
}
return self._call(method, headers,
api_call_part1, api_call_part2, api_call_part3,
identifier1, identifier2,
identifier1, identifier2, identifier3,
params, data)

def call_with_auth(self, method,
api_call_part1,
api_call_part2=None,
api_call_part3=None,
identifier1=None, identifier2=None,
identifier1=None, identifier2=None, identifier3=None,
params=None, data=None):
""" Cloudflare v4 API"""

Expand All @@ -69,14 +69,14 @@ def call_with_auth(self, method,
}
return self._call(method, headers,
api_call_part1, api_call_part2, api_call_part3,
identifier1, identifier2,
identifier1, identifier2, identifier3,
params, data)

def call_with_certauth(self, method,
api_call_part1,
api_call_part2=None,
api_call_part3=None,
identifier1=None, identifier2=None,
identifier1=None, identifier2=None, identifier3=None,
params=None, data=None):
""" Cloudflare v4 API"""

Expand All @@ -89,16 +89,32 @@ def call_with_certauth(self, method,
}
return self._call(method, headers,
api_call_part1, api_call_part2, api_call_part3,
identifier1, identifier2,
identifier1, identifier2, identifier3,
params, data)

def _raw(self, method, headers,
api_call_part1, api_call_part2=None, api_call_part3=None,
identifier1=None, identifier2=None,
identifier1=None, identifier2=None, identifier3=None,
params=None, data=None):
""" Cloudflare v4 API"""

if self.logger:
self.logger.debug('Call: %s,%s,%s,%s,%s,%s' % (str(api_call_part1),
str(identifier1),
str(api_call_part2),
str(identifier2),
str(api_call_part3),
str(identifier3)))
self.logger.debug('Call: optional params and data %s %s' % (str(params),
str(data)))

if (method is None) or (api_call_part1 is None):
# should never happen
raise CloudFlareInternalError(0, 'You must specify a method and endpoint')

if api_call_part2 is not None or (data is not None and method == 'GET'):
if identifier1 is None:
raise CloudFlareAPIError(0, 'You must specify identifier1')
if identifier2 is None:
url = (self.base_url + '/'
+ api_call_part1 + '/'
Expand All @@ -120,22 +136,13 @@ def _raw(self, method, headers,
+ identifier1)
if api_call_part3:
url += '/' + api_call_part3
if identifier3:
url += '/' + identifier3

if self.logger:
self.logger.debug('Call: %s,%s,%s,%s,%s' % (str(api_call_part1),
str(identifier1),
str(api_call_part2),
str(identifier2),
str(api_call_part3)))
self.logger.debug('Call: optional params and data %s %s' % (str(params),
str(data)))
self.logger.debug('Call: method and url %s %s' % (str(method), str(url)))
self.logger.debug('Call: headers %s' % str(sanitize_secrets(headers)))

if (method is None) or (api_call_part1 is None):
# should never happen
raise CloudFlareInternalError(0, 'You must specify a method and endpoint')

method = method.upper()

if self.logger:
Expand Down Expand Up @@ -180,13 +187,13 @@ def _call(self, method, headers,
api_call_part1,
api_call_part2=None,
api_call_part3=None,
identifier1=None, identifier2=None,
identifier1=None, identifier2=None, identifier3=None,
params=None, data=None):
""" Cloudflare v4 API"""

response_data = self._raw(method, headers,
api_call_part1, api_call_part2, api_call_part3,
identifier1, identifier2,
identifier1, identifier2, identifier3,
params, data)

# Sanatize the returned results - just in case API is messed up
Expand Down Expand Up @@ -259,27 +266,27 @@ def __init__(self, base, api_call_part1, api_call_part2=None, api_call_part3=Non
# self.api_call_part2 = api_call_part2
# self.api_call_part3 = api_call_part3

def get(self, identifier1=None, identifier2=None, params=None, data=None):
def get(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
""" Cloudflare v4 API"""

raise CloudFlareAPIError(0, 'get() call not available for this endpoint')

def patch(self, identifier1=None, identifier2=None, params=None, data=None):
def patch(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
""" Cloudflare v4 API"""

raise CloudFlareAPIError(0, 'patch() call not available for this endpoint')

def post(self, identifier1=None, identifier2=None, params=None, data=None):
def post(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
""" Cloudflare v4 API"""

raise CloudFlareAPIError(0, 'post() call not available for this endpoint')

def put(self, identifier1=None, identifier2=None, params=None, data=None):
def put(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
""" Cloudflare v4 API"""

raise CloudFlareAPIError(0, 'put() call not available for this endpoint')

def delete(self, identifier1=None, identifier2=None, params=None, data=None):
def delete(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
""" Cloudflare v4 API"""

raise CloudFlareAPIError(0, 'delete() call not available for this endpoint')
Expand All @@ -295,32 +302,32 @@ def __init__(self, base, api_call_part1, api_call_part2=None, api_call_part3=Non
self.api_call_part2 = api_call_part2
self.api_call_part3 = api_call_part3

def get(self, identifier1=None, identifier2=None, params=None, data=None):
def get(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
""" Cloudflare v4 API"""

return self._base.call_with_no_auth('GET',
self.api_call_part1,
self.api_call_part2,
self.api_call_part3,
identifier1, identifier2,
identifier1, identifier2, identifier3,
params, data)

def patch(self, identifier1=None, identifier2=None, params=None, data=None):
def patch(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
""" Cloudflare v4 API"""

raise CloudFlareAPIError(0, 'patch() call not available for this endpoint')

def post(self, identifier1=None, identifier2=None, params=None, data=None):
def post(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
""" Cloudflare v4 API"""

raise CloudFlareAPIError(0, 'post() call not available for this endpoint')

def put(self, identifier1=None, identifier2=None, params=None, data=None):
def put(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
""" Cloudflare v4 API"""

raise CloudFlareAPIError(0, 'put() call not available for this endpoint')

def delete(self, identifier1=None, identifier2=None, params=None, data=None):
def delete(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
""" Cloudflare v4 API"""

raise CloudFlareAPIError(0, 'delete() call not available for this endpoint')
Expand All @@ -336,54 +343,54 @@ def __init__(self, base, api_call_part1, api_call_part2=None, api_call_part3=Non
self.api_call_part2 = api_call_part2
self.api_call_part3 = api_call_part3

def get(self, identifier1=None, identifier2=None, params=None, data=None):
def get(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
""" Cloudflare v4 API"""

return self._base.call_with_auth('GET',
self.api_call_part1,
self.api_call_part2,
self.api_call_part3,
identifier1, identifier2,
identifier1, identifier2, identifier3,
params, data)

def patch(self, identifier1=None, identifier2=None, params=None, data=None):
def patch(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
""" Cloudflare v4 API"""

return self._base.call_with_auth('PATCH',
self.api_call_part1,
self.api_call_part2,
self.api_call_part3,
identifier1, identifier2,
identifier1, identifier2, identifier3,
params, data)

def post(self, identifier1=None, identifier2=None, params=None, data=None):
def post(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
""" Cloudflare v4 API"""

return self._base.call_with_auth('POST',
self.api_call_part1,
self.api_call_part2,
self.api_call_part3,
identifier1, identifier2,
identifier1, identifier2, identifier3,
params, data)

def put(self, identifier1=None, identifier2=None, params=None, data=None):
def put(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
""" Cloudflare v4 API"""

return self._base.call_with_auth('PUT',
self.api_call_part1,
self.api_call_part2,
self.api_call_part3,
identifier1, identifier2,
identifier1, identifier2, identifier3,
params, data)

def delete(self, identifier1=None, identifier2=None, params=None, data=None):
def delete(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
""" Cloudflare v4 API"""

return self._base.call_with_auth('DELETE',
self.api_call_part1,
self.api_call_part2,
self.api_call_part3,
identifier1, identifier2,
identifier1, identifier2, identifier3,
params, data)

class _add_with_cert_auth(object):
Expand All @@ -397,54 +404,54 @@ def __init__(self, base, api_call_part1, api_call_part2=None, api_call_part3=Non
self.api_call_part2 = api_call_part2
self.api_call_part3 = api_call_part3

def get(self, identifier1=None, identifier2=None, params=None, data=None):
def get(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
""" Cloudflare v4 API"""

return self._base.call_with_certauth('GET',
self.api_call_part1,
self.api_call_part2,
self.api_call_part3,
identifier1, identifier2,
identifier1, identifier2, identifier3,
params, data)

def patch(self, identifier1=None, identifier2=None, params=None, data=None):
def patch(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
""" Cloudflare v4 API"""

return self._base.call_with_certauth('PATCH',
self.api_call_part1,
self.api_call_part2,
self.api_call_part3,
identifier1, identifier2,
identifier1, identifier2, identifier3,
params, data)

def post(self, identifier1=None, identifier2=None, params=None, data=None):
def post(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
""" Cloudflare v4 API"""

return self._base.call_with_certauth('POST',
self.api_call_part1,
self.api_call_part2,
self.api_call_part3,
identifier1, identifier2,
identifier1, identifier2, identifier3,
params, data)

def put(self, identifier1=None, identifier2=None, params=None, data=None):
def put(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
""" Cloudflare v4 API"""

return self._base.call_with_certauth('PUT',
self.api_call_part1,
self.api_call_part2,
self.api_call_part3,
identifier1, identifier2,
identifier1, identifier2, identifier3,
params, data)

def delete(self, identifier1=None, identifier2=None, params=None, data=None):
def delete(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
""" Cloudflare v4 API"""

return self._base.call_with_certauth('DELETE',
self.api_call_part1,
self.api_call_part2,
self.api_call_part3,
identifier1, identifier2,
identifier1, identifier2, identifier3,
params, data)

def api_list(self, m=None, s=''):
Expand Down
19 changes: 13 additions & 6 deletions cli4/cli4.py
Original file line number Diff line number Diff line change
Expand Up @@ -287,6 +287,7 @@ def cli4(args):
cmd = []
identifier1 = None
identifier2 = None
identifier3 = None

hex_only = re.compile('^[0-9a-fA-F]+$')

Expand Down Expand Up @@ -318,7 +319,7 @@ def cli4(args):
else:
exit("/%s/%s :NOT CODED YET 1" % ('/'.join(cmd), element))
cmd.append(':' + identifier1)
else:
elif identifier2 is None:
if len(element) in [32, 40, 48] and hex_only.match(element):
# raw identifier - lets just use it as-is
identifier2 = element
Expand All @@ -337,6 +338,12 @@ def cli4(args):
else:
cmd.append(':' + identifier2)
identifier2 = [identifier2]
else:
if len(element) in [32, 40, 48] and hex_only.match(element):
# raw identifier - lets just use it as-is
identifier3 = element
else:
exit("/%s/%s :NOT CODED YET 3" % ('/'.join(cmd), element))
else:
try:
m = getattr(m, element)
Expand All @@ -354,15 +361,15 @@ def cli4(args):
for i2 in identifier2:
try:
if method is 'GET':
r = m.get(identifier1=identifier1, identifier2=i2, params=params)
r = m.get(identifier1=identifier1, identifier2=i2, identifier3=identifier3, params=params)
elif method is 'PATCH':
r = m.patch(identifier1=identifier1, identifier2=i2, data=params)
r = m.patch(identifier1=identifier1, identifier2=i2, identifier3=identifier3, data=params)
elif method is 'POST':
r = m.post(identifier1=identifier1, identifier2=i2, data=params)
r = m.post(identifier1=identifier1, identifier2=i2, identifier3=identifier3, data=params)
elif method is 'PUT':
r = m.put(identifier1=identifier1, identifier2=i2, data=params)
r = m.put(identifier1=identifier1, identifier2=i2, identifier3=identifier3, data=params)
elif method is 'DELETE':
r = m.delete(identifier1=identifier1, identifier2=i2, data=params)
r = m.delete(identifier1=identifier1, identifier2=i2, identifier3=identifier3, data=params)
else:
pass
except CloudFlare.exceptions.CloudFlareAPIError as e:
Expand Down

0 comments on commit d5529e4

Please sign in to comment.