usernamechanges.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. from django.core.exceptions import PermissionDenied
  2. from django.utils.translation import ugettext as _
  3. from rest_framework import status, viewsets, mixins
  4. from rest_framework.response import Response
  5. from misago.core.apipaginator import ApiPaginator
  6. from misago.users.models import UsernameChange
  7. from misago.users.rest_permissions import BasePermission
  8. from misago.users.serializers.usernamechange import UsernameChangeSerializer
  9. class UsernameChangesViewSetPermission(BasePermission):
  10. def has_permission(self, request, view):
  11. try:
  12. user_id = int(request.GET.get('user'))
  13. except (ValueError, TypeError):
  14. user_id = -1
  15. if user_id == request.user.pk:
  16. return True
  17. elif not request.user.acl.get('can_see_users_name_history'):
  18. raise PermissionDenied(_("You don't have permission to "
  19. "see other users name history."))
  20. return True
  21. class UsernameChangesViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
  22. permission_classes = (UsernameChangesViewSetPermission,)
  23. serializer_class = UsernameChangeSerializer
  24. queryset = UsernameChange.objects
  25. pagination_class = ApiPaginator(20, 5)
  26. def get_queryset(self):
  27. queryset = UsernameChange.objects.select_related('user', 'changed_by')
  28. user = self.request.query_params.get('user', None)
  29. if user is not None:
  30. try:
  31. queryset = queryset.filter(user_id=int(user))
  32. except (ValueError, TypeError):
  33. queryset = queryset.none()
  34. return queryset.order_by('-id')