diff --git a/src/bigbrother/ministry/ofdisk.py b/src/bigbrother/ministry/ofdisk.py
index 957e4a69..136e8f09 100644
--- a/src/bigbrother/ministry/ofdisk.py
+++ b/src/bigbrother/ministry/ofdisk.py
@@ -9,7 +9,6 @@ def detect_disk_access(info):
whitelist = [identify_home(), 'onionr/src/', '/site-packages/', '/usr/lib64/']
-
for item in whitelist:
if item in info[0]:
return
diff --git a/src/httpapi/miscpublicapi/getblocks.py b/src/httpapi/miscpublicapi/getblocks.py
index 887e8661..55b8aba4 100755
--- a/src/httpapi/miscpublicapi/getblocks.py
+++ b/src/httpapi/miscpublicapi/getblocks.py
@@ -1,9 +1,16 @@
-'''
- Onionr - Private P2P Communication
+"""Onionr - Private P2P Communication.
- Public endpoints to get block data and lists
-'''
-'''
+Public endpoints to get block data and lists
+"""
+from flask import Response, abort
+
+import config
+from onionrutils import bytesconverter, stringvalidators
+from coredb import blockmetadb
+from utils import reconstructhash
+from onionrblocks import BlockList
+from .. import apiutils
+"""
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
@@ -16,13 +23,9 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see .
-'''
-from flask import Response, abort
-import config
-from onionrutils import bytesconverter, stringvalidators
-from coredb import blockmetadb
-from utils import reconstructhash
-from .. import apiutils
+"""
+
+
def get_public_block_list(publicAPI, request):
# Provide a list of our blocks, with a date offset
dateAdjust = request.args.get('date')
@@ -37,15 +40,16 @@ def get_public_block_list(publicAPI, request):
share_list += '%s\n' % (reconstructhash.deconstruct_hash(b),)
return Response(share_list)
+
def get_block_data(publicAPI, data):
- '''data is the block hash in hex'''
+ """data is the block hash in hex"""
resp = ''
if stringvalidators.validate_hash(data):
if not config.get('general.hide_created_blocks', True) or data not in publicAPI.hideBlocks:
- if data in blockmetadb.get_block_list():
+ if data in publicAPI._too_many.get(BlockList).get():
block = apiutils.GetBlockData().get_block_data(data, raw=True, decrypt=False)
try:
- block = block.encode() # Encode in case data is binary
+ block = block.encode('utf-8') # Encode in case data is binary
except AttributeError:
if len(block) == 0:
abort(404)
diff --git a/src/httpapi/security/public.py b/src/httpapi/security/public.py
index a9d12f93..1e9bda63 100644
--- a/src/httpapi/security/public.py
+++ b/src/httpapi/security/public.py
@@ -32,9 +32,11 @@ class PublicAPISecurity:
"""Validate request has the correct hostname"""
# If high security level, deny requests to public
# (HS should be disabled anyway for Tor, but might not be for I2P)
+ g.is_onionr_client = False
transports = gettransports.get()
if public_api.config.get('general.security_level', default=1) > 0:
abort(403)
+
if request.host not in transports:
# Abort conn if wrong HTTP hostname, to prevent DNS rebinding
abort(403)
@@ -57,10 +59,12 @@ class PublicAPISecurity:
NON_NETWORK_HEADERS = ('Content-Security-Policy', 'X-Frame-Options',
'X-Content-Type-Options', 'Feature-Policy',
'Clear-Site-Data', 'Referrer-Policy')
+
try:
if g.is_onionr_client:
for header in NON_NETWORK_HEADERS: del resp.headers[header]
except AttributeError:
abort(403)
+
public_api.lastRequest = epoch.get_rounded_epoch(roundS=5)
return resp
diff --git a/src/lan/discover.py b/src/lan/discover.py
index 33c87551..b7a0915a 100644
--- a/src/lan/discover.py
+++ b/src/lan/discover.py
@@ -52,7 +52,7 @@ def learn_services(lan_client):
if 'onionr' not in service_ips:
continue
service_ips = service_ips.replace('onionr-', '').split('-')
- print(service_ips)
+
port = 0
for service in service_ips:
try:
diff --git a/src/logger/raw.py b/src/logger/raw.py
index a4738872..f0dd88e8 100644
--- a/src/logger/raw.py
+++ b/src/logger/raw.py
@@ -1,9 +1,11 @@
-'''
- Onionr - Private P2P Communication
+"""Onionr - Private P2P Communication.
- Output raw data to file or terminal
-'''
-'''
+Output raw data to file or terminal
+"""
+import sys
+import os
+from . import settings, colors
+"""
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
@@ -16,14 +18,14 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see .
-'''
-import sys, os
-from . import settings, colors
+"""
colors = colors.Colors
+
+
def raw(data, fd = sys.stdout, terminal = False):
- '''
+ """
Outputs raw data to console without formatting
- '''
+ """
if terminal and (settings.get_settings() & settings.OUTPUT_TO_CONSOLE):
try:
@@ -33,8 +35,14 @@ def raw(data, fd = sys.stdout, terminal = False):
if settings.get_settings() & settings.OUTPUT_TO_FILE:
fdata = ''
try:
- with open(settings._outputfile, 'r') as file:
- fdata = file.read()
+ for _ in range(5):
+ try:
+ with open(settings._outputfile, 'r') as file:
+ fdata = file.read()
+ except UnicodeDecodeError:
+ pass
+ else:
+ break
except FileNotFoundError:
pass
fdata = fdata + '\n' + data
@@ -43,4 +51,4 @@ def raw(data, fd = sys.stdout, terminal = False):
fdata.pop(0)
fdata = '\n'.join(fdata)
with open(settings._outputfile, 'w') as file:
- file.write(fdata)
\ No newline at end of file
+ file.write(fdata)
diff --git a/src/onionrproofs/__init__.py b/src/onionrproofs/__init__.py
index 82d47af0..cfcc5165 100755
--- a/src/onionrproofs/__init__.py
+++ b/src/onionrproofs/__init__.py
@@ -1,9 +1,18 @@
-'''
- Onionr - Private P2P Communication
+"""Onionr - Private P2P Communication.
- Proof of work module
-'''
-'''
+Proof of work module
+"""
+import multiprocessing, time, math, threading, binascii, sys, json
+import nacl.encoding, nacl.hash, nacl.utils
+
+import config
+import logger
+from onionrblocks import onionrblockapi, storagecounter
+from onionrutils import bytesconverter
+from onionrcrypto import hashers
+
+from .blocknoncestart import BLOCK_NONCE_START_INT
+"""
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
@@ -16,31 +25,22 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see .
-'''
-import multiprocessing, time, math, threading, binascii, sys, json
-import nacl.encoding, nacl.hash, nacl.utils
-
-import config, logger
-from onionrblocks import onionrblockapi, storagecounter
-from onionrutils import bytesconverter
-from onionrcrypto import hashers
-
-from .blocknoncestart import BLOCK_NONCE_START_INT
+"""
config.reload()
def getDifficultyModifier():
- '''returns the difficulty modifier for block storage based
+ """returns the difficulty modifier for block storage based
on a variety of factors, currently only disk use.
- '''
+ """
percentUse = storagecounter.StorageCounter().get_percent()
difficultyIncrease = math.floor(4 * percentUse) # difficulty increase is a step function
return difficultyIncrease
def getDifficultyForNewBlock(data):
- '''
+ """
Get difficulty for block. Accepts size in integer, Block instance, or str/bytes full block contents
- '''
+ """
if isinstance(data, onionrblockapi.Block):
dataSizeInBytes = len(bytesconverter.str_to_bytes(data.getRaw()))
else:
@@ -54,15 +54,15 @@ def getDifficultyForNewBlock(data):
return retData
def getHashDifficulty(h: str):
- '''
+ """
Return the amount of leading zeroes in a hex hash string (hexHash)
- '''
+ """
return len(h) - len(h.lstrip('0'))
def hashMeetsDifficulty(hexHash):
- '''
+ """
Return bool for a hash string to see if it meets pow difficulty defined in config
- '''
+ """
hashDifficulty = getHashDifficulty(hexHash)
try:
@@ -138,9 +138,9 @@ class POW:
self.difficulty = newDiff
def getResult(self):
- '''
+ """
Returns the result then sets to false, useful to automatically clear the result
- '''
+ """
try:
retVal = self.result
@@ -151,9 +151,9 @@ class POW:
return retVal
def waitForResult(self):
- '''
+ """
Returns the result only when it has been found, False if not running and not found
- '''
+ """
result = False
try:
while True:
diff --git a/src/utils/gettransports.py b/src/utils/gettransports.py
index 7fa23b16..2e51a0e7 100644
--- a/src/utils/gettransports.py
+++ b/src/utils/gettransports.py
@@ -21,11 +21,28 @@ import filepaths
along with this program. If not, see .
"""
-files = [filepaths.tor_hs_address_file]
+files = []
+class _GetTor:
+ def __init__(self):
+ self.tor_hs = None
+
+ def get(self):
+ if self.tor_hs is None:
+ try:
+ with open(filepaths.tor_hs_address_file, 'r') as transport_file:
+ self.tor_hs = transport_file.read().strip()
+ if not self.tor_hs:
+ self.tor_hs = None
+ except FileNotFoundError:
+ pass
+ return self.tor_hs
+
+_tor_getter = _GetTor()
+
def get():
- transports = []
+ transports = [_tor_getter.get()]
for file in files:
try:
with open(file, 'r') as transport_file: