def clone(self): """ create a copy of db, peers, peer creds, and config save to compressed archive used to add new nodes to system """ try: # save own credentials in clone's peer folder ownCert = "data/creds/local/server.crt" ownPubKey = "data/creds/local/server.pub" ID = get_ID(self.conf['p_wss']) certCopy = "data/creds/peers/certs/{}.crt".format(ID) keyCopy = "data/creds/peers/keys/{}.pub".format(ID) shell("cp {} {}".format(ownCert, certCopy)) shell("cp {} {}".format(ownPubKey, keyCopy)) # save groups and db to backup_dir self.state.image_state() self.cm.save_config() backupdir = "backup/" cfile = "config.ini" command = "cd data/ && tar czf clone.tar.gz {} {} creds/peers".format(cfile,backupdir) shell(command) log.info("clone of state successfully created") except Exception as e: log.info("clone of state failed")
def add_peer(self, sock_str, creds): try: key,cert = creds.split('<>') #sock_str = "wss://"+str(ip)+":"+str(port) ID = get_ID(sock_str) if not sock_str in self.peers.keys(): key = str(key) self.peers[sock_str] = RSA.importKey(key) self.conf['log'].debug("add peer: key imported") # write key to file with open(self.conf['peer_keys']+ID+".pub", 'w') as fh: fh.write(key) with open("{}{}.crt".format(self.conf['peer_certs'],ID), 'w') as fh: fh.write(cert) self.num_peers += 1 return True except Exception as e: self.conf['log'].debug(e) return False
def init_local_group(self): self.keyspace = (0.0,1.0) # add self with open(self.conf['keyfile'], 'r') as fh: key = fh.read() with open(self.conf['certfile'], 'r') as fh: cert = fh.read() self.add_peer(self.conf['p_wss'], key + "<>" + cert) for wss in self.conf['peerlist']: fname = self.conf['peer_keys'] + get_ID(wss)+".pub" if os.path.isfile(fname): #read key and add pair to self.peers with open(fname, 'r') as fh: self.peers[wss] = RSA.importKey(fh.read()) self.conf['log'].info("added {} to peers".format(wss)) else: self.conf['log'].info("missing key file for {}".format(wss)) self.num_peers = len(self.peers)