Remove python-hkp dependency. Closes gh-issue #170
This commit is contained in:
@@ -9,7 +9,6 @@ try:
|
||||
except ImportError:
|
||||
from StringIO import StringIO
|
||||
|
||||
from hkp import KeyServer
|
||||
import gnupg
|
||||
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
@@ -20,6 +19,16 @@ from .literals import KEY_TYPES
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class KeyStub(object):
|
||||
def __init__(self, raw):
|
||||
self.key_id = raw['keyid']
|
||||
self.key_type = raw['type']
|
||||
self.date = raw['date']
|
||||
self.expires = raw['expires']
|
||||
self.length = raw['length']
|
||||
self.uids = raw['uids']
|
||||
|
||||
|
||||
class Key(object):
|
||||
@staticmethod
|
||||
def get_key_id(fingerprint):
|
||||
@@ -268,14 +277,8 @@ class GPG(object):
|
||||
def query(self, term):
|
||||
results = {}
|
||||
for keyserver in self.keyservers:
|
||||
url = 'http://%s' % keyserver
|
||||
server = KeyServer(url)
|
||||
try:
|
||||
key_list = server.search(term)
|
||||
for key in key_list:
|
||||
results[key.keyid] = key
|
||||
except:
|
||||
pass
|
||||
for key_data in self.gpg.search_keys(query=term, keyserver=keyserver):
|
||||
results[key_data['keyid']] = KeyStub(raw=key_data)
|
||||
|
||||
return results.values()
|
||||
|
||||
|
||||
@@ -3,11 +3,9 @@ from __future__ import unicode_literals
|
||||
from django import apps
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from hkp import Key as KeyServerKey
|
||||
|
||||
from common import menu_object, menu_setup, menu_sidebar
|
||||
|
||||
from .api import Key
|
||||
from .api import Key, KeyStub
|
||||
from .links import (
|
||||
link_key_delete, link_key_query, link_key_receive, link_key_setup,
|
||||
link_public_keys
|
||||
@@ -20,6 +18,6 @@ class DjangoGPGApp(apps.AppConfig):
|
||||
|
||||
def ready(self):
|
||||
menu_object.bind_links(links=[link_key_delete], sources=[Key])
|
||||
menu_object.bind_links(links=[link_key_receive], sources=[KeyServerKey])
|
||||
menu_object.bind_links(links=[link_key_receive], sources=[KeyStub])
|
||||
menu_setup.bind_links(links=[link_key_setup])
|
||||
menu_sidebar.bind_links(links=[link_public_keys, link_key_query], sources=['django_gpg:key_delete', 'django_gpg:key_public_list', 'django_gpg:key_query'])
|
||||
|
||||
@@ -13,5 +13,5 @@ link_private_keys = Link(icon='fa fa-key', permissions=[PERMISSION_KEY_VIEW], te
|
||||
link_public_keys = Link(icon='fa fa-key', permissions=[PERMISSION_KEY_VIEW], text=_('Public keys'), view='django_gpg:key_public_list')
|
||||
link_key_delete = Link(permissions=[PERMISSION_KEY_DELETE], text=_('Delete'), view='django_gpg:key_delete', args=['object.fingerprint', 'object.type'])
|
||||
link_key_query = Link(text=_('Query keyservers'), view='django_gpg:key_query', permissions=[PERMISSION_KEYSERVER_QUERY])
|
||||
link_key_receive = Link(keep_query=True, permissions=[PERMISSION_KEY_RECEIVE], text=_('Import'), view='django_gpg:key_receive', args='object.keyid')
|
||||
link_key_receive = Link(keep_query=True, permissions=[PERMISSION_KEY_RECEIVE], text=_('Import'), view='django_gpg:key_receive', args='object.key_id')
|
||||
link_key_setup = Link(icon='fa fa-key', permissions=[PERMISSION_KEY_VIEW], text=_('Key management'), view='django_gpg:key_public_list')
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from datetime import datetime
|
||||
import logging
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib import messages
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.http import HttpResponseRedirect
|
||||
from django.shortcuts import render_to_response
|
||||
from django.shortcuts import redirect, render_to_response
|
||||
from django.template import RequestContext
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
@@ -28,33 +29,35 @@ logger = logging.getLogger(__name__)
|
||||
def key_receive(request, key_id):
|
||||
Permission.objects.check_permissions(request.user, [PERMISSION_KEY_RECEIVE])
|
||||
|
||||
post_action_redirect = None
|
||||
previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))))
|
||||
next = request.POST.get('next', request.GET.get('next', post_action_redirect if post_action_redirect else request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))))
|
||||
|
||||
if request.method == 'POST':
|
||||
try:
|
||||
term = request.GET.get('term')
|
||||
results = gpg.query(term)
|
||||
keys_dict = dict([(key.keyid, key) for key in results])
|
||||
key = gpg.import_key(keys_dict[key_id].key)
|
||||
messages.success(request, _('Key: %s, imported successfully.') % key)
|
||||
return HttpResponseRedirect(next)
|
||||
except (KeyImportError, KeyError, TypeError) as exception:
|
||||
gpg.receive_key(key_id=key_id)
|
||||
except Exception as exception:
|
||||
messages.error(
|
||||
request,
|
||||
_('Unable to import key id: %(key_id)s; %(error)s') %
|
||||
_('Unable to import key: %(key_id)s; %(error)s') %
|
||||
{
|
||||
'key_id': key_id,
|
||||
'error': exception,
|
||||
}
|
||||
)
|
||||
return HttpResponseRedirect(previous)
|
||||
else:
|
||||
messages.success(
|
||||
request,
|
||||
_('Successfully received key: %(key_id)s') %
|
||||
{
|
||||
'key_id': key_id,
|
||||
}
|
||||
)
|
||||
|
||||
return redirect('django_gpg:key_public_list')
|
||||
|
||||
return render_to_response('appearance/generic_confirm.html', {
|
||||
'title': _('Import key'),
|
||||
'message': _('Are you sure you wish to import key id: %s?') % key_id,
|
||||
'next': next,
|
||||
'previous': previous,
|
||||
'submit_method': 'GET',
|
||||
|
||||
@@ -146,40 +149,27 @@ def key_query(request):
|
||||
'extra_columns': [
|
||||
{
|
||||
'name': _('ID'),
|
||||
'attribute': 'keyid',
|
||||
'attribute': 'key_id',
|
||||
},
|
||||
{
|
||||
'name': _('Type'),
|
||||
'attribute': 'algo',
|
||||
'attribute': 'key_type',
|
||||
},
|
||||
{
|
||||
'name': _('Creation date'),
|
||||
'attribute': 'creation_date',
|
||||
},
|
||||
{
|
||||
'name': _('Disabled'),
|
||||
'attribute': 'disabled',
|
||||
'attribute': encapsulate(lambda x: datetime.fromtimestamp(int(x.date)))
|
||||
},
|
||||
{
|
||||
'name': _('Expiration date'),
|
||||
'attribute': 'expiration_date',
|
||||
},
|
||||
{
|
||||
'name': _('Expired'),
|
||||
'attribute': 'expired',
|
||||
'attribute': encapsulate(lambda x: datetime.fromtimestamp(int(x.expires)) if x.expires else _('No expiration'))
|
||||
},
|
||||
{
|
||||
'name': _('Length'),
|
||||
'attribute': 'key_length',
|
||||
'attribute': 'length',
|
||||
},
|
||||
{
|
||||
'name': _('Revoked'),
|
||||
'attribute': 'revoked',
|
||||
},
|
||||
|
||||
{
|
||||
'name': _('Identifies'),
|
||||
'attribute': encapsulate(lambda x: ', '.join([identity.uid for identity in x.identities])),
|
||||
'name': _('Identities'),
|
||||
'attribute': encapsulate(lambda x: ', '.join(x.uids)),
|
||||
},
|
||||
]
|
||||
},
|
||||
|
||||
@@ -25,7 +25,6 @@ pycountry==1.10
|
||||
python-dateutil==2.4.2
|
||||
pytz==2015.4
|
||||
python-gnupg==0.3.7
|
||||
python-hkp==0.1.3
|
||||
python-magic==0.4.6
|
||||
|
||||
sh==1.11
|
||||
|
||||
Reference in New Issue
Block a user