def actionFindHashIds(self, params): site = self.sites.get(params["site"]) s = time.time() if not site or not site.isServing(): # Site unknown or not serving self.response({"error": "Unknown site"}) self.connection.badAction(5) return False event_key = "%s_findHashIds_%s_%s" % ( self.connection.ip, params["site"], len(params["hash_ids"])) if self.connection.cpu_time > 0.5 or not RateLimit.isAllowed( event_key, 60 * 5): time.sleep(0.1) back = self.findHashIds(site, params["hash_ids"], limit=10) else: back = self.findHashIds(site, params["hash_ids"]) RateLimit.called(event_key) my_hashes = [] my_hashfield_set = set(site.content_manager.hashfield) for hash_id in params["hash_ids"]: if hash_id in my_hashfield_set: my_hashes.append(hash_id) if config.verbose: self.log.debug("Found: %s for %s hashids in %.3fs" % ({key: len(val) for key, val in back.items() }, len(params["hash_ids"]), time.time() - s)) self.response({ "peers": back["ipv4"], "peers_onion": back["onion"], "peers_ipv6": back["ipv6"], "my": my_hashes })
def cbMergerSiteAdd(self, to, addresses): added = 0 for address in addresses: added += 1 site_manager.need(address) if added: self.cmd("notification", ["done", "Added <b>%s</b> new site" % added, 5000]) RateLimit.called(self.site.address + "-MergerSiteAdd") site_manager.updateMergerSites()
def cbMergerSiteAdd(self, to, addresses): added = 0 for address in addresses: added += 1 site_manager.need(address) if added: self.cmd("notification", ["done", "Added <b>%s</b> new site" % added, 5000]) RateLimit.called(self.site.address + "-MergerSiteAdd") site_manager.updateMergerSites()
def actionFindHashIds(self, params): site = self.sites.get(params["site"]) s = time.time() if not site or not site.settings[ "serving"]: # Site unknown or not serving self.response({"error": "Unknown site"}) self.connection.badAction(5) return False event_key = "%s_findHashIds_%s_%s" % ( self.connection.ip, params["site"], len(params["hash_ids"])) if self.connection.cpu_time > 0.5 or not RateLimit.isAllowed( event_key, 60 * 5): time.sleep(0.1) back = self.findHashIds(site, params["hash_ids"], limit=10) else: back = self.findHashIds(site, params["hash_ids"]) RateLimit.called(event_key) # Check my hashfield if self.server.tor_manager and self.server.tor_manager.getOnion( site.address): # Running onion my_ip = helper.packOnionAddress( self.server.tor_manager.getOnion(site.address), self.server.port) my_ip_type = "onion" elif config.ip_external: # External ip defined my_ip = helper.packAddress(config.ip_external, self.server.port) my_ip_type = helper.getIpType(config.ip_external) elif self.server.ip and self.server.ip != "*": # No external ip defined my_ip = helper.packAddress(self.server.ip, self.server.port) my_ip_type = helper.getIpType(self.server.ip) else: my_ip = None my_ip_type = "ipv4" my_hashfield_set = set(site.content_manager.hashfield) for hash_id in params["hash_ids"]: if hash_id in my_hashfield_set: if hash_id not in back[my_ip_type]: back[my_ip_type][hash_id] = [] if my_ip: back[my_ip_type][hash_id].append(my_ip) # Add myself if config.verbose: self.log.debug("Found: %s for %s hashids in %.3fs" % ({key: len(val) for key, val in back.iteritems() }, len(params["hash_ids"]), time.time() - s)) self.response({ "peers": back["ipv4"], "peers_onion": back["onion"], "peers_ipv6": back["ipv6"] })
def cbMergerSiteAdd(self, to, addresses): added = 0 for address in addresses: try: site_manager.need(address) added += 1 except Exception as err: self.cmd("notification", ["error", _["Adding <b>%s</b> failed: %s"] % (address, err)]) if added: self.cmd("notification", ["done", _["Added <b>%s</b> new site"] % added, 5000]) RateLimit.called(self.site.address + "-MergerSiteAdd") site_manager.updateMergerSites()
def actionFindHashIds(self, params): site = self.sites.get(params["site"]) s = time.time() if not site or not site.settings[ "serving"]: # Site unknown or not serving self.response({"error": "Unknown site"}) self.connection.badAction(5) return False event_key = "%s_findHashIds_%s_%s" % ( self.connection.ip, params["site"], len(params["hash_ids"])) if self.connection.cpu_time > 0.5 or not RateLimit.isAllowed( event_key, 60 * 5): time.sleep(0.1) back_ip4, back_onion = self.findHashIds(site, params["hash_ids"], limit=10) else: back_ip4, back_onion = self.findHashIds(site, params["hash_ids"]) RateLimit.called(event_key) # Check my hashfield if self.server.tor_manager and self.server.tor_manager.site_onions.get( site.address): # Running onion my_ip = helper.packOnionAddress( self.server.tor_manager.site_onions[site.address], self.server.port) my_back = back_onion elif config.ip_external: # External ip defined my_ip = helper.packAddress(config.ip_external, self.server.port) my_back = back_ip4 else: # No external ip defined my_ip = my_ip = helper.packAddress(self.server.ip, self.server.port) my_back = back_ip4 my_hashfield_set = set(site.content_manager.hashfield) for hash_id in params["hash_ids"]: if hash_id in my_hashfield_set: if hash_id not in my_back: my_back[hash_id] = [] my_back[hash_id].append(my_ip) # Add myself if config.verbose: self.log.debug( "Found: IP4: %s, Onion: %s for %s hashids in %.3fs" % (len(back_ip4), len(back_onion), len( params["hash_ids"]), time.time() - s)) self.response({"peers": back_ip4, "peers_onion": back_onion})
def actionFindHashIds(self, params): site = self.sites.get(params["site"]) s = time.time() if not site or not site.settings["serving"]: # Site unknown or not serving self.response({"error": "Unknown site"}) self.connection.badAction(5) return False event_key = "%s_findHashIds_%s_%s" % (self.connection.ip, params["site"], len(params["hash_ids"])) if self.connection.cpu_time > 0.5 or not RateLimit.isAllowed(event_key, 60 * 5): time.sleep(0.1) back_ip4, back_onion = self.findHashIds(site, params["hash_ids"], limit=10) else: back_ip4, back_onion = self.findHashIds(site, params["hash_ids"]) RateLimit.called(event_key) # Check my hashfield if self.server.tor_manager and self.server.tor_manager.site_onions.get(site.address): # Running onion my_ip = helper.packOnionAddress(self.server.tor_manager.site_onions[site.address], self.server.port) my_back = back_onion elif config.ip_external: # External ip defined my_ip = helper.packAddress(config.ip_external, self.server.port) my_back = back_ip4 elif self.server.ip and self.server.ip != "*": # No external ip defined my_ip = helper.packAddress(self.server.ip, self.server.port) my_back = back_ip4 else: my_ip = None my_back = back_ip4 my_hashfield_set = set(site.content_manager.hashfield) for hash_id in params["hash_ids"]: if hash_id in my_hashfield_set: if hash_id not in my_back: my_back[hash_id] = [] if my_ip: my_back[hash_id].append(my_ip) # Add myself if config.verbose: self.log.debug( "Found: IP4: %s, Onion: %s for %s hashids in %.3fs" % (len(back_ip4), len(back_onion), len(params["hash_ids"]), time.time() - s) ) self.response({"peers": back_ip4, "peers_onion": back_onion})