work on torgossip, added base64 code whitelist because of a werid plugin issue with bigbrother

This commit is contained in:
Kevin Froman 2021-01-27 05:34:31 +00:00
parent a55055e720
commit 828c78a569
16 changed files with 235 additions and 17 deletions

View File

@ -154,10 +154,12 @@ Donating at least $3 gets you cool Onionr stickers. Get in touch if you want the
* Monero: 4B5BA24d1P3R5aWEpkGY5TP7buJJcn2aSGBVRQCHhpiahxeB4aWsu15XwmuTjC6VF62NApZeJGTS248RMVECP8aW73Uj2ax
* USD (Card/Paypal): [Ko-Fi](https://www.ko-fi.com/beardogkf)
* USD (Card/Paypal (no account required)): [Ko-Fi](https://www.ko-fi.com/beardogkf)
* [Indiegogo](https://igg.me/at/onionr/x#/)
* Sign up for [privacy.com (refferal link)](https://privacy.com/join/FNNDF) to protect your personal information when contributing or shopping elsewhere, we both get $5 USD.
Note: probably not tax deductible
# Security

View File

@ -3,11 +3,12 @@
Prevent eval/exec/os.system and log it
"""
import base64
import platform
from os import read
import logger
from utils import identifyhome
from onionrexceptions import ArbitraryCodeExec
from utils import readstatic
"""
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
@ -56,14 +57,30 @@ def block_exec(event, info):
'stem/response/mapaddress.py',
'stem/response/protocolinfo.py',
'apport/__init__.py',
'apport/report.py'
'apport/report.py',
'gevent/pool.py',
'gevent/queue.py',
'gevent/lock.py',
'gevent/monkey.py',
'gevent/_semaphore.py',
'gevent/_imap.py'
]
try:
whitelisted_source = readstatic.read_static(
'base64-code-whitelist.txt')
whitelisted_source = whitelisted_source.splitlines()
except FileNotFoundError:
logger.warn("Failed to read whitelisted code for bigbrother")
whitelisted_source = []
home = identifyhome.identify_home()
code_b64 = base64.b64encode(info[0].co_code).decode()
if code_b64 in whitelisted_source:
return
# uncomment when you want to build on the whitelist
else:
with open("../static-data/base64-code-whitelist.txt", "a") as f:
f.write(code_b64 + "\n")
return
for source in whitelisted_code:
if info[0].co_filename.endswith(source):

View File

@ -3,7 +3,7 @@
Wrap safedb for storing and fetching blocks
"""
from .store import store_block
from .load import load_block, list_blocks_by_type
from .load import load_block, list_blocks_by_type, list_all_blocks
from .clean import clean_expired_blocks, clean_block_list_entries
"""
This program is free software: you can redistribute it and/or modify

View File

@ -32,5 +32,23 @@ def load_block(block: 'BlockChecksumBytes', safe_db: 'SafeDB') -> Kasten:
def list_blocks_by_type(
block_type: str, safe_db: 'SafeDB') -> List['BlockChecksumBytes']:
try:
block_type = block_type.decode('utf-8')
except AttributeError:
pass
blocks = safe_db.get(f'bl-{block_type}')
return zip(*[iter(blocks)]*64)
def list_all_blocks(safe_db: 'SafeDB'):
# Builds and return a master list of blocks by identifying all type lists
# and iterating them
key = safe_db.db_conn.firstkey()
master_list = []
while key:
if key.startswith(b'bl-'):
master_list.extend(
list(list_blocks_by_type(key.replace(b'bl-', b''), safe_db)))
key = safe_db.db_conn.nextkey(key)
return master_list

View File

@ -20,6 +20,8 @@ config_file = home + 'config.json'
daemon_mark_file = home + '/daemon-true.txt'
lock_file = home + 'onionr.lock'
main_safedb = home + "main.safe.db"
site_cache = home + 'onionr-sites.txt'
tor_hs_loc = home + 'hs/'

View File

@ -45,6 +45,7 @@ from onionrstatistics.devreporting import statistics_reporter
from setupkvvars import setup_kv
from communicatorutils.housekeeping import clean_blocks_not_meeting_pow
from .spawndaemonthreads import spawn_client_threads
from .loadsafedb import load_safe_db
"""
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
@ -179,6 +180,8 @@ def daemon():
# Create singleton
shared_state.get(serializeddata.SerializedData)
shared_state.add(load_safe_db(config))
shared_state.share_object() # share the parent object to the threads
show_logo()
@ -205,7 +208,7 @@ def daemon():
_show_info_messages()
logger.info(
"Onionr daemon is running under " + str(os.getpid()), terminal=True)
events.event('init', threaded=False)
events.event('init', threaded=False, data=shared_state)
events.event('daemon_start')
if config.get('transports.lan', True):
if not onionrvalues.IS_QUBES:

View File

@ -0,0 +1,7 @@
import safedb
import filepaths
def load_safe_db(config) -> safedb.SafeDB:
return safedb.SafeDB(
filepaths.main_safedb, config.get('security.encrypt_database', False))

View File

@ -0,0 +1,46 @@
RwBkAGQBhABkAWUAgwNaAUcAZAJkA4QAZANlAYMDWgJHAGQEZAWEAGQFZQGDA1oDRwBkBmQHhABkB2UBgwNaBEcAZAhkCYQAZAllAYMDWgVkClMA
RwBkAGQBhABkAWUAgwNaAUcAZAJkA4QAZANlAYMDWgJHAGQEZAWEAGQFZQGDA1oDRwBkBmQHhABkB2UEZQGDBFoFRwBkCGQJhABkCWUEZQGDBFoGZQRaB0cAZApkC4QAZAtlB4MDWghlAFoJZQRaCmULWgxkDFMA
RwBkAGQBhABkAWUAgwNaAWQCUwA=
ZABaAGQBUwA=
ZABaAGQBZAJkA2QEZAVkBmQHZAhkCWQKZAtkDGQNZA5kD2QQZBFnEVoBZBJkE2wCWgJkEmQTbANaA2QSZBNsBFoEZBJkFGwFbQZaBgEAZBJkFWwHbQhaCAEAZBJkFmwJbQpaCgEAZBJkF2wLbQxaDG0NWg0BAGQSZBhsAm0OWg5tD1oPbRBaEG0RWhFtEloSbRNaE20UWhRtFVoVAQBkEmQZbBZtF1oXAQBkEmQabBhtGVoZAQBHAGQbZAKEAGQCZRqDA1obZGVkHGQdhAFaHGQeZB+EAFodZCBkIYQAWh5kImQjhABaH2QkZCWEAFogZCZkJ4QAWiFkKGQphABaImRmZCtkLIQBWiNkLWQGhABaJGQuZAOEAFolZC9kBIQAWiZkMGQFhABaJ2QxZAeEAFooZDJkCoQAWilkM2QJhABaKmRnZDVkCIQBWitkNmQLhABaLGQ3ZAyEAFotZDhkOWQ6nAJkO2QPhAJaLmRoZDxkPYQBWi9kaWQ+ZBGEAVowZGpkP2QOhAFaMWRrZEBkEIQBWjJkbGRBZA2EAVozZEJkQ4QAWjRHAGREZAGEAGQBgwJaNXoQZBJkRWw2bTRaNAEAVwBuFgQAZTdrCpABctoBAAEAAQBZAG4CWABlOGRGawKQBHKeZBJkR2wCbTlaOQEAZBJkSGwWbTpaOm07WjttPFo8bT1aPQEAZBJkSWwJbT5aPgEAZBJkE2w/Wj9lNWRKZEuDAlpAZTVkTGRNgwJaQWVAZE4UAGROGwBqJGVAaiRrApACc0x0QoIBZUBkThQAZE4bAGoyZUBqMmsCkAJzZnRCggFkT1pDZUCgRGVDoQFaRWVBoERlQ6EBWkZlOmU7ZgJEAF08WkdlSGRQZUdqOJsAZFGdA4MBAQBlSGVHZUBlQYMCgwEBAGVIZTWgSWVKZUdlRWVGgwOhAYMBAQCQAnGGZFJaS2U6ZTtlPGU9ZgREAF1AWkdlSGRQZUdqOJsAZFOdA4MBAQBlSGVHZUBlS4MCgwEBAGVIZTWgSWVKZUdlRWU+ZUuDAYMDoQGDAQEAkAJx1GRUWktlOmU7ZTxmA0QAXUBaR2VIZFVlR2o4mwBkVp0DgwEBAGVIZUdlS2VAgwKDAQEAZUhlNaBJZUplR2U+ZUuDAWVFgwOhAYMBAQCQA3EkZFdkWIQAWkxlNWRZZFqDAlpNZTVkW2RcgwJaTmRdWk9kT1pDZTWgSWReZF+EAGVNoERlQ6EBRACDAaEBWlBlTGVNZU8XAGVQgwIBAGU1oElkYGRfhABlTaBEZUOhAUQAgwGhAVpQZUxlTWVPGABlUIMCAQBlNaBJZGFkX4QAZU2gRGVDoQFEAIMBoQFaUGVMZU1lTxQAZVCDAgEAZTWgSWRiZF+EAGVNoERlQ6EBRACDAaEBWlBlTGVNZU8bAGVQgwIBAGU1oElkY2RfhABlUWVNoERlQ6EBZU6gRGVDoQGDAkQAgwGhAVpQZUxlTWVOFwBlUIMCAQBlNaBJZGRkX4QAZVFlTaBEZUOhAWVOoERlQ6EBgwJEAIMBoQFaUGVMZU1lThgAZVCDAgEAZUhlP6BSoQCDAQEAZBNTAA==
ZABaAGQBZAJsAVQAZANTAA==
ZABaAGQBZAJsAVoBZAFkAmwCWgJkAWQCbANaA2QBZAJsBFoEZAFkA2wFbQZaBgEAZAFkAmwHWgdlAmoIoAlkAWUBagigCmUBagigC2UMoQGhAaECAQBkAWQEbA1tDloOAQBkAWQCbA9aD2QFZAaEAFoQZRFkB2sCcoBlEIMAAQBkAlMA
ZABaAGQBZAJsAVoBZAFkAmwCWgJkAWQCbANaA2QBZAJsBFoEZAFkAmwFWgVkAWQCbAZaBmQBZAJsB1oIZAFkA2wJbQpaCwEAZAFkBGwMbQ1aDW0OWg4BAGQBZAVsD20QWhBtEVoRbRJaEm0TWhMBAGQBZAJsFFoUZAFkAmwVWhVkAWQCbBZaFmUWoBdlFmoYZAahAgEAZAFkAmwZWhlkB1oaRwBkCGQJhABkCYMCWhtkEWQKZAuEAVocZBJkDGQNhAFaHWQOZR1fHmQPZRxfHmQHZBBnAlofZAJTAA==
ZABaAGQBZAJsAVoBZAFkAmwCWgJkAWQCbANaA2QBZAJsBFoFZAFkA2wGbQdaBwEAZAFkBGwIbQlaCQEAZAFkBWwKbQtaCwEAZAFkAmwMWgxkAWQCbA1aDWUBoA5lAWoPZAahAgEAZAdaEGQIWhFlAmoSoBNkAWUDahKgFGUDahKgFWUWoQGhAaECAQBkAWQCbBdaF2QBZAJsGFoYZAFkAmwZWhlkAWQJbBptG1obAQBlGGocWhxkCmQLZwJaHWQMZA2EAFoeaQBmAWQOZA+EAVofZBJkEGQRhAFaIGQCUwA=
ZABaAGQBZAJsAVoBZAFkAmwCWgJkAWQCbANaA2QDZARnAloERwBkBWQEhABkBGUFgwNaBkcAZAZkA4QAZAODAloHZQhkB2sCclRlCWUHgwCDAQEAZAJTAA==
ZABaAGQBZAJsAVoBZAFkAmwCWgJkAWQCbANaA2UDoARlA2oFZAOhAgEAZQFqBqAHZAFlAmoGoAhlAmoGoAllCqEBoQGhAgEAZAFkAmwLWgtlC2oMWgxkBFoNZAVaDmQCUwA=
ZABaAGQBZAJsAVoBZAFkAmwCWgJkAWQCbANaBGQBZANsBW0GWgZtB1oHAQBkAWQEbAVtCFoIAQBkAWQFbAltCloKAQBkAWQGbAttDFoMAQBlB2QHZQ2DAloOZQJqD6AQZQJqD6ARZRKhAaEBWhNlFGUCag+gEGUCag+gEWUSoQGhAWQIFwBkCYMCjyBaFWUVoBahAKAXoQBaGGUEoBllGKEBZAoZAFoaVwA1AFEAUgBYAGUMoBuhAGQLFwBaHGUKZRxkDGQNZA6NA1odZQ5qHmQPZBBkEY0CZBJkE4QAgwFaH2UOah5kFGQVZBGNAmQWZBeEAIMBWiBlDqAeZBihAWQZZBqEAIMBWiFlDqAeZBuhAWQcZB2EAIMBWiJlDqAeZB6hAWQfZCCEAIMBWiNlDmoeZCFkImcBZCONAmQkZCWEAIMBWiRlDqAeZCahAWQnZCiEAIMBWiVkAlMA
ZABaAGQBZAJsAVoBZAFkAmwCWgJkAWQCbANaBGQBZANsBW0GWgZtB1oHAQBkAWQEbAhtCVoJAQBkAWQCbApaCmQBZAJsC1oLZAFkAmwMWgxkAWQFbA1tDloOAQBkAWQCbA9aD2QBZAJsEFoQZAFkBmwRbRJaEm0TWhNtFFoUAQBlDKAVZQxqFmQHoQIBAGUBahegGGQBZQJqF6AZZQJqF6AaZRuhAaEBoQIBAGQBZAJsHFocZRxqHVodZAhkCWcCWh5kClofZAtaIGQMWiFHAGQNZA6EAGQOgwJaImQXZA9kEIQBWiNkGGQRZBKEAVokZBlkE2QUhAFaJWQaZBVkFoQBWiZkAlMA
ZABaAGQBZAJsAVoBZAFkAmwCWgJkAWQCbANaBGQBZANsBW0GWgZtB1oHbQhaCG0JWgltCloKAQBkAWQEbAVtC1oLAQBkAWQCbAxaDWQBZAVsDm0PWg8BAGQBZAZsEG0RWhEBAGQBZAdsEm0TWhMBAGQBZAhsFG0VWhVtFloWAQBkAWQJbBdtGFoZAQBlAWoaoBtkAWUCahqgHGUCahqgHWUeoQGhAaECAQBkAWQCbB9aH2QBZAJsIFogZQlkCmUhgwJaImUNoCNlFqAkoQBkCxcAoQFaJWUCahqgHGUCahqgHWUeoQGhAVomZQ+DAFonZSJqKGQMZA1kDo0CZA9kEIQAgwFaKWUiaihkEWQSZA6NAmQTZBSEAIMBWiplIqAoZBWhAWQWZBeEAIMBWitlImooZBhkGWcBZBqNAmQbZByEAIMBWixlIqAoZB2hAWQeZB+EAIMBWi1lIqAoZCChAWQhZCKEAIMBWi5lIqAoZCOhAWQkZCWEAIMBWi9kAlMA
ZABaAGQBZAJsAVoBZAFkAmwCWgJkAWQDbANtBFoEAQBkAWQEbAVtBloGbQdaBwEARwBkBWQGhABkBoMCWghkAlMA
ZABaAGQBZAJsAVoBZQGgAmUBagNkA6ECAQBkAWQCbARaBGQBZAJsBVoFZAFkBGwGbQdaBwEAZQRqCKAJZAFlBWoIoAplBWoIoAtlDKEBoQGhAgEAZAVaDWQBZAZsDm0PWg8BAGQJZAdkCIQBWhBkAlMA
ZABaAGQBZAJsAVoCZAFkAmwDWgRkAWQCbAVaBmQBZAJsB1oIZANkBGcCWglkBVoKZQtaDEcAZAZkB4QAZAdlCGoNag6DA1oPZAtkCmQEhAFaEGQCUwA=
ZABaAGQBZAJsAW0CWgIBAEcAZANkBIQAZARlAoMDWgNkBVMA
ZABaAGQBZAJsAW0CWgIBAGQBZANsA1oDZAFkA2wEWgRkAWQDbAVaBWQBZANsBloGZAFkA2wHWgdkBGQFZwJaCGQGZAWEAFoJZAdkCIQAWgplB2oLagxaDWUHagtqDloPZQagEGQJZQZqEWUGahJCAKECWhNHAGQKZASEAGQEZQRqFIMDWhVkA1MA
ZABaAGQBZAJsAW0CWgIBAGQBZANsA20DWgMBAGQBZARsBG0FWgUBAGQBZAVsBm0HWgcBAGQBZAZsCG0JWgkBAGQBZAdsCm0LWgsBAGQNZQxlDWQJZQ5lC2QKnAVkC2QMhAVaD2QIUwA=
ZABaAGQBZAJsAW0CWgIBAGQBZANsA20EWgQBAGQBZARsA1oDZAVkBmwFbQZaBgEAZAVkB2wFbQdaBwEAZAVkCGwIbQlaCQEAZAVkCWwKbQtaCwEARwBkCmQLhABkC4MCWgxkBFMA
ZABaAGQBZAJsAW0CWgIBAGQBZANsA20EWgQBAGQBZARsBVoFZAFkBWwGbQdaBwEAZAFkBmwIbQlaCQEAZAdkCGwKbQtaC20MWgxtDVoNAQBkCVoOZQ9lD2QKnAJkC2QMhARaEGUOZA1mAmUPZRFlEmQOnANkD2QQhAVaE2UOZgFlD2USZRFlFGQRnARkEmQThAVaFWQbZRZkFJwBZBVkFoQFWhdlGGQXawJyzmUZZBiDAQEAZRFlGmQZgwGDAVobZRlkGmUXZRuDAYMCAQBkBFMA
ZABaAGQBZAJsAW0CWgIBAGQBZANsA20EWgQBAGQBZARsBW0GWgYBAGQBZAVsB20IWggBAGUCckRkAWQGbAltCloKAQBkB2QInAFkCWQKhARaC2QLUwA=
ZABaAGQBZAJsAW0CWgIBAGQBZANsA20EWgQBAGQBZARsBW0GWgZtB1oHAQBkAWQFbAhaCWkAWgpkBmQHhABaC2QFUwA=
ZABaAGQBZAJsAW0CWgIBAGQBZANsA20EWgRtBVoFAQBkAWQEbAZtB1oHAQBkAWQFbAZtCFoIAQBkAWQGbAltCloKAQBkB2QIbAttDFoMAQBHAGQJZAqEAGQKgwJaDUcAZAtkDIQAZAyDAloOZA1TAA==
ZABaAGQBZAJsAW0CWgIBAGQBZANsA20EWgRtBVoFbQZaBgEAZAFkBGwHbQhaCG0JWgkBAGQFUwA=
ZABaAGQBZAJsAW0CWgIBAGUCciBkAWQDbANtBFoEAQBkBGQFnAFkBmQHhARaBWQIUwA=
ZABaAGQBZAJsAW0CWgIBAGUCcixkAWQDbANtBFoEAQBkAWQEbAVtBloGAQBkBWQGZAecAmQIZAmEBFoHZApTAA==
ZABaAGQBZAJsAW0CWgJtA1oDAQBkAWQDbARtBVoFAQBlAnI8ZAFkBGwGbQdaBwEAZAFkBWwIbQlaCQEAZAZkB2UFZAicA2QJZAqEBFoKZQtkB2UDZAYZAGQLnANkDGQNhARaDGQHZA6cAWQPZBCEBFoNZBFTAA==
ZABaAGQBZAJsAW0CWgJtA1oDbQRaBAEAZAFkA2wFbQZaBgEAZQNkBGUHgwJaCGUIoAlkBaEBZQJkBpwBZAdkCIQEgwFaCmUIoAlkCaEBZQJkBpwBZApkC4QEgwFaC2QMUwA=
ZABaAHoYZAFkAmwBbQJaAm0DWgMBAGQDWgRXAG4oBABlBWsKckQBAAEAAQBkAWQCbAZtAloCbQNaAwEAZARaBFkAbgJYAGQFUwA=
ZABkAWwAWgBkAGQCbAFtAloCbQNaAwEAZABkA2wEbQVaBW0GWgYBAGQAZARsB20IWggBAGQAZAVsCW0KWgptC1oLAQBkAGQGbAxtDVoNAQBkAGQHbA5tD1oPAQBHAGQIZAmEAGQJZRCDA1oRRwBkCmQLhABkC2UDahKDA1oTZAFTAA==
ZABkAWwAWgBkAmQDhABaAWQBUwA=
ZABkAWwAbQFaAQEAZABkAmwAbQJaAgEAZABkA2wAbQNaAwEARwBkBGQFhABkBWUEgwNaBUcAZAZkB4QAZAdlBIMDWgZkCFMA
ZABkAWwAbQFaAQEAZABkAmwAbQJaAgEAZABkA2wAbQNaAwEAZABkBGwEbQVaBQEAZAVTAA==
ZABkAWwAbQFaAQEAZABkAmwCVABkAGQDbANtBFoEbQVaBQEAZARkBWwGWgZkBGQFbAdaB2UGagigCWQGoQFzTmUHagpkBBkAZAdrAnJkZABkCGwLbQxaDG0NWg1tDloOAQBuQnoYZABkCGwPbQxaDG0NWg1tDloOAQBXAG4oBABlEGsKcqQBAAEAAQBkAGQIbAttDFoMbQ1aDW0OWg4BAFkAbgJYAGQJZAqEAFoRZAtkDIQAWhJkDWQOhABaE2UTWhRlDVoVZRFaFmUSWhdkBVMA
ZABkAWwAbQFaAQEAZABkAmwCWgJkAGQCbANaA2QAZAJsBFoEZQNqBWQAGQBkA2sCWgZlBnJEZQdlCGYCWglkAloKbjZlB1oJegxlAmoLagxaClcAbiQEAGUNawpyeAEAAQABAGUCoAtlAqAOZAChAaEBWgpZAG4CWABHAGQEZAWEAGQFZQFkBWQGgwKDA1oPRwBkB2QIhABkCGUQgwNaEWQCUwA=
ZABkAWwAbQFaAQEAZABkAmwCbQJaAgEAZABkA2wDbQRaBAEAZABkBGwFWgVkBWQGbAZtB1oHAQBkBFMA
ZABkAWwAbQFaAQEAZABkAmwCbQJaAgEAZABkA2wDbQRaBAEAZABkBGwFbQZaBgEAZABkBWwHWgdkBloIZAdaCUcAZAhkCYQAZAllCoMDWgtHAGQKZAuEAGQLZQuDA1oMRwBkDGQNhABkDWULgwNaDUcAZA5kD4QAZA9lC4MDWg5HAGQQZBGEAGQRZQuDA1oPZRBkEmQTnAJkFGQVhARaEWQWZBeEAFoSZAVTAA==
ZABkAWwAbQFaAQEAZABkAmwCbQNaAwEAZABkA2wEbQVaBW0GWgYBAGQAZARsB20IWggBAGQAZAVsCW0KWgptC1oLAQBkAGQGbAxtDVoNAQBkAGQHbA5tD1oPbRBaEAEAZABkCGwRbRJaEm0TWhMBAGQAZAlsFG0VWhUBAEcAZApkC4QAZAtlCmoWgwNaF2QMUwA=
ZABkAWwAbQFaAQEAZABkAmwCbQNaAwEAZANTAA==
ZABkAWwAbQFaAQEAZABkAmwCbQNaAwEAZAZkBGQFhAFaBGQDUwA=
ZABkAWwAbQFaAQEAZABkAmwCbQNaAwEAZQFkA2QEZAVnAoMCWgRlA2QGZQWDAloGZQNkB2UHgwJaCGUDZAhlBYMCWgllA2QJZQqDAloLZQNkCmUKgwJaDGQLUwA=
ZABkAYQAWgBkAlMA
ZABkAWwAWgBkAGQBbAFaAWQCZAOEAFoCZARkBYQAWgNkAVMA
ZABkAWwAWgBlAWQCnAFkA2QEhARaAmQFZAaEAFoDZAFTAA==

View File

@ -0,0 +1,14 @@
import blockio
def list_blocks_by_type(safe_db, block_type) -> bytes:
try:
return safe_db.get(b'bl-' + block_type)
except KeyError:
return b""
def handle_check_block(safe_db, block_hash):
if block_hash in blockio.list_all_blocks(safe_db):
return int(1).to_bytes(1, 'little')
else:
return int(2).to_bytes(1, 'little')

View File

@ -0,0 +1,27 @@
"""
Onionr - Private P2P Communication
Gossip plugin commands
"""
from enum import IntEnum
"""
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
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
"""
class GossipCommands(IntEnum):
PING = 1,
CHECK_HAS_BLOCK = 2,
LIST_BLOCKS_BY_TYPE = 3,
EXIT = 4

View File

@ -0,0 +1,5 @@
{
"name" : "torgossip",
"version" : "0.0.0",
"author" : "onionr"
}

View File

@ -26,8 +26,8 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
plugin_name = 'torgossip'
from server import start_server
def on_init(api, data=None):
shared_state = data
print("starting gossip transport")
Thread(target=start_server, daemon=True).start()
Thread(target=start_server, daemon=True, args=[shared_state]).start()

View File

@ -4,11 +4,17 @@ Onionr - Private P2P Communication
Gossip plugin server, multiplexing using gevent
"""
import os
import sys
import selectors
import socket
from time import sleep
import filepaths
sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)))
from commands import GossipCommands # noqa
import commandhandlers
"""
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
@ -25,26 +31,48 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.
"""
def start_server():
def start_server(shared_state):
sel = selectors.DefaultSelector()
def accept(sock, mask):
conn, addr = sock.accept() # Should be ready
print('accepted', conn, 'from', addr)
conn.setblocking(False)
sel.register(conn, selectors.EVENT_READ, read)
def read(conn, mask):
data = conn.recv(1000) # Should be ready
if data:
print('echoing', repr(data), 'to', conn)
conn.send(data) # Hope it won't block
else:
print('closing', conn)
def do_close(conn, msg=None):
if msg:
conn.sendall(msg)
sleep(0.1)
sel.unregister(conn)
conn.close()
def read(conn, mask):
data = conn.recv(1000) # Should be ready
cmd = None
if data:
try:
cmd = int(int(data[0]).to_bytes(1, 'little'))
data = data[1:]
except IndexError:
do_close(conn, b'MALFORMED COMMAND')
if cmd == GossipCommands.PING:
conn.sendall(b'PONG')
elif cmd == GossipCommands.EXIT:
do_close(conn, b'BYE')
elif cmd == GossipCommands.LIST_BLOCKS_BY_TYPE:
conn.sendall(
commandhandlers.list_blocks_by_type(
shared_state.get_by_string('SafeDB'), data))
elif cmd == GossipCommands.CHECK_HAS_BLOCK:
conn.sendall(
commandhandlers.handle_check_block(
shared_state.get_by_string('SafeDB'), data))
else:
conn.sendall(b'Unknown ' + str(cmd).encode('utf-8'))
else:
do_close(conn)
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
socket_file = filepaths.identifyhome.identify_home() + "torgossip.sock"
try:

View File

@ -0,0 +1,29 @@
#!/usr/bin/env python
import socket
import os
#home = input("Enter Onionr data directory")
home = "/dev/shm/DATA24688"
def client(data):
with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as s:
s.connect(f'{home}/torgossip.sock')
s.sendall(data)
resp = s.recv(1024)
print("\n", resp)
while True:
print("1. ping")
print('2. check block hash')
print('3 list blocks')
print("4. exit")
inp = input()
if inp == "1":
client(b'1')
elif inp == "3":
client(b"3" + input("type: ").encode('utf8'))
elif inp == "2":
client(b'2' + os.urandom(32))
elif inp == "3":
client(b'3')

View File

@ -49,6 +49,9 @@
"disabled": [],
"enabled": []
},
"security": {
"encrypt_database": false
},
"statistics": {
"i_dont_want_privacy": false,
"server": ""

View File

@ -35,6 +35,24 @@ def _remove_db(path):
class TestBlockIO(unittest.TestCase):
def test_list_all_blocks(self):
db_file = identifyhome.identify_home() + 'test.db'
db = safedb.SafeDB(db_file)
expected_l = []
for i in range(5):
bl = blockcreator.create_anonvdf_block(b"hello" + int(i).to_bytes(1, "big"), b"txt" + int(i).to_bytes(1, "big"), 5)
blockio.store_block(bl, db)
expected_l.append(bl.id)
l = blockio.load.list_all_blocks(db)
self.assertEqual(len(l), 5)
for i in l:
self.assertIn(bytes(i), expected_l)
db.close()
_remove_db(db_file)
def test_clean_blocklist_entries(self):
db_file = identifyhome.identify_home() + 'test.db'
db = safedb.SafeDB(db_file)
@ -91,7 +109,6 @@ class TestBlockIO(unittest.TestCase):
bl = blockcreator.create_anonvdf_block(b'test' + int(i).to_bytes(1, 'big'), 'txt', 60)
blockio.store_block(bl, db)
expected_list.append(bl.id)
#db.db_conn.sync()
l = blockio.list_blocks_by_type('txt', db)
self.assertEqual(len(list(l)), len(expected_list))
for i in l: