Add list, create, detail and edit API views for detached and embedded signatures. Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com>
253 lines
8.0 KiB
Python
253 lines
8.0 KiB
Python
from __future__ import absolute_import, unicode_literals
|
|
|
|
from django.shortcuts import get_object_or_404
|
|
|
|
from mayan.apps.acls.models import AccessControlList
|
|
from mayan.apps.documents.models import Document
|
|
from mayan.apps.rest_api import generics
|
|
|
|
from .models import DetachedSignature, EmbeddedSignature
|
|
from .permissions import (
|
|
permission_document_version_sign_detached,
|
|
permission_document_version_sign_embedded,
|
|
permission_document_version_signature_delete,
|
|
permission_document_version_signature_view
|
|
)
|
|
from .serializers import (
|
|
DetachedSignatureSerializer, EmbeddedSignatureSerializer
|
|
)
|
|
|
|
|
|
class APIDocumentDetachedSignatureListView(generics.ListCreateAPIView):
|
|
"""
|
|
get: Returns a list of all the detached signatures of a document version.
|
|
post: Create an detached signature for a document version.
|
|
"""
|
|
serializer_class = DetachedSignatureSerializer
|
|
|
|
def get_document(self):
|
|
return get_object_or_404(
|
|
klass=self.get_document_queryset(), pk=self.kwargs['document_id']
|
|
)
|
|
|
|
def get_document_queryset(self):
|
|
if self.request.method == 'GET':
|
|
permission = permission_document_version_signature_view
|
|
elif self.request.method == 'POST':
|
|
permission = permission_document_version_sign_detached
|
|
|
|
return AccessControlList.objects.restrict_queryset(
|
|
permission=permission, queryset=Document.objects.all(),
|
|
user=self.request.user
|
|
)
|
|
|
|
def get_document_version(self):
|
|
return get_object_or_404(
|
|
klass=self.get_document_version_queryset(),
|
|
pk=self.kwargs['document_version_id']
|
|
)
|
|
|
|
def get_document_version_queryset(self):
|
|
return self.get_document().versions.all()
|
|
|
|
def get_queryset(self):
|
|
return DetachedSignature.objects.filter(
|
|
document_version=self.get_document_version()
|
|
)
|
|
|
|
def get_serializer(self, *args, **kwargs):
|
|
if not self.request:
|
|
return None
|
|
|
|
return super(
|
|
APIDocumentDetachedSignatureListView, self
|
|
).get_serializer(*args, **kwargs)
|
|
|
|
def get_serializer_context(self):
|
|
"""
|
|
Extra context provided to the serializer class.
|
|
"""
|
|
context = super(
|
|
APIDocumentDetachedSignatureListView, self
|
|
).get_serializer_context()
|
|
if self.kwargs:
|
|
context.update(
|
|
{
|
|
'document_version': self.get_document_version(),
|
|
}
|
|
)
|
|
|
|
return context
|
|
|
|
|
|
class APIDocumentDetachedSignatureView(generics.RetrieveDestroyAPIView):
|
|
"""
|
|
delete: Delete an detached signature of the selected document.
|
|
get: Returns the details of the selected detached signature.
|
|
"""
|
|
lookup_url_kwarg = 'detached_signature_id'
|
|
serializer_class = DetachedSignatureSerializer
|
|
|
|
def get_document(self):
|
|
return get_object_or_404(
|
|
klass=self.get_document_queryset(), pk=self.kwargs['document_id']
|
|
)
|
|
|
|
def get_document_queryset(self):
|
|
if self.request.method == 'GET':
|
|
permission = permission_document_version_signature_view
|
|
elif self.request.method == 'POST':
|
|
permission = permission_document_version_signature_view
|
|
elif self.request.method == 'DELETE':
|
|
permission = permission_document_version_signature_delete
|
|
|
|
return AccessControlList.objects.restrict_queryset(
|
|
permission=permission, queryset=Document.objects.all(),
|
|
user=self.request.user
|
|
)
|
|
|
|
def get_document_version(self):
|
|
return get_object_or_404(
|
|
klass=self.get_document_version_queryset(),
|
|
pk=self.kwargs['document_version_id']
|
|
)
|
|
|
|
def get_document_version_queryset(self):
|
|
return self.get_document().versions.all()
|
|
|
|
def get_queryset(self):
|
|
return DetachedSignature.objects.filter(
|
|
document_version=self.get_document_version()
|
|
)
|
|
|
|
def get_serializer_context(self):
|
|
"""
|
|
Extra context provided to the serializer class.
|
|
"""
|
|
context = super(APIDocumentDetachedSignatureView, self).get_serializer_context()
|
|
if self.kwargs:
|
|
context.update(
|
|
{
|
|
'document': self.get_document(),
|
|
}
|
|
)
|
|
|
|
return context
|
|
|
|
|
|
class APIDocumentEmbeddedSignatureListView(generics.ListCreateAPIView):
|
|
"""
|
|
get: Returns a list of all the embedded signatures of a document version.
|
|
post: Create an embedded signature for a document version.
|
|
"""
|
|
serializer_class = EmbeddedSignatureSerializer
|
|
|
|
def get_document(self):
|
|
return get_object_or_404(
|
|
klass=self.get_document_queryset(), pk=self.kwargs['document_id']
|
|
)
|
|
|
|
def get_document_queryset(self):
|
|
if self.request.method == 'GET':
|
|
permission = permission_document_version_signature_view
|
|
elif self.request.method == 'POST':
|
|
permission = permission_document_version_sign_embedded
|
|
|
|
return AccessControlList.objects.restrict_queryset(
|
|
permission=permission, queryset=Document.objects.all(),
|
|
user=self.request.user
|
|
)
|
|
|
|
def get_document_version(self):
|
|
return get_object_or_404(
|
|
klass=self.get_document_version_queryset(),
|
|
pk=self.kwargs['document_version_id']
|
|
)
|
|
|
|
def get_document_version_queryset(self):
|
|
return self.get_document().versions.all()
|
|
|
|
def get_queryset(self):
|
|
return EmbeddedSignature.objects.filter(
|
|
document_version=self.get_document_version()
|
|
)
|
|
|
|
def get_serializer(self, *args, **kwargs):
|
|
if not self.request:
|
|
return None
|
|
|
|
return super(
|
|
APIDocumentEmbeddedSignatureListView, self
|
|
).get_serializer(*args, **kwargs)
|
|
|
|
def get_serializer_context(self):
|
|
"""
|
|
Extra context provided to the serializer class.
|
|
"""
|
|
context = super(
|
|
APIDocumentEmbeddedSignatureListView, self
|
|
).get_serializer_context()
|
|
if self.kwargs:
|
|
context.update(
|
|
{
|
|
'document_version': self.get_document_version(),
|
|
}
|
|
)
|
|
|
|
return context
|
|
|
|
|
|
class APIDocumentEmbeddedSignatureView(generics.RetrieveDestroyAPIView):
|
|
"""
|
|
delete: Delete an embedded signature of the selected document.
|
|
get: Returns the details of the selected embedded signature.
|
|
"""
|
|
lookup_url_kwarg = 'embedded_signature_id'
|
|
serializer_class = EmbeddedSignatureSerializer
|
|
|
|
def get_document(self):
|
|
return get_object_or_404(
|
|
klass=self.get_document_queryset(), pk=self.kwargs['document_id']
|
|
)
|
|
|
|
def get_document_queryset(self):
|
|
if self.request.method == 'GET':
|
|
permission = permission_document_version_signature_view
|
|
elif self.request.method == 'POST':
|
|
permission = permission_document_version_signature_view
|
|
elif self.request.method == 'DELETE':
|
|
permission = permission_document_version_signature_delete
|
|
|
|
return AccessControlList.objects.restrict_queryset(
|
|
permission=permission, queryset=Document.objects.all(),
|
|
user=self.request.user
|
|
)
|
|
|
|
def get_document_version(self):
|
|
return get_object_or_404(
|
|
klass=self.get_document_version_queryset(),
|
|
pk=self.kwargs['document_version_id']
|
|
)
|
|
|
|
def get_document_version_queryset(self):
|
|
return self.get_document().versions.all()
|
|
|
|
def get_queryset(self):
|
|
return EmbeddedSignature.objects.filter(
|
|
document_version=self.get_document_version()
|
|
)
|
|
|
|
def get_serializer_context(self):
|
|
"""
|
|
Extra context provided to the serializer class.
|
|
"""
|
|
context = super(APIDocumentEmbeddedSignatureView, self).get_serializer_context()
|
|
if self.kwargs:
|
|
context.update(
|
|
{
|
|
'document': self.get_document(),
|
|
}
|
|
)
|
|
|
|
return context
|