diff --git a/mayan/apps/django_gpg/apps.py b/mayan/apps/django_gpg/apps.py index e06598bda7..0b3350fe42 100644 --- a/mayan/apps/django_gpg/apps.py +++ b/mayan/apps/django_gpg/apps.py @@ -26,6 +26,6 @@ class DjangoGPGApp(MayanAppConfig): links=(link_public_keys, link_key_query), sources=( 'django_gpg:key_delete', 'django_gpg:key_public_list', - 'django_gpg:key_query' + 'django_gpg:key_query', 'django_gpg:key_query_results', ) ) diff --git a/mayan/apps/django_gpg/urls.py b/mayan/apps/django_gpg/urls.py index 342f701585..aae4d12c9e 100644 --- a/mayan/apps/django_gpg/urls.py +++ b/mayan/apps/django_gpg/urls.py @@ -2,7 +2,9 @@ from __future__ import unicode_literals from django.conf.urls import patterns, url -from .views import PrivateKeyListView, PublicKeyListView +from .views import ( + KeyQueryView, KeyQueryResultView, PrivateKeyListView, PublicKeyListView +) urlpatterns = patterns( 'django_gpg.views', @@ -10,8 +12,17 @@ urlpatterns = patterns( r'^delete/(?P.+)/(?P\w+)/$', 'key_delete', name='key_delete' ), - url(r'^list/private/$', PrivateKeyListView.as_view(), name='key_private_list'), - url(r'^list/public/$', PublicKeyListView.as_view(), name='key_public_list'), - url(r'^query/$', 'key_query', name='key_query'), + url( + r'^list/private/$', PrivateKeyListView.as_view(), + name='key_private_list' + ), + url( + r'^list/public/$', PublicKeyListView.as_view(), name='key_public_list' + ), + url(r'^query/$', KeyQueryView.as_view(), name='key_query'), + url( + r'^query/results/$', KeyQueryResultView.as_view(), + name='key_query_results' + ), url(r'^receive/(?P.+)/$', 'key_receive', name='key_receive'), ) diff --git a/mayan/apps/django_gpg/views.py b/mayan/apps/django_gpg/views.py index fa75db8b62..0b3aabd715 100644 --- a/mayan/apps/django_gpg/views.py +++ b/mayan/apps/django_gpg/views.py @@ -11,7 +11,7 @@ from django.shortcuts import redirect, render_to_response from django.template import RequestContext from django.utils.translation import ugettext_lazy as _ -from common.generics import SingleObjectListView +from common.generics import SimpleView, SingleObjectListView from common.utils import encapsulate from permissions import Permission @@ -129,71 +129,74 @@ def key_delete(request, fingerprint, key_type): }, context_instance=RequestContext(request)) -def key_query(request): - Permission.check_permissions(request.user, (permission_keyserver_query,)) +class KeyQueryView(SimpleView): + template_name = 'appearance/generic_form.html' + view_permission = permission_keyserver_query - subtemplates_list = [] - term = request.GET.get('term') + def get_form(self): + if ('term' in self.request.GET) and self.request.GET['term'].strip(): + term = self.request.GET['term'] + return KeySearchForm(initial={'term': term}) + else: + return KeySearchForm() - form = KeySearchForm(initial={'term': term}) - subtemplates_list.append( - { - 'name': 'appearance/generic_form_subtemplate.html', - 'context': { - 'title': _('Query key server'), - 'form': form, - 'submit_method': 'GET', - }, + def get_extra_context(self): + return { + 'form': self.get_form(), + 'form_action': reverse('django_gpg:key_query_results'), + 'submit_icon': 'fa fa-search', + 'submit_label': _('Search'), + 'submit_method': 'GET', + 'title': _('Query key server'), } - ) - if term: - results = gpg.query(term) - subtemplates_list.append( - { - 'name': 'appearance/generic_list_subtemplate.html', - 'context': { - 'title': _('results'), - 'object_list': results, - 'hide_object': True, - 'extra_columns': [ - { - 'name': _('ID'), - 'attribute': encapsulate( - lambda item: '...{0}'.format(item.key_id[-16:]) - ), - }, - { - 'name': _('Type'), - 'attribute': 'key_type', - }, - { - 'name': _('Creation date'), - 'attribute': encapsulate( - lambda x: datetime.fromtimestamp(int(x.date)) - ) - }, - { - 'name': _('Expiration date'), - 'attribute': encapsulate( - lambda x: datetime.fromtimestamp(int(x.expires)) if x.expires else _('No expiration') - ) - }, - { - 'name': _('Length'), - 'attribute': 'length', - }, - { - 'name': _('Identities'), - 'attribute': encapsulate( - lambda x: ', '.join(x.uids) - ), - }, - ] + +class KeyQueryResultView(SingleObjectListView): + view_permission = permission_keyserver_query + + def get_extra_context(self): + return { + 'title': _('Key query results'), + 'hide_object': True, + 'extra_columns': ( + { + 'name': _('ID'), + 'attribute': encapsulate( + lambda key: '...{0}'.format(key.key_id[-16:]) + ), }, - } - ) + { + 'name': _('Type'), + 'attribute': 'key_type', + }, + { + 'name': _('Creation date'), + 'attribute': encapsulate( + lambda key: datetime.fromtimestamp(int(key.date)) + ) + }, + { + 'name': _('Expiration date'), + 'attribute': encapsulate( + lambda key: datetime.fromtimestamp(int(key.expires)) if key.expires else _('No expiration') + ) + }, + { + 'name': _('Length'), + 'attribute': 'length', + }, + { + 'name': _('Identities'), + 'attribute': encapsulate( + lambda key: ', '.join(key.uids) + ), + }, + ) + } - return render_to_response('appearance/generic_form.html', { - 'subtemplates_list': subtemplates_list, - }, context_instance=RequestContext(request)) + def get_queryset(self): + term = self.request.GET.get('term') + if term: + return gpg.query(term) + else: + return ()