usernamechanges.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  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.users.models import UsernameChange
  6. from misago.users.rest_permissions import BasePermission
  7. from misago.users.serializers.usernamechange import UsernameChangeSerializer
  8. class UsernameChangesViewSetPermission(BasePermission):
  9. def has_permission(self, request, view):
  10. try:
  11. user_id = int(request.GET.get('user'))
  12. except (ValueError, TypeError):
  13. user_id = -1
  14. if user_id == request.user.pk:
  15. return True
  16. elif not request.user.acl.get('can_see_users_name_history'):
  17. raise PermissionDenied(_("You don't have permission to "
  18. "see other users name history."))
  19. return True
  20. class UsernameChangesViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
  21. permission_classes = (UsernameChangesViewSetPermission,)
  22. serializer_class = UsernameChangeSerializer
  23. queryset = UsernameChange.objects
  24. paginate_by = 20
  25. def get_queryset(self):
  26. queryset = UsernameChange.objects.select_related('user', 'changed_by')
  27. user = self.request.query_params.get('user', None)
  28. if user is not None:
  29. try:
  30. queryset = queryset.filter(user_id=int(user))
  31. except (ValueError, TypeError):
  32. queryset = queryset.none()
  33. return queryset.order_by('-id')