summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2018-11-20 10:57:17 +0200
committerLars Wirzenius <liw@liw.fi>2018-11-20 10:57:17 +0200
commit152f3f269aef562061f282857bab2798dc3e1e2c (patch)
treec05f69c9a7e93f055dd666840d64fd1294d2fbd3
parent64c3b3c54843b78f217aec79259b406637fc8ea5 (diff)
downloadeffi-reg-152f3f269aef562061f282857bab2798dc3e1e2c.tar.gz
Add: show users info (ugly)
-rwxr-xr-xeffireg61
-rwxr-xr-xeffitool8
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:
<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 = {
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(