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)
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)