summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xmucktool73
1 files changed, 73 insertions, 0 deletions
diff --git a/mucktool b/mucktool
new file mode 100755
index 0000000..1328e21
--- /dev/null
+++ b/mucktool
@@ -0,0 +1,73 @@
+#!/usr/bin/env python3
+
+import json
+import sys
+
+import requests
+
+
+def get_token(url, client_id, client_secret, scopes):
+ url = '{}/token'.format(url)
+ auth = (client_id, client_secret)
+ data = {
+ 'grant_type': 'client_credentials',
+ 'scope': ' '.join(scopes),
+ }
+
+ r = requests.post(url, auth=auth, data=data)
+ if not r.ok:
+ sys.exit('HTTP error: {} {}'.format(r.status_code, r.text))
+ obj = r.json()
+ return obj[u'access_token']
+
+
+def create(url, token, obj):
+ url = '{}/res'.format(url)
+ headers = get_authz_headers(token)
+ r = requests.post(url, headers=headers, data=obj)
+ if not r.ok:
+ sys.exit('HTTP error: {} {}'.format(r.status_code, r.text))
+ return r.headers['Muck-Id']
+
+
+def show(url, token, rid):
+ url = '{}/res'.format(url)
+ headers = get_authz_headers(token)
+ headers['Muck-Id'] = rid
+ r = requests.get(url, headers=headers)
+ if not r.ok:
+ sys.exit('HTTP error: {} {}'.format(r.status_code, r.text))
+ return r.json()
+
+
+def get_authz_headers(token):
+ return {
+ 'Authorization': 'Bearer {}'.format(token),
+ }
+
+
+args = sys.argv[1:]
+
+base_url = args.pop(0)
+client_id = args.pop(0)
+client_secret = args.pop(0)
+cmd = args.pop(0)
+
+if cmd == 'token':
+ scopes = args
+ token = get_token(base_url, client_id, client_secret, scopes)
+ print(token)
+elif cmd == 'create':
+ obj = args.pop(0)
+ scopes = ['create']
+ token = get_token(base_url, client_id, client_secret, scopes)
+ ret = create(base_url, token, obj)
+ print(ret)
+elif cmd == 'show':
+ rid = args.pop(0)
+ scopes = ['show']
+ token = get_token(base_url, client_id, client_secret, scopes)
+ obj = show(base_url, token, rid)
+ print(obj)
+else:
+ sys.exit('Do not understand')