def test_private_identities(self):
        """Test private id interface"""

        db = ContentDB(tempfile.NamedTemporaryFile().name)
        id_priv = dandelion.identity.generate()
        id_pub = dandelion.identity.generate().public_identity()

        # Add junk
        self.assertRaises(TypeError, db.add_private_identity, None)
        self.assertRaises(ValueError, db.add_private_identity, id_pub)

        # Add, get, remove
        db.add_private_identity(id_priv)
        id = db.get_private_identity(id_priv.fingerprint)

        self.assertEqual(id_priv.fingerprint, id.fingerprint)
        self.assertEqual(id_priv, id)
        self.assertTrue(IdentityInfo(db, id).is_private())

        db.remove_private_identity(id_priv, keep_public_identity=False)
        self.assertFalse(db.contains_identity(id_priv.fingerprint))

        # Add and remove private, but keep public
        db.add_private_identity(id_priv)
        db.remove_private_identity(id_priv, keep_public_identity=True)
        self.assertTrue(db.contains_identity(id_priv.fingerprint))
        self.assertFalse(IdentityInfo(db, db.get_identities([id_priv.fingerprint])[1][0]).is_private())
        self.assertRaises(ValueError, db.get_private_identity, id_priv.fingerprint)
Esempio n. 2
0
class ConfigManager:

    def __init__(self, config_file='dandelion.conf'):
        self._cfg_file_name = config_file
        self._server_config = ServerConfig()
        self._synchronizer_config = SynchronizerConfig()
        self._discoverer_config = DiscovererConfig()
        self._id_manager_config = IdentityConfig()
        self._ui_config = UiConfig()

        self.read_file()

        self._content_db = ContentDB(self._server_config.db_file)

        if self._id_manager_config.my_id is not None and not self._content_db.contains_identity(decode_b64_bytes(self._id_manager_config.my_id.encode())) :
            print("WARNING! Bad or non existing ID requested in config. Requested:", self._id_manager_config.my_id)
            self._id_manager_config.my_id = None

        if self._id_manager_config.my_id is not None:
            fp = decode_b64_bytes(self._id_manager_config.my_id.encode())
            try:
                self._identity = self._content_db.get_private_identity(fp)
                print("My claimed ID:", self._id_manager_config.my_id)
                return
            except ValueError:
                pass
            
        self._identity = dandelion.identity.generate()
        self._content_db.add_private_identity(self._identity)
        id_str = encode_b64_bytes(self._identity.fingerprint).decode()
        self._id_manager_config.my_id = id_str

    @property
    def config_file(self):
        return self._cfg_file_name

    @property
    def server_config(self):
        return self._server_config

    @property
    def synchronizer_config(self):
        return self._synchronizer_config

    @property
    def discoverer_config(self):
        return self._discoverer_config

    @property
    def identity_manager_config(self):
        return self._id_manager_config

    @property
    def ui_config(self):
        return self._ui_config

    @property
    def content_db(self):
        return self._content_db

    @property
    def identity(self):
        return self._identity

    def write_file(self):

        confparser = configparser.ConfigParser()

        self._server_config.store(confparser)
        self._ui_config.store(confparser)
        self._id_manager_config.store(confparser)
        self._discoverer_config.store(confparser)

        with open(self._cfg_file_name, 'w') as configfile:
            confparser.write(configfile)

    def read_file(self):

        confparser = configparser.ConfigParser()
        confparser.read(self._cfg_file_name)

        self._server_config.load(confparser)
        self._ui_config.load(confparser)
        self._id_manager_config.load(confparser)
        self._discoverer_config.load(confparser)