diff options
author | Lars Wirzenius <liw@liw.fi> | 2018-11-20 10:57:17 +0200 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2018-11-20 10:57:17 +0200 |
commit | 152f3f269aef562061f282857bab2798dc3e1e2c (patch) | |
tree | c05f69c9a7e93f055dd666840d64fd1294d2fbd3 | |
parent | 64c3b3c54843b78f217aec79259b406637fc8ea5 (diff) | |
download | effi-reg-152f3f269aef562061f282857bab2798dc3e1e2c.tar.gz |
Add: show users info (ugly)
-rwxr-xr-x | effireg | 61 | ||||
-rwxr-xr-x | effitool | 8 |
2 files changed, 65 insertions, 4 deletions
@@ -105,10 +105,65 @@ class EffiAPI: <a href="/login">Log in</a></p> ''' 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 ''' - <p>You ARE logged in. Cookie is {} - <a href="/logout">Log out</a></p> - '''.format(cookie) + <p>You ARE logged in. Cookie is {}.</p> + <p>Token is <br/><code>{}</code></p> + <p><a href="/logout">Log out</a></p> + <p>Members: <br/>{}</p> + '''.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 = { @@ -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( |