| 382 | return back |
| 383 | |
| 384 | def actionFindHashIds(self, params): |
| 385 | site = self.sites.get(params["site"]) |
| 386 | s = time.time() |
| 387 | if not site or not site.isServing(): # Site unknown or not serving |
| 388 | self.response({"error": "Unknown site"}) |
| 389 | self.connection.badAction(5) |
| 390 | return False |
| 391 | |
| 392 | event_key = "%s_findHashIds_%s_%s" % (self.connection.ip, params["site"], len(params["hash_ids"])) |
| 393 | if self.connection.cpu_time > 0.5 or not RateLimit.isAllowed(event_key, 60 * 5): |
| 394 | time.sleep(0.1) |
| 395 | back = self.findHashIds(site, params["hash_ids"], limit=10) |
| 396 | else: |
| 397 | back = self.findHashIds(site, params["hash_ids"]) |
| 398 | RateLimit.called(event_key) |
| 399 | |
| 400 | my_hashes = [] |
| 401 | my_hashfield_set = set(site.content_manager.hashfield) |
| 402 | for hash_id in params["hash_ids"]: |
| 403 | if hash_id in my_hashfield_set: |
| 404 | my_hashes.append(hash_id) |
| 405 | |
| 406 | if config.verbose: |
| 407 | self.log.debug( |
| 408 | "Found: %s for %s hashids in %.3fs" % |
| 409 | ({key: len(val) for key, val in back.items()}, len(params["hash_ids"]), time.time() - s) |
| 410 | ) |
| 411 | self.response({"peers": back["ipv4"], "peers_onion": back["onion"], "peers_ipv6": back["ipv6"], "my": my_hashes}) |
| 412 | |
| 413 | def actionSetHashfield(self, params): |
| 414 | site = self.sites.get(params["site"]) |