Source code for profiles.views

"""
Views to manage user profiles.
"""

from django.contrib.auth import get_user_model
from django.http import JsonResponse
from django.views.generic import TemplateView
from django.views.generic.detail import DetailView

from rest_framework.authtoken.models import Token

from applications.models import Application
from datasources.models import DataSource
from profiles.permissions import SelfOrAdminPermissionMixin


[docs]class IndexView(TemplateView): template_name = 'index.html'
[docs] def get_context_data(self, **kwargs): """ Add recent Applications and DataSources to index page. :return: Django context dictionary """ context = super().get_context_data(**kwargs) context['datasources'] = DataSource.objects.order_by('-external_requests')[:6] context['applications'] = Application.objects.order_by('-id')[:3] return context
[docs]class UserProfileView(DetailView): template_name = 'profiles/user/profile.html' context_object_name = 'user'
[docs] def get_object(self, queryset=None): return self.request.user
[docs] def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) return context
[docs]class UserUriView(DetailView): """ View providing verification that a PEDASI User URI exists. """ model = get_user_model()
[docs] def render_to_response(self, context, **response_kwargs): return JsonResponse({ 'status': 'success', 'data': { 'user': { 'pk': self.object.pk, } } })
[docs]class UserInactiveView(TemplateView): template_name = 'profiles/user/inactive.html'
[docs]class UserManageTokenView(SelfOrAdminPermissionMixin, DetailView): """ Manage an API Token for the requested user. """ model = get_user_model()
[docs] def render_to_response(self, context, **response_kwargs): """ Get an existing API Token or create a new one for the requested user. :return: JSON containing Token key """ api_token, created = Token.objects.get_or_create(user=self.object) return JsonResponse({ 'status': 'success', 'data': { 'token': { 'key': api_token.key } } })
[docs] def delete(self, request, *args, **kwargs): """ Revoke an API Token for the requested user. """ self.object = self.get_object() self.object.revoke_auth_token() return JsonResponse({ 'status': 'success', 'data': { 'token': None, } })