- removed simplecache for now
* fixed existingRand bytes check in announce in onionrdaemontools * moved openhome to its own file * slight comment and boilerplate changes + added more readme files for subdirectoriesmaster
parent
737719cb54
commit
268325c07d
|
@ -26,7 +26,7 @@ import core
|
|||
from onionrblockapi import Block
|
||||
import onionrutils, onionrexceptions, onionrcrypto, blockimporter, onionrevents as events, logger, config
|
||||
import httpapi
|
||||
from httpapi import friendsapi, simplecache, profilesapi, configapi, miscpublicapi
|
||||
from httpapi import friendsapi, profilesapi, configapi, miscpublicapi
|
||||
from onionrservices import httpheaders
|
||||
import onionr
|
||||
|
||||
|
@ -199,7 +199,6 @@ class API:
|
|||
self.queueResponse = {}
|
||||
onionrInst.setClientAPIInst(self)
|
||||
app.register_blueprint(friendsapi.friends)
|
||||
app.register_blueprint(simplecache.simplecache)
|
||||
app.register_blueprint(profilesapi.profile_BP)
|
||||
app.register_blueprint(configapi.config_BP)
|
||||
httpapi.load_plugin_blueprints(app)
|
||||
|
|
|
@ -67,9 +67,9 @@ class DaemonTools:
|
|||
combinedNodes = ourID + peer
|
||||
if ourID != 1:
|
||||
#TODO: Extend existingRand for i2p
|
||||
existingRand = self.daemon._core.getAddressInfo(peer, 'powValue')
|
||||
existingRand = self.daemon._core._utils.bytesToStr(self.daemon._core.getAddressInfo(peer, 'powValue'))
|
||||
# Reset existingRand if it no longer meets the minimum POW
|
||||
if type(existingRand) is type(None) or not existingRand.endswith(b'0' * ov.announce_pow):
|
||||
if type(existingRand) is type(None) or not existingRand.endswith('0' * ov.announce_pow):
|
||||
existingRand = ''
|
||||
|
||||
if peer in self.announceCache:
|
||||
|
@ -217,4 +217,3 @@ class DaemonTools:
|
|||
data = secrets.token_hex(secrets.randbelow(1024) + 1)
|
||||
self.daemon._core.insertBlock(data, header='pm', encryptType='asym', asymPeer=fakePeer, meta={'subject': 'foo'})
|
||||
self.daemon.decrementThreadCount('insertDeniableBlock')
|
||||
return
|
|
@ -0,0 +1,5 @@
|
|||
# etc
|
||||
|
||||
pgpwords.py: represent data using the pgp word list: https://en.wikipedia.org/wiki/PGP_word_list
|
||||
|
||||
onionrvalues.py: spec values for onionr blocks and other things
|
|
@ -1,5 +1,5 @@
|
|||
'''
|
||||
Onionr - P2P Microblogging Platform & Social network
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
This file defines values and requirements used by Onionr
|
||||
'''
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
'''This file is adapted from https://github.com/thblt/pgp-words by github user 'thblt' ('Thibault Polge), GPL v3 license'''
|
||||
|
||||
'''
|
||||
Changes made for Onionr:
|
||||
Changes made for Onionr by Kevin Froman in 2018-2019:
|
||||
Minor changes such as slight word adjustment, line breaks
|
||||
|
||||
CLI commands/usage function removed
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
# httpapi
|
||||
|
||||
The httpapi contains collections of endpoints for the client API server.
|
||||
|
||||
## Files:
|
||||
|
||||
configapi: manage onionr configuration from the client http api
|
||||
|
||||
friendsapi: add, remove and list friends from the client http api
|
||||
|
||||
miscpublicapi: misculanious onionr network interaction from the **public** httpapi, such as announcements, block fetching and uploading.
|
||||
|
||||
profilesapi: work in progress in returning a profile page for an Onionr user
|
|
@ -1,5 +1,5 @@
|
|||
'''
|
||||
Onionr - P2P Anonymous Storage Network
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
This file handles configuration setting and getting from the HTTP API
|
||||
'''
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
'''
|
||||
Onionr - P2P Anonymous Storage Network
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
This file creates http endpoints for friend management
|
||||
'''
|
||||
|
|
|
@ -1,3 +1,22 @@
|
|||
'''
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
Public endpoints to do various block sync actions and announcement
|
||||
'''
|
||||
'''
|
||||
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 announce, upload, getblocks
|
||||
|
||||
announce = announce.handle_announce # endpoint handler for accepting peer announcements
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
'''
|
||||
Onionr - P2P Microblogging Platform & Social network
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
Handle announcements to the public API server
|
||||
'''
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
'''
|
||||
Onionr - P2P Microblogging Platform & Social network
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
Public endpoints to get block data and lists
|
||||
'''
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
'''
|
||||
Onionr - P2P Microblogging Platform & Social network
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
Accept block uploads to the public API server
|
||||
'''
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
'''
|
||||
Onionr - P2P Anonymous Storage Network
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
This file creates http endpoints for user profile pages
|
||||
'''
|
||||
|
|
|
@ -208,7 +208,7 @@ class Onionr:
|
|||
commands.onionrstatistics.show_details(self)
|
||||
|
||||
def openHome(self):
|
||||
commands.open_home(self)
|
||||
commands.openwebinterface.open_home(self)
|
||||
|
||||
def addID(self):
|
||||
commands.pubkeymanager.add_ID(self)
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
# onionrcommands
|
||||
|
||||
This module contains handlers/functions for Onionr cli interface commands.
|
||||
|
||||
## Files
|
||||
|
||||
__init__.py: stores the command references (aside from plugins) and help info.
|
||||
|
||||
banblocks.py: command handler for manually removing blocks from one's node
|
||||
|
||||
daemonlaunch.py: command to run Onionr (start the api servers, tor and communicator)
|
||||
|
||||
exportblocks.py: command to export an onionr block to the export folder. Exported blocks can be manually shared outside of the Onionr network
|
||||
|
||||
filecommands.py commands to insert and fetch files from the Onionr network
|
||||
|
||||
keyadders.py: commands to add an onionr user key or transport address
|
||||
|
||||
onionrstatistics.py: commands to print out various information about one's Onionr node
|
||||
|
||||
openwebinterface.py: command to open the web interface (useful because it requires a randomly generated token)
|
||||
|
||||
plugincommands.py: commands to enable/disable/reload plugins
|
||||
|
||||
pubkeymanager.py: commands to generate a new onionr user id, change the active id, or add/remove/list friends
|
|
@ -20,7 +20,8 @@
|
|||
|
||||
import webbrowser, sys
|
||||
import logger
|
||||
from . import pubkeymanager, onionrstatistics, daemonlaunch, filecommands, plugincommands, keyadders, banblocks, exportblocks
|
||||
from . import pubkeymanager, onionrstatistics, daemonlaunch, filecommands, plugincommands, keyadders
|
||||
from . import banblocks, exportblocks, openwebinterface
|
||||
|
||||
def show_help(o_inst, command):
|
||||
|
||||
|
@ -39,16 +40,6 @@ def show_help(o_inst, command):
|
|||
for command, helpmessage in helpmenu.items():
|
||||
o_inst.showHelp(command)
|
||||
|
||||
def open_home(o_inst):
|
||||
try:
|
||||
url = o_inst.onionrUtils.getClientAPIServer()
|
||||
except FileNotFoundError:
|
||||
logger.error('Onionr seems to not be running (could not get api host)')
|
||||
else:
|
||||
url = 'http://%s/#%s' % (url, o_inst.onionrCore.config.get('client.webpassword'))
|
||||
print('If Onionr does not open automatically, use this URL:', url)
|
||||
webbrowser.open_new_tab(url)
|
||||
|
||||
def get_commands(onionr_inst):
|
||||
return {'': onionr_inst.showHelpSuggestion,
|
||||
'help': onionr_inst.showHelp,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
'''
|
||||
Onionr - P2P Anonymous Storage Network
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
This file contains the command for banning blocks from the node
|
||||
'''
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
'''
|
||||
Onionr - P2P Anonymous Storage Network
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
launch the api server and communicator
|
||||
'''
|
||||
|
|
|
@ -1,3 +1,23 @@
|
|||
'''
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
This file handles the commands for adding and getting files from the Onionr network
|
||||
'''
|
||||
'''
|
||||
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 base64, sys, os
|
||||
import logger
|
||||
from onionrblockapi import Block
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
'''
|
||||
Onionr - P2P Anonymous Storage Network
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
add keys (transport and pubkey)
|
||||
'''
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
'''
|
||||
Onionr - P2P Anonymous Storage Network
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
This module defines commands to show stats/details about the local node
|
||||
'''
|
||||
|
|
27
onionr/httpapi/simplecache/__init__.py → onionr/onionrcommands/openwebinterface.py
Executable file → Normal file
27
onionr/httpapi/simplecache/__init__.py → onionr/onionrcommands/openwebinterface.py
Executable file → Normal file
|
@ -1,7 +1,7 @@
|
|||
'''
|
||||
Onionr - P2P Anonymous Storage Network
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
This file creates http endpoints for friend management
|
||||
Open the web interface properly into a web browser
|
||||
'''
|
||||
'''
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
|
@ -17,15 +17,14 @@
|
|||
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 core
|
||||
from flask import Blueprint, Response, request, abort
|
||||
|
||||
simplecache = Blueprint('simplecache', __name__)
|
||||
|
||||
@simplecache.route('/get/<key>')
|
||||
def get_key(key):
|
||||
return
|
||||
|
||||
@simplecache.route('/set/<key>', methods=['POST'])
|
||||
def set_key(key):
|
||||
return
|
||||
import webbrowser
|
||||
import logger
|
||||
def open_home(o_inst):
|
||||
try:
|
||||
url = o_inst.onionrUtils.getClientAPIServer()
|
||||
except FileNotFoundError:
|
||||
logger.error('Onionr seems to not be running (could not get api host)')
|
||||
else:
|
||||
url = 'http://%s/#%s' % (url, o_inst.onionrCore.config.get('client.webpassword'))
|
||||
print('If Onionr does not open automatically, use this URL:', url)
|
||||
webbrowser.open_new_tab(url)
|
|
@ -1,5 +1,5 @@
|
|||
'''
|
||||
Onionr - P2P Anonymous Storage Network
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
plugin CLI commands
|
||||
'''
|
||||
|
@ -30,7 +30,6 @@ def enable_plugin(o_inst):
|
|||
logger.info('%s %s <plugin>' % (sys.argv[0], sys.argv[1]))
|
||||
|
||||
def disable_plugin(o_inst):
|
||||
|
||||
if len(sys.argv) >= 3:
|
||||
plugin_name = sys.argv[2]
|
||||
logger.info('Disabling plugin "%s"...' % plugin_name)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
'''
|
||||
Onionr - P2P Anonymous Storage Network
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
This module defines ID-related CLI commands
|
||||
This module defines user ID-related CLI commands
|
||||
'''
|
||||
'''
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
|
@ -51,7 +51,7 @@ def change_ID(o_inst):
|
|||
try:
|
||||
key = sys.argv[2]
|
||||
except IndexError:
|
||||
logger.error('Specify pubkey to use')
|
||||
logger.warn('Specify pubkey to use')
|
||||
else:
|
||||
if o_inst.onionrUtils.validatePubKey(key):
|
||||
if key in o_inst.onionrCore._crypto.keyManager.getPubkeyList():
|
||||
|
@ -60,9 +60,9 @@ def change_ID(o_inst):
|
|||
logger.info('Set active key to: %s' % (key,))
|
||||
logger.info('Restart Onionr if it is running.')
|
||||
else:
|
||||
logger.error('That key does not exist')
|
||||
logger.warn('That key does not exist')
|
||||
else:
|
||||
logger.error('Invalid key %s' % (key,))
|
||||
logger.warn('Invalid key %s' % (key,))
|
||||
|
||||
def friend_command(o_inst):
|
||||
friend = ''
|
||||
|
@ -86,7 +86,8 @@ def friend_command(o_inst):
|
|||
raise onionrexceptions.KeyNotKnown
|
||||
friend = onionrusers.OnionrUser(o_inst.onionrCore, friend)
|
||||
except IndexError:
|
||||
logger.error('Friend ID is required.')
|
||||
logger.warn('Friend ID is required.')
|
||||
action = 'error' # set to 'error' so that the finally block does not process anything
|
||||
except onionrexceptions.KeyNotKnown:
|
||||
o_inst.onionrCore.addPeer(friend)
|
||||
friend = onionrusers.OnionrUser(o_inst.onionrCore, friend)
|
||||
|
@ -94,7 +95,7 @@ def friend_command(o_inst):
|
|||
if action == 'add':
|
||||
friend.setTrust(1)
|
||||
logger.info('Added %s as friend.' % (friend.publicKey,))
|
||||
else:
|
||||
elif action == 'remove':
|
||||
friend.setTrust(0)
|
||||
logger.info('Removed %s as friend.' % (friend.publicKey,))
|
||||
else:
|
||||
|
|
|
@ -1,73 +0,0 @@
|
|||
'''
|
||||
Onionr - P2P Anonymous Storage Network
|
||||
|
||||
This file contains the OnionrFragment class which implements the fragment system
|
||||
'''
|
||||
'''
|
||||
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/>.
|
||||
'''
|
||||
|
||||
# onionr:10ch+10ch+10chgdecryptionkey
|
||||
import core, sys, binascii, os
|
||||
|
||||
FRAGMENT_SIZE = 0.25
|
||||
TRUNCATE_LENGTH = 30
|
||||
|
||||
class OnionrFragment:
|
||||
def __init__(self, uri=None):
|
||||
uri = uri.replace('onionr:', '')
|
||||
count = 0
|
||||
blocks = []
|
||||
appendData = ''
|
||||
key = ''
|
||||
for x in uri:
|
||||
if x == 'k':
|
||||
key = uri[uri.index('k') + 1:]
|
||||
appendData += x
|
||||
if count == TRUNCATE_LENGTH:
|
||||
blocks.append(appendData)
|
||||
appendData = ''
|
||||
count = 0
|
||||
count += 1
|
||||
self.key = key
|
||||
self.blocks = blocks
|
||||
return
|
||||
|
||||
@staticmethod
|
||||
def generateFragments(data=None, coreInst=None):
|
||||
if coreInst is None:
|
||||
coreInst = core.Core()
|
||||
|
||||
key = os.urandom(32)
|
||||
data = coreInst._crypto.symmetricEncrypt(data, key).decode()
|
||||
blocks = []
|
||||
blockData = b""
|
||||
uri = "onionr:"
|
||||
total = sys.getsizeof(data)
|
||||
for x in data:
|
||||
blockData += x.encode()
|
||||
if round(len(blockData) / len(data), 3) > FRAGMENT_SIZE:
|
||||
blocks.append(core.Core().insertBlock(blockData))
|
||||
blockData = b""
|
||||
|
||||
for bl in blocks:
|
||||
uri += bl[:TRUNCATE_LENGTH]
|
||||
uri += "k"
|
||||
uri += binascii.hexlify(key).decode()
|
||||
return (uri, key)
|
||||
|
||||
if __name__ == '__main__':
|
||||
uri = OnionrFragment.generateFragments("test")[0]
|
||||
print(uri)
|
||||
OnionrFragment(uri)
|
|
@ -1,5 +1,5 @@
|
|||
'''
|
||||
Onionr - P2P Anonymous Storage Network
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
Onionr services provide the server component to direct connections
|
||||
'''
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
'''
|
||||
Onionr - P2P Anonymous Storage Network
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
Bootstrap onion direct connections for the clients
|
||||
'''
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
'''
|
||||
Onionr - P2P Anonymous Storage Network
|
||||
Onionr - Private P2P Communication
|
||||
|
||||
Set default onionr http headers
|
||||
'''
|
||||
|
|
Loading…
Reference in New Issue