From 8a4102cbd101fa50d03e08d8489f0a738b4f4ba8 Mon Sep 17 00:00:00 2001 From: Kevin Date: Sun, 1 Dec 2019 08:10:00 +0000 Subject: [PATCH] Merge nick's fixes --- src/apiservers/private/__init__.py | 5 +- .../cryptoutils/replayvalidation.py | 5 +- src/onionrpeers/peercleanup.py | 6 +- src/utils/reconstructhash.py | 16 +++- static-data/www/board/board.js | 79 +++++++++---------- 5 files changed, 52 insertions(+), 59 deletions(-) diff --git a/src/apiservers/private/__init__.py b/src/apiservers/private/__init__.py index af80be37..80b608b6 100644 --- a/src/apiservers/private/__init__.py +++ b/src/apiservers/private/__init__.py @@ -85,10 +85,7 @@ class PrivateAPI: logger.error("client password needs to be set") return False try: - if not hmac.compare_digest(self.clientToken, token): - return False - else: - return True + return hmac.compare_digest(self.clientToken, token) except TypeError: return False diff --git a/src/onionrcrypto/cryptoutils/replayvalidation.py b/src/onionrcrypto/cryptoutils/replayvalidation.py index 59c338eb..fc8e8fd0 100644 --- a/src/onionrcrypto/cryptoutils/replayvalidation.py +++ b/src/onionrcrypto/cryptoutils/replayvalidation.py @@ -1,6 +1,3 @@ from onionrutils import epoch def replay_timestamp_validation(timestamp): - if epoch.get_epoch() - int(timestamp) > 2419200: - return False - else: - return True \ No newline at end of file + return epoch.get_epoch() - int(timestamp) <= 2419200 \ No newline at end of file diff --git a/src/onionrpeers/peercleanup.py b/src/onionrpeers/peercleanup.py index c332828b..6173a041 100644 --- a/src/onionrpeers/peercleanup.py +++ b/src/onionrpeers/peercleanup.py @@ -41,10 +41,8 @@ def peer_cleanup(): if peerprofiles.PeerProfiles(address).score < min_score: keydb.removekeys.remove_address(address) try: - if (int(epoch.get_epoch()) - int(keydb.transportinfo.get_address_info(address, 'lastConnect'))) >= 600: - expireTime = 600 - else: - expireTime = 86400 + lastConnect = int(keydb.transportinfo.get_address_info(address, 'lastConnect')) + expireTime = 86400 - int(epoch.get_epoch()) - lastConnect blacklist.addToDB(address, dataType=1, expire=expireTime) except sqlite3.IntegrityError: #TODO just make sure its not a unique constraint issue pass diff --git a/src/utils/reconstructhash.py b/src/utils/reconstructhash.py index ae50c0b2..435d25ec 100644 --- a/src/utils/reconstructhash.py +++ b/src/utils/reconstructhash.py @@ -1,8 +1,10 @@ ''' Onionr - Private P2P Communication - z-fill (zero fill) a string to a specific length, intended for reconstructing block hashes + z-fill (zero fill) a string to a specific length + intended for reconstructing block hashes ''' +from typing import Union ''' 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 @@ -17,10 +19,16 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . ''' -def reconstruct_hash(hex_hash, length=64): + + +def reconstruct_hash(hex_hash: Union[str, bytes], + length: int = 64) -> Union[str, bytes]: + """Pad hash hex string with zeros, return result""" return hex_hash.zfill(length) -def deconstruct_hash(hex_hash): + +def deconstruct_hash(hex_hash: Union[str, bytes]) -> Union[str, bytes]: + """Remove leading zeros from hex hash, return result""" new_hash = '' ret_bytes = False try: @@ -40,4 +48,4 @@ def deconstruct_hash(hex_hash): if ret_bytes: new_hash = new_hash.encode() - return new_hash \ No newline at end of file + return new_hash diff --git a/static-data/www/board/board.js b/static-data/www/board/board.js index c3d7f556..12b2e89f 100755 --- a/static-data/www/board/board.js +++ b/static-data/www/board/board.js @@ -17,10 +17,6 @@ along with this program. If not, see . */ -requested = [] - -var windowHeight = window.innerHeight; -webpassword = webpass newPostForm = document.getElementById('addMsg') firstLoad = true lastLoadedBoard = 'global' @@ -30,14 +26,12 @@ loadingTimeout = 8000 let toggleLoadingMessage = function(){ switch (loadingMessage.style.display){ - case "block": - case "inline": case "inline-block": loadingMessage.style.display = "none" - break; + break; default: loadingMessage.style.display = "initial" - break; + break; } } @@ -45,37 +39,36 @@ fetch('/flow/version', { method: 'GET', headers: { "token": webpass - }}) -.then((resp) => resp.text()) -.then(function(data) { - document.getElementById('circlesVersion').innerText = data +}}) +.then((ver) => ver.text()) +.then(function(ver) { + document.getElementById('circlesVersion').innerText = ver }) -function appendMessages(msg, blockHash, beforeHash, channel){ - if (channel !== document.getElementById('feedIDInput').value){return} +function appendMessages(msg, blockHash, beforeHash, channel) { + if (channel !== document.getElementById('feedIDInput').value) return // ignore if channel name isn't matching + if (msg.length == 0) return // ignore empty messages + var humanDate = new Date(0) - if (msg.length == 0){ - return - } - //var msg = JSON.parse(msg) - var el = document.createElement('div') var msgDate = msg['meta']['time'] var feed = document.getElementById("feed") var beforeEl = null if (msgDate === undefined){ msgDate = 'unknown' - } - else{ + } else { humanDate.setUTCSeconds(msgDate) msgDate = humanDate.toLocaleTimeString() + ' ' + humanDate.toLocaleDateString() } + + var el = document.createElement('div') el.className = 'entry' el.innerText = msg['content'] - if (beforeHash !== null){ - for (x = 0; x < feed.children.length; x++){ - if (feed.children[x].getAttribute('data-bl') === beforeHash){ - beforeEl = feed.children[x] + + if (beforeHash !== null) { + for (i = 0; i < feed.children.length; i++) { + if (feed.children[i].getAttribute('data-bl') === beforeHash) { + beforeEl = feed.children[i] } } } @@ -133,12 +126,13 @@ function getBlocks(){ var feed = document.getElementById("feed") var ch = document.getElementById('feedIDInput').value if (lastLoadedBoard !== ch){ + requested = [] + toggleLoadingMessage() loadedAny = false - while (feed.firstChild) { - feed.removeChild(feed.firstChild); - } - requested = [] // reset requested list + + while (feed.firstChild) feed.removeChild(feed.firstChild); // remove all messages from feed + setTimeout(function(){ if (! loadedAny && ch == document.getElementById('feedIDInput').value){ PNotify.notice("There are no posts for " + ch + ". You can be the first!") @@ -156,13 +150,12 @@ function getBlocks(){ var blockList = feedText.split(',') for (i = 0; i < blockList.length; i++){ - while (blockList[i].length < 64) { blockList[i] = "0" + blockList[i] } + blockList[i] = "0".repeat(64 - blockList[i].length) + blockList[i] // pad hash with zeroes + if (! requested.includes(blockList[i])){ - if (blockList[i].length == 0){ - continue - } - requested.push(blockList[i]) - loadMessage(blockList[i], blockList, i, ch) + if (blockList[i].length == 0) continue + else requested.push(blockList[i]) + loadMessage(blockList[i], blockList, i, ch); } } } @@ -172,15 +165,14 @@ function loadMessage(blockHash, blockList, count, channel){ method: 'GET', headers: { "token": webpass - }}) + }}) .then((resp) => resp.json()) .then(function(data) { let before = blockList[count - 1] let delay = 2000 if (typeof before == "undefined"){ before = null - } - else{ + } else { let existing = document.getElementsByClassName('cMsgBox') for (x = 0; x < existing.length; x++){ if (existing[x].getAttribute('data-bl') === before){ @@ -190,10 +182,10 @@ function loadMessage(blockHash, blockList, count, channel){ } setTimeout(function(){appendMessages(data, blockHash, before, channel)}, delay) //appendMessages(data, blockHash, before) - }) + }) } -document.getElementById('refreshFeed').onclick = function(){ +document.getElementById('refreshFeed').onclick = function() { getBlocks() } @@ -211,7 +203,8 @@ newPostForm.onsubmit = function(){ headers: { "content-type": "application/json", "token": webpass - }}) + } + }) .then((resp) => resp.text()) // Transform the data into json .then(function(data) { newPostForm.style.display = 'block' @@ -223,8 +216,8 @@ newPostForm.onsubmit = function(){ } PNotify.success({ text: "Message queued for posting" - }) + }) setTimeout(function(){getBlocks()}, 500) - }) + }) return false }