renamed onionr dir and bugfixes/linting progress
This commit is contained in:
parent
2b996da17f
commit
720efe4fca
226 changed files with 179 additions and 142 deletions
0
src/utils/__init__.py
Normal file
0
src/utils/__init__.py
Normal file
17
src/utils/cachedconfig/__init__.py
Normal file
17
src/utils/cachedconfig/__init__.py
Normal file
|
@ -0,0 +1,17 @@
|
|||
from onionrutils import localcommand
|
||||
import config
|
||||
config.reload()
|
||||
running_detected = False # if we know the api server is running
|
||||
first_get = True
|
||||
|
||||
def config_get(key):
|
||||
ret_data = False
|
||||
if running_detected or first_get:
|
||||
first_get = False
|
||||
ret_data = localcommand.local_command('/config/get/' + key)
|
||||
if ret_data == False:
|
||||
running_detected = False
|
||||
ret_data = config.get(key)
|
||||
else:
|
||||
running_detected = False
|
||||
return ret_data
|
38
src/utils/createdirs.py
Normal file
38
src/utils/createdirs.py
Normal file
|
@ -0,0 +1,38 @@
|
|||
'''
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
Create required Onionr directories
|
||||
'''
|
||||
'''
|
||||
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/>.
|
||||
'''
|
||||
import os
|
||||
from . import identifyhome
|
||||
from onionrsetup import dbcreator
|
||||
import filepaths
|
||||
home = identifyhome.identify_home()
|
||||
|
||||
def create_dirs():
|
||||
"""Creates onionr data-related directories in order of the hardcoded list below,
|
||||
then trigger creation of DBs"""
|
||||
gen_dirs = [home, filepaths.block_data_location, filepaths.contacts_location, filepaths.export_location]
|
||||
for path in gen_dirs:
|
||||
if not os.path.exists(path):
|
||||
os.mkdir(path)
|
||||
|
||||
for db in dbcreator.create_funcs:
|
||||
try:
|
||||
db()
|
||||
except FileExistsError:
|
||||
pass
|
28
src/utils/definewait.py
Normal file
28
src/utils/definewait.py
Normal file
|
@ -0,0 +1,28 @@
|
|||
'''
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
Waits for a key to become set in a dictionary, even to None, 0 or empty string
|
||||
'''
|
||||
'''
|
||||
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/>.
|
||||
'''
|
||||
import time
|
||||
def define_wait(dictionary, key, delay: int = 0):
|
||||
while True:
|
||||
try:
|
||||
return dictionary[key]
|
||||
except KeyError:
|
||||
pass
|
||||
if delay > 0:
|
||||
time.sleep(delay)
|
34
src/utils/getconsolewidth.py
Normal file
34
src/utils/getconsolewidth.py
Normal file
|
@ -0,0 +1,34 @@
|
|||
'''
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
Get the width of the terminal screen
|
||||
'''
|
||||
'''
|
||||
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/>.
|
||||
'''
|
||||
import os
|
||||
def get_console_width():
|
||||
'''
|
||||
Returns an integer, the width of the terminal/cmd window
|
||||
'''
|
||||
|
||||
columns = 80
|
||||
|
||||
try:
|
||||
columns = int(os.popen('stty size', 'r').read().split()[1])
|
||||
except:
|
||||
# if it errors, it's probably windows, so default to 80.
|
||||
pass
|
||||
|
||||
return columns
|
30
src/utils/gethostname.py
Normal file
30
src/utils/gethostname.py
Normal file
|
@ -0,0 +1,30 @@
|
|||
'''
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
Get the node's Tor hostname
|
||||
'''
|
||||
'''
|
||||
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/>.
|
||||
'''
|
||||
from . import identifyhome
|
||||
import filepaths
|
||||
def get_hostname():
|
||||
try:
|
||||
print(identifyhome.identify_home())
|
||||
with open(identifyhome.identify_home() + '/hs/hostname', 'r') as hostname:
|
||||
return hostname.read().strip()
|
||||
except FileNotFoundError:
|
||||
return "Not Generated"
|
||||
except Exception:
|
||||
return None
|
17
src/utils/gettransports.py
Normal file
17
src/utils/gettransports.py
Normal file
|
@ -0,0 +1,17 @@
|
|||
import filepaths, time
|
||||
|
||||
files = [filepaths.tor_hs_address_file]
|
||||
|
||||
def get():
|
||||
transports = []
|
||||
for file in files:
|
||||
try:
|
||||
with open(file, 'r') as transport_file:
|
||||
transports.append(transport_file.read().strip())
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
else:
|
||||
break
|
||||
else:
|
||||
time.sleep(1)
|
||||
return list(transports)
|
4
src/utils/hastor.py
Normal file
4
src/utils/hastor.py
Normal file
|
@ -0,0 +1,4 @@
|
|||
import netcontroller
|
||||
|
||||
def has_tor():
|
||||
return netcontroller.tor_binary() is not None
|
41
src/utils/identifyhome.py
Normal file
41
src/utils/identifyhome.py
Normal file
|
@ -0,0 +1,41 @@
|
|||
'''
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
Identify a data directory for Onionr
|
||||
'''
|
||||
'''
|
||||
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/>.
|
||||
'''
|
||||
import os, platform
|
||||
|
||||
def identify_home():
|
||||
|
||||
path = os.environ.get('ONIONR_HOME', None)
|
||||
|
||||
if path is None:
|
||||
system = platform.system()
|
||||
if system == 'Linux':
|
||||
path = os.path.expanduser('~') + '/.local/share/onionr/'
|
||||
elif system == 'Windows':
|
||||
path = os.path.expanduser('~') + '\\AppData\\Local\\onionr\\'
|
||||
elif system == 'Darwin':
|
||||
path = os.path.expanduser('~' + '/Library/Application Support/onionr/')
|
||||
else:
|
||||
path = 'data/'
|
||||
else:
|
||||
path = os.path.abspath(path)
|
||||
if not path.endswith('/'):
|
||||
path += '/'
|
||||
|
||||
return path
|
15
src/utils/logoheader.py
Normal file
15
src/utils/logoheader.py
Normal file
|
@ -0,0 +1,15 @@
|
|||
import sys, os
|
||||
from . import readstatic
|
||||
import logger
|
||||
from etc import onionrvalues
|
||||
def header(message = logger.colors.fg.pink + logger.colors.bold + 'Onionr' + logger.colors.reset + logger.colors.fg.pink + ' has started.'):
|
||||
if onionrvalues.DEVELOPMENT_MODE:
|
||||
return
|
||||
header_path = readstatic.get_static_dir() + 'header.txt'
|
||||
if os.path.exists(header_path) and logger.settings.get_level() <= logger.settings.LEVEL_INFO:
|
||||
with open(header_path, 'rb') as file:
|
||||
# only to stdout, not file or log or anything
|
||||
sys.stderr.write(file.read().decode().replace('P', logger.colors.fg.pink).replace('W', logger.colors.reset + logger.colors.bold).replace('G', logger.colors.fg.green).replace('\n', logger.colors.reset + '\n').replace('B', logger.colors.bold))
|
||||
|
||||
if not message is None:
|
||||
logger.info(logger.colors.fg.lightgreen + '-> ' + str(message) + logger.colors.reset + logger.colors.fg.lightgreen + ' <-\n', terminal=True)
|
36
src/utils/netutils.py
Executable file
36
src/utils/netutils.py
Executable file
|
@ -0,0 +1,36 @@
|
|||
'''
|
||||
Onionr - P2P Microblogging Platform & Social network
|
||||
|
||||
OnionrUtils offers various useful functions to Onionr networking.
|
||||
'''
|
||||
'''
|
||||
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/>.
|
||||
'''
|
||||
from onionrutils import basicrequests
|
||||
from . import readstatic
|
||||
from onionrcrypto import cryptoutils
|
||||
def checkNetwork(torPort=0):
|
||||
'''Check if we are connected to the internet (through Tor)'''
|
||||
retData = False
|
||||
connectURLs = []
|
||||
try:
|
||||
connectURLs = cryptoutils.random_shuffle(readstatic.read_static('connect-check.txt').split(','))
|
||||
|
||||
for url in connectURLs:
|
||||
if basicrequests.do_get_request(url, port=torPort, ignoreAPI=True) != False:
|
||||
retData = True
|
||||
break
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
return retData
|
47
src/utils/networkmerger.py
Executable file
47
src/utils/networkmerger.py
Executable file
|
@ -0,0 +1,47 @@
|
|||
'''
|
||||
Onionr - P2P Microblogging Platform & Social network
|
||||
|
||||
Merges peer and block lists
|
||||
'''
|
||||
'''
|
||||
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/>.
|
||||
'''
|
||||
import logger
|
||||
from coredb import keydb
|
||||
import config
|
||||
from onionrblocks import onionrblacklist
|
||||
from utils import gettransports
|
||||
def mergeAdders(newAdderList):
|
||||
'''
|
||||
Merge peer adders list to our database
|
||||
'''
|
||||
blacklist = onionrblacklist.OnionrBlackList()
|
||||
retVal = False
|
||||
if newAdderList != False:
|
||||
for adder in newAdderList.split(','):
|
||||
adder = adder.strip()
|
||||
if not adder in keydb.listkeys.list_adders(randomOrder = False) and not adder in gettransports.get() and not blacklist.inBlacklist(adder):
|
||||
if not config.get('tor.v3onions', True) and len(adder) == 62:
|
||||
continue
|
||||
if keydb.addkeys.add_address(adder):
|
||||
# Check if we have the maximum amount of allowed stored peers
|
||||
if config.get('peers.max_stored_peers') > len(keydb.listkeys.list_adders()):
|
||||
logger.info('Added %s to db.' % adder, timestamp = True)
|
||||
retVal = True
|
||||
else:
|
||||
logger.warn('Reached the maximum amount of peers in the net database as allowed by your config.')
|
||||
else:
|
||||
pass
|
||||
#logger.debug('%s is either our address or already in our DB' % adder)
|
||||
return retVal
|
35
src/utils/readstatic.py
Normal file
35
src/utils/readstatic.py
Normal file
|
@ -0,0 +1,35 @@
|
|||
"""
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
module to get static directory and read static data files
|
||||
"""
|
||||
"""
|
||||
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/>.
|
||||
"""
|
||||
|
||||
from typing import Union
|
||||
import os
|
||||
def get_static_dir()->str:
|
||||
return os.path.dirname(os.path.realpath(__file__)) + '/../../static-data/'
|
||||
|
||||
def read_static(file:str, ret_bin:bool=False)->Union[str, bytes]:
|
||||
static_file = get_static_dir() + file
|
||||
|
||||
if ret_bin:
|
||||
mode = 'rb'
|
||||
else:
|
||||
mode = 'r'
|
||||
with open(static_file, mode, encoding='utf-8') as f:
|
||||
data = f.read()
|
||||
return data
|
43
src/utils/reconstructhash.py
Normal file
43
src/utils/reconstructhash.py
Normal file
|
@ -0,0 +1,43 @@
|
|||
'''
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
z-fill (zero fill) a string to a specific length, intended for reconstructing block hashes
|
||||
'''
|
||||
'''
|
||||
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/>.
|
||||
'''
|
||||
def reconstruct_hash(hex_hash, length=64):
|
||||
return hex_hash.zfill(length)
|
||||
|
||||
def deconstruct_hash(hex_hash):
|
||||
new_hash = ''
|
||||
ret_bytes = False
|
||||
try:
|
||||
hex_hash = hex_hash.decode()
|
||||
ret_bytes = True
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
c = 0
|
||||
for x in hex_hash:
|
||||
if x == '0':
|
||||
c += 1
|
||||
else:
|
||||
break
|
||||
new_hash = hex_hash[c:]
|
||||
|
||||
if ret_bytes:
|
||||
|
||||
new_hash = new_hash.encode()
|
||||
return new_hash
|
7
src/utils/safezip.py
Normal file
7
src/utils/safezip.py
Normal file
|
@ -0,0 +1,7 @@
|
|||
# safe unzip https://stackoverflow.com/a/36583849
|
||||
def safe_unzip(zip_file, extractpath='.'):
|
||||
with zipfile.ZipFile(zip_file, 'r') as zf:
|
||||
for member in zf.infolist():
|
||||
abspath = os.path.abspath(os.path.join(extractpath, member.filename))
|
||||
if abspath.startswith(os.path.abspath(extractpath)):
|
||||
zf.extract(member, extractpath)
|
27
src/utils/sizeutils.py
Normal file
27
src/utils/sizeutils.py
Normal file
|
@ -0,0 +1,27 @@
|
|||
import sqlite3, os
|
||||
from onionrutils import stringvalidators
|
||||
def human_size(num, suffix='B'):
|
||||
'''
|
||||
Converts from bytes to a human readable format.
|
||||
'''
|
||||
for unit in ['', 'K', 'M', 'G', 'T', 'P', 'E', 'Z']:
|
||||
if abs(num) < 1024.0:
|
||||
return "%.1f %s%s" % (num, unit, suffix)
|
||||
num /= 1024.0
|
||||
return "%.1f %s%s" % (num, 'Yi', suffix)
|
||||
|
||||
def size(path='.'):
|
||||
'''
|
||||
Returns the size of a folder's contents in bytes
|
||||
'''
|
||||
total = 0
|
||||
if os.path.exists(path):
|
||||
if os.path.isfile(path):
|
||||
total = os.path.getsize(path)
|
||||
else:
|
||||
for entry in os.scandir(path):
|
||||
if entry.is_file():
|
||||
total += entry.stat().st_size
|
||||
elif entry.is_dir():
|
||||
total += size(entry.path)
|
||||
return total
|
Loading…
Add table
Add a link
Reference in a new issue