diff --git a/docs/dev/specs/forward-secrecy.md b/docs/dev/specs/forward-secrecy.md new file mode 100644 index 00000000..27851ae8 --- /dev/null +++ b/docs/dev/specs/forward-secrecy.md @@ -0,0 +1,5 @@ +# Onionr Forward Secrecy Spec v0.0.0 + +# Introduction + +Due to the natural trade-offs of implementing [forward secrecy](https://en.wikipedia.org/wiki/Forward_secrecy) in a distributed, decentralized system, Onionr has optional \ No newline at end of file diff --git a/onionr/communicatorutils/servicecreator.py b/onionr/communicatorutils/servicecreator.py index 17f6a19c..f1dbb78d 100755 --- a/onionr/communicatorutils/servicecreator.py +++ b/onionr/communicatorutils/servicecreator.py @@ -18,8 +18,10 @@ along with this program. If not, see . ''' import communicator, onionrblockapi +import logger from onionrutils import stringvalidators, bytesconverter from coredb import blockmetadb +from onionrservices import server_exists def service_creator(daemon): assert isinstance(daemon, communicator.OnionrCommunicatorDaemon) @@ -30,10 +32,13 @@ def service_creator(daemon): if not b in daemon.active_services: bl = onionrblockapi.Block(b, decrypt=True) bs = bytesconverter.bytes_to_str(bl.bcontent) + '.onion' + if server_exists(bl.signer): + continue if stringvalidators.validate_pub_key(bl.signer) and stringvalidators.validate_transport(bs): signer = bytesconverter.bytes_to_str(bl.signer) daemon.active_services.append(b) daemon.active_services.append(signer) - daemon.services.create_server(signer, bs, daemon) - + if not daemon.services.create_server(signer, bs, daemon): + daemon.active_services.remove(b) + daemon.active_services.remove(signer) daemon.decrementThreadCount('service_creator') diff --git a/onionr/onionrservices/__init__.py b/onionr/onionrservices/__init__.py index 975d6e90..a2a6a26a 100755 --- a/onionr/onionrservices/__init__.py +++ b/onionr/onionrservices/__init__.py @@ -19,9 +19,10 @@ ''' import time import stem -from . import connectionserver, bootstrapservice +from . import connectionserver, bootstrapservice, serverexists from onionrutils import stringvalidators, basicrequests import config +server_exists = serverexists.server_exists class OnionrServices: ''' Create a client or server for connecting to peer interfaces @@ -55,5 +56,10 @@ class OnionrServices: @staticmethod def create_client(peer, comm_inst=None): # Create ephemeral onion service to bootstrap connection + if not comm_inst == None: + try: + return comm_inst.direct_connection_clients[peer] + except KeyError: + pass address = bootstrapservice.bootstrap_client_service(peer, comm_inst) return address diff --git a/onionr/onionrservices/serverexists.py b/onionr/onionrservices/serverexists.py new file mode 100644 index 00000000..b7b049d8 --- /dev/null +++ b/onionr/onionrservices/serverexists.py @@ -0,0 +1,30 @@ +''' + Onionr - Private P2P Communication + + Function to check if an onion server is created for a peer or not +''' +''' + 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 . +''' +import deadsimplekv + +import filepaths +from onionrutils import bytesconverter + +def server_exists(peer: str) -> bool: + '''checks if an onion server is created for a peer or not''' + peer = bytesconverter.bytes_to_str(peer) + kv = deadsimplekv.DeadSimpleKV(filepaths.cached_storage) + kv.refresh() + return not kv.get('dc-' + peer) is None \ No newline at end of file diff --git a/onionr/static-data/www/chat/js/resizes.js b/onionr/static-data/www/chat/js/resizes.js index 94fc1ebe..5201ff91 100644 --- a/onionr/static-data/www/chat/js/resizes.js +++ b/onionr/static-data/www/chat/js/resizes.js @@ -1,3 +1,21 @@ +/* + Onionr - Private P2P Communication + + Resize chat elements to help with responsiveness + + 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 +*/ let doResize = function(){ let chatInput = document.getElementsByClassName('chatInput')[0] chatInput.style.width = "50%";