This repository has been archived by the owner on Feb 15, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.py
108 lines (77 loc) · 2.56 KB
/
main.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
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
100
101
102
103
104
105
106
107
108
import json
import treq
from twisted.internet.task import react, Cooperator
from twisted.python import log
from twisted.web import client
import helpers
def cb_deletefilters(resp, args):
counters = json.loads(resp.decode('utf8'))
urls = []
for counter in counters['counters']:
filters = counter.get('filters')
if not filters:
continue
clientip_filters = helpers.get_clientip_filters(filters)
for filter_id in clientip_filters:
url = helpers.get_request_url(
'/management/v1/counter/{}/filter/{}'.format(counter['id'], filter_id),
{'oauth_token': args.token}
)
urls.append(url)
coop = Cooperator()
work = (cb_delete(url) for url in urls)
return coop.coiterate(work)
def cb_addipfilter(resp, args):
counters = json.loads(resp.decode('utf8'))
urls = []
for counter in counters['counters']:
post = {
"filter": {
"attr": "client_ip",
"type": "equal",
"value": args.ip,
"action": args.action,
"status": args.status
}
}
url = helpers.get_request_url(
'/management/v1/counter/{}/filters'.format(counter['id']),
{'oauth_token': args.token}
)
urls.append((url, post))
coop = Cooperator()
work = (cb_post(url, post) for url, post in urls)
return coop.coiterate(work)
def print_response(response):
log.msg(response.code, response.phrase)
log.msg(response.headers)
return treq.text_content(response).addCallback(log.msg)
def cb_post(url, post):
d = treq.post(url, json.dumps(post).encode('utf8'),
headers={b'Content-Type': [b'application/json']})
d.addCallbacks(print_response, log.err)
return d
def cb_delete(url):
d = treq.delete(url)
d.addCallbacks(print_response, log.err)
return d
def cb_counters(args):
params = {
'oauth_token': args.token,
'status': 'Active',
'field': 'filters'
}
url = helpers.get_request_url('/management/v1/counters', params)
d = client.getPage(url)
if args.mode == 'delete':
d.addCallback(cb_deletefilters, args)
elif args.mode == 'add':
d.addCallback(cb_addipfilter, args)
return d
def main(reactor, *args):
cli_args = args[0]
helpers.start_logging_observer(cli_args.logfile)
return cb_counters(cli_args)
if __name__ == "__main__":
parser = helpers.create_argparser()
react(main, [parser.parse_args()])