Include profile context var for loggued users.

This commit is contained in:
Santiago Lamora 2019-12-10 13:04:04 +01:00
parent c464c7bb28
commit 5abdcd56db
4 changed files with 22 additions and 6 deletions

View File

@ -4,6 +4,9 @@ import urllib.parse
from django.conf import settings from django.conf import settings
from django.urls.exceptions import NoReverseMatch from django.urls.exceptions import NoReverseMatch
from .models import UserAccount
DOMAINS_PATH = 'domains/' DOMAINS_PATH = 'domains/'
TOKEN_PATH = '/api-token-auth/' TOKEN_PATH = '/api-token-auth/'
@ -75,9 +78,12 @@ class Orchestra(object):
_, output = self.request("GET", pattern_name) _, output = self.request("GET", pattern_name)
return output return output
def retreve_profile(self): def retrieve_profile(self):
_, output = self.request("GET", 'my-account') status, output = self.request("GET", 'my-account')
return output if status >= 400:
raise PermissionError("Cannot retrieve profile of an anonymous user.")
return UserAccount.new_from_json(output[0])
def verify_credentials(self): def verify_credentials(self):
""" """

View File

@ -46,6 +46,11 @@ class ExtendedPaginationMixin:
class UserTokenRequiredMixin(UserPassesTestMixin): class UserTokenRequiredMixin(UserPassesTestMixin):
"""
Checks that the request has a token that authenticates him/her.
If the user is logged adds context variable 'profile' with its information.
"""
def test_func(self): def test_func(self):
"""Check that the user has an authorized token.""" """Check that the user has an authorized token."""
token = self.request.session.get(SESSION_KEY_TOKEN, None) token = self.request.session.get(SESSION_KEY_TOKEN, None)
@ -60,3 +65,10 @@ class UserTokenRequiredMixin(UserPassesTestMixin):
return False return False
return True return True
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context.update({
'profile': self.orchestra.retrieve_profile(),
})
return context

View File

@ -59,7 +59,7 @@
<div class="dropdown dropright"> <div class="dropdown dropright">
<button type="button" class="btn btn-primary nav-link text-light w-100" data-toggle="dropdown"> <button type="button" class="btn btn-primary nav-link text-light w-100" data-toggle="dropdown">
<img id="user-avatar" class="float-right" width="64" height="64" src="{% static "musician/images/default-profile-picture.png" %}" alt="user-profile-picture"/> <img id="user-avatar" class="float-right" width="64" height="64" src="{% static "musician/images/default-profile-picture.png" %}" alt="user-profile-picture"/>
<strong>{{ user.username|default:"Username" }}</strong><br/> <strong>{{ profile.username }}</strong><br/>
<i class="fas fa-cog"></i> Settings <i class="fas fa-cog"></i> Settings
</button> </button>
<div class="dropdown-menu"> <div class="dropdown-menu">

View File

@ -60,14 +60,12 @@ class ProfileView(CustomContextMixin, UserTokenRequiredMixin, TemplateView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
json_data = self.orchestra.retreve_profile()
try: try:
pay_source = self.orchestra.retrieve_service_list( pay_source = self.orchestra.retrieve_service_list(
PaymentSource.api_name)[0] PaymentSource.api_name)[0]
except IndexError: except IndexError:
pay_source = {} pay_source = {}
context.update({ context.update({
'profile': UserAccount.new_from_json(json_data[0]),
'payment': PaymentSource.new_from_json(pay_source) 'payment': PaymentSource.new_from_json(pay_source)
}) })