Exemple #1
0
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
Exemple #2
0
    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)
Exemple #3
0
    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)
Exemple #4
0
 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)
Exemple #5
0
 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)
Exemple #6
0
 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)
Exemple #7
0
    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)
Exemple #8
0
    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)
Exemple #9
0
    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)
Exemple #10
0
    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)
Exemple #11
0
    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)
Exemple #12
0
    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)