def create_storage_user(storage: Storage, user: CustomUser, may_read: bool = True, may_write: bool = True, creator: CustomUser = None) -> StorageUser: storage_user = StorageUser( storage=storage, user=user, may_read=may_read, may_write=may_write, created_by=creator, ) storage_user.save() return storage_user
def retrieve(self, request: Request, *args, **kwargs) -> Response: storage = get_object_or_404(Storage.objects.all(), id=kwargs['storage_id']) if not StorageUser.userMayReadStorage(request.user, storage): return Response({'message': Messages.MSG_NO_STORAGE_READ_PERM}, status=status.HTTP_403_FORBIDDEN) file = get_object_or_404(StorageFile.create_storage_queryset( user=request.user, storage=storage), id=kwargs['file_id']) if not file.is_visible_by_user(request.user): return Response({'message': Messages.MSG_NO_FILE_DOWNLOAD_PERM}, status=status.HTTP_403_FORBIDDEN) download = get_object_or_404( StorageFileDownload.objects.filter(storage_file=file), id=kwargs['pk']) serializer = StorageFileDownloadSerializer(download) if serializer.data['expired']: return Response({"message": Messages.MSG_DOWNLOAD_EXPIRED}, status.HTTP_410_GONE) hit = DownloadHit.create_from_download_request(download=download, request=request) return Response(serializer.data, status.HTTP_200_OK)
def retrieve(self, request: Request, storage_id: str, image_id: str, size_tag: str, pk: str) -> Response: storage = get_object_or_404(Storage.objects.all(), id=storage_id) if not StorageUser.userMayReadStorage(request.user, storage): return Response({'message': Messages.MSG_NO_STORAGE_READ_PERM}, status=status.HTTP_403_FORBIDDEN) tag = get_object_or_404(StorageFileImageDimensions.objects.all, tag=size_tag) image_file = get_object_or_404( StorageFileImage.create_storage_queryset(storage=storage, tag=tag), id=image_id) if not image_file.storage_file.is_visible_by_user(request.user): return Response({'message': Messages.MSG_NO_FILE_DOWNLOAD_PERM}, status=status.HTTP_403_FORBIDDEN) download = get_object_or_404(StorageFileDownload.objects.filter( storage_file=image_file.storage_file), id=pk) if download.expires_at > datetime.now(): return Response({"message": Messages.MSG_DOWNLOAD_EXPIRED}, status.HTTP_410_GONE) hit = DownloadHit.create_from_download_request(download=download, request=request) serializer = StorageFileDownloadSerializer(download) return Response(serializer.data, status.HTTP_200_OK)
def partial_update(self, request: Request, *args, **kwargs) -> Response: storage = get_object_or_404(Storage.objects.all(), id=self.kwargs['storage_id']) if not StorageUser.userMayReadStorage(request.user, storage): return Response({'message': Messages.MSG_NO_STORAGE_READ_PERM}, status=status.HTTP_403_FORBIDDEN) return super(StorageFileViewSet, self).partial_update(request=request, *args, **kwargs)
def list(self, request: Request, storage_id: str) -> Response: storage = get_object_or_404(Storage.objects.all(), id=storage_id) if not StorageUser.userMayReadStorage(request.user, storage): return Response({'message': Messages.MSG_NO_STORAGE_READ_PERM}, status=status.HTTP_403_FORBIDDEN) queryset = StorageFile.create_storage_queryset(user=request.user, storage=storage, excluded=True) serializer = StorageFileSerializer(queryset, many=True) return Response(serializer.data)
def destroy(self, request: Request, storage_id: str, pk: str) -> Response: storage = get_object_or_404(Storage.objects.all(), id=storage_id) if not StorageUser.userMayReadStorage(request.user, storage): return Response({'message': Messages.MSG_NO_STORAGE_READ_PERM}, status=status.HTTP_403_FORBIDDEN) queryset = StorageFile.create_storage_queryset(user=request.user, storage=storage, excluded=True) file = get_object_or_404(queryset, pk=pk) file.delete() return Response(status=status.HTTP_204_NO_CONTENT)
def destroy(self, request: Request, *args, **kwargs) -> Response: storage = get_object_or_404(Storage.objects.all(), pk=self.kwargs['storage_id']) if not StorageUser.userMayWriteStorage(self.request.user, storage): return Response({'message': Messages.MSG_NO_STORAGE_WRITE_PERM}, status=status.HTTP_403_FORBIDDEN) file = get_object_or_404(self.get_queryset(), id=self.kwargs['pk']) file.excluded = True file.updated_by = request.user file.save() return Response(status=status.HTTP_204_NO_CONTENT)
def retrieve(self, request: Request, storage_id: str, pk: str) -> Response: storage = get_object_or_404(Storage.objects.all(), id=storage_id) if not StorageUser.userMayReadStorage(request.user, storage): return Response({'message': Messages.MSG_NO_STORAGE_READ_PERM}, status=status.HTTP_403_FORBIDDEN) image_queryset = StorageFileImage.create_storage_queryset( storage=storage, user=request.user) image_file = get_object_or_404(image_queryset, id=pk) if not image_file.storage_file.is_visible_by_user(request.user): return Response({'message': Messages.MSG_NO_FILE_DOWNLOAD_PERM}, status=status.HTTP_403_FORBIDDEN) serializer = StorageFileImageSerializer(image_file) return Response(serializer.data, status.HTTP_200_OK)
def list(self, request: Request, *args, **kwargs) -> Response: storage = get_object_or_404(Storage.objects.all(), id=kwargs['storage_id']) if not StorageUser.userMayReadStorage(request.user, storage): return Response({'message': Messages.MSG_NO_STORAGE_READ_PERM}, status=status.HTTP_403_FORBIDDEN) file = get_object_or_404(StorageFile.create_storage_queryset( user=request.user, storage=storage), id=kwargs['file_id']) if not file.is_visible_by_user(request.user): return Response({'message': Messages.MSG_NO_FILE_DOWNLOAD_PERM}, status=status.HTTP_403_FORBIDDEN) return super(StorageFileDownloadViewSet, self).list(request=request, *args, **kwargs)
def create(self, request: Request, *args, **kwargs) -> Response: storage = get_object_or_404(Storage.objects.all(), id=kwargs['storage_id']) if not StorageUser.userMayReadStorage(request.user, storage): return Response({'message': Messages.MSG_NO_STORAGE_READ_PERM}, status=status.HTTP_403_FORBIDDEN) file = get_object_or_404(StorageFile.create_storage_queryset( user=request.user, storage=storage), id=kwargs['file_id']) if not file.is_visible_by_user(request.user): return Response({'message': Messages.MSG_NO_FILE_DOWNLOAD_PERM}, status=status.HTTP_403_FORBIDDEN) serializer = StorageFileDownloadSerializer(data={ 'storage_file': file.id, 'owner': request.user.id }) serializer.is_valid(raise_exception=True) serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED)
def list(self, request: Request, storage_id: str, image_id: str, size_tag: str) -> Response: storage = get_object_or_404(Storage.objects.all(), id=storage_id) if not StorageUser.userMayReadStorage(request.user, storage): return Response({'message': Messages.MSG_NO_STORAGE_READ_PERM}, status=status.HTTP_403_FORBIDDEN) tag = get_object_or_404(StorageFileImageDimensions.objects.all, tag=size_tag) image_file = get_object_or_404( StorageFileImage.create_storage_queryset(storage=storage, tag=tag), id=image_id) if not image_file.storage_file.is_visible_by_user(request.user): return Response({'message': Messages.MSG_NO_FILE_DOWNLOAD_PERM}, status=status.HTTP_403_FORBIDDEN) download_queryset = StorageFileDownload.objects.filter( owner=request.user, storage_file=image_file.storage_file) download_serializer = StorageFileDownloadSerializer(download_queryset, many=True) return Response(download_serializer.data)
def create(self, request: Request, storage_id: str, image_id: str, size_tag: str) -> Response: storage = get_object_or_404(Storage.objects.all(), id=storage_id) if not StorageUser.userMayReadStorage(request.user, storage): return Response({'message': Messages.MSG_NO_STORAGE_READ_PERM}, status=status.HTTP_403_FORBIDDEN) tag = get_object_or_404(StorageFileImageDimensions.objects.all, tag=size_tag) image_file = get_object_or_404( StorageFileImage.create_storage_queryset(storage=storage, tag=tag), id=image_id) if not image_file.storage_file.is_visible_by_user(request.user): return Response({'message': Messages.MSG_NO_FILE_DOWNLOAD_PERM}, status=status.HTTP_403_FORBIDDEN) serializer = StorageFileDownloadSerializer( data={ 'storage_file': image_file.storage_file.id, 'owner': request.user.id }) serializer.is_valid(raise_exception=True) serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED)