test
parent
7738de1c28
commit
6e55636e78
|
@ -150,14 +150,17 @@ class API:
|
|||
|
||||
self.validateHost('private')
|
||||
|
||||
if config.get('www.public.guess_mime', True):
|
||||
self.mimeType = API.guessMime(path)
|
||||
|
||||
endTime = math.floor(time.time())
|
||||
elapsed = endTime - startTime
|
||||
|
||||
if not hmac.compare_digest(timingToken, self.timeBypassToken):
|
||||
if elapsed < self._privateDelayTime:
|
||||
if (elapsed < self._privateDelayTime) and config.get('www.private.timing_protection', True):
|
||||
time.sleep(self._privateDelayTime - elapsed)
|
||||
|
||||
return send_from_directory('static-data/www/private/', path)
|
||||
return send_from_directory(config.get('www.private.path', 'static-data/www/private/'), path)
|
||||
|
||||
@app.route('/www/public/<path:path>')
|
||||
def www_public(path):
|
||||
|
@ -166,7 +169,10 @@ class API:
|
|||
|
||||
self.validateHost('public')
|
||||
|
||||
return send_from_directory('static-data/www/public/', path)
|
||||
if config.get('www.public.guess_mime', True):
|
||||
self.mimeType = API.guessMime(path)
|
||||
|
||||
return send_from_directory(config.get('www.public.path', 'static-data/www/public/'), path)
|
||||
|
||||
@app.route('/ui/<path:path>')
|
||||
def ui_private(path):
|
||||
|
|
|
@ -87,8 +87,8 @@ class OnionrCommunicatorDaemon:
|
|||
OnionrCommunicatorTimers(self, self.daemonCommands, 5)
|
||||
OnionrCommunicatorTimers(self, self.detectAPICrash, 5)
|
||||
peerPoolTimer = OnionrCommunicatorTimers(self, self.getOnlinePeers, 60, maxThreads=1)
|
||||
OnionrCommunicatorTimers(self, self.lookupBlocks, self._core.config.get('timers.lookupBlocks'), requiresPeer=True, maxThreads=1)
|
||||
OnionrCommunicatorTimers(self, self.getBlocks, self._core.config.get('timers.getBlocks'), requiresPeer=True)
|
||||
OnionrCommunicatorTimers(self, self.lookupBlocks, self._core.config.get('timers.lookup_blocks'), requiresPeer=True, maxThreads=1)
|
||||
OnionrCommunicatorTimers(self, self.getBlocks, self._core.config.get('timers.get_blocks'), requiresPeer=True)
|
||||
OnionrCommunicatorTimers(self, self.clearOfflinePeer, 58)
|
||||
OnionrCommunicatorTimers(self, self.daemonTools.cleanOldBlocks, 65)
|
||||
OnionrCommunicatorTimers(self, self.lookupKeys, 60, requiresPeer=True)
|
||||
|
@ -252,7 +252,7 @@ class OnionrCommunicatorDaemon:
|
|||
except AttributeError:
|
||||
pass
|
||||
# Punish peer for sharing invalid block (not always malicious, but is bad regardless)
|
||||
onionrpeers.PeerProfiles(peerUsed, self._core).addScore(-50)
|
||||
onionrpeers.PeerProfiles(peerUsed, self._core).addScore(-50)
|
||||
logger.warn('Block hash validation failed for ' + blockHash + ' got ' + tempHash)
|
||||
if removeFromQueue:
|
||||
self.blockQueue.remove(blockHash) # remove from block queue both if success or false
|
||||
|
@ -298,7 +298,7 @@ class OnionrCommunicatorDaemon:
|
|||
'''Manages the self.onlinePeers attribute list, connects to more peers if we have none connected'''
|
||||
|
||||
logger.info('Refreshing peer pool.')
|
||||
maxPeers = int(config.get('peers.maxConnect'))
|
||||
maxPeers = int(config.get('peers.max_connect', 10))
|
||||
needed = maxPeers - len(self.onlinePeers)
|
||||
|
||||
for i in range(needed):
|
||||
|
@ -331,7 +331,7 @@ class OnionrCommunicatorDaemon:
|
|||
raise onionrexceptions.InvalidAddress('Will not attempt connection test to invalid address')
|
||||
else:
|
||||
peerList = self._core.listAdders()
|
||||
|
||||
|
||||
peerList = onionrpeers.getScoreSortedPeerList(self._core)
|
||||
|
||||
if len(peerList) == 0 or useBootstrap:
|
||||
|
@ -339,7 +339,7 @@ class OnionrCommunicatorDaemon:
|
|||
self.addBootstrapListToPeerList(peerList)
|
||||
|
||||
for address in peerList:
|
||||
if not config.get('tor.v3onions') and len(address) == 62:
|
||||
if not config.get('tor.v3_onions') and len(address) == 62:
|
||||
continue
|
||||
if len(address) == 0 or address in tried or address in self.onlinePeers or address in self.cooldownPeer:
|
||||
continue
|
||||
|
@ -352,7 +352,7 @@ class OnionrCommunicatorDaemon:
|
|||
self.onlinePeers.append(address)
|
||||
self.connectTimes[address] = self._core._utils.getEpoch()
|
||||
retData = address
|
||||
|
||||
|
||||
# add peer to profile list if they're not in it
|
||||
for profile in self.peerProfiles:
|
||||
if profile.address == address:
|
||||
|
@ -416,7 +416,7 @@ class OnionrCommunicatorDaemon:
|
|||
self._core.setAddressInfo(peer, 'lastConnect', self._core._utils.getEpoch())
|
||||
self.getPeerProfileInstance(peer).addScore(1)
|
||||
return retData
|
||||
|
||||
|
||||
def getPeerProfileInstance(self, peer):
|
||||
'''Gets a peer profile instance from the list of profiles, by address name'''
|
||||
for i in self.peerProfiles:
|
||||
|
@ -543,7 +543,7 @@ class OnionrCommunicatorTimers:
|
|||
if self.makeThread:
|
||||
for i in range(self.threadAmount):
|
||||
if self.daemonInstance.threadCounts[self.timerFunction.__name__] >= self.maxThreads:
|
||||
logger.warn(self.timerFunction.__name__ + ' has too many current threads to start anymore.')
|
||||
logger.warn('%s is currently using the maximum number of threads, not starting another.' % self.timerFunction.__name__)
|
||||
else:
|
||||
self.daemonInstance.threadCounts[self.timerFunction.__name__] += 1
|
||||
newThread = threading.Thread(target=self.timerFunction)
|
||||
|
|
|
@ -126,7 +126,7 @@ class Core:
|
|||
'''
|
||||
Add an address to the address database (only tor currently)
|
||||
'''
|
||||
if address == config.get('i2p.ownAddr', None):
|
||||
if address == config.get('i2p.own_addr', None):
|
||||
|
||||
return False
|
||||
if self._utils.validateID(address):
|
||||
|
@ -190,7 +190,7 @@ class Core:
|
|||
blockFile = 'data/blocks/' + block + '.dat'
|
||||
dataSize = 0
|
||||
try:
|
||||
''' Get size of data when loaded as an object/var, rather than on disk,
|
||||
''' Get size of data when loaded as an object/var, rather than on disk,
|
||||
to avoid conflict with getsizeof when saving blocks
|
||||
'''
|
||||
with open(blockFile, 'r') as data:
|
||||
|
@ -273,7 +273,7 @@ class Core:
|
|||
|
||||
if not type(data) is bytes:
|
||||
data = data.encode()
|
||||
|
||||
|
||||
dataHash = self._getSha3Hash(data)
|
||||
|
||||
if type(dataHash) is bytes:
|
||||
|
@ -722,7 +722,7 @@ class Core:
|
|||
metadata['sig'] = signature
|
||||
metadata['signer'] = signer
|
||||
metadata['time'] = str(self._utils.getEpoch())
|
||||
|
||||
|
||||
# send block data (and metadata) to POW module to get tokenized block data
|
||||
proof = onionrproofs.POW(metadata, data)
|
||||
payload = proof.waitForResult()
|
||||
|
|
|
@ -49,7 +49,7 @@ class NetController:
|
|||
Generate a torrc file for our tor instance
|
||||
'''
|
||||
hsVer = '# v2 onions'
|
||||
if config.get('tor.v3onions'):
|
||||
if config.get('tor.v3_onions'):
|
||||
hsVer = 'HiddenServiceVersion 3'
|
||||
logger.info('Using v3 onions :)')
|
||||
if os.path.exists(self.torConfigLocation):
|
||||
|
|
|
@ -762,7 +762,7 @@ class Block:
|
|||
return False
|
||||
|
||||
# dump old cached blocks if the size exeeds the maximum
|
||||
if sys.getsizeof(Block.blockCacheOrder) >= config.get('allocations.blockCacheTotal', 50000000): # 50MB default cache size
|
||||
if sys.getsizeof(Block.blockCacheOrder) >= config.get('allocations.block_cache_total', 50000000): # 50MB default cache size
|
||||
del Block.blockCache[blockCacheOrder.pop(0)]
|
||||
|
||||
# cache block content
|
||||
|
|
|
@ -63,14 +63,14 @@ class DaemonTools:
|
|||
logger.warn('Network check failed, are you connected to the internet?')
|
||||
self.daemon.isOnline = False
|
||||
self.daemon.decrementThreadCount('netCheck')
|
||||
|
||||
|
||||
def cleanOldBlocks(self):
|
||||
'''Delete old blocks if our disk allocation is full/near full'''
|
||||
while self.daemon._core._utils.storageCounter.isFull():
|
||||
oldest = self.daemon._core.getBlockList()[0]
|
||||
self.daemon._core._blacklist.addToDB(oldest)
|
||||
self.daemon._core.removeBlock(oldest)
|
||||
logger.info('Deleted block: %s' % (oldest,))
|
||||
logger.info('Deleted block: %s' % (oldest,))
|
||||
self.daemon.decrementThreadCount('cleanOldBlocks')
|
||||
|
||||
def cooldownPeer(self):
|
||||
|
@ -88,7 +88,7 @@ class DaemonTools:
|
|||
del self.daemon.cooldownPeer[peer]
|
||||
|
||||
# Cool down a peer, if we have max connections alive for long enough
|
||||
if onlinePeerAmount >= self.daemon._core.config.get('peers.maxConnect'):
|
||||
if onlinePeerAmount >= self.daemon._core.config.get('peers.max_connect', 10):
|
||||
finding = True
|
||||
while finding:
|
||||
try:
|
||||
|
@ -102,4 +102,4 @@ class DaemonTools:
|
|||
else:
|
||||
self.daemon.removeOnlinePeer(toCool)
|
||||
self.daemon.cooldownPeer[toCool] = self.daemon._core._utils.getEpoch()
|
||||
self.daemon.decrementThreadCount('cooldownPeer')
|
||||
self.daemon.decrementThreadCount('cooldownPeer')
|
||||
|
|
|
@ -44,7 +44,7 @@ class PeerProfiles:
|
|||
except (TypeError, ValueError) as e:
|
||||
self.success = 0
|
||||
self.score = self.success
|
||||
|
||||
|
||||
def saveScore(self):
|
||||
'''Save the node's score to the database'''
|
||||
self.coreInst.setAddressInfo(self.address, 'success', self.score)
|
||||
|
@ -79,8 +79,8 @@ def peerCleanup(coreInst):
|
|||
logger.info('Cleaning peers...')
|
||||
config.reload()
|
||||
|
||||
minScore = int(config.get('peers.minimumScore'))
|
||||
maxPeers = int(config.get('peers.maxStoredPeers'))
|
||||
minScore = int(config.get('peers.minimum_score', -100))
|
||||
maxPeers = int(config.get('peers.max_stored', 5000))
|
||||
|
||||
adders = getScoreSortedPeerList(coreInst)
|
||||
adders.reverse()
|
||||
|
@ -102,4 +102,4 @@ def peerCleanup(coreInst):
|
|||
logger.warn('Removed address ' + address + '.')
|
||||
|
||||
# Unban probably not malicious peers TODO improve
|
||||
coreInst._blacklist.deleteExpired(dataType=1)
|
||||
coreInst._blacklist.deleteExpired(dataType=1)
|
||||
|
|
|
@ -131,11 +131,11 @@ class OnionrUtils:
|
|||
for adder in newAdderList.split(','):
|
||||
adder = adder.strip()
|
||||
if not adder in self._core.listAdders(randomOrder = False) and adder != self.getMyAddress() and not self._core._blacklist.inBlacklist(adder):
|
||||
if not config.get('tor.v3onions') and len(adder) == 62:
|
||||
if not config.get('tor.v3_onions') and len(adder) == 62:
|
||||
continue
|
||||
if self._core.addAddress(adder):
|
||||
# Check if we have the maxmium amount of allowed stored peers
|
||||
if config.get('peers.maxStoredPeers') > len(self._core.listAdders()):
|
||||
if config.get('peers.max_stored') > len(self._core.listAdders()):
|
||||
logger.info('Added %s to db.' % adder, timestamp = True)
|
||||
retVal = True
|
||||
else:
|
||||
|
@ -635,7 +635,7 @@ class OnionrUtils:
|
|||
else:
|
||||
self.powSalt = retData
|
||||
return retData
|
||||
|
||||
|
||||
def strToBytes(self, data):
|
||||
try:
|
||||
data = data.encode()
|
||||
|
@ -648,7 +648,7 @@ class OnionrUtils:
|
|||
except AttributeError:
|
||||
pass
|
||||
return data
|
||||
|
||||
|
||||
def checkNetwork(self, torPort=0):
|
||||
'''Check if we are connected to the internet (through Tor)'''
|
||||
retData = False
|
||||
|
@ -656,7 +656,7 @@ class OnionrUtils:
|
|||
try:
|
||||
with open('static-data/connect-check.txt', 'r') as connectTest:
|
||||
connectURLs = connectTest.read().split(',')
|
||||
|
||||
|
||||
for url in connectURLs:
|
||||
if self.doGetRequest(url, port=torPort) != False:
|
||||
retData = True
|
||||
|
@ -689,4 +689,4 @@ def humanSize(num, suffix='B'):
|
|||
if abs(num) < 1024.0:
|
||||
return "%.1f %s%s" % (num, unit, suffix)
|
||||
num /= 1024.0
|
||||
return "%.1f %s%s" % (num, 'Yi', suffix)
|
||||
return "%.1f %s%s" % (num, 'Yi', suffix)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"general" : {
|
||||
"dev_mode": true,
|
||||
"dev_mode" : true,
|
||||
"display_header" : true,
|
||||
|
||||
"direct_connect" : {
|
||||
|
@ -11,11 +11,16 @@
|
|||
|
||||
"www" : {
|
||||
"public" : {
|
||||
"run" : true
|
||||
"run" : true,
|
||||
"path" : "static-data/www/public/",
|
||||
"guess_mime" : true
|
||||
},
|
||||
|
||||
"private" : {
|
||||
"run" : true
|
||||
"run" : true,
|
||||
"path" : "static-data/www/private/",
|
||||
"guess_mime" : true,
|
||||
"timing_protection" : true
|
||||
},
|
||||
|
||||
"ui" : {
|
||||
|
@ -28,41 +33,43 @@
|
|||
|
||||
},
|
||||
|
||||
"log": {
|
||||
"file": {
|
||||
"output": true,
|
||||
"path": "data/output.log"
|
||||
"log" : {
|
||||
"file" : {
|
||||
"output" : true,
|
||||
"path" : "data/output.log"
|
||||
},
|
||||
|
||||
"console": {
|
||||
"output": true,
|
||||
"color": true
|
||||
"console" : {
|
||||
"output" : true,
|
||||
"color" : true
|
||||
}
|
||||
},
|
||||
|
||||
"tor" : {
|
||||
"v3onions": false
|
||||
"v3onions" : false
|
||||
},
|
||||
|
||||
"i2p":{
|
||||
"host": false,
|
||||
"connect": true,
|
||||
"ownAddr": ""
|
||||
"i2p" : {
|
||||
"host" : false,
|
||||
"connect" : true,
|
||||
"own_addr" : ""
|
||||
},
|
||||
|
||||
"allocations":{
|
||||
"disk": 10000000000,
|
||||
"netTotal": 1000000000,
|
||||
"blockCache": 5000000,
|
||||
"blockCacheTotal": 50000000
|
||||
"allocations" : {
|
||||
"disk" : 10000000000,
|
||||
"net_total" : 1000000000,
|
||||
"blockCache" : 5000000,
|
||||
"blockCacheTotal" : 50000000
|
||||
},
|
||||
"peers":{
|
||||
"minimumScore": -100,
|
||||
"maxStoredPeers": 5000,
|
||||
"maxConnect": 10
|
||||
|
||||
"peers" : {
|
||||
"minimum_score" : -100,
|
||||
"max_stored_peers" : 5000,
|
||||
"max_connect" : 10
|
||||
},
|
||||
"timers":{
|
||||
"lookupBlocks": 25,
|
||||
"getBlocks": 30
|
||||
|
||||
"timers" : {
|
||||
"lookup_blocks" : 25,
|
||||
"get_blocks" : 30
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue