def _next_round_robin_buddy(self, recd): logger.debug('meshNextRoundRobinBuddy') if recd.meshReqCallbackId: gobject.source_remove(recd.meshReqCallbackId) recd.meshReqCallbackId = 0 # delete any stub of a partially downloaded file path = recd.getMediaFilepath() if path and os.path.exists(path): os.remove(path) good_buddy_obj = None buds = self.activity._shared_activity.get_joined_buddies() for buddy_obj in buds: buddy = util.sha_data(buddy_obj.props.key) buddy = util.printable_hash(buddy) if recd.triedMeshBuddies.count(buddy) > 0: logger.debug('mnrrb: weve already tried bud ' + buddy_obj.props.nick) else: logger.debug('mnrrb: ask next buddy: ' + buddy_obj.props.nick) good_buddy_obj = buddy_obj break if good_buddy_obj: buddy = util.sha_data(good_buddy_obj.props.key) buddy = util.printable_hash(buddy) self._req_recd_from_buddy(recd, buddy, good_buddy_obj.props.nick) else: logger.debug( 'weve tried all buddies here, and no one has this recd') recd.meshDownloading = False recd.triedMeshBuddies = [] recd.triedMeshBuddies.append(Instance.keyHashPrintable) self.activity.update_download_progress(recd)
def _next_round_robin_buddy(self, recd): logger.debug('meshNextRoundRobinBuddy') if recd.meshReqCallbackId: gobject.source_remove(recd.meshReqCallbackId) recd.meshReqCallbackId = 0 # delete any stub of a partially downloaded file path = recd.getMediaFilepath() if path and os.path.exists(path): os.remove(path) good_buddy_obj = None buds = self.activity._shared_activity.get_joined_buddies() for buddy_obj in buds: buddy = util.sha_data(buddy_obj.props.key) buddy = util.printable_hash(buddy) if recd.triedMeshBuddies.count(buddy) > 0: logger.debug('mnrrb: weve already tried bud ' + buddy_obj.props.nick) else: logger.debug('mnrrb: ask next buddy: ' + buddy_obj.props.nick) good_buddy_obj = buddy_obj break if good_buddy_obj: buddy = util.sha_data(good_buddy_obj.props.key) buddy = util.printable_hash(buddy) self._req_recd_from_buddy(recd, buddy, good_buddy_obj.props.nick) else: logger.debug('weve tried all buddies here, and no one has this recd') recd.meshDownloading = False recd.triedMeshBuddies = [] recd.triedMeshBuddies.append(Instance.keyHashPrintable) self.activity.update_download_progress(recd)
def md5File(filepath): md = md5() f = file(filepath, 'rb') md.update(f.read()) digest = md.hexdigest() hash = util.printable_hash(digest) return hash
def _hash_private_key(self): key_path = os.path.join(env.get_profile_path(), 'owner.key') if not os.path.exists(key_path): return None try: f = open(key_path, 'r') lines = f.readlines() f.close() except IOError: logging.exception('Error reading private key') return None key = "" begin_found = False end_found = False for l in lines: l = l.strip() if l.startswith('-----BEGIN DSA PRIVATE KEY-----'): begin_found = True continue if l.startswith('-----END DSA PRIVATE KEY-----'): end_found = True continue key += l if not (len(key) and begin_found and end_found): logging.error('Error parsing public key.') return None # hash it key_hash = util.sha_data(key) return util.printable_hash(key_hash)
class Instance: key = profile.get_pubkey() keyHash = util.sha_data(key) keyHashPrintable = util.printable_hash(keyHash) instancePath = None def __init__(self, ca): self.__class__.instancePath = os.path.join(ca.get_activity_root(), "instance") recreateTmp()
def __init__(self, ps, bus, test_num, randomize): self._cp = ConfigParser() self._section = "Info" self._test_activities = [] self._test_cur_act = "" self._change_timeout = 0 self._cfg_file = os.path.join(env.get_profile_path(), 'test-buddy-%d' % test_num) (pubkey, privkey, registered) = self._load_config() if not pubkey or not len(pubkey) or not privkey or not len(privkey): (pubkey, privkey) = _get_new_keypair(test_num) if not pubkey or not privkey: raise RuntimeError("Couldn't get or create test buddy keypair") self._save_config(pubkey, privkey, registered) privkey_hash = util.printable_hash(util._sha_data(privkey)) nick = _get_random_name() from sugar.graphics import xocolor color = xocolor.XoColor().to_string() icon = _get_random_image() _logger.debug("pubkey is %s" % pubkey) GenericOwner.__init__(self, ps, bus, 'keyid/' + pubkey_to_keyid(pubkey), key=pubkey, nick=nick, color=color, icon=icon, registered=registered, key_hash=privkey_hash) # we already know our own nick, color, key self._awaiting = None # Only do the random stuff if randomize is true if randomize: self._ps.connect('connection-status', self._ps_connection_status_cb)
for l in lines: l = l.strip() if l.startswith("-----BEGIN DSA PRIVATE KEY-----"): begin_found = True continue if l.startswith("-----END DSA PRIVATE KEY-----"): end_found = True continue key += l if not (len(key) and begin_found and end_found): logging.error("Error parsing public key.") return None # hash it key_hash = util.sha_data(key) return util.printable_hash(key_hash) def _get_privkey_hash(self): # load on-demand. if not self._privkey_hash: self._privkey_hash = self._hash_private_key() return self._privkey_hash privkey_hash = property(_get_privkey_hash) pubkey = property(_get_pubkey) def convert_profile(self): cp = ConfigParser() path = os.path.join(env.get_profile_path(), 'config') cp.read([path])