diff options
Diffstat (limited to 'effireg')
-rwxr-xr-x | effireg | 50 |
1 files changed, 37 insertions, 13 deletions
@@ -23,6 +23,7 @@ import urllib import uuid import bottle +import jinja2 import requests @@ -39,7 +40,7 @@ class EffiAPI: 'super', ] - def __init__(self, app, our_url, apiurl, client_id, client_secret): + def __init__(self, app, our_url, apiurl, client_id, client_secret, template_dir): self._add_routes(app) self._our_url = our_url self._apiurl = apiurl @@ -48,6 +49,7 @@ class EffiAPI: self._client_id = client_id self._client_secret = client_secret self._sessions = Sessions() + self._pagemaker = PageMaker(template_dir) def _add_routes(self, bottleapp): routes = [ @@ -100,22 +102,24 @@ class EffiAPI: return self._logged_in_page(cookie) def _not_logged_in_page(self): - return ''' - <p>You are NOT logged in. - <a href="/login">Log in</a></p> - ''' + return self._pagemaker.page('not-logged-in', {'foo': 'bar'}) + 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 {}.</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)) + if not members: + return self._not_logged_in_page() + + return self._pagemaker.page( + 'logged-in', + { + 'cookie': session.cookie, + 'token': session.token, + 'member': members[0], + }) def _get_members(self, token): rids = self._find_ids_of_resources_owned_by_user(token) @@ -251,6 +255,25 @@ class EffiAPI: return None +class PageMaker: + + def __init__(self, dirname): + self._dirname = os.path.abspath(dirname) + + def page(self, basename, variables): + logging.debug( + 'PageMaker: dirname=%s basename=%s variables=%r', + self._dirname, basename, variables) + loader = jinja2.FileSystemLoader(self._dirname) + env = jinja2.Environment( + loader=loader, + autoescape=lambda foo: True, + extensions=['jinja2.ext.autoescape']) + + template = env.get_template('{}.j2'.format(basename)) + return template.render(**variables) + + class Session: def __init__(self): @@ -304,7 +327,8 @@ def main(): app = bottle.default_app() api = EffiAPI( app, config['our-url'], config['api-url'], - config['client-id'], config['client-secret']) + config['client-id'], config['client-secret'], + config['templates']) app.run(host='127.0.0.1', port=8181) |