summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2019-01-25 10:22:32 +0200
committerLars Wirzenius <liw@liw.fi>2019-01-25 10:22:32 +0200
commit0d080c7f5f1913de98396588cfa66438b6a6c08a (patch)
tree4c989e819afde7767473b9177bbbd4d9ebeb7159
parentbac0898baaaf6d18f9ed6010d0c9315439d784cb (diff)
downloadeffitool-0d080c7f5f1913de98396588cfa66438b6a6c08a.tar.gz
Add: list-clients
-rwxr-xr-xeffitool36
1 files changed, 31 insertions, 5 deletions
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()