From 0d080c7f5f1913de98396588cfa66438b6a6c08a Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Fri, 25 Jan 2019 10:22:32 +0200 Subject: Add: list-clients --- effitool | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) (limited to 'effitool') diff --git a/effitool b/effitool index c2ee727..97cf205 100755 --- a/effitool +++ b/effitool @@ -78,7 +78,7 @@ class HTTPAPI: def url(self, path): return '{}{}'.format(self._url, path) - def get_json(self, r): + def request_json(self, r): ok = (http.HTTPStatus.OK, http.HTTPStatus.CREATED) status = r.getcode() @@ -96,7 +96,7 @@ class HTTPAPI: def get(self, path): url = self.url(path) with urllib.request.urlopen(url) as r: - return self.get_json(r) + return self.request_json(r) def get_access_token(self, client_id, client_secret, scopes): obj = self.post_form( @@ -104,6 +104,22 @@ class HTTPAPI: grant_type='client_credentials', scope=' '.join(scopes)) return obj['access_token'] + def get_json(self, token, path): + url = self.url(path) + host, port, path = self.parse_url(url) + + headers = { + 'Authorization': 'Bearer {}'.format(token), + } + + req = urllib.request.Request( + url, headers=headers, method='GET') + r = urllib.request.urlopen(req) + return self.request_json(r) + + def get_list(self, token, path): + return self.get_json(token, path) + def post_form(self, path, user, password, **kwargs): url = self.url(path) host, port, path = self.parse_url(url) @@ -117,7 +133,7 @@ class HTTPAPI: req = urllib.request.Request( url, data=data, headers=headers, method='POST') r = urllib.request.urlopen(req) - return self.get_json(r) + return self.request_json(r) def post_json(self, token, path, obj): return self.send_json('POST', token, path, obj) @@ -138,7 +154,7 @@ class HTTPAPI: req = urllib.request.Request( url, data=data, headers=headers, method=method) r = urllib.request.urlopen(req) - return self.get_json(r) + return self.request_json(r) def parse_url(self, url): parse = urllib.parse.urlparse(url) @@ -202,7 +218,6 @@ class Tool: obj = api.get('/status') print('server', name, obj['resources']) - def register_admin_client(self, args): server = self.get_chosen_server(args) token = self.get_admin_token(server) @@ -220,6 +235,16 @@ class Tool: token, '/clients/{}/secret'.format(new_client['id']), new_secret) print('Created new admin client', new_client['id']) + + def list_clients(self, args): + server = self.get_chosen_server(args) + token = self.get_admin_token(server) + api = HTTPAPI(server['url']) + obj = api.get_list(token, '/clients') + for name in obj.get('resources', []): + client = api.get_json(token, '/clients/{}'.format(name)) + del client['hashed_secret'] + print(json.dumps(client, indent=4)) def process_args(config): @@ -232,6 +257,7 @@ def process_args(config): ('--client-id', {'required':True}), ('--client-secret', {'required':True}), ]), + ('list-clients', tool.list_clients, []), ] p = argparse.ArgumentParser() -- cgit v1.2.1