diff --git a/squeaknode/db/squeak_db.py b/squeaknode/db/squeak_db.py index e801464a..0a456171 100644 --- a/squeaknode/db/squeak_db.py +++ b/squeaknode/db/squeak_db.py @@ -167,9 +167,12 @@ class SqueakDb: else None, ) with self.get_connection() as connection: - res = connection.execute(ins) - squeak_hash = res.inserted_primary_key[0] - return bytes.fromhex(squeak_hash) + try: + res = connection.execute(ins) + inserted_squeak_hash = res.inserted_primary_key[0] + except sqlalchemy.exc.IntegrityError: + pass + return get_hash(squeak) def get_squeak_entry(self, squeak_hash): """ Get a squeak. """ diff --git a/squeaknode/node/peer_task.py b/squeaknode/node/peer_task.py index 0cf52e48..b064cfd2 100644 --- a/squeaknode/node/peer_task.py +++ b/squeaknode/node/peer_task.py @@ -198,7 +198,7 @@ class PeerSyncTask: return self.peer_client.lookup_squeaks(addresses, min_block, max_block) def _save_squeak(self, squeak): - self.squeak_store.save_downloaded_squeak(squeak) + self.squeak_store.save_squeak(squeak, verify=True, skip_whitelist_check=True) def _get_saved_squeak(self, squeak_hash): return self.squeak_store.get_squeak(squeak_hash) diff --git a/squeaknode/node/squeak_block_verifier.py b/squeaknode/node/squeak_block_verifier.py index e18c1b85..b427aa23 100644 --- a/squeaknode/node/squeak_block_verifier.py +++ b/squeaknode/node/squeak_block_verifier.py @@ -11,7 +11,7 @@ class SqueakBlockVerifier: self.unverified_queue = queue.Queue() def verify_squeak_block(self, squeak_hash): - logger.info("Verifying squeak hash: {}".format(squeak_hash)) + logger.info("Verifying squeak hash: {}".format(squeak_hash.hex())) squeak = self._get_squeak(squeak_hash) try: diff --git a/squeaknode/node/squeak_node.py b/squeaknode/node/squeak_node.py index ecd23782..590dceb2 100644 --- a/squeaknode/node/squeak_node.py +++ b/squeaknode/node/squeak_node.py @@ -93,10 +93,10 @@ class SqueakNode: self.squeak_offer_expiry_worker.start_running() def save_uploaded_squeak(self, squeak): - return self.squeak_store.save_uploaded_squeak(squeak) + return self.squeak_store.save_squeak(squeak) def save_created_squeak(self, squeak): - return self.squeak_store.save_created_squeak(squeak) + return self.squeak_store.save_squeak(squeak, verify=True, skip_whitelist_check=True) def get_public_squeak(self, squeak_hash): return self.squeak_store.get_public_squeak(squeak_hash) diff --git a/squeaknode/node/squeak_store.py b/squeaknode/node/squeak_store.py index eea3e2d7..01871801 100644 --- a/squeaknode/node/squeak_store.py +++ b/squeaknode/node/squeak_store.py @@ -1,5 +1,7 @@ import logging +from squeaknode.server.util import get_hash, get_replyto + logger = logging.getLogger(__name__) @@ -12,31 +14,19 @@ class SqueakStore: self.squeak_rate_limiter = squeak_rate_limiter self.squeak_whitelist = squeak_whitelist - def save_uploaded_squeak(self, squeak): - if not self.squeak_whitelist.should_allow_squeak(squeak): - raise Exception("Squeak upload not allowed by whitelist.") + def save_squeak(self, squeak, verify=False, skip_whitelist_check=False): + if not skip_whitelist_check: + if not self.squeak_whitelist.should_allow_squeak(squeak): + raise Exception("Squeak upload not allowed by whitelist.") - if not self.squeak_rate_limiter.should_rate_limit_allow(squeak): - raise Exception("Excedeed allowed number of squeaks per block.") + if not self.squeak_rate_limiter.should_rate_limit_allow(squeak): + raise Exception("Excedeed allowed number of squeaks per block.") inserted_squeak_hash = self.postgres_db.insert_squeak(squeak) - self.squeak_block_verifier.add_squeak_to_queue(inserted_squeak_hash) - return inserted_squeak_hash - - def save_downloaded_squeak(self, squeak): - if not self.squeak_rate_limiter.should_rate_limit_allow(squeak): - raise Exception("Excedeed allowed number of squeaks per block.") - - inserted_squeak_hash = self.postgres_db.insert_squeak(squeak) - # self.squeak_block_verifier.add_squeak_to_queue(inserted_squeak_hash) - # Slow operation because of blockchain lookup - self.squeak_block_verifier.verify_squeak_block(inserted_squeak_hash) - return inserted_squeak_hash - - def save_created_squeak(self, squeak): - inserted_squeak_hash = self.postgres_db.insert_squeak(squeak) - # Slow operation because of blockchain lookup - self.squeak_block_verifier.verify_squeak_block(inserted_squeak_hash) + if verify: + self.squeak_block_verifier.verify_squeak_block(inserted_squeak_hash) + else: + self.squeak_block_verifier.add_squeak_to_queue(inserted_squeak_hash) return inserted_squeak_hash def get_squeak(self, squeak_hash):