Add basic openpgp key handling to Key Manager
[leap_pycommon.git] / src / leap / common / keymanager / __init__.py
index 71aaddd..10acb36 100644 (file)
@@ -27,114 +27,22 @@ except ImportError:
     import json  # noqa
 
 
-from abc import ABCMeta, abstractmethod
 from u1db.errors import HTTPError
 
 
-#
-# Key types
-#
-
-class EncryptionKey(object):
-    """
-    Abstract class for encryption keys.
-
-    A key is "validated" if the nicknym agent has bound the user address to a
-    public key. Nicknym supports three different levels of key validation:
-
-    * Level 3 - path trusted: A path of cryptographic signatures can be traced
-      from a trusted key to the key under evaluation. By default, only the
-      provider key from the user's provider is a "trusted key".
-    * level 2 - provider signed: The key has been signed by a provider key for
-      the same domain, but the provider key is not validated using a trust
-      path (i.e. it is only registered)
-    * level 1 - registered: The key has been encountered and saved, it has no
-      signatures (that are meaningful to the nicknym agent).
-    """
-
-    __metaclass__ = ABCMeta
-
-    def __init__(self, address, key_id=None, fingerprint=None,
-                 key_data=None, length=None, expiry_date=None,
-                 validation=None, first_seen_at=None,
-                 last_audited_at=None):
-        self.address = address
-        self.key_id = key_id
-        self.fingerprint = fingerprint
-        self.key_data = key_data
-        self.length = length
-        self.expiry_date = expiry_date
-        self.validation = validation
-        self.first_seen_at = first_seen_at
-        self.last_audited_at = last_audited_at
-
-    @abstractmethod
-    def get_json(self):
-        """
-        Return a JSON string describing this key.
-
-        @return: The JSON string describing this key.
-        @rtype: str
-        """
-
-
-#
-# Key wrappers
-#
-
-class KeyTypeWrapper(object):
-    """
-    Abstract class for Key Type Wrappers.
-
-    A wrapper for a certain key type should know how to get and put keys in
-    local storage using Soledad and also how to generate new keys.
-    """
-
-    __metaclass__ = ABCMeta
-
-    @abstractmethod
-    def get_key(self, address):
-        """
-        Get key from local storage.
-
-        @param address: The address bound to the key.
-        @type address: str
-
-        @return: The key bound to C{address}.
-        @rtype: EncryptionKey
-        @raise KeyNotFound: If the key was not found on local storage.
-        """
-
-    @abstractmethod
-    def put_key(self, key):
-        """
-        Put a key in local storage.
-
-        @param key: The key to be stored.
-        @type key: EncryptionKey
-        """
-
-    @abstractmethod
-    def gen_key(self, address):
-        """
-        Generate a new key.
-
-        @param address: The address bound to the key.
-        @type address: str
-        @return: The key bound to C{address}.
-        @rtype: EncryptionKey
-        """
-
-
-#
-# Key manager
-#
+from leap.common.keymanager.errors import (
+    KeyNotFound,
+    KeyAlreadyExists,
+)
+from leap.common.keymanager.openpgp import (
+    OpenPGPKey,
+    OpenPGPWrapper,
+)
 
 
-class KeyNotFound(Exception):
-    """
-    Raised when key was no found on keyserver.
-    """
+wrapper_map = {
+    OpenPGPKey: OpenPGPWrapper(),
+}
 
 
 class KeyManager(object):
@@ -195,7 +103,7 @@ class KeyManager(object):
         except KeyNotFound:
             key = filter(lambda k: isinstance(k, ktype),
                          self._fetch_keys(address))
-            if key is None
+            if key is None:
                 raise KeyNotFound()
             wrapper_map[ktype].put_key(key)
             return key