Add input functions
parent
197d47eb7d
commit
583c5290d4
|
@ -98,7 +98,7 @@ class OnionrCommunicate:
|
||||||
return
|
return
|
||||||
|
|
||||||
def performGet(self, action, peer, data=None, type='tor'):
|
def performGet(self, action, peer, data=None, type='tor'):
|
||||||
'''performs a request to a peer through Tor or i2p (currently only tor)'''
|
'''Performs a request to a peer through Tor or i2p (currently only tor)'''
|
||||||
if not peer.endswith('.onion') and not peer.endswith('.onion/'):
|
if not peer.endswith('.onion') and not peer.endswith('.onion/'):
|
||||||
raise PeerError('Currently only Tor .onion peers are supported. You must manually specify .onion')
|
raise PeerError('Currently only Tor .onion peers are supported. You must manually specify .onion')
|
||||||
socksPort = sys.argv[2]
|
socksPort = sys.argv[2]
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
127.0.0.1
|
|
@ -0,0 +1 @@
|
||||||
|
aaron-optiplex
|
|
@ -0,0 +1,4 @@
|
||||||
|
SocksPort 16712
|
||||||
|
HiddenServiceDir data/hs/
|
||||||
|
HiddenServicePort 80 127.0.0.1:1337
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
import re
|
import re, sys
|
||||||
|
|
||||||
class colors:
|
class colors:
|
||||||
'''
|
'''
|
||||||
|
@ -127,6 +127,51 @@ def log(prefix, data, color = ''):
|
||||||
|
|
||||||
raw(output)
|
raw(output)
|
||||||
|
|
||||||
|
'''
|
||||||
|
Takes in input from the console, not stored in logs
|
||||||
|
message: The message to display before taking input
|
||||||
|
'''
|
||||||
|
def input(message = 'Enter input: '):
|
||||||
|
color = colors.fg.green + colors.bold
|
||||||
|
output = colors.reset + str(color) + '... ' + colors.reset + str(message) + colors.reset
|
||||||
|
|
||||||
|
if not get_settings() & USE_ANSI:
|
||||||
|
output = colors.filter(output)
|
||||||
|
|
||||||
|
sys.stdout.write(output)
|
||||||
|
return raw_input()
|
||||||
|
|
||||||
|
'''
|
||||||
|
Displays an "Are you sure" message, returns True for Y and False for N
|
||||||
|
message: The confirmation message, use %s for (y/n)
|
||||||
|
default: which to prefer-- y or n
|
||||||
|
'''
|
||||||
|
def confirm(default = 'y', message = 'Are you sure %s? '):
|
||||||
|
color = colors.fg.green + colors.bold
|
||||||
|
|
||||||
|
default = default.lower()
|
||||||
|
confirm = colors.bold
|
||||||
|
if default.startswith('y'):
|
||||||
|
confirm += '(Y/n)'
|
||||||
|
else:
|
||||||
|
confirm += '(y/N)'
|
||||||
|
confirm += colors.reset + color
|
||||||
|
|
||||||
|
output = colors.reset + str(color) + '... ' + colors.reset + str(message) + colors.reset
|
||||||
|
|
||||||
|
if not get_settings() & USE_ANSI:
|
||||||
|
output = colors.filter(output)
|
||||||
|
|
||||||
|
sys.stdout.write(output.replace('%s', confirm))
|
||||||
|
inp = raw_input().lower()
|
||||||
|
|
||||||
|
if 'y' in inp:
|
||||||
|
return True
|
||||||
|
if 'n' in inp:
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return default == 'y'
|
||||||
|
|
||||||
# debug: when there is info that could be useful for debugging purposes only
|
# debug: when there is info that could be useful for debugging purposes only
|
||||||
def debug(data):
|
def debug(data):
|
||||||
if get_level() <= LEVEL_DEBUG:
|
if get_level() <= LEVEL_DEBUG:
|
||||||
|
|
|
@ -31,9 +31,6 @@ class OnionrUtils:
|
||||||
self.fingerprintFile = 'data/own-fingerprint.txt'
|
self.fingerprintFile = 'data/own-fingerprint.txt'
|
||||||
self._core = coreInstance
|
self._core = coreInstance
|
||||||
return
|
return
|
||||||
def printErr(self, text='an error occured'):
|
|
||||||
'''Print an error message to stderr with a new line'''
|
|
||||||
logger.error(text)
|
|
||||||
def localCommand(self, command):
|
def localCommand(self, command):
|
||||||
'''Send a command to the local http API server, securely. Intended for local clients, DO NOT USE for remote peers.'''
|
'''Send a command to the local http API server, securely. Intended for local clients, DO NOT USE for remote peers.'''
|
||||||
config = configparser.ConfigParser()
|
config = configparser.ConfigParser()
|
||||||
|
@ -42,27 +39,30 @@ class OnionrUtils:
|
||||||
else:
|
else:
|
||||||
return
|
return
|
||||||
requests.get('http://' + open('data/host.txt', 'r').read() + ':' + str(config['CLIENT']['PORT']) + '/client/?action=' + command + '&token=' + config['CLIENT']['CLIENT HMAC'])
|
requests.get('http://' + open('data/host.txt', 'r').read() + ':' + str(config['CLIENT']['PORT']) + '/client/?action=' + command + '&token=' + config['CLIENT']['CLIENT HMAC'])
|
||||||
def getPassword(self, message='Enter password: '):
|
def getPassword(self, message='Enter password: ', confirm = True):
|
||||||
'''Get a password without showing the users typing and confirm the input'''
|
'''Get a password without showing the users typing and confirm the input'''
|
||||||
# Get a password safely with confirmation and return it
|
# Get a password safely with confirmation and return it
|
||||||
while True:
|
while True:
|
||||||
print(message)
|
print(message)
|
||||||
pass1 = getpass.getpass()
|
pass1 = getpass.getpass()
|
||||||
print('Confirm password: ')
|
if confirm:
|
||||||
pass2 = getpass.getpass()
|
print('Confirm password: ')
|
||||||
if pass1 != pass2:
|
pass2 = getpass.getpass()
|
||||||
logger.error("Passwords do not match.")
|
if pass1 != pass2:
|
||||||
input()
|
logger.error("Passwords do not match.")
|
||||||
|
input()
|
||||||
|
else:
|
||||||
|
break
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
return pass1
|
return pass1
|
||||||
def checkPort(self, port):
|
def checkPort(self, port, host = ''):
|
||||||
'''Checks if a port is available, returns bool'''
|
'''Checks if a port is available, returns bool'''
|
||||||
# inspired by https://www.reddit.com/r/learnpython/comments/2i4qrj/how_to_write_a_python_script_that_checks_to_see/ckzarux/
|
# inspired by https://www.reddit.com/r/learnpython/comments/2i4qrj/how_to_write_a_python_script_that_checks_to_see/ckzarux/
|
||||||
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
retVal = False
|
retVal = False
|
||||||
try:
|
try:
|
||||||
sock.bind(('', port))
|
sock.bind((host, port))
|
||||||
except OSError as e:
|
except OSError as e:
|
||||||
if e.errno is 98:
|
if e.errno is 98:
|
||||||
retVal = True
|
retVal = True
|
||||||
|
@ -92,7 +92,7 @@ class OnionrUtils:
|
||||||
return dataHash
|
return dataHash
|
||||||
|
|
||||||
def validateHash(self, data, length=64):
|
def validateHash(self, data, length=64):
|
||||||
'''validate if a string is a valid hex formatted hash'''
|
'''Validate if a string is a valid hex formatted hash'''
|
||||||
retVal = True
|
retVal = True
|
||||||
if len(data) != length:
|
if len(data) != length:
|
||||||
retVal = False
|
retVal = False
|
||||||
|
|
|
@ -115,13 +115,13 @@ class OnionrTests(unittest.TestCase):
|
||||||
while True:
|
while True:
|
||||||
command = myCore.daemonQueue()
|
command = myCore.daemonQueue()
|
||||||
if command == False:
|
if command == False:
|
||||||
print('The queue is empty (false)')
|
logger.debug('The queue is empty (false)')
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
print(command[0])
|
logger.debug(command[0])
|
||||||
myCore.daemonQueueAdd('testCommand', 'testData')
|
myCore.daemonQueueAdd('testCommand', 'testData')
|
||||||
command = myCore.daemonQueue()
|
command = myCore.daemonQueue()
|
||||||
if command[0] == 'testCommand':
|
if command[0] == 'testCommand':
|
||||||
if myCore.daemonQueue() == False:
|
if myCore.daemonQueue() == False:
|
||||||
print('Succesfully added and read command')
|
logger.info('Succesfully added and read command')
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
Loading…
Reference in New Issue