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:
|
try:
|
||||||
metadata_validation_result = \
|
metadata_validation_result = \
|
||||||
validatemetadata.validate_metadata(metadata, metas[2])
|
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:
|
except onionrexceptions.DataExists:
|
||||||
metadata_validation_result = False
|
metadata_validation_result = False
|
||||||
if metadata_validation_result: # check if metadata is valid, and verify nonce
|
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:
|
except ValueError:
|
||||||
pass
|
pass
|
||||||
kv.get('newPeers').extend(newPeers)
|
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
|
to the said block list
|
||||||
"""
|
"""
|
||||||
bl = onionrblockapi.Block(block_to_mix)
|
bl = onionrblockapi.Block(block_to_mix)
|
||||||
|
print(bl.raw)
|
||||||
if time.time() - bl.claimedTime > onionrvalues.BLOCK_POOL_MAX_AGE:
|
if time.time() - bl.claimedTime > onionrvalues.BLOCK_POOL_MAX_AGE:
|
||||||
raise ValueError
|
raise ValueError
|
||||||
if block_to_mix:
|
if block_to_mix:
|
||||||
|
|
|
@ -65,6 +65,9 @@ def accept_upload(request):
|
||||||
resp = 'proof'
|
resp = 'proof'
|
||||||
except onionrexceptions.DataExists:
|
except onionrexceptions.DataExists:
|
||||||
resp = 'exists'
|
resp = 'exists'
|
||||||
|
except onionrexceptions.PlaintextNotSupported:
|
||||||
|
logger.debug("attempted plaintext upload to us: {b_hash}")
|
||||||
|
resp = 'failure'
|
||||||
if resp == 'failure':
|
if resp == 'failure':
|
||||||
abort(400)
|
abort(400)
|
||||||
elif resp == 'proof':
|
elif resp == 'proof':
|
||||||
|
|
|
@ -6,6 +6,7 @@ from coredb import blockmetadb
|
||||||
from onionrstorage.removeblock import remove_block
|
from onionrstorage.removeblock import remove_block
|
||||||
import onionrstorage
|
import onionrstorage
|
||||||
from .onionrblockapi import Block
|
from .onionrblockapi import Block
|
||||||
|
import onionrexceptions
|
||||||
"""
|
"""
|
||||||
This program is free software: you can redistribute it and/or modify
|
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
|
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()
|
block_list = blockmetadb.get_block_list()
|
||||||
|
|
||||||
for block in block_list:
|
for block in block_list:
|
||||||
block = Block(hash=block)
|
block = Block(hash=block, decrypt=False)
|
||||||
if not block.isEncrypted:
|
if not block.isEncrypted:
|
||||||
remove_block(block.hash)
|
remove_block(block.hash) # delete metadata entry
|
||||||
onionrstorage.deleteBlock(block.hash)
|
onionrstorage.deleteBlock(block.hash) # delete block data
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
OnionrBlocks class for abstraction of blocks
|
OnionrBlocks class for abstraction of blocks
|
||||||
"""
|
"""
|
||||||
import binascii
|
import binascii
|
||||||
import os
|
|
||||||
import datetime
|
import datetime
|
||||||
import onionrstorage
|
import onionrstorage
|
||||||
|
|
||||||
|
@ -17,7 +16,6 @@ from onionrusers import onionrusers
|
||||||
from onionrutils import stringvalidators, epoch
|
from onionrutils import stringvalidators, epoch
|
||||||
from coredb import blockmetadb
|
from coredb import blockmetadb
|
||||||
from onionrutils import bytesconverter
|
from onionrutils import bytesconverter
|
||||||
from onionrstorage import removeblock
|
|
||||||
import onionrblocks
|
import onionrblocks
|
||||||
from onionrcrypto import encryption, cryptoutils as cryptoutils, signing
|
from onionrcrypto import encryption, cryptoutils as cryptoutils, signing
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -48,6 +48,9 @@ class SignatureError(Exception):
|
||||||
|
|
||||||
# block exceptions
|
# block exceptions
|
||||||
|
|
||||||
|
class PlaintextNotSupported(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
class ReplayAttack(Exception):
|
class ReplayAttack(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,10 @@ def remove_block(block):
|
||||||
**You may want blacklist.addToDB(blockHash)
|
**You may want blacklist.addToDB(blockHash)
|
||||||
"""
|
"""
|
||||||
if stringvalidators.validate_hash(block):
|
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(
|
conn = sqlite3.connect(
|
||||||
dbfiles.block_meta_db, timeout=DATABASE_LOCK_TIMEOUT)
|
dbfiles.block_meta_db, timeout=DATABASE_LOCK_TIMEOUT)
|
||||||
c = conn.cursor()
|
c = conn.cursor()
|
||||||
|
@ -43,6 +46,7 @@ def remove_block(block):
|
||||||
c.execute('Delete from hashes where hash=?;', t)
|
c.execute('Delete from hashes where hash=?;', t)
|
||||||
conn.commit()
|
conn.commit()
|
||||||
conn.close()
|
conn.close()
|
||||||
storage_counter.remove_bytes(dataSize)
|
if data_size:
|
||||||
|
storage_counter.remove_bytes(data_size)
|
||||||
else:
|
else:
|
||||||
raise onionrexceptions.InvalidHexHash
|
raise onionrexceptions.InvalidHexHash
|
||||||
|
|
|
@ -76,8 +76,6 @@ def validate_metadata(metadata, block_data) -> bool:
|
||||||
elif i == 'encryptType':
|
elif i == 'encryptType':
|
||||||
try:
|
try:
|
||||||
if not metadata[i] in ('asym', 'sym', ''): raise ValueError
|
if not metadata[i] in ('asym', 'sym', ''): raise ValueError
|
||||||
if not config.get('general.store_plaintext_blocks', True):
|
|
||||||
break
|
|
||||||
except ValueError:
|
except ValueError:
|
||||||
logger.warn('Invalid encryption mode')
|
logger.warn('Invalid encryption mode')
|
||||||
break
|
break
|
||||||
|
@ -100,9 +98,9 @@ def validate_metadata(metadata, block_data) -> bool:
|
||||||
if not config.get('general.store_plaintext_blocks', True):
|
if not config.get('general.store_plaintext_blocks', True):
|
||||||
try:
|
try:
|
||||||
if not metadata['encryptType']:
|
if not metadata['encryptType']:
|
||||||
raise onionrexceptions.DataExists
|
raise onionrexceptions.PlaintextNotSupported
|
||||||
except KeyError:
|
except KeyError:
|
||||||
raise onionrexceptions.DataExists
|
raise onionrexceptions.PlaintextNotSupported
|
||||||
try:
|
try:
|
||||||
metadata['time']
|
metadata['time']
|
||||||
except KeyError:
|
except KeyError:
|
||||||
|
|
Loading…
Reference in New Issue