diff --git a/calefaction/auth.py b/calefaction/auth.py index dc77bcf..974e46c 100644 --- a/calefaction/auth.py +++ b/calefaction/auth.py @@ -282,6 +282,22 @@ class AuthManager: self._update_prop_cache(module, prop, value) return True + def get_token(self): + """Return a valid token for the current character, or None. + + Assuming this is called in a restricted route (following a True result + from is_authenticated), this function makes no API calls and should + always succeed. If it is called in other circumstances, it may fail and + return None. + """ + cid = self.get_character_id() + if not cid: + return None + + if not hasattr(g, "_cached_token"): + g._cached_token = self._get_token(cid) + return g._cached_token + def is_authenticated(self): """Return whether the user has permission to access this site. @@ -308,6 +324,7 @@ class AuthManager: self._debug("Access granted for char id=%d session id=%d", cid, session["id"]) g.db.touch_session(session["id"]) + g._cached_token = token return True def make_login_link(self): diff --git a/calefaction/modules/members.py b/calefaction/modules/members.py index 1ae7c29..e1bbe13 100644 --- a/calefaction/modules/members.py +++ b/calefaction/modules/members.py @@ -1,8 +1,42 @@ # -*- coding: utf-8 -*- -# ... +from collections import namedtuple + +from flask import g +from flask_mako import render_template + +from ._provided import blueprint SCOPES = {"esi-corporations.read_corporation_membership.v1"} +_Member = namedtuple("_Member", ["id", "name"]) + +def get_members(): + """Return a list of the members of the user's corporation. + + Members are returned as 2-namedtuples of (id, name). An empty list is + returned if there was some error with tokens. + """ + token = g.auth.get_token() + if not token: + return [] + + corp_id = g.config.get("corp.id") + resp = g.eve.esi(token).v2.corporations(corp_id).members.get() + cids = ",".join(str(item["character_id"]) for item in resp) + resp = g.eve.esi(token).v1.characters.names.get(character_ids=cids) + return [_Member(item["character_id"], item["character_name"]) + for item in resp] + +def home(): + """Render and return the main members page.""" + return render_template("members/members.mako", members=get_members()) + def navitem(): - return "Members" + """Render and return the navigation item for this module.""" + return render_template("members/navitem.mako").decode("utf8") + +@blueprint.rroute("/members") +def members(): + """Render and return the main members page.""" + return home() diff --git a/templates/campaigns/campaign.mako b/templates/campaigns/campaign.mako index a38bbf8..a1b5c5d 100644 --- a/templates/campaigns/campaign.mako +++ b/templates/campaigns/campaign.mako @@ -1,7 +1,7 @@ <%inherit file="../_default.mako"/> -%if current: +% if current:

Campaign: ${current}

Hello! ...

-%else: +% else:

No campaigns currently.

-%endif +% endif diff --git a/templates/members/members.mako b/templates/members/members.mako new file mode 100644 index 0000000..b34c607 --- /dev/null +++ b/templates/members/members.mako @@ -0,0 +1,11 @@ +<%inherit file="../_default.mako"/> +

Members

+ + diff --git a/templates/members/navitem.mako b/templates/members/navitem.mako new file mode 100644 index 0000000..aa30389 --- /dev/null +++ b/templates/members/navitem.mako @@ -0,0 +1 @@ +Members