diff --git a/mayan/apps/document_signatures/apps.py b/mayan/apps/document_signatures/apps.py index d4d0907706..dacb9278e0 100644 --- a/mayan/apps/document_signatures/apps.py +++ b/mayan/apps/document_signatures/apps.py @@ -10,7 +10,7 @@ from django.utils.translation import ugettext_lazy as _ from acls import ModelPermission from common import ( - MayanAppConfig, menu_facet, menu_object, menu_secondary, menu_sidebar + MayanAppConfig, menu_object, menu_sidebar ) from common.widgets import two_state_template from mayan.celery import app diff --git a/mayan/apps/document_signatures/links.py b/mayan/apps/document_signatures/links.py index c49c85a120..b5bb879275 100644 --- a/mayan/apps/document_signatures/links.py +++ b/mayan/apps/document_signatures/links.py @@ -44,7 +44,7 @@ link_document_version_signature_list = Link( link_document_version_signature_download = Link( condition=is_detached_signature, text=_('Download'), - view='signatures:document_signature_download', args='resolved_object.pk', + view='signatures:document_version_signature_download', args='resolved_object.pk', #permissions=(permission_document_version_signature_download,) ) link_document_version_signature_upload = Link( diff --git a/mayan/apps/document_signatures/managers.py b/mayan/apps/document_signatures/managers.py index 41297a0cd4..0c5cf80ca3 100644 --- a/mayan/apps/document_signatures/managers.py +++ b/mayan/apps/document_signatures/managers.py @@ -4,7 +4,7 @@ import logging from django.db import models -from django_gpg.exceptions import DecryptionError, VerificationError +from django_gpg.exceptions import DecryptionError from django_gpg.models import Key logger = logging.getLogger(__name__) diff --git a/mayan/apps/document_signatures/migrations/0005_auto_20160325_0748.py b/mayan/apps/document_signatures/migrations/0005_auto_20160325_0748.py index cc087b93e2..76bbc3bee3 100644 --- a/mayan/apps/document_signatures/migrations/0005_auto_20160325_0748.py +++ b/mayan/apps/document_signatures/migrations/0005_auto_20160325_0748.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import migrations, models +from django.db import migrations class Migration(migrations.Migration): diff --git a/mayan/apps/document_signatures/models.py b/mayan/apps/document_signatures/models.py index 0e78c833fa..942379a483 100644 --- a/mayan/apps/document_signatures/models.py +++ b/mayan/apps/document_signatures/models.py @@ -1,6 +1,5 @@ from __future__ import unicode_literals -from datetime import date import logging import uuid @@ -11,7 +10,7 @@ from django.utils.translation import ugettext_lazy as _ from model_utils.managers import InheritanceManager -from django_gpg.exceptions import DecryptionError, VerificationError +from django_gpg.exceptions import VerificationError from django_gpg.models import Key from documents.models import DocumentVersion @@ -122,7 +121,7 @@ class DetachedSignature(SignatureBaseModel): verify_result = Key.objects.verify_file( file_object=file_object, signature_file=self.signature_file ) - except VerificationError: + except VerificationError as exception: # Not signed logger.debug( 'detached signature verification error; %s', exception diff --git a/mayan/apps/document_signatures/tests/test_models.py b/mayan/apps/document_signatures/tests/test_models.py index fa032d7621..5366c3bac3 100644 --- a/mayan/apps/document_signatures/tests/test_models.py +++ b/mayan/apps/document_signatures/tests/test_models.py @@ -1,9 +1,7 @@ from __future__ import unicode_literals -import os import time -from django.conf import settings from django.core.files import File from django.test import TestCase, override_settings @@ -13,18 +11,10 @@ from documents.tests import TEST_DOCUMENT_PATH, TEST_DOCUMENT_TYPE from ..models import DetachedSignature, EmbeddedSignature -TEST_SIGNED_DOCUMENT_PATH = os.path.join( - settings.BASE_DIR, 'contrib', 'sample_documents', 'mayan_11_1.pdf.gpg' +from .literals import ( + TEST_SIGNED_DOCUMENT_PATH, TEST_SIGNATURE_FILE_PATH, TEST_KEY_FILE, + TEST_KEY_ID, TEST_SIGNATURE_ID ) -TEST_SIGNATURE_FILE_PATH = os.path.join( - settings.BASE_DIR, 'contrib', 'sample_documents', 'mayan_11_1.pdf.sig' -) -TEST_KEY_FILE = os.path.join( - settings.BASE_DIR, 'contrib', 'sample_documents', - 'key0x5F3F7F75D210724D.asc' -) -TEST_KEY_ID = '5F3F7F75D210724D' -TEST_SIGNATURE_ID = 'XVkoGKw35yU1iq11dZPiv7uAY7k' @override_settings(OCR_AUTO_OCR=False) @@ -70,7 +60,7 @@ class DocumentSignaturesTestCase(TestCase): self.assertEqual(signature.signature_id, None) with open(TEST_KEY_FILE) as file_object: - key = Key.objects.create(key_data=file_object.read()) + Key.objects.create(key_data=file_object.read()) signature = EmbeddedSignature.objects.first() @@ -223,7 +213,7 @@ class DocumentSignaturesTestCase(TestCase): def test_document_no_signature(self): with open(TEST_DOCUMENT_PATH) as file_object: - document = self.document_type.new_document( + self.document_type.new_document( file_object=file_object ) diff --git a/mayan/apps/document_signatures/views.py b/mayan/apps/document_signatures/views.py index e3256661c5..e47da28d8d 100644 --- a/mayan/apps/document_signatures/views.py +++ b/mayan/apps/document_signatures/views.py @@ -1,6 +1,5 @@ from __future__ import absolute_import, unicode_literals -from datetime import datetime import logging from django.conf import settings @@ -10,15 +9,13 @@ from django.core.urlresolvers import reverse from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404, render_to_response from django.template import RequestContext -from django.utils.html import escape from django.utils.translation import ugettext_lazy as _ from acls.models import AccessControlList from common.generics import ( SingleObjectDeleteView, SingleObjectDetailView, SingleObjectListView ) -from django_gpg.literals import SIGNATURE_STATE_NONE, SIGNATURE_STATES -from documents.models import Document, DocumentVersion +from documents.models import DocumentVersion from filetransfers.api import serve_file from permissions import Permission @@ -55,6 +52,8 @@ class DocumentVersionSignatureDeleteView(SingleObjectDeleteView): class DocumentVersionSignatureDetailView(SingleObjectDetailView): form_class = DocumentVersionSignatureDetailForm + object_permission = permission_document_version_signature_view + object_permission_related = 'document_version.document' def get_extra_context(self): return { @@ -73,6 +72,9 @@ class DocumentVersionSignatureDetailView(SingleObjectDetailView): class DocumentVersionSignatureListView(SingleObjectListView): + object_permission = permission_document_version_signature_view + object_permission_related = 'document_version.document' + def get_document_version(self): return get_object_or_404(DocumentVersion, pk=self.kwargs['pk']) @@ -149,8 +151,8 @@ def document_version_signature_upload(request, pk): }, context_instance=RequestContext(request)) -def document_signature_download(request, document_pk): - document = get_object_or_404(Document, pk=document_pk) +def document_signature_download(request, pk): + signature = get_object_or_404(DetachedSignature, pk=pk) try: Permission.check_permissions( @@ -158,22 +160,13 @@ def document_signature_download(request, document_pk): ) except PermissionDenied: AccessControlList.objects.check_access( - permission_document_version_signature_download, request.user, document + permission_document_version_signature_download, request.user, + signature.document_version.signature ) - try: - if DocumentVersionSignature.objects.has_detached_signature(document.latest_version): - signature = DocumentVersionSignature.objects.detached_signature( - document.latest_version - ) - return serve_file( - request, - signature, - save_as='"%s.sig"' % document.filename, - content_type='application/octet-stream' - ) - except Exception as exception: - messages.error(request, exception) - return HttpResponseRedirect(request.META['HTTP_REFERER']) - - return HttpResponseRedirect(request.META['HTTP_REFERER']) + return serve_file( + request, + signature, + save_as='"%s.sig"' % signature.document_version.document, + content_type='application/octet-stream' + ) diff --git a/mayan/apps/documents/links.py b/mayan/apps/documents/links.py index 33ab42f630..6b64e5fb2b 100644 --- a/mayan/apps/documents/links.py +++ b/mayan/apps/documents/links.py @@ -18,7 +18,7 @@ from .settings import setting_zoom_max_level, setting_zoom_min_level def is_not_current_version(context): - return context['object'].document.latest_version.timestamp != context['object'].timestamp + return context['resolved_object'].document.latest_version.timestamp != context['resolved_object'].timestamp def is_first_page(context): diff --git a/mayan/apps/documents/tests/test_views.py b/mayan/apps/documents/tests/test_views.py index 7eaeec594f..d952db9aab 100644 --- a/mayan/apps/documents/tests/test_views.py +++ b/mayan/apps/documents/tests/test_views.py @@ -49,7 +49,7 @@ class GenericDocumentViewTestCase(GenericViewTestCase): with open(TEST_SMALL_DOCUMENT_PATH) as file_object: self.document = self.document_type.new_document( - file_object=file_object, label='mayan_11_1.pdf' + file_object=file_object ) def tearDown(self):