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