Skip to content
Snippets Groups Projects
Commit 6f32fc4e authored by jan.bednarik's avatar jan.bednarik
Browse files

Query for viewer everywhere.

parent bc7ccda5
No related branches found
No related tags found
No related merge requests found
...@@ -12,7 +12,7 @@ class QueryError(Exception): ...@@ -12,7 +12,7 @@ class QueryError(Exception):
pass pass
def post_query(api_url, query, *, token=None): def post_query(api_url, query, token=None):
if token is not None: if token is not None:
headers = {'Authorization': 'Bearer {}'.format(token)} headers = {'Authorization': 'Bearer {}'.format(token)}
else: else:
...@@ -54,7 +54,25 @@ def pythonize_report(report): ...@@ -54,7 +54,25 @@ def pythonize_report(report):
return report return report
def search_reports(api_url, slice): def get_viewer_from_data(data):
viewer = data.get('viewer')
if viewer is None:
return None
return pythonize_user(viewer)
VIEWER = """
viewer {
id
name
email
openidUid
extra
}
"""
def search_reports(api_url, slice, *, token=None, viewer=VIEWER):
if 'after' in slice: if 'after' in slice:
slice_info = """(query:"{query}", first:{first}, after:"{after}")""".format(**slice) slice_info = """(query:"{query}", first:{first}, after:"{after}")""".format(**slice)
else: else:
...@@ -82,18 +100,20 @@ def search_reports(api_url, slice): ...@@ -82,18 +100,20 @@ def search_reports(api_url, slice):
}} }}
}} }}
}} }}
{viewer}
}} }}
""".format(slice=slice_info) """.format(slice=slice_info, viewer=viewer)
data = post_query(api_url, query) data = post_query(api_url, query, token)
search = data['searchReports'] search = data['searchReports']
for edge in search['edges']: for edge in search['edges']:
edge['node'] = pythonize_report(edge['node']) edge['node'] = pythonize_report(edge['node'])
return search viewer = get_viewer_from_data(data)
return search, viewer
def get_report(api_url, id): def get_report(api_url, id, *, token=None, viewer=VIEWER):
query = """ query = """
query {{ query {{
node (id:"{id}") {{ node (id:"{id}") {{
...@@ -113,18 +133,20 @@ def get_report(api_url, id): ...@@ -113,18 +133,20 @@ def get_report(api_url, id):
}} }}
}} }}
}} }}
{viewer}
}} }}
""".format(id=encode_global_id('Report', id)) """.format(id=encode_global_id('Report', id), viewer=viewer)
data = post_query(api_url, query) data = post_query(api_url, query, token)
report = data['node'] report = data['node']
if report is None: if report is None:
raise NotFoundError() raise NotFoundError()
return pythonize_report(report) viewer = get_viewer_from_data(data)
return pythonize_report(report), viewer
def get_user(api_url, id): def get_user(api_url, id, *, token=None, viewer=VIEWER):
query = """ query = """
query {{ query {{
node (id:"{id}") {{ node (id:"{id}") {{
...@@ -134,18 +156,20 @@ def get_user(api_url, id): ...@@ -134,18 +156,20 @@ def get_user(api_url, id):
extra extra
}} }}
}} }}
{viewer}
}} }}
""".format(id=encode_global_id('User', id)) """.format(id=encode_global_id('User', id), viewer=viewer)
data = post_query(api_url, query) data = post_query(api_url, query, token)
user = data['node'] user = data['node']
if user is None: if user is None:
raise NotFoundError() raise NotFoundError()
return pythonize_user(user) viewer = get_viewer_from_data(data)
return pythonize_user(user), viewer
def get_user_with_reports(api_url, id, slice): def get_user_with_reports(api_url, id, slice, *, token=None, viewer=VIEWER):
if 'after' in slice: if 'after' in slice:
slice_info = """(first:{first}, after:"{after}")""".format(**slice) slice_info = """(first:{first}, after:"{after}")""".format(**slice)
else: else:
...@@ -175,9 +199,10 @@ def get_user_with_reports(api_url, id, slice): ...@@ -175,9 +199,10 @@ def get_user_with_reports(api_url, id, slice):
}} }}
}} }}
}} }}
{viewer}
}} }}
""".format(id=encode_global_id('User', id), slice=slice_info) """.format(id=encode_global_id('User', id), slice=slice_info, viewer=viewer)
data = post_query(api_url, query) data = post_query(api_url, query, token)
user = data['node'] user = data['node']
if user is None: if user is None:
...@@ -194,25 +219,20 @@ def get_user_with_reports(api_url, id, slice): ...@@ -194,25 +219,20 @@ def get_user_with_reports(api_url, id, slice):
'extra': user['extra'], 'extra': user['extra'],
} }
return user viewer = get_viewer_from_data(data)
return user, viewer
def get_viewer(api_url, *, token=None): def get_viewer(api_url, *, token=None, viewer=VIEWER):
query = """ query = """
query { query {{
viewer { {viewer}
id }}
name """.format(viewer=viewer)
email data = post_query(api_url, query, token)
openidUid
extra
}
}
"""
data = post_query(api_url, query, token=token)
user = data['viewer'] viewer = get_viewer_from_data(data)
if user is None: if viewer is None:
raise NotFoundError() raise NotFoundError()
return pythonize_user(user) return viewer
...@@ -6,21 +6,21 @@ ...@@ -6,21 +6,21 @@
<h5 class="mb-3">Profil</h5> <h5 class="mb-3">Profil</h5>
<div class="border rounded bg-light py-2 px-0"> <div class="border rounded bg-light py-2 px-0">
<div class="d-flex"> <div class="d-flex">
<div class="px-3 text-right" style="min-width: 14em"><small class="text-muted">jméno:</small></div> <div class="px-3 text-right" style="min-width: 14em"><small class="text-muted">OpenID:</small></div>
<div class="">{{ user.name }}</div> <div>{{ viewer.openidUid }}</div>
</div> </div>
<div class="d-flex"> <div class="d-flex">
<div class="px-3 text-right" style="min-width: 14em"><small class="text-muted">OpenID:</small></div> <div class="px-3 text-right" style="min-width: 14em"><small class="text-muted">jméno:</small></div>
<div class="">{{ user.openidUid }}</div> <div>{{ viewer.name }}</div>
</div> </div>
<div class="d-flex"> <div class="d-flex">
<div class="px-3 text-right" style="min-width: 14em"><small class="text-muted">email:</small></div> <div class="px-3 text-right" style="min-width: 14em"><small class="text-muted">email:</small></div>
<div class="">{{ user.email }}</div> <div>{{ viewer.email }}</div>
</div> </div>
{% if user.extra.login %} {% if viewer.extra.login %}
<div class="d-flex pt-1"> <div class="d-flex pt-1">
<div class="px-3 text-right" style="min-width: 14em"><small class="text-muted">profil na Pirátském fóru:</small></div> <div class="px-3 text-right" style="min-width: 14em"><small class="text-muted">profil na Pirátském fóru:</small></div>
<div class=""><a href="{{ user.extra.link }}">{{ user.extra.login }}</a></div> <div><a href="{{ viewer.extra.link }}">{{ viewer.extra.login }}</a></div>
</div> </div>
{% endif %} {% endif %}
</div> </div>
......
...@@ -22,9 +22,11 @@ ...@@ -22,9 +22,11 @@
</form> </form>
<ul class="navbar-nav"> <ul class="navbar-nav">
<li class="nav-item"> {% if viewer %}
<a class="nav-link" href="{% url 'login' %}">přihlášení</a> <li class="nav-item"><a class="nav-link" href="{% url 'account' %}">profil</a></li>
</li> {% else %}
<li class="nav-item"><a class="nav-link" href="{% url 'login' %}">přihlášení</a></li>
{% endif %}
</ul> </ul>
</div> </div>
......
...@@ -18,11 +18,16 @@ from .utils import get_page_info ...@@ -18,11 +18,16 @@ from .utils import get_page_info
REPORTS_PER_PAGE = 10 REPORTS_PER_PAGE = 10
def get_token(request):
return request.COOKIES.get(settings.ACCESS_TOKEN_COOKIE)
class IndexView(TemplateView): class IndexView(TemplateView):
template_name = 'core/index.html' template_name = 'core/index.html'
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(IndexView, self).get_context_data(**kwargs) context = super(IndexView, self).get_context_data(**kwargs)
token = get_token(self.request)
query = '' query = ''
form = SearchForm(self.request.GET) form = SearchForm(self.request.GET)
...@@ -44,7 +49,8 @@ class IndexView(TemplateView): ...@@ -44,7 +49,8 @@ class IndexView(TemplateView):
else: else:
slice = {'query': query, 'first': REPORTS_PER_PAGE} slice = {'query': query, 'first': REPORTS_PER_PAGE}
search = queries.search_reports(settings.OPENLOBBY_API_URL, slice) search, viewer = queries.search_reports(settings.OPENLOBBY_API_URL, slice, token=token)
context['viewer'] = viewer
context['reports'] = [edge['node'] for edge in search['edges']] context['reports'] = [edge['node'] for edge in search['edges']]
context['total_reports'] = search['totalCount'] context['total_reports'] = search['totalCount']
...@@ -70,10 +76,15 @@ class ReportView(TemplateView): ...@@ -70,10 +76,15 @@ class ReportView(TemplateView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(ReportView, self).get_context_data(**kwargs) context = super(ReportView, self).get_context_data(**kwargs)
token = get_token(self.request)
try: try:
context['report'] = queries.get_report(settings.OPENLOBBY_API_URL, kwargs['id']) report, viewer = queries.get_report(settings.OPENLOBBY_API_URL, kwargs['id'], token=token)
except queries.NotFoundError: except queries.NotFoundError:
raise Http404() raise Http404()
context['report'] = report
context['viewer'] = viewer
return context return context
...@@ -82,6 +93,7 @@ class UserView(TemplateView): ...@@ -82,6 +93,7 @@ class UserView(TemplateView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(UserView, self).get_context_data(**kwargs) context = super(UserView, self).get_context_data(**kwargs)
token = get_token(self.request)
id = kwargs['id'] id = kwargs['id']
page = int(kwargs.get('page', 1)) page = int(kwargs.get('page', 1))
...@@ -92,11 +104,12 @@ class UserView(TemplateView): ...@@ -92,11 +104,12 @@ class UserView(TemplateView):
slice = {'first': REPORTS_PER_PAGE} slice = {'first': REPORTS_PER_PAGE}
try: try:
user = queries.get_user_with_reports(settings.OPENLOBBY_API_URL, id, slice) user, viewer = queries.get_user_with_reports(settings.OPENLOBBY_API_URL, id, slice, token=token)
except queries.NotFoundError: except queries.NotFoundError:
raise Http404() raise Http404()
context['user'] = user context['user'] = user
context['viewer'] = viewer
context['reports'] = [edge['node'] for edge in user['reports']['edges']] context['reports'] = [edge['node'] for edge in user['reports']['edges']]
context['total_reports'] = user['reports']['totalCount'] context['total_reports'] = user['reports']['totalCount']
...@@ -148,12 +161,12 @@ class AccountView(TemplateView): ...@@ -148,12 +161,12 @@ class AccountView(TemplateView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(AccountView, self).get_context_data(**kwargs) context = super(AccountView, self).get_context_data(**kwargs)
token = self.request.COOKIES.get(settings.ACCESS_TOKEN_COOKIE) token = get_token(self.request)
try: try:
user = queries.get_viewer(settings.OPENLOBBY_API_URL, token=token) viewer = queries.get_viewer(settings.OPENLOBBY_API_URL, token=token)
except queries.NotFoundError: except queries.NotFoundError:
raise Http404() raise Http404()
context['user'] = user context['viewer'] = viewer
return context return context
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment