From 152f3f269aef562061f282857bab2798dc3e1e2c Mon Sep 17 00:00:00 2001
From: Lars Wirzenius
Date: Tue, 20 Nov 2018 10:57:17 +0200
Subject: Add: show users info (ugly)
---
effireg | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
effitool | 8 +++++++-
2 files changed, 65 insertions(+), 4 deletions(-)
diff --git a/effireg b/effireg
index ef12535..c9e9528 100755
--- a/effireg
+++ b/effireg
@@ -105,10 +105,65 @@ class EffiAPI:
Log in
'''
def _logged_in_page(self, cookie):
+ session = self._sessions.find_by_cookie(cookie)
+ if not session:
+ return self._not_logged_in_page()
+
+ members = self._get_members(session.token)
return '''
- You ARE logged in. Cookie is {}
- Log out
- '''.format(cookie)
+ You ARE logged in. Cookie is {}.
+ Token is
{}
+ Log out
+ Members:
{}
+ '''.format(cookie, session.token, json.dumps(members, indent=4))
+
+ def _get_members(self, token):
+ rids = self._find_ids_of_resources_owned_by_user(token)
+ return self._get_resources(token, rids)
+
+ def _find_ids_of_resources_owned_by_user(self, token):
+ url = '{}/search'.format(self._apiurl)
+ cond = {
+ 'cond': [
+ {
+ 'op': '>=',
+ 'where': 'meta',
+ 'field': 'id',
+ 'pattern': '',
+ },
+ ]
+ }
+ headers = {
+ 'Content-Type': 'application/json',
+ 'Authorization': 'Bearer {}'.format(token),
+ }
+
+ logging.debug('Finding owned by user: url=%s headers=%r', url, headers)
+ r = requests.get(url, headers=headers, data=json.dumps(cond))
+ if not r.ok:
+ logging.error('{} {}'.format(r.status_code, r.text))
+ return []
+ obj = r.json()
+ return obj['resources']
+
+ def _get_resources(self, token, rids):
+ return [
+ self._get_resource(token, rid)
+ for rid in rids
+ ]
+
+ def _get_resource(self, token, rid):
+ logging.info('Retrieving resource %s', rid)
+ url = '{}/mem'.format(self._apiurl)
+ headers = {
+ 'Muck-Id': rid,
+ 'Authorization': 'Bearer {}'.format(token),
+ }
+ r = requests.get(url, headers=headers)
+ if not r.ok:
+ logging.error('{} {}'.format(r.status_code, r.text))
+ return {}
+ return r.json()
def _redirect_to_frontpage(self):
headers = {
diff --git a/effitool b/effitool
index 2a3f062..338d960 100755
--- a/effitool
+++ b/effitool
@@ -140,10 +140,13 @@ class EffiAPI:
def new_token(self):
if self._fake:
self._token = 'FAKE'
- else:
+ elif self._token is None:
self._token = self.get_token_with_scopes(all_possible_scopes)
self._http_api.set_token(self._token)
+ def set_token(self, token):
+ self._token = token
+
def get_token(self):
if self._token is None:
self.new_token()
@@ -234,6 +237,8 @@ class EffiTool:
sys.exit('ERROR: Missing command')
api = self._new_api(args, args['fake'])
+ if args['token']:
+ api.set_token(args['token'])
try:
logging.debug('calling %r with %r', func.__name__, args)
value = func(args, api)
@@ -296,6 +301,7 @@ class EffiTool:
parser = argparse.ArgumentParser(description='Manage Effi members')
parser.add_argument('-u', '--url', dest='url', required=True)
+ parser.add_argument('-T', '--token', dest='token', required=False)
parser.add_argument('-t', '--token-url', dest='token_url', required=True)
parser.add_argument('-i', '--client-id', dest='client_id', required=True)
parser.add_argument(
--
cgit v1.2.1