plaintext block fixes with sharing, fixed peer lookup
parent
835c2e527e
commit
3ef29077e7
|
@ -111,6 +111,9 @@ def download_blocks_from_communicator(comm_inst: "OnionrCommunicatorDaemon"):
|
|||
try:
|
||||
metadata_validation_result = \
|
||||
validatemetadata.validate_metadata(metadata, metas[2])
|
||||
except onionrexceptions.PlaintextNotSupported:
|
||||
logger.debug(f"Not saving {blockHash} due to plaintext not enabled")
|
||||
removeFromQueue = True
|
||||
except onionrexceptions.DataExists:
|
||||
metadata_validation_result = False
|
||||
if metadata_validation_result: # check if metadata is valid, and verify nonce
|
||||
|
|
|
@ -64,3 +64,4 @@ def lookup_new_peer_transports_with_communicator(shared_state):
|
|||
except ValueError:
|
||||
pass
|
||||
kv.get('newPeers').extend(newPeers)
|
||||
shared_state.get_by_string("OnionrCommunicatorDaemon").decrementThreadCount('clean_old_blocks')
|
||||
|
|
|
@ -38,7 +38,7 @@ def block_mixer(upload_list: List[onionrtypes.BlockHash],
|
|||
to the said block list
|
||||
"""
|
||||
bl = onionrblockapi.Block(block_to_mix)
|
||||
|
||||
print(bl.raw)
|
||||
if time.time() - bl.claimedTime > onionrvalues.BLOCK_POOL_MAX_AGE:
|
||||
raise ValueError
|
||||
if block_to_mix:
|
||||
|
|
|
@ -65,6 +65,9 @@ def accept_upload(request):
|
|||
resp = 'proof'
|
||||
except onionrexceptions.DataExists:
|
||||
resp = 'exists'
|
||||
except onionrexceptions.PlaintextNotSupported:
|
||||
logger.debug("attempted plaintext upload to us: {b_hash}")
|
||||
resp = 'failure'
|
||||
if resp == 'failure':
|
||||
abort(400)
|
||||
elif resp == 'proof':
|
||||
|
|
|
@ -6,6 +6,7 @@ from coredb import blockmetadb
|
|||
from onionrstorage.removeblock import remove_block
|
||||
import onionrstorage
|
||||
from .onionrblockapi import Block
|
||||
import onionrexceptions
|
||||
"""
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -28,7 +29,7 @@ def delete_plaintext_no_blacklist():
|
|||
block_list = blockmetadb.get_block_list()
|
||||
|
||||
for block in block_list:
|
||||
block = Block(hash=block)
|
||||
block = Block(hash=block, decrypt=False)
|
||||
if not block.isEncrypted:
|
||||
remove_block(block.hash)
|
||||
onionrstorage.deleteBlock(block.hash)
|
||||
remove_block(block.hash) # delete metadata entry
|
||||
onionrstorage.deleteBlock(block.hash) # delete block data
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
OnionrBlocks class for abstraction of blocks
|
||||
"""
|
||||
import binascii
|
||||
import os
|
||||
import datetime
|
||||
import onionrstorage
|
||||
|
||||
|
@ -17,7 +16,6 @@ from onionrusers import onionrusers
|
|||
from onionrutils import stringvalidators, epoch
|
||||
from coredb import blockmetadb
|
||||
from onionrutils import bytesconverter
|
||||
from onionrstorage import removeblock
|
||||
import onionrblocks
|
||||
from onionrcrypto import encryption, cryptoutils as cryptoutils, signing
|
||||
"""
|
||||
|
|
|
@ -48,6 +48,9 @@ class SignatureError(Exception):
|
|||
|
||||
# block exceptions
|
||||
|
||||
class PlaintextNotSupported(Exception):
|
||||
pass
|
||||
|
||||
class ReplayAttack(Exception):
|
||||
pass
|
||||
|
||||
|
|
|
@ -35,7 +35,10 @@ def remove_block(block):
|
|||
**You may want blacklist.addToDB(blockHash)
|
||||
"""
|
||||
if stringvalidators.validate_hash(block):
|
||||
dataSize = sys.getsizeof(onionrstorage.getData(block))
|
||||
try:
|
||||
data_size = sys.getsizeof(onionrstorage.getData(block))
|
||||
except onionrexceptions.NoDataAvailable:
|
||||
data_size = 0
|
||||
conn = sqlite3.connect(
|
||||
dbfiles.block_meta_db, timeout=DATABASE_LOCK_TIMEOUT)
|
||||
c = conn.cursor()
|
||||
|
@ -43,6 +46,7 @@ def remove_block(block):
|
|||
c.execute('Delete from hashes where hash=?;', t)
|
||||
conn.commit()
|
||||
conn.close()
|
||||
storage_counter.remove_bytes(dataSize)
|
||||
if data_size:
|
||||
storage_counter.remove_bytes(data_size)
|
||||
else:
|
||||
raise onionrexceptions.InvalidHexHash
|
||||
|
|
|
@ -76,8 +76,6 @@ def validate_metadata(metadata, block_data) -> bool:
|
|||
elif i == 'encryptType':
|
||||
try:
|
||||
if not metadata[i] in ('asym', 'sym', ''): raise ValueError
|
||||
if not config.get('general.store_plaintext_blocks', True):
|
||||
break
|
||||
except ValueError:
|
||||
logger.warn('Invalid encryption mode')
|
||||
break
|
||||
|
@ -100,9 +98,9 @@ def validate_metadata(metadata, block_data) -> bool:
|
|||
if not config.get('general.store_plaintext_blocks', True):
|
||||
try:
|
||||
if not metadata['encryptType']:
|
||||
raise onionrexceptions.DataExists
|
||||
raise onionrexceptions.PlaintextNotSupported
|
||||
except KeyError:
|
||||
raise onionrexceptions.DataExists
|
||||
raise onionrexceptions.PlaintextNotSupported
|
||||
try:
|
||||
metadata['time']
|
||||
except KeyError:
|
||||
|
|
Loading…
Reference in New Issue