boilerplate and comment changes, added first subdirectory readme (for communicatorutils)

master
Kevin Froman 2019-06-12 01:44:15 -05:00
parent 89f11d930f
commit 737719cb54
12 changed files with 79 additions and 16 deletions

View File

@ -36,10 +36,26 @@ The whitepaper (subject to change prior to alpha release) is available [here](do
* [X] 🌐 Fully p2p/decentralized, no trackers or other single points of failure * [X] 🌐 Fully p2p/decentralized, no trackers or other single points of failure
* [X] 🔒 End to end encryption of user data * [X] 🔒 End to end encryption of user data
* [X] 📢 Optional non-encrypted blocks, useful for blog posts or public file sharing * [X] 📢 Optional non-encrypted blocks, useful for blog posts or public file sharing
* [X] 💻 Easy API for integration to websites * [X] 💻 Easy HTTP API for integration to websites
* [X] 🕵️ Metadata analysis resistance and anonymity * [X] 🕵️ Metadata analysis resistance and anonymity
* [X] 📡 Transport agnosticism (no internet required) * [X] 📡 Transport agnosticism (no internet required)
## Software Suite
Onionr ships with various application plugins ready for use out of the box:
Currently usable:
* Mail
* Public anonymous chat
* Simple webpage hosting (Will be greatly extended)
* File sharing (Work in progress)
Not yet usable:
* Instant messaging
* Forum/BBS
**Onionr API and functionality is subject to non-backwards compatible change during pre-alpha development** **Onionr API and functionality is subject to non-backwards compatible change during pre-alpha development**
# Screenshots # Screenshots

View File

@ -0,0 +1,23 @@
# communicatorutils
The files in this submodule handle various subtasks and utilities for the onionr communicator.
## Files:
connectnewpeers.py: takes a communicator instance and has it connect to as many peers as needed, and/or to a new specified peer.
daemonqueuehandler.py: checks for new commands in the daemon queue and processes them accordingly.
downloadblocks.py: iterates a communicator instance's block download queue and attempts to download the blocks from online peers
lookupadders.py: ask connected peers to share their list of peer transport addresses
onionrcommunicataortimers.py: create a timer for a function to be launched on an interval. Control how many possible instances of a timer may be running a function at once and control if the timer should be ran in a thread or not.
onionrdaemontools.py: contains the DaemonTools class which has a lot of etc functions useful for the communicator. Deprecated.
proxypicker.py: returns a string name for the appropriate proxy to be used with a particular peer transport address.
servicecreator.py: iterate connection blocks and create new direct connection servers for them.
uploadblocks.py: iterate a communicator's upload queue and upload the blocks to connected peers

View File

@ -40,6 +40,7 @@ def connect_new_peer_to_communicator(comm_inst, peer='', useBootstrap=False):
mainPeerList = comm_inst._core.listAdders() mainPeerList = comm_inst._core.listAdders()
peerList = onionrpeers.getScoreSortedPeerList(comm_inst._core) peerList = onionrpeers.getScoreSortedPeerList(comm_inst._core)
# If we don't have enough peers connected or random chance, select new peers to try
if len(peerList) < 8 or secrets.randbelow(4) == 3: if len(peerList) < 8 or secrets.randbelow(4) == 3:
tryingNew = [] tryingNew = []
for x in comm_inst.newPeers: for x in comm_inst.newPeers:
@ -56,15 +57,19 @@ def connect_new_peer_to_communicator(comm_inst, peer='', useBootstrap=False):
for address in peerList: for address in peerList:
if not config.get('tor.v3onions') and len(address) == 62: if not config.get('tor.v3onions') and len(address) == 62:
continue continue
# Don't connect to our own address
if address == comm_inst._core.hsAddress: if address == comm_inst._core.hsAddress:
continue continue
# Don't connect to invalid address or if its already been tried/connected, or if its cooled down
if len(address) == 0 or address in tried or address in comm_inst.onlinePeers or address in comm_inst.cooldownPeer: if len(address) == 0 or address in tried or address in comm_inst.onlinePeers or address in comm_inst.cooldownPeer:
continue continue
if comm_inst.shutdown: if comm_inst.shutdown:
return return
# Ping a peer,
if comm_inst.peerAction(address, 'ping') == 'pong!': if comm_inst.peerAction(address, 'ping') == 'pong!':
time.sleep(0.1) time.sleep(0.1)
if address not in mainPeerList: if address not in mainPeerList:
# Add a peer to our list if it isn't already since it successfully connected
networkmerger.mergeAdders(address, comm_inst._core) networkmerger.mergeAdders(address, comm_inst._core)
if address not in comm_inst.onlinePeers: if address not in comm_inst.onlinePeers:
logger.info('Connected to ' + address) logger.info('Connected to ' + address)
@ -80,6 +85,7 @@ def connect_new_peer_to_communicator(comm_inst, peer='', useBootstrap=False):
comm_inst.peerProfiles.append(onionrpeers.PeerProfiles(address, comm_inst._core)) comm_inst.peerProfiles.append(onionrpeers.PeerProfiles(address, comm_inst._core))
break break
else: else:
# Mark a peer as tried if they failed to respond to ping
tried.append(address) tried.append(address)
logger.debug('Failed to connect to ' + address) logger.debug('Failed to connect to ' + address)
return retData return retData

View File

@ -1,5 +1,5 @@
''' '''
Onionr - P2P Microblogging Platform & Social network Onionr - Private P2P Communication
Download blocks using the communicator instance Download blocks using the communicator instance
''' '''

View File

@ -1,5 +1,5 @@
''' '''
Onionr - P2P Anonymous Storage Network Onionr - Private P2P Communication
Lookup new peer transport addresses using the communicator Lookup new peer transport addresses using the communicator
''' '''
@ -26,7 +26,7 @@ def lookup_new_peer_transports_with_communicator(comm_inst):
for i in range(tryAmount): for i in range(tryAmount):
# Download new peer address list from random online peers # Download new peer address list from random online peers
if len(newPeers) > 10000: if len(newPeers) > 10000:
# Dont get new peers if we have too many queued up # Don't get new peers if we have too many queued up
break break
peer = comm_inst.pickOnlinePeer() peer = comm_inst.pickOnlinePeer()
newAdders = comm_inst.peerAction(peer, action='pex') newAdders = comm_inst.peerAction(peer, action='pex')

View File

@ -1,5 +1,5 @@
''' '''
Onionr - P2P Microblogging Platform & Social network Onionr - Private P2P Communication
Lookup new blocks with the communicator using a random connected peer Lookup new blocks with the communicator using a random connected peer
''' '''

View File

@ -1,6 +1,5 @@
#!/usr/bin/env python3
''' '''
Onionr - P2P Anonymous Storage Network Onionr - Private P2P Communication
This file contains timer control for the communicator This file contains timer control for the communicator
''' '''

View File

@ -1,5 +1,5 @@
''' '''
Onionr - P2P Anonymous Storage Network Onionr - Private P2P Communication
Contains the CommunicatorUtils class which contains useful functions for the communicator daemon Contains the CommunicatorUtils class which contains useful functions for the communicator daemon
''' '''
@ -18,6 +18,8 @@
along with this program. If not, see <https://www.gnu.org/licenses/>. along with this program. If not, see <https://www.gnu.org/licenses/>.
''' '''
# MODULE DEPRECATED
import onionrexceptions, onionrpeers, onionrproofs, logger import onionrexceptions, onionrpeers, onionrproofs, logger
import base64, sqlite3, os import base64, sqlite3, os
from dependencies import secrets from dependencies import secrets

View File

@ -1,7 +1,7 @@
''' '''
Onionr - P2P Anonymous Storage Network Onionr - Private P2P Communication
Just picks a proxy Just picks a proxy to use based on a peer's address
''' '''
''' '''
This program is free software: you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
@ -22,4 +22,5 @@ def pick_proxy(peer_address):
if peer_address.endswith('.onion'): if peer_address.endswith('.onion'):
return 'tor' return 'tor'
elif peer_address.endswith('.i2p'): elif peer_address.endswith('.i2p'):
return 'i2p' return 'i2p'
raise ValueError("Peer address was not string ending with acceptable value")

View File

@ -1,4 +0,0 @@
class ReverseSync:
def __init__(self, communicator_inst):
return

View File

@ -1,3 +1,22 @@
'''
Onionr - Private P2P Communication
Creates an onionr direct connection service by scanning all connection blocks
'''
'''
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 communicator, onionrblockapi import communicator, onionrblockapi
def service_creator(daemon): def service_creator(daemon):
assert isinstance(daemon, communicator.OnionrCommunicatorDaemon) assert isinstance(daemon, communicator.OnionrCommunicatorDaemon)
@ -5,6 +24,7 @@ def service_creator(daemon):
utils = core._utils utils = core._utils
# Find socket connection blocks # Find socket connection blocks
# TODO cache blocks and only look at recently received ones
con_blocks = core.getBlocksByType('con') con_blocks = core.getBlocksByType('con')
for b in con_blocks: for b in con_blocks:
if not b in daemon.active_services: if not b in daemon.active_services:

View File

@ -1,5 +1,5 @@
''' '''
Onionr - P2P Microblogging Platform & Social network Onionr - Private P2P Communication
Upload blocks in the upload queue to peers from the communicator Upload blocks in the upload queue to peers from the communicator
''' '''