Skip to content

Commit d5529e4

Browse files
committed
added API support for third param - used by /zones/:id/firewall/waf/packages/:id/groups/:id & /zones/:id/firewall/waf/packages/:id/rules/:id
1 parent 9c59aa3 commit d5529e4

2 files changed

Lines changed: 71 additions & 57 deletions

File tree

CloudFlare/cloudflare.py

Lines changed: 58 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def call_with_no_auth(self, method,
3838
api_call_part1,
3939
api_call_part2=None,
4040
api_call_part3=None,
41-
identifier1=None, identifier2=None,
41+
identifier1=None, identifier2=None, identifier3=None,
4242
params=None, data=None):
4343
""" Cloudflare v4 API"""
4444

@@ -48,14 +48,14 @@ def call_with_no_auth(self, method,
4848
}
4949
return self._call(method, headers,
5050
api_call_part1, api_call_part2, api_call_part3,
51-
identifier1, identifier2,
51+
identifier1, identifier2, identifier3,
5252
params, data)
5353

5454
def call_with_auth(self, method,
5555
api_call_part1,
5656
api_call_part2=None,
5757
api_call_part3=None,
58-
identifier1=None, identifier2=None,
58+
identifier1=None, identifier2=None, identifier3=None,
5959
params=None, data=None):
6060
""" Cloudflare v4 API"""
6161

@@ -69,14 +69,14 @@ def call_with_auth(self, method,
6969
}
7070
return self._call(method, headers,
7171
api_call_part1, api_call_part2, api_call_part3,
72-
identifier1, identifier2,
72+
identifier1, identifier2, identifier3,
7373
params, data)
7474

7575
def call_with_certauth(self, method,
7676
api_call_part1,
7777
api_call_part2=None,
7878
api_call_part3=None,
79-
identifier1=None, identifier2=None,
79+
identifier1=None, identifier2=None, identifier3=None,
8080
params=None, data=None):
8181
""" Cloudflare v4 API"""
8282

@@ -89,16 +89,32 @@ def call_with_certauth(self, method,
8989
}
9090
return self._call(method, headers,
9191
api_call_part1, api_call_part2, api_call_part3,
92-
identifier1, identifier2,
92+
identifier1, identifier2, identifier3,
9393
params, data)
9494

9595
def _raw(self, method, headers,
9696
api_call_part1, api_call_part2=None, api_call_part3=None,
97-
identifier1=None, identifier2=None,
97+
identifier1=None, identifier2=None, identifier3=None,
9898
params=None, data=None):
9999
""" Cloudflare v4 API"""
100100

101+
if self.logger:
102+
self.logger.debug('Call: %s,%s,%s,%s,%s,%s' % (str(api_call_part1),
103+
str(identifier1),
104+
str(api_call_part2),
105+
str(identifier2),
106+
str(api_call_part3),
107+
str(identifier3)))
108+
self.logger.debug('Call: optional params and data %s %s' % (str(params),
109+
str(data)))
110+
111+
if (method is None) or (api_call_part1 is None):
112+
# should never happen
113+
raise CloudFlareInternalError(0, 'You must specify a method and endpoint')
114+
101115
if api_call_part2 is not None or (data is not None and method == 'GET'):
116+
if identifier1 is None:
117+
raise CloudFlareAPIError(0, 'You must specify identifier1')
102118
if identifier2 is None:
103119
url = (self.base_url + '/'
104120
+ api_call_part1 + '/'
@@ -120,22 +136,13 @@ def _raw(self, method, headers,
120136
+ identifier1)
121137
if api_call_part3:
122138
url += '/' + api_call_part3
139+
if identifier3:
140+
url += '/' + identifier3
123141

124142
if self.logger:
125-
self.logger.debug('Call: %s,%s,%s,%s,%s' % (str(api_call_part1),
126-
str(identifier1),
127-
str(api_call_part2),
128-
str(identifier2),
129-
str(api_call_part3)))
130-
self.logger.debug('Call: optional params and data %s %s' % (str(params),
131-
str(data)))
132143
self.logger.debug('Call: method and url %s %s' % (str(method), str(url)))
133144
self.logger.debug('Call: headers %s' % str(sanitize_secrets(headers)))
134145

135-
if (method is None) or (api_call_part1 is None):
136-
# should never happen
137-
raise CloudFlareInternalError(0, 'You must specify a method and endpoint')
138-
139146
method = method.upper()
140147

141148
if self.logger:
@@ -180,13 +187,13 @@ def _call(self, method, headers,
180187
api_call_part1,
181188
api_call_part2=None,
182189
api_call_part3=None,
183-
identifier1=None, identifier2=None,
190+
identifier1=None, identifier2=None, identifier3=None,
184191
params=None, data=None):
185192
""" Cloudflare v4 API"""
186193

187194
response_data = self._raw(method, headers,
188195
api_call_part1, api_call_part2, api_call_part3,
189-
identifier1, identifier2,
196+
identifier1, identifier2, identifier3,
190197
params, data)
191198

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

262-
def get(self, identifier1=None, identifier2=None, params=None, data=None):
269+
def get(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
263270
""" Cloudflare v4 API"""
264271

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

267-
def patch(self, identifier1=None, identifier2=None, params=None, data=None):
274+
def patch(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
268275
""" Cloudflare v4 API"""
269276

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

272-
def post(self, identifier1=None, identifier2=None, params=None, data=None):
279+
def post(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
273280
""" Cloudflare v4 API"""
274281

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

277-
def put(self, identifier1=None, identifier2=None, params=None, data=None):
284+
def put(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
278285
""" Cloudflare v4 API"""
279286

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

282-
def delete(self, identifier1=None, identifier2=None, params=None, data=None):
289+
def delete(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
283290
""" Cloudflare v4 API"""
284291

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

298-
def get(self, identifier1=None, identifier2=None, params=None, data=None):
305+
def get(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
299306
""" Cloudflare v4 API"""
300307

301308
return self._base.call_with_no_auth('GET',
302309
self.api_call_part1,
303310
self.api_call_part2,
304311
self.api_call_part3,
305-
identifier1, identifier2,
312+
identifier1, identifier2, identifier3,
306313
params, data)
307314

308-
def patch(self, identifier1=None, identifier2=None, params=None, data=None):
315+
def patch(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
309316
""" Cloudflare v4 API"""
310317

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

313-
def post(self, identifier1=None, identifier2=None, params=None, data=None):
320+
def post(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
314321
""" Cloudflare v4 API"""
315322

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

318-
def put(self, identifier1=None, identifier2=None, params=None, data=None):
325+
def put(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
319326
""" Cloudflare v4 API"""
320327

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

323-
def delete(self, identifier1=None, identifier2=None, params=None, data=None):
330+
def delete(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
324331
""" Cloudflare v4 API"""
325332

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

339-
def get(self, identifier1=None, identifier2=None, params=None, data=None):
346+
def get(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
340347
""" Cloudflare v4 API"""
341348

342349
return self._base.call_with_auth('GET',
343350
self.api_call_part1,
344351
self.api_call_part2,
345352
self.api_call_part3,
346-
identifier1, identifier2,
353+
identifier1, identifier2, identifier3,
347354
params, data)
348355

349-
def patch(self, identifier1=None, identifier2=None, params=None, data=None):
356+
def patch(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
350357
""" Cloudflare v4 API"""
351358

352359
return self._base.call_with_auth('PATCH',
353360
self.api_call_part1,
354361
self.api_call_part2,
355362
self.api_call_part3,
356-
identifier1, identifier2,
363+
identifier1, identifier2, identifier3,
357364
params, data)
358365

359-
def post(self, identifier1=None, identifier2=None, params=None, data=None):
366+
def post(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
360367
""" Cloudflare v4 API"""
361368

362369
return self._base.call_with_auth('POST',
363370
self.api_call_part1,
364371
self.api_call_part2,
365372
self.api_call_part3,
366-
identifier1, identifier2,
373+
identifier1, identifier2, identifier3,
367374
params, data)
368375

369-
def put(self, identifier1=None, identifier2=None, params=None, data=None):
376+
def put(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
370377
""" Cloudflare v4 API"""
371378

372379
return self._base.call_with_auth('PUT',
373380
self.api_call_part1,
374381
self.api_call_part2,
375382
self.api_call_part3,
376-
identifier1, identifier2,
383+
identifier1, identifier2, identifier3,
377384
params, data)
378385

379-
def delete(self, identifier1=None, identifier2=None, params=None, data=None):
386+
def delete(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
380387
""" Cloudflare v4 API"""
381388

382389
return self._base.call_with_auth('DELETE',
383390
self.api_call_part1,
384391
self.api_call_part2,
385392
self.api_call_part3,
386-
identifier1, identifier2,
393+
identifier1, identifier2, identifier3,
387394
params, data)
388395

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

400-
def get(self, identifier1=None, identifier2=None, params=None, data=None):
407+
def get(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
401408
""" Cloudflare v4 API"""
402409

403410
return self._base.call_with_certauth('GET',
404411
self.api_call_part1,
405412
self.api_call_part2,
406413
self.api_call_part3,
407-
identifier1, identifier2,
414+
identifier1, identifier2, identifier3,
408415
params, data)
409416

410-
def patch(self, identifier1=None, identifier2=None, params=None, data=None):
417+
def patch(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
411418
""" Cloudflare v4 API"""
412419

413420
return self._base.call_with_certauth('PATCH',
414421
self.api_call_part1,
415422
self.api_call_part2,
416423
self.api_call_part3,
417-
identifier1, identifier2,
424+
identifier1, identifier2, identifier3,
418425
params, data)
419426

420-
def post(self, identifier1=None, identifier2=None, params=None, data=None):
427+
def post(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
421428
""" Cloudflare v4 API"""
422429

423430
return self._base.call_with_certauth('POST',
424431
self.api_call_part1,
425432
self.api_call_part2,
426433
self.api_call_part3,
427-
identifier1, identifier2,
434+
identifier1, identifier2, identifier3,
428435
params, data)
429436

430-
def put(self, identifier1=None, identifier2=None, params=None, data=None):
437+
def put(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
431438
""" Cloudflare v4 API"""
432439

433440
return self._base.call_with_certauth('PUT',
434441
self.api_call_part1,
435442
self.api_call_part2,
436443
self.api_call_part3,
437-
identifier1, identifier2,
444+
identifier1, identifier2, identifier3,
438445
params, data)
439446

440-
def delete(self, identifier1=None, identifier2=None, params=None, data=None):
447+
def delete(self, identifier1=None, identifier2=None, identifier3=None, params=None, data=None):
441448
""" Cloudflare v4 API"""
442449

443450
return self._base.call_with_certauth('DELETE',
444451
self.api_call_part1,
445452
self.api_call_part2,
446453
self.api_call_part3,
447-
identifier1, identifier2,
454+
identifier1, identifier2, identifier3,
448455
params, data)
449456

450457
def api_list(self, m=None, s=''):

cli4/cli4.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,7 @@ def cli4(args):
287287
cmd = []
288288
identifier1 = None
289289
identifier2 = None
290+
identifier3 = None
290291

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

@@ -318,7 +319,7 @@ def cli4(args):
318319
else:
319320
exit("/%s/%s :NOT CODED YET 1" % ('/'.join(cmd), element))
320321
cmd.append(':' + identifier1)
321-
else:
322+
elif identifier2 is None:
322323
if len(element) in [32, 40, 48] and hex_only.match(element):
323324
# raw identifier - lets just use it as-is
324325
identifier2 = element
@@ -337,6 +338,12 @@ def cli4(args):
337338
else:
338339
cmd.append(':' + identifier2)
339340
identifier2 = [identifier2]
341+
else:
342+
if len(element) in [32, 40, 48] and hex_only.match(element):
343+
# raw identifier - lets just use it as-is
344+
identifier3 = element
345+
else:
346+
exit("/%s/%s :NOT CODED YET 3" % ('/'.join(cmd), element))
340347
else:
341348
try:
342349
m = getattr(m, element)
@@ -354,15 +361,15 @@ def cli4(args):
354361
for i2 in identifier2:
355362
try:
356363
if method is 'GET':
357-
r = m.get(identifier1=identifier1, identifier2=i2, params=params)
364+
r = m.get(identifier1=identifier1, identifier2=i2, identifier3=identifier3, params=params)
358365
elif method is 'PATCH':
359-
r = m.patch(identifier1=identifier1, identifier2=i2, data=params)
366+
r = m.patch(identifier1=identifier1, identifier2=i2, identifier3=identifier3, data=params)
360367
elif method is 'POST':
361-
r = m.post(identifier1=identifier1, identifier2=i2, data=params)
368+
r = m.post(identifier1=identifier1, identifier2=i2, identifier3=identifier3, data=params)
362369
elif method is 'PUT':
363-
r = m.put(identifier1=identifier1, identifier2=i2, data=params)
370+
r = m.put(identifier1=identifier1, identifier2=i2, identifier3=identifier3, data=params)
364371
elif method is 'DELETE':
365-
r = m.delete(identifier1=identifier1, identifier2=i2, data=params)
372+
r = m.delete(identifier1=identifier1, identifier2=i2, identifier3=identifier3, data=params)
366373
else:
367374
pass
368375
except CloudFlare.exceptions.CloudFlareAPIError as e:

0 commit comments

Comments
 (0)