From f0382d24da462be9efe9cf71e4b15b26597d9d9d Mon Sep 17 00:00:00 2001 From: Kevin Froman Date: Wed, 30 Jan 2019 00:10:29 -0600 Subject: [PATCH] work on readme, added mail files, bugfixes --- README.md | 44 ++++++++++++++++++------- docs/Tor_Stinks_02.png | Bin 0 -> 71503 bytes onionr/api.py | 15 +++++++-- onionr/config.py | 6 ++-- onionr/onionr.py | 30 ++++++++++++++++- onionr/static-data/www/mail/index.html | 21 ++++++++++++ onionr/static-data/www/mail/mail.js | 0 onionr/storagecounter.py | 2 ++ 8 files changed, 101 insertions(+), 17 deletions(-) create mode 100644 docs/Tor_Stinks_02.png create mode 100644 onionr/static-data/www/mail/index.html create mode 100644 onionr/static-data/www/mail/mail.js diff --git a/README.md b/README.md index 03ec0de5..98297240 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,10 @@ -![Onionr logo](./docs/onionr-logo.png) +

-(***experimental, not well tested or easy to use yet***) + + +

+ +(***pre-alpha quality & experimental, not well tested or easy to use yet***) [![Open Source Love](https://badges.frapsoft.com/os/v3/open-source.png?v=103)](https://github.com/ellerbrock/open-source-badges/) @@ -9,19 +13,20 @@ Anonymous P2P platform, using Tor & I2P.
-**The main repo for this software is at https://gitlab.com/beardog/Onionr/** +**The main repository for this software is at https://gitlab.com/beardog/Onionr/** # Summary Onionr is a decentralized, peer-to-peer data storage network, designed to be anonymous and resistant to (meta)data analysis and spam. +Onionr stores data in independent packages referred to as 'blocks' (not to be confused with a blockchain). The blocks are synced to all other nodes in the network. Blocks and user IDs cannot be easily proven to have been created by particular nodes (only inferred). + +Users are identified by ed25519 public keys, which can be used to sign blocks (optional) or send encrypted data. + Onionr can be used for mail, as a social network, instant messenger, file sharing software, or for encrypted group discussion. -# Roadmap/features -Check the [Gitlab Project](https://gitlab.com/beardog/Onionr/milestones/1) to see progress towards the alpha release. - -## Core internal features +## Main Features * [X] Fully p2p/decentralized, no trackers or other single points of failure * [X] End to end encryption of user data @@ -29,14 +34,29 @@ Check the [Gitlab Project](https://gitlab.com/beardog/Onionr/milestones/1) to se * [X] Easy API system for integration to websites * [X] Metadata analysis resistance - -## Other features - **Onionr API and functionality is subject to non-backwards compatible change during pre-alpha development** +# Install and Run on Linux + +The following applies to Ubuntu Bionic. Other distros may have different package or command names. + +* Have python3.5+, python3-pip, Tor (daemon, not browser) installed (python3-dev recommended) +* Clone the git repo: `$ git clone https://gitlab.com/beardog/onionr` +* cd into install direction: `$ cd onionr/` +* Install the Python dependencies ([virtualenv strongly recommended](https://virtualenv.pypa.io/en/stable/userguide/)): `$ pip3 install -r requirements.txt` + ## Help out -Everyone is welcome to help out. Please get in touch first if you are making non-trivial changes. If you can't help with programming, you can write documentation or guides. +Everyone is welcome to help out. Help is wanted for the following: + +* Development (Get in touch first) + * Creation of a shared object library for use from other languages and faster proof-of-work + * Onionr mobile app development + * Windows and Mac support + * General development +* Testing +* Running stable nodes +* Security review/audit Bitcoin/Bitcoin Cash: 1onion55FXzm6h8KQw3zFw2igpHcV7LPq @@ -44,4 +64,4 @@ Bitcoin/Bitcoin Cash: 1onion55FXzm6h8KQw3zFw2igpHcV7LPq The Tor Project, I2P developers, and anyone else do not own, create, or endorse this project, and are not otherwise involved. -The badges (besides travis-ci build) are by Maik Ellerbrock is licensed under a Creative Commons Attribution 4.0 International License. +The badges (besides travis-ci build) are by Maik Ellerbrock is licensed under a Creative Commons Attribution 4.0 International License. \ No newline at end of file diff --git a/docs/Tor_Stinks_02.png b/docs/Tor_Stinks_02.png new file mode 100644 index 0000000000000000000000000000000000000000..114a760cdf163431794d446ceaddc4e9105bd25c GIT binary patch literal 71503 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 +`r!SnQ3wb^kA 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 X>Of6cBf#$s@FyW6EBswhKj8lY#Mu)1 literal 0 HcmV?d00001 diff --git a/onionr/api.py b/onionr/api.py index f5ba9c81..029da837 100755 --- a/onionr/api.py +++ b/onionr/api.py @@ -265,7 +265,7 @@ class API: self.bindPort = bindPort # Be extremely mindful of this - self.whitelistEndpoints = ('site', 'www', 'onionrhome', 'board', 'boardContent', 'sharedContent') + self.whitelistEndpoints = ('site', 'www', 'onionrhome', 'board', 'boardContent', 'sharedContent', 'mail', 'mailindex') self.clientToken = config.get('client.webpassword') self.timeBypassToken = base64.b16encode(os.urandom(32)).decode() @@ -308,6 +308,13 @@ class API: def loadBoard(): return send_from_directory('static-data/www/board/', "index.html") + @app.route('/mail/', endpoint='mail') + def loadMail(path): + return send_from_directory('static-data/www/mail/', '') + @app.route('/mail/', endpoint='mailindex') + def loadMailIndex(): + return send_from_directory('static-data/www/mail/', 'index.html') + @app.route('/board/', endpoint='boardContent') def boardContent(path): return send_from_directory('static-data/www/board/', path) @@ -407,7 +414,11 @@ class API: @app.route('/getstats') def getStats(): #return Response("disabled") - return Response(self._core.serializer.getStats()) + while True: + try: + return Response(self._core.serializer.getStats()) + except AttributeError: + pass @app.route('/getuptime') def showUptime(): diff --git a/onionr/config.py b/onionr/config.py index 0e1fd6a1..960286f6 100644 --- a/onionr/config.py +++ b/onionr/config.py @@ -105,7 +105,8 @@ def check(): open(get_config_file(), 'a', encoding="utf8").close() save() except: - logger.debug('Failed to check configuration file.') + pass + #logger.debug('Failed to check configuration file.') def save(): ''' @@ -129,7 +130,8 @@ def reload(): with open(get_config_file(), 'r', encoding="utf8") as configfile: set_config(json.loads(configfile.read())) except: - logger.debug('Failed to parse configuration file.') + pass + #logger.debug('Failed to parse configuration file.') def get_config(): ''' diff --git a/onionr/onionr.py b/onionr/onionr.py index 2733500a..e1c1c7f2 100755 --- a/onionr/onionr.py +++ b/onionr/onionr.py @@ -30,7 +30,7 @@ import webbrowser, uuid, signal from threading import Thread import api, core, config, logger, onionrplugins as plugins, onionrevents as events import onionrutils -import netcontroller +import netcontroller, onionrstorage from netcontroller import NetController from onionrblockapi import Block import onionrproofs, onionrexceptions, onionrusers, communicator @@ -190,6 +190,9 @@ class Onionr: 'openhome': self.openHome, 'open-home': self.openHome, + 'export-block': self.exportBlock, + 'exportblock': self.exportBlock, + 'get-file': self.getFile, 'getfile': self.getFile, @@ -271,6 +274,31 @@ class Onionr: THIS SECTION HANDLES THE COMMANDS ''' + def exportBlock(self): + exportDir = self.dataDir + 'block-export/' + try: + assert self.onionrUtils.validateHash(sys.argv[2]) + except (IndexError, AssertionError): + logger.error('No valid block hash specified.') + sys.exit(1) + else: + bHash = sys.argv[2] + try: + path = sys.argv[3] + except (IndexError): + if not os.path.exists(exportDir): + if os.path.exists(self.dataDir): + os.mkdir(exportDir) + else: + logger.error('Onionr not initialized') + sys.exit(1) + path = exportDir + data = onionrstorage.getData(self.onionrCore, bHash) + with open('%s/%s.dat' % (exportDir, bHash), 'wb') as exportFile: + exportFile.write(data) + + + def showDetails(self): details = { 'Node Address' : self.get_hostname(), diff --git a/onionr/static-data/www/mail/index.html b/onionr/static-data/www/mail/index.html new file mode 100644 index 00000000..73481922 --- /dev/null +++ b/onionr/static-data/www/mail/index.html @@ -0,0 +1,21 @@ + + + + + + Onionr Mail + + + + + +
+
+ + Onionr Web Mail +
+ +
+ + + \ No newline at end of file diff --git a/onionr/static-data/www/mail/mail.js b/onionr/static-data/www/mail/mail.js new file mode 100644 index 00000000..e69de29b diff --git a/onionr/storagecounter.py b/onionr/storagecounter.py index 863145f9..fc1a9d6b 100644 --- a/onionr/storagecounter.py +++ b/onionr/storagecounter.py @@ -42,6 +42,8 @@ class StorageCounter: retData = int(dataFile.read()) except FileNotFoundError: pass + except ValueError: + pass # Possibly happens when the file is empty return retData def getPercent(self):