Compare commits
1 Commits
v0.6
...
cis-muzahi
Author | SHA1 | Date | |
---|---|---|---|
49f9620236 |
3
.gitmodules
vendored
3
.gitmodules
vendored
|
@ -1,3 +0,0 @@
|
||||||
[submodule "packages/flatpak/shared-modules"]
|
|
||||||
path = packages/flatpak/shared-modules
|
|
||||||
url = https://github.com/flathub/shared-modules.git
|
|
|
@ -1,57 +0,0 @@
|
||||||
{
|
|
||||||
"id": "org.bitmessage.BaseApp",
|
|
||||||
"branch": "19.08",
|
|
||||||
"runtime": "org.freedesktop.Platform",
|
|
||||||
"sdk": "org.freedesktop.Sdk",
|
|
||||||
"runtime-version": "19.08",
|
|
||||||
"separate-locales": false,
|
|
||||||
"modules": [
|
|
||||||
"shared-modules/python2.7/python-2.7.json",
|
|
||||||
"shared-modules/qt4/qt4-4.8.7-minimal.json",
|
|
||||||
{
|
|
||||||
"name": "python-sip",
|
|
||||||
"sources": [
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "https://www.riverbankcomputing.com/static/Downloads/sip/4.19.25/sip-4.19.25.tar.gz",
|
|
||||||
"sha256": "b39d93e937647807bac23579edbff25fe46d16213f708370072574ab1f1b4211"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"buildsystem": "simple",
|
|
||||||
"build-commands": [
|
|
||||||
"python configure.py --sip-module PyQt4.sip --no-dist-info",
|
|
||||||
"make",
|
|
||||||
"make install"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "python-qt4",
|
|
||||||
"sources": [
|
|
||||||
{
|
|
||||||
"type": "archive",
|
|
||||||
"url": "http://sourceforge.net/projects/pyqt/files/PyQt4/PyQt-4.12.3/PyQt4_gpl_x11-4.12.3.tar.gz",
|
|
||||||
"sha256": "a00f5abef240a7b5852b7924fa5fdf5174569525dc076cd368a566619e56d472"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"buildsystem": "simple",
|
|
||||||
"build-commands": [
|
|
||||||
"python configure.py -w --confirm-license",
|
|
||||||
"make",
|
|
||||||
"make install"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name" : "PyBitmessage-dependencies",
|
|
||||||
"buildsystem" : "simple",
|
|
||||||
"build-options": {
|
|
||||||
"build-args": [
|
|
||||||
"--share=network"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"build-commands": [
|
|
||||||
"pip --version",
|
|
||||||
"pip install setuptools msgpack"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,48 +0,0 @@
|
||||||
{
|
|
||||||
"app-id": "org.bitmessage.PyBitmessage",
|
|
||||||
"runtime": "org.freedesktop.Platform",
|
|
||||||
"runtime-version": "19.08",
|
|
||||||
"branch": "stable",
|
|
||||||
"sdk": "org.freedesktop.Sdk",
|
|
||||||
"base": "org.bitmessage.BaseApp",
|
|
||||||
"command": "pybitmessage",
|
|
||||||
"base-version":"stable",
|
|
||||||
"finish-args" : [
|
|
||||||
"--share=network",
|
|
||||||
"--socket=x11",
|
|
||||||
"--share=ipc",
|
|
||||||
"--filesystem=xdg-config/PyBitmessage:create"
|
|
||||||
],
|
|
||||||
"modules": [
|
|
||||||
{
|
|
||||||
"name" : "PyBitmessage",
|
|
||||||
"buildsystem" : "simple",
|
|
||||||
"build-options": {
|
|
||||||
"build-args": [
|
|
||||||
"--share=network"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"build-commands": [
|
|
||||||
"python --version",
|
|
||||||
"pwd",
|
|
||||||
"ls",
|
|
||||||
"python checkdeps.py",
|
|
||||||
"python setup.py install --prefix=/app --exec-prefix=/app",
|
|
||||||
"sed -i 's~/usr/bin/~/app/bin/~' /app/bin/pybitmessage",
|
|
||||||
"cat /app/bin/pybitmessage",
|
|
||||||
"mv /app/share/applications/pybitmessage.desktop /app/share/applications/org.bitmessage.PyBitmessage.desktop",
|
|
||||||
"sed -i 's~Icon=pybitmessage~Icon=org.bitmessage.PyBitmessage~' /app/share/applications/org.bitmessage.PyBitmessage.desktop",
|
|
||||||
"mv /app/share/icons/hicolor/scalable/apps/pybitmessage.svg /app/share/icons/hicolor/scalable/apps/org.bitmessage.PyBitmessage.svg",
|
|
||||||
"mv /app/share/icons/hicolor/24x24/apps/pybitmessage.png /app/share/icons/hicolor/24x24/apps/org.bitmessage.PyBitmessage.png",
|
|
||||||
"which pybitmessage"
|
|
||||||
],
|
|
||||||
"sources" : [
|
|
||||||
{
|
|
||||||
"type" : "dir",
|
|
||||||
"path" : "../../"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
Subproject commit fd4d38328ccb078b88ad4a891807e593ae8de806
|
|
|
@ -2,6 +2,7 @@
|
||||||
Operations with addresses
|
Operations with addresses
|
||||||
"""
|
"""
|
||||||
# pylint: disable=redefined-outer-name,inconsistent-return-statements
|
# pylint: disable=redefined-outer-name,inconsistent-return-statements
|
||||||
|
import sys
|
||||||
import hashlib
|
import hashlib
|
||||||
import logging
|
import logging
|
||||||
from binascii import hexlify, unhexlify
|
from binascii import hexlify, unhexlify
|
||||||
|
@ -149,6 +150,13 @@ def encodeAddress(version, stream, ripe):
|
||||||
'Programming error in encodeAddress: The length of'
|
'Programming error in encodeAddress: The length of'
|
||||||
' a given ripe hash was not 20.'
|
' a given ripe hash was not 20.'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if isinstance(ripe, str):
|
||||||
|
if ripe[:2] == '\x00\x00':
|
||||||
|
ripe = ripe[2:]
|
||||||
|
elif ripe[:1] == '\x00':
|
||||||
|
ripe = ripe[1:]
|
||||||
|
else:
|
||||||
if ripe[:2] == b'\x00\x00':
|
if ripe[:2] == b'\x00\x00':
|
||||||
ripe = ripe[2:]
|
ripe = ripe[2:]
|
||||||
elif ripe[:1] == b'\x00':
|
elif ripe[:1] == b'\x00':
|
||||||
|
@ -158,8 +166,14 @@ def encodeAddress(version, stream, ripe):
|
||||||
raise Exception(
|
raise Exception(
|
||||||
'Programming error in encodeAddress: The length of'
|
'Programming error in encodeAddress: The length of'
|
||||||
' a given ripe hash was not 20.')
|
' a given ripe hash was not 20.')
|
||||||
ripe = ripe.lstrip(b'\x00')
|
ripe = ripe.lstrip('\x00')
|
||||||
|
|
||||||
|
if sys.version_info[0] == 3:
|
||||||
|
if isinstance(ripe, str):
|
||||||
|
storedBinaryData = encodeVarint(version) + encodeVarint(stream) + ripe.encode('utf-8')
|
||||||
|
else:
|
||||||
|
storedBinaryData = encodeVarint(version) + encodeVarint(stream) + ripe
|
||||||
|
else:
|
||||||
storedBinaryData = encodeVarint(version) + encodeVarint(stream) + ripe
|
storedBinaryData = encodeVarint(version) + encodeVarint(stream) + ripe
|
||||||
|
|
||||||
# Generate the checksum
|
# Generate the checksum
|
||||||
|
|
|
@ -38,7 +38,7 @@ def userInput(message):
|
||||||
|
|
||||||
global usrPrompt
|
global usrPrompt
|
||||||
|
|
||||||
print '\n' + message
|
print ('\n' + message)
|
||||||
uInput = raw_input('> ')
|
uInput = raw_input('> ')
|
||||||
|
|
||||||
if uInput.lower() == 'exit': # Returns the user to the main menu
|
if uInput.lower() == 'exit': # Returns the user to the main menu
|
||||||
|
@ -46,7 +46,7 @@ def userInput(message):
|
||||||
main()
|
main()
|
||||||
|
|
||||||
elif uInput.lower() == 'quit': # Quits the program
|
elif uInput.lower() == 'quit': # Quits the program
|
||||||
print '\n Bye\n'
|
print ('\n Bye\n')
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
@ -55,9 +55,9 @@ def userInput(message):
|
||||||
|
|
||||||
def restartBmNotify():
|
def restartBmNotify():
|
||||||
"""Prompt the user to restart Bitmessage"""
|
"""Prompt the user to restart Bitmessage"""
|
||||||
print '\n *******************************************************************'
|
print ('\n *******************************************************************')
|
||||||
print ' WARNING: If Bitmessage is running locally, you must restart it now.'
|
print (' WARNING: If Bitmessage is running locally, you must restart it now.')
|
||||||
print ' *******************************************************************\n'
|
print (' *******************************************************************\n')
|
||||||
|
|
||||||
|
|
||||||
# Begin keys.dat interactions
|
# Begin keys.dat interactions
|
||||||
|
@ -96,8 +96,8 @@ def configInit():
|
||||||
with open(keysName, 'wb') as configfile:
|
with open(keysName, 'wb') as configfile:
|
||||||
BMConfigParser().write(configfile)
|
BMConfigParser().write(configfile)
|
||||||
|
|
||||||
print '\n ' + str(keysName) + ' Initalized in the same directory as daemon.py'
|
print ('\n ' + str(keysName) + ' Initalized in the same directory as daemon.py')
|
||||||
print ' You will now need to configure the ' + str(keysName) + ' file.\n'
|
print (' You will now need to configure the ' + str(keysName) + ' file.\n')
|
||||||
|
|
||||||
|
|
||||||
def apiInit(apiEnabled):
|
def apiInit(apiEnabled):
|
||||||
|
@ -114,20 +114,20 @@ def apiInit(apiEnabled):
|
||||||
with open(keysPath, 'wb') as configfile:
|
with open(keysPath, 'wb') as configfile:
|
||||||
BMConfigParser().write(configfile)
|
BMConfigParser().write(configfile)
|
||||||
|
|
||||||
print 'Done'
|
print ('Done')
|
||||||
restartBmNotify()
|
restartBmNotify()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
elif uInput == "n":
|
elif uInput == "n":
|
||||||
print ' \n************************************************************'
|
print (' \n************************************************************')
|
||||||
print ' Daemon will not work when the API is disabled. '
|
print (' Daemon will not work when the API is disabled. ')
|
||||||
print ' Please refer to the Bitmessage Wiki on how to setup the API.'
|
print (' Please refer to the Bitmessage Wiki on how to setup the API.')
|
||||||
print ' ************************************************************\n'
|
print (' ************************************************************\n')
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
main()
|
main()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
print '\n Invalid Entry\n'
|
print ('\n Invalid Entry\n')
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -136,11 +136,11 @@ def apiInit(apiEnabled):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
else: # API information was not present.
|
else: # API information was not present.
|
||||||
print '\n ' + str(keysPath) + ' not properly configured!\n'
|
print ('\n ' + str(keysPath) + ' not properly configured!\n')
|
||||||
uInput = userInput("Would you like to do this now, (Y)es or (N)o?").lower()
|
uInput = userInput("Would you like to do this now, (Y)es or (N)o?").lower()
|
||||||
|
|
||||||
if uInput == "y": # User said yes, initalize the api by writing these values to the keys.dat file
|
if uInput == "y": # User said yes, initalize the api by writing these values to the keys.dat file
|
||||||
print ' '
|
print (' ')
|
||||||
|
|
||||||
apiUsr = userInput("API Username")
|
apiUsr = userInput("API Username")
|
||||||
apiPwd = userInput("API Password")
|
apiPwd = userInput("API Password")
|
||||||
|
@ -149,11 +149,11 @@ def apiInit(apiEnabled):
|
||||||
daemon = userInput("Daemon mode Enabled? (True) or (False)").lower()
|
daemon = userInput("Daemon mode Enabled? (True) or (False)").lower()
|
||||||
|
|
||||||
if (daemon != 'true' and daemon != 'false'):
|
if (daemon != 'true' and daemon != 'false'):
|
||||||
print '\n Invalid Entry for Daemon.\n'
|
print ('\n Invalid Entry for Daemon.\n')
|
||||||
uInput = 1
|
uInput = 1
|
||||||
main()
|
main()
|
||||||
|
|
||||||
print ' -----------------------------------\n'
|
print (' -----------------------------------\n')
|
||||||
|
|
||||||
# sets the bitmessage port to stop the warning about the api not properly
|
# sets the bitmessage port to stop the warning about the api not properly
|
||||||
# being setup. This is in the event that the keys.dat is in a different
|
# being setup. This is in the event that the keys.dat is in a different
|
||||||
|
@ -168,18 +168,18 @@ def apiInit(apiEnabled):
|
||||||
with open(keysPath, 'wb') as configfile:
|
with open(keysPath, 'wb') as configfile:
|
||||||
BMConfigParser().write(configfile)
|
BMConfigParser().write(configfile)
|
||||||
|
|
||||||
print '\n Finished configuring the keys.dat file with API information.\n'
|
print ('\n Finished configuring the keys.dat file with API information.\n')
|
||||||
restartBmNotify()
|
restartBmNotify()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
elif uInput == "n":
|
elif uInput == "n":
|
||||||
print '\n ***********************************************************'
|
print ('\n ***********************************************************')
|
||||||
print ' Please refer to the Bitmessage Wiki on how to setup the API.'
|
print (' Please refer to the Bitmessage Wiki on how to setup the API.')
|
||||||
print ' ***********************************************************\n'
|
print (' ***********************************************************\n')
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
main()
|
main()
|
||||||
else:
|
else:
|
||||||
print ' \nInvalid entry\n'
|
print (' \nInvalid entry\n')
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -206,11 +206,11 @@ def apiData():
|
||||||
BMConfigParser().get('bitmessagesettings', 'port')
|
BMConfigParser().get('bitmessagesettings', 'port')
|
||||||
except:
|
except:
|
||||||
# keys.dat was not there either, something is wrong.
|
# keys.dat was not there either, something is wrong.
|
||||||
print '\n ******************************************************************'
|
print ('\n ******************************************************************')
|
||||||
print ' There was a problem trying to access the Bitmessage keys.dat file'
|
print (' There was a problem trying to access the Bitmessage keys.dat file')
|
||||||
print ' or keys.dat is not set up correctly'
|
print (' or keys.dat is not set up correctly')
|
||||||
print ' Make sure that daemon is in the same directory as Bitmessage. '
|
print (' Make sure that daemon is in the same directory as Bitmessage. ')
|
||||||
print ' ******************************************************************\n'
|
print (' ******************************************************************\n')
|
||||||
|
|
||||||
uInput = userInput("Would you like to create a keys.dat in the local directory, (Y)es or (N)o?").lower()
|
uInput = userInput("Would you like to create a keys.dat in the local directory, (Y)es or (N)o?").lower()
|
||||||
|
|
||||||
|
@ -220,11 +220,11 @@ def apiData():
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
elif (uInput == "n" or uInput == "no"):
|
elif (uInput == "n" or uInput == "no"):
|
||||||
print '\n Trying Again.\n'
|
print ('\n Trying Again.\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
else:
|
else:
|
||||||
print '\n Invalid Input.\n'
|
print ('\n Invalid Input.\n')
|
||||||
|
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
main()
|
main()
|
||||||
|
@ -249,7 +249,7 @@ def apiData():
|
||||||
apiUsername = BMConfigParser().get('bitmessagesettings', 'apiusername')
|
apiUsername = BMConfigParser().get('bitmessagesettings', 'apiusername')
|
||||||
apiPassword = BMConfigParser().get('bitmessagesettings', 'apipassword')
|
apiPassword = BMConfigParser().get('bitmessagesettings', 'apipassword')
|
||||||
|
|
||||||
print '\n API data successfully imported.\n'
|
print ('\n API data successfully imported.\n')
|
||||||
|
|
||||||
# Build the api credentials
|
# Build the api credentials
|
||||||
return "http://" + apiUsername + ":" + apiPassword + "@" + apiInterface + ":" + str(apiPort) + "/"
|
return "http://" + apiUsername + ":" + apiPassword + "@" + apiInterface + ":" + str(apiPort) + "/"
|
||||||
|
@ -281,7 +281,7 @@ def bmSettings():
|
||||||
try:
|
try:
|
||||||
port = BMConfigParser().get('bitmessagesettings', 'port')
|
port = BMConfigParser().get('bitmessagesettings', 'port')
|
||||||
except:
|
except:
|
||||||
print '\n File not found.\n'
|
print ('\n File not found.\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -300,27 +300,27 @@ def bmSettings():
|
||||||
socksusername = BMConfigParser().get('bitmessagesettings', 'socksusername')
|
socksusername = BMConfigParser().get('bitmessagesettings', 'socksusername')
|
||||||
sockspassword = BMConfigParser().get('bitmessagesettings', 'sockspassword')
|
sockspassword = BMConfigParser().get('bitmessagesettings', 'sockspassword')
|
||||||
|
|
||||||
print '\n -----------------------------------'
|
print ('\n -----------------------------------')
|
||||||
print ' | Current Bitmessage Settings |'
|
print (' | Current Bitmessage Settings |')
|
||||||
print ' -----------------------------------'
|
print (' -----------------------------------')
|
||||||
print ' port = ' + port
|
print (' port = ' + port)
|
||||||
print ' startonlogon = ' + str(startonlogon)
|
print (' startonlogon = ' + str(startonlogon))
|
||||||
print ' minimizetotray = ' + str(minimizetotray)
|
print (' minimizetotray = ' + str(minimizetotray))
|
||||||
print ' showtraynotifications = ' + str(showtraynotifications)
|
print (' showtraynotifications = ' + str(showtraynotifications))
|
||||||
print ' startintray = ' + str(startintray)
|
print (' startintray = ' + str(startintray))
|
||||||
print ' defaultnoncetrialsperbyte = ' + defaultnoncetrialsperbyte
|
print (' defaultnoncetrialsperbyte = ' + defaultnoncetrialsperbyte)
|
||||||
print ' defaultpayloadlengthextrabytes = ' + defaultpayloadlengthextrabytes
|
print (' defaultpayloadlengthextrabytes = ' + defaultpayloadlengthextrabytes)
|
||||||
print ' daemon = ' + str(daemon)
|
print (' daemon = ' + str(daemon))
|
||||||
print '\n ------------------------------------'
|
print ('\n ------------------------------------')
|
||||||
print ' | Current Connection Settings |'
|
print (' | Current Connection Settings |')
|
||||||
print ' -----------------------------------'
|
print (' -----------------------------------')
|
||||||
print ' socksproxytype = ' + socksproxytype
|
print (' socksproxytype = ' + socksproxytype)
|
||||||
print ' sockshostname = ' + sockshostname
|
print (' sockshostname = ' + sockshostname)
|
||||||
print ' socksport = ' + socksport
|
print (' socksport = ' + socksport)
|
||||||
print ' socksauthentication = ' + str(socksauthentication)
|
print (' socksauthentication = ' + str(socksauthentication))
|
||||||
print ' socksusername = ' + socksusername
|
print (' socksusername = ' + socksusername)
|
||||||
print ' sockspassword = ' + sockspassword
|
print (' sockspassword = ' + sockspassword)
|
||||||
print ' '
|
print (' ')
|
||||||
|
|
||||||
uInput = userInput("Would you like to modify any of these settings, (Y)es or (N)o?").lower()
|
uInput = userInput("Would you like to modify any of these settings, (Y)es or (N)o?").lower()
|
||||||
|
|
||||||
|
@ -328,74 +328,74 @@ def bmSettings():
|
||||||
while True: # loops if they mistype the setting name, they can exit the loop with 'exit'
|
while True: # loops if they mistype the setting name, they can exit the loop with 'exit'
|
||||||
invalidInput = False
|
invalidInput = False
|
||||||
uInput = userInput("What setting would you like to modify?").lower()
|
uInput = userInput("What setting would you like to modify?").lower()
|
||||||
print ' '
|
print (' ')
|
||||||
|
|
||||||
if uInput == "port":
|
if uInput == "port":
|
||||||
print ' Current port number: ' + port
|
print (' Current port number: ' + port)
|
||||||
uInput = userInput("Enter the new port number.")
|
uInput = userInput("Enter the new port number.")
|
||||||
BMConfigParser().set('bitmessagesettings', 'port', str(uInput))
|
BMConfigParser().set('bitmessagesettings', 'port', str(uInput))
|
||||||
elif uInput == "startonlogon":
|
elif uInput == "startonlogon":
|
||||||
print ' Current status: ' + str(startonlogon)
|
print (' Current status: ' + str(startonlogon))
|
||||||
uInput = userInput("Enter the new status.")
|
uInput = userInput("Enter the new status.")
|
||||||
BMConfigParser().set('bitmessagesettings', 'startonlogon', str(uInput))
|
BMConfigParser().set('bitmessagesettings', 'startonlogon', str(uInput))
|
||||||
elif uInput == "minimizetotray":
|
elif uInput == "minimizetotray":
|
||||||
print ' Current status: ' + str(minimizetotray)
|
print (' Current status: ' + str(minimizetotray))
|
||||||
uInput = userInput("Enter the new status.")
|
uInput = userInput("Enter the new status.")
|
||||||
BMConfigParser().set('bitmessagesettings', 'minimizetotray', str(uInput))
|
BMConfigParser().set('bitmessagesettings', 'minimizetotray', str(uInput))
|
||||||
elif uInput == "showtraynotifications":
|
elif uInput == "showtraynotifications":
|
||||||
print ' Current status: ' + str(showtraynotifications)
|
print (' Current status: ' + str(showtraynotifications))
|
||||||
uInput = userInput("Enter the new status.")
|
uInput = userInput("Enter the new status.")
|
||||||
BMConfigParser().set('bitmessagesettings', 'showtraynotifications', str(uInput))
|
BMConfigParser().set('bitmessagesettings', 'showtraynotifications', str(uInput))
|
||||||
elif uInput == "startintray":
|
elif uInput == "startintray":
|
||||||
print ' Current status: ' + str(startintray)
|
print (' Current status: ' + str(startintray))
|
||||||
uInput = userInput("Enter the new status.")
|
uInput = userInput("Enter the new status.")
|
||||||
BMConfigParser().set('bitmessagesettings', 'startintray', str(uInput))
|
BMConfigParser().set('bitmessagesettings', 'startintray', str(uInput))
|
||||||
elif uInput == "defaultnoncetrialsperbyte":
|
elif uInput == "defaultnoncetrialsperbyte":
|
||||||
print ' Current default nonce trials per byte: ' + defaultnoncetrialsperbyte
|
print (' Current default nonce trials per byte: ' + defaultnoncetrialsperbyte)
|
||||||
uInput = userInput("Enter the new defaultnoncetrialsperbyte.")
|
uInput = userInput("Enter the new defaultnoncetrialsperbyte.")
|
||||||
BMConfigParser().set('bitmessagesettings', 'defaultnoncetrialsperbyte', str(uInput))
|
BMConfigParser().set('bitmessagesettings', 'defaultnoncetrialsperbyte', str(uInput))
|
||||||
elif uInput == "defaultpayloadlengthextrabytes":
|
elif uInput == "defaultpayloadlengthextrabytes":
|
||||||
print ' Current default payload length extra bytes: ' + defaultpayloadlengthextrabytes
|
print (' Current default payload length extra bytes: ' + defaultpayloadlengthextrabytes)
|
||||||
uInput = userInput("Enter the new defaultpayloadlengthextrabytes.")
|
uInput = userInput("Enter the new defaultpayloadlengthextrabytes.")
|
||||||
BMConfigParser().set('bitmessagesettings', 'defaultpayloadlengthextrabytes', str(uInput))
|
BMConfigParser().set('bitmessagesettings', 'defaultpayloadlengthextrabytes', str(uInput))
|
||||||
elif uInput == "daemon":
|
elif uInput == "daemon":
|
||||||
print ' Current status: ' + str(daemon)
|
print (' Current status: ' + str(daemon))
|
||||||
uInput = userInput("Enter the new status.").lower()
|
uInput = userInput("Enter the new status.").lower()
|
||||||
BMConfigParser().set('bitmessagesettings', 'daemon', str(uInput))
|
BMConfigParser().set('bitmessagesettings', 'daemon', str(uInput))
|
||||||
elif uInput == "socksproxytype":
|
elif uInput == "socksproxytype":
|
||||||
print ' Current socks proxy type: ' + socksproxytype
|
print (' Current socks proxy type: ' + socksproxytype)
|
||||||
print "Possibilities: 'none', 'SOCKS4a', 'SOCKS5'."
|
print ("Possibilities: 'none', 'SOCKS4a', 'SOCKS5'.")
|
||||||
uInput = userInput("Enter the new socksproxytype.")
|
uInput = userInput("Enter the new socksproxytype.")
|
||||||
BMConfigParser().set('bitmessagesettings', 'socksproxytype', str(uInput))
|
BMConfigParser().set('bitmessagesettings', 'socksproxytype', str(uInput))
|
||||||
elif uInput == "sockshostname":
|
elif uInput == "sockshostname":
|
||||||
print ' Current socks host name: ' + sockshostname
|
print (' Current socks host name: ' + sockshostname)
|
||||||
uInput = userInput("Enter the new sockshostname.")
|
uInput = userInput("Enter the new sockshostname.")
|
||||||
BMConfigParser().set('bitmessagesettings', 'sockshostname', str(uInput))
|
BMConfigParser().set('bitmessagesettings', 'sockshostname', str(uInput))
|
||||||
elif uInput == "socksport":
|
elif uInput == "socksport":
|
||||||
print ' Current socks port number: ' + socksport
|
print (' Current socks port number: ' + socksport)
|
||||||
uInput = userInput("Enter the new socksport.")
|
uInput = userInput("Enter the new socksport.")
|
||||||
BMConfigParser().set('bitmessagesettings', 'socksport', str(uInput))
|
BMConfigParser().set('bitmessagesettings', 'socksport', str(uInput))
|
||||||
elif uInput == "socksauthentication":
|
elif uInput == "socksauthentication":
|
||||||
print ' Current status: ' + str(socksauthentication)
|
print (' Current status: ' + str(socksauthentication))
|
||||||
uInput = userInput("Enter the new status.")
|
uInput = userInput("Enter the new status.")
|
||||||
BMConfigParser().set('bitmessagesettings', 'socksauthentication', str(uInput))
|
BMConfigParser().set('bitmessagesettings', 'socksauthentication', str(uInput))
|
||||||
elif uInput == "socksusername":
|
elif uInput == "socksusername":
|
||||||
print ' Current socks username: ' + socksusername
|
print (' Current socks username: ' + socksusername)
|
||||||
uInput = userInput("Enter the new socksusername.")
|
uInput = userInput("Enter the new socksusername.")
|
||||||
BMConfigParser().set('bitmessagesettings', 'socksusername', str(uInput))
|
BMConfigParser().set('bitmessagesettings', 'socksusername', str(uInput))
|
||||||
elif uInput == "sockspassword":
|
elif uInput == "sockspassword":
|
||||||
print ' Current socks password: ' + sockspassword
|
print (' Current socks password: ' + sockspassword)
|
||||||
uInput = userInput("Enter the new password.")
|
uInput = userInput("Enter the new password.")
|
||||||
BMConfigParser().set('bitmessagesettings', 'sockspassword', str(uInput))
|
BMConfigParser().set('bitmessagesettings', 'sockspassword', str(uInput))
|
||||||
else:
|
else:
|
||||||
print "\n Invalid input. Please try again.\n"
|
print ("\n Invalid input. Please try again.\n")
|
||||||
invalidInput = True
|
invalidInput = True
|
||||||
|
|
||||||
if invalidInput is not True: # don't prompt if they made a mistake.
|
if invalidInput is not True: # don't prompt if they made a mistake.
|
||||||
uInput = userInput("Would you like to change another setting, (Y)es or (N)o?").lower()
|
uInput = userInput("Would you like to change another setting, (Y)es or (N)o?").lower()
|
||||||
|
|
||||||
if uInput != "y":
|
if uInput != "y":
|
||||||
print '\n Changes Made.\n'
|
print ('\n Changes Made.\n')
|
||||||
with open(keysPath, 'wb') as configfile:
|
with open(keysPath, 'wb') as configfile:
|
||||||
BMConfigParser().write(configfile)
|
BMConfigParser().write(configfile)
|
||||||
restartBmNotify()
|
restartBmNotify()
|
||||||
|
@ -405,7 +405,7 @@ def bmSettings():
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
main()
|
main()
|
||||||
else:
|
else:
|
||||||
print "Invalid input."
|
print ("Invalid input.")
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -433,10 +433,10 @@ def subscribe():
|
||||||
|
|
||||||
if address == "c":
|
if address == "c":
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
print ' '
|
print (' ')
|
||||||
main()
|
main()
|
||||||
elif validAddress(address) is False:
|
elif validAddress(address) is False:
|
||||||
print '\n Invalid. "c" to cancel. Please try again.\n'
|
print ('\n Invalid. "c" to cancel. Please try again.\n')
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
|
|
||||||
|
@ -444,7 +444,7 @@ def subscribe():
|
||||||
label = label.encode('base64')
|
label = label.encode('base64')
|
||||||
|
|
||||||
api.addSubscription(address, label)
|
api.addSubscription(address, label)
|
||||||
print '\n You are now subscribed to: ' + address + '\n'
|
print ('\n You are now subscribed to: ' + address + '\n')
|
||||||
|
|
||||||
|
|
||||||
def unsubscribe():
|
def unsubscribe():
|
||||||
|
@ -456,31 +456,31 @@ def unsubscribe():
|
||||||
|
|
||||||
if address == "c":
|
if address == "c":
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
print ' '
|
print (' ')
|
||||||
main()
|
main()
|
||||||
elif validAddress(address) is False:
|
elif validAddress(address) is False:
|
||||||
print '\n Invalid. "c" to cancel. Please try again.\n'
|
print ('\n Invalid. "c" to cancel. Please try again.\n')
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
|
|
||||||
userInput("Are you sure, (Y)es or (N)o?").lower() # uInput =
|
userInput("Are you sure, (Y)es or (N)o?").lower() # uInput =
|
||||||
|
|
||||||
api.deleteSubscription(address)
|
api.deleteSubscription(address)
|
||||||
print '\n You are now unsubscribed from: ' + address + '\n'
|
print ('\n You are now unsubscribed from: ' + address + '\n')
|
||||||
|
|
||||||
|
|
||||||
def listSubscriptions():
|
def listSubscriptions():
|
||||||
"""List subscriptions"""
|
"""List subscriptions"""
|
||||||
|
|
||||||
global usrPrompt
|
global usrPrompt
|
||||||
print '\nLabel, Address, Enabled\n'
|
print ('\nLabel, Address, Enabled\n')
|
||||||
try:
|
try:
|
||||||
print api.listSubscriptions()
|
print (api.listSubscriptions())
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
print ' '
|
print (' ')
|
||||||
|
|
||||||
|
|
||||||
def createChan():
|
def createChan():
|
||||||
|
@ -490,9 +490,9 @@ def createChan():
|
||||||
password = userInput("Enter channel name")
|
password = userInput("Enter channel name")
|
||||||
password = password.encode('base64')
|
password = password.encode('base64')
|
||||||
try:
|
try:
|
||||||
print api.createChan(password)
|
print (api.createChan(password))
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -506,19 +506,19 @@ def joinChan():
|
||||||
|
|
||||||
if address == "c":
|
if address == "c":
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
print ' '
|
print (' ')
|
||||||
main()
|
main()
|
||||||
elif validAddress(address) is False:
|
elif validAddress(address) is False:
|
||||||
print '\n Invalid. "c" to cancel. Please try again.\n'
|
print ('\n Invalid. "c" to cancel. Please try again.\n')
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
|
|
||||||
password = userInput("Enter channel name")
|
password = userInput("Enter channel name")
|
||||||
password = password.encode('base64')
|
password = password.encode('base64')
|
||||||
try:
|
try:
|
||||||
print api.joinChan(password, address)
|
print (api.joinChan(password, address))
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -532,17 +532,17 @@ def leaveChan():
|
||||||
|
|
||||||
if address == "c":
|
if address == "c":
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
print ' '
|
print (' ')
|
||||||
main()
|
main()
|
||||||
elif validAddress(address) is False:
|
elif validAddress(address) is False:
|
||||||
print '\n Invalid. "c" to cancel. Please try again.\n'
|
print ('\n Invalid. "c" to cancel. Please try again.\n')
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
|
|
||||||
try:
|
try:
|
||||||
print api.leaveChan(address)
|
print (api.leaveChan(address))
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -554,14 +554,14 @@ def listAdd():
|
||||||
jsonAddresses = json.loads(api.listAddresses())
|
jsonAddresses = json.loads(api.listAddresses())
|
||||||
numAddresses = len(jsonAddresses['addresses']) # Number of addresses
|
numAddresses = len(jsonAddresses['addresses']) # Number of addresses
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
# print '\nAddress Number,Label,Address,Stream,Enabled\n'
|
# print ('\nAddress Number,Label,Address,Stream,Enabled\n')
|
||||||
print '\n --------------------------------------------------------------------------'
|
print ('\n --------------------------------------------------------------------------')
|
||||||
print ' | # | Label | Address |S#|Enabled|'
|
print (' | # | Label | Address |S#|Enabled|')
|
||||||
print ' |---|-------------------|-------------------------------------|--|-------|'
|
print (' |---|-------------------|-------------------------------------|--|-------|')
|
||||||
for addNum in range(0, numAddresses): # processes all of the addresses and lists them out
|
for addNum in range(0, numAddresses): # processes all of the addresses and lists them out
|
||||||
label = (jsonAddresses['addresses'][addNum]['label']).encode(
|
label = (jsonAddresses['addresses'][addNum]['label']).encode(
|
||||||
'utf') # may still misdiplay in some consoles
|
'utf') # may still misdiplay in some consoles
|
||||||
|
@ -572,7 +572,7 @@ def listAdd():
|
||||||
if len(label) > 19:
|
if len(label) > 19:
|
||||||
label = label[:16] + '...'
|
label = label[:16] + '...'
|
||||||
|
|
||||||
print ''.join([
|
print (''.join([
|
||||||
' |',
|
' |',
|
||||||
str(addNum).ljust(3),
|
str(addNum).ljust(3),
|
||||||
'|',
|
'|',
|
||||||
|
@ -584,13 +584,13 @@ def listAdd():
|
||||||
'|',
|
'|',
|
||||||
enabled.ljust(7),
|
enabled.ljust(7),
|
||||||
'|',
|
'|',
|
||||||
])
|
]))
|
||||||
|
|
||||||
print ''.join([
|
print (''.join([
|
||||||
' ',
|
' ',
|
||||||
74 * '-',
|
74 * '-',
|
||||||
'\n',
|
'\n',
|
||||||
])
|
]))
|
||||||
|
|
||||||
|
|
||||||
def genAdd(lbl, deterministic, passphrase, numOfAdd, addVNum, streamNum, ripe):
|
def genAdd(lbl, deterministic, passphrase, numOfAdd, addVNum, streamNum, ripe):
|
||||||
|
@ -603,7 +603,7 @@ def genAdd(lbl, deterministic, passphrase, numOfAdd, addVNum, streamNum, ripe):
|
||||||
try:
|
try:
|
||||||
generatedAddress = api.createRandomAddress(addressLabel)
|
generatedAddress = api.createRandomAddress(addressLabel)
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -614,7 +614,7 @@ def genAdd(lbl, deterministic, passphrase, numOfAdd, addVNum, streamNum, ripe):
|
||||||
try:
|
try:
|
||||||
generatedAddress = api.createDeterministicAddresses(passphrase, numOfAdd, addVNum, streamNum, ripe)
|
generatedAddress = api.createDeterministicAddresses(passphrase, numOfAdd, addVNum, streamNum, ripe)
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
return generatedAddress
|
return generatedAddress
|
||||||
|
@ -646,7 +646,7 @@ def saveFile(fileName, fileData):
|
||||||
|
|
||||||
with open(filePath, 'wb+') as path_to_file:
|
with open(filePath, 'wb+') as path_to_file:
|
||||||
path_to_file.write(fileData.decode("base64"))
|
path_to_file.write(fileData.decode("base64"))
|
||||||
print '\n Successfully saved ' + filePath + '\n'
|
print ('\n Successfully saved ' + filePath + '\n')
|
||||||
|
|
||||||
|
|
||||||
def attachment():
|
def attachment():
|
||||||
|
@ -667,26 +667,26 @@ def attachment():
|
||||||
with open(filePath):
|
with open(filePath):
|
||||||
break
|
break
|
||||||
except IOError:
|
except IOError:
|
||||||
print '\n %s was not found on your filesystem or can not be opened.\n' % filePath
|
print ('\n %s was not found on your filesystem or can not be opened.\n' % filePath)
|
||||||
|
|
||||||
# print filesize, and encoding estimate with confirmation if file is over X size (1mb?)
|
# print (filesize, and encoding estimate with confirmation if file is over X size (1mb?))
|
||||||
invSize = os.path.getsize(filePath)
|
invSize = os.path.getsize(filePath)
|
||||||
invSize = (invSize / 1024) # Converts to kilobytes
|
invSize = (invSize / 1024) # Converts to kilobytes
|
||||||
round(invSize, 2) # Rounds to two decimal places
|
round(invSize, 2) # Rounds to two decimal places
|
||||||
|
|
||||||
if invSize > 500.0: # If over 500KB
|
if invSize > 500.0: # If over 500KB
|
||||||
print ''.join([
|
print (''.join([
|
||||||
'\n WARNING:The file that you are trying to attach is ',
|
'\n WARNING:The file that you are trying to attach is ',
|
||||||
invSize,
|
invSize,
|
||||||
'KB and will take considerable time to send.\n'
|
'KB and will take considerable time to send.\n'
|
||||||
])
|
]))
|
||||||
uInput = userInput('Are you sure you still want to attach it, (Y)es or (N)o?').lower()
|
uInput = userInput('Are you sure you still want to attach it, (Y)es or (N)o?').lower()
|
||||||
|
|
||||||
if uInput != "y":
|
if uInput != "y":
|
||||||
print '\n Attachment discarded.\n'
|
print ('\n Attachment discarded.\n')
|
||||||
return ''
|
return ''
|
||||||
elif invSize > 184320.0: # If larger than 180MB, discard.
|
elif invSize > 184320.0: # If larger than 180MB, discard.
|
||||||
print '\n Attachment too big, maximum allowed size:180MB\n'
|
print ('\n Attachment too big, maximum allowed size:180MB\n')
|
||||||
main()
|
main()
|
||||||
|
|
||||||
pathLen = len(str(ntpath.basename(filePath))) # Gets the length of the filepath excluding the filename
|
pathLen = len(str(ntpath.basename(filePath))) # Gets the length of the filepath excluding the filename
|
||||||
|
@ -694,17 +694,17 @@ def attachment():
|
||||||
|
|
||||||
filetype = imghdr.what(filePath) # Tests if it is an image file
|
filetype = imghdr.what(filePath) # Tests if it is an image file
|
||||||
if filetype is not None:
|
if filetype is not None:
|
||||||
print '\n ---------------------------------------------------'
|
print ('\n ---------------------------------------------------')
|
||||||
print ' Attachment detected as an Image.'
|
print (' Attachment detected as an Image.')
|
||||||
print ' <img> tags will automatically be included,'
|
print (' <img> tags will automatically be included,')
|
||||||
print ' allowing the recipient to view the image'
|
print (' allowing the recipient to view the image')
|
||||||
print ' using the "View HTML code..." option in Bitmessage.'
|
print (' using the "View HTML code..." option in Bitmessage.')
|
||||||
print ' ---------------------------------------------------\n'
|
print (' ---------------------------------------------------\n')
|
||||||
isImage = True
|
isImage = True
|
||||||
time.sleep(2)
|
time.sleep(2)
|
||||||
|
|
||||||
# Alert the user that the encoding process may take some time.
|
# Alert the user that the encoding process may take some time.
|
||||||
print '\n Encoding Attachment, Please Wait ...\n'
|
print ('\n Encoding Attachment, Please Wait ...\n')
|
||||||
|
|
||||||
with open(filePath, 'rb') as f: # Begin the actual encoding
|
with open(filePath, 'rb') as f: # Begin the actual encoding
|
||||||
data = f.read(188743680) # Reads files up to 180MB, the maximum size for Bitmessage.
|
data = f.read(188743680) # Reads files up to 180MB, the maximum size for Bitmessage.
|
||||||
|
@ -759,10 +759,10 @@ def sendMsg(toAddress, fromAddress, subject, message):
|
||||||
|
|
||||||
if toAddress == "c":
|
if toAddress == "c":
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
print ' '
|
print (' ')
|
||||||
main()
|
main()
|
||||||
elif validAddress(toAddress) is False:
|
elif validAddress(toAddress) is False:
|
||||||
print '\n Invalid Address. "c" to cancel. Please try again.\n'
|
print ('\n Invalid Address. "c" to cancel. Please try again.\n')
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
|
|
||||||
|
@ -771,14 +771,14 @@ def sendMsg(toAddress, fromAddress, subject, message):
|
||||||
jsonAddresses = json.loads(api.listAddresses())
|
jsonAddresses = json.loads(api.listAddresses())
|
||||||
numAddresses = len(jsonAddresses['addresses']) # Number of addresses
|
numAddresses = len(jsonAddresses['addresses']) # Number of addresses
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
if numAddresses > 1: # Ask what address to send from if multiple addresses
|
if numAddresses > 1: # Ask what address to send from if multiple addresses
|
||||||
found = False
|
found = False
|
||||||
while True:
|
while True:
|
||||||
print ' '
|
print (' ')
|
||||||
fromAddress = userInput("Enter an Address or Address Label to send from.")
|
fromAddress = userInput("Enter an Address or Address Label to send from.")
|
||||||
|
|
||||||
if fromAddress == "exit":
|
if fromAddress == "exit":
|
||||||
|
@ -795,7 +795,7 @@ def sendMsg(toAddress, fromAddress, subject, message):
|
||||||
|
|
||||||
if found is False:
|
if found is False:
|
||||||
if validAddress(fromAddress) is False:
|
if validAddress(fromAddress) is False:
|
||||||
print '\n Invalid Address. Please try again.\n'
|
print ('\n Invalid Address. Please try again.\n')
|
||||||
|
|
||||||
else:
|
else:
|
||||||
for addNum in range(0, numAddresses): # processes all of the addresses
|
for addNum in range(0, numAddresses): # processes all of the addresses
|
||||||
|
@ -805,13 +805,13 @@ def sendMsg(toAddress, fromAddress, subject, message):
|
||||||
break
|
break
|
||||||
|
|
||||||
if found is False:
|
if found is False:
|
||||||
print '\n The address entered is not one of yours. Please try again.\n'
|
print ('\n The address entered is not one of yours. Please try again.\n')
|
||||||
|
|
||||||
if found:
|
if found:
|
||||||
break # Address was found
|
break # Address was found
|
||||||
|
|
||||||
else: # Only one address in address book
|
else: # Only one address in address book
|
||||||
print '\n Using the only address in the addressbook to send from.\n'
|
print ('\n Using the only address in the addressbook to send from.\n')
|
||||||
fromAddress = jsonAddresses['addresses'][0]['address']
|
fromAddress = jsonAddresses['addresses'][0]['address']
|
||||||
|
|
||||||
if subject == '':
|
if subject == '':
|
||||||
|
@ -828,9 +828,9 @@ def sendMsg(toAddress, fromAddress, subject, message):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
ackData = api.sendMessage(toAddress, fromAddress, subject, message)
|
ackData = api.sendMessage(toAddress, fromAddress, subject, message)
|
||||||
print '\n Message Status:', api.getStatus(ackData), '\n'
|
print ('\n Message Status:', api.getStatus(ackData), '\n')
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -845,7 +845,7 @@ def sendBrd(fromAddress, subject, message):
|
||||||
jsonAddresses = json.loads(api.listAddresses())
|
jsonAddresses = json.loads(api.listAddresses())
|
||||||
numAddresses = len(jsonAddresses['addresses']) # Number of addresses
|
numAddresses = len(jsonAddresses['addresses']) # Number of addresses
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -868,7 +868,7 @@ def sendBrd(fromAddress, subject, message):
|
||||||
|
|
||||||
if found is False:
|
if found is False:
|
||||||
if validAddress(fromAddress) is False:
|
if validAddress(fromAddress) is False:
|
||||||
print '\n Invalid Address. Please try again.\n'
|
print ('\n Invalid Address. Please try again.\n')
|
||||||
|
|
||||||
else:
|
else:
|
||||||
for addNum in range(0, numAddresses): # processes all of the addresses
|
for addNum in range(0, numAddresses): # processes all of the addresses
|
||||||
|
@ -878,13 +878,13 @@ def sendBrd(fromAddress, subject, message):
|
||||||
break
|
break
|
||||||
|
|
||||||
if found is False:
|
if found is False:
|
||||||
print '\n The address entered is not one of yours. Please try again.\n'
|
print ('\n The address entered is not one of yours. Please try again.\n')
|
||||||
|
|
||||||
if found:
|
if found:
|
||||||
break # Address was found
|
break # Address was found
|
||||||
|
|
||||||
else: # Only one address in address book
|
else: # Only one address in address book
|
||||||
print '\n Using the only address in the addressbook to send from.\n'
|
print ('\n Using the only address in the addressbook to send from.\n')
|
||||||
fromAddress = jsonAddresses['addresses'][0]['address']
|
fromAddress = jsonAddresses['addresses'][0]['address']
|
||||||
|
|
||||||
if subject == '':
|
if subject == '':
|
||||||
|
@ -901,9 +901,9 @@ def sendBrd(fromAddress, subject, message):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
ackData = api.sendBroadcast(fromAddress, subject, message)
|
ackData = api.sendBroadcast(fromAddress, subject, message)
|
||||||
print '\n Message Status:', api.getStatus(ackData), '\n'
|
print ('\n Message Status:', api.getStatus(ackData), '\n')
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -916,7 +916,7 @@ def inbox(unreadOnly=False):
|
||||||
inboxMessages = json.loads(api.getAllInboxMessages())
|
inboxMessages = json.loads(api.getAllInboxMessages())
|
||||||
numMessages = len(inboxMessages['inboxMessages'])
|
numMessages = len(inboxMessages['inboxMessages'])
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -926,16 +926,16 @@ def inbox(unreadOnly=False):
|
||||||
message = inboxMessages['inboxMessages'][msgNum]
|
message = inboxMessages['inboxMessages'][msgNum]
|
||||||
# if we are displaying all messages or if this message is unread then display it
|
# if we are displaying all messages or if this message is unread then display it
|
||||||
if not unreadOnly or not message['read']:
|
if not unreadOnly or not message['read']:
|
||||||
print ' -----------------------------------\n'
|
print (' -----------------------------------\n')
|
||||||
print ' Message Number:', msgNum # Message Number
|
print (' Message Number:', msgNum) # Message Number)
|
||||||
print ' To:', getLabelForAddress(message['toAddress']) # Get the to address
|
print (' To:', getLabelForAddress(message['toAddress'])) # Get the to address)
|
||||||
print ' From:', getLabelForAddress(message['fromAddress']) # Get the from address
|
print (' From:', getLabelForAddress(message['fromAddress'])) # Get the from address)
|
||||||
print ' Subject:', message['subject'].decode('base64') # Get the subject
|
print (' Subject:', message['subject'].decode('base64')) # Get the subject)
|
||||||
print ''.join([
|
print (''.join([
|
||||||
' Received:',
|
' Received:',
|
||||||
datetime.datetime.fromtimestamp(
|
datetime.datetime.fromtimestamp(
|
||||||
float(message['receivedTime'])).strftime('%Y-%m-%d %H:%M:%S'),
|
float(message['receivedTime'])).strftime('%Y-%m-%d %H:%M:%S'),
|
||||||
])
|
]))
|
||||||
messagesPrinted += 1
|
messagesPrinted += 1
|
||||||
if not message['read']:
|
if not message['read']:
|
||||||
messagesUnread += 1
|
messagesUnread += 1
|
||||||
|
@ -943,9 +943,9 @@ def inbox(unreadOnly=False):
|
||||||
if messagesPrinted % 20 == 0 and messagesPrinted != 0:
|
if messagesPrinted % 20 == 0 and messagesPrinted != 0:
|
||||||
userInput('(Press Enter to continue or type (Exit) to return to the main menu.)').lower() # uInput =
|
userInput('(Press Enter to continue or type (Exit) to return to the main menu.)').lower() # uInput =
|
||||||
|
|
||||||
print '\n -----------------------------------'
|
print ('\n -----------------------------------')
|
||||||
print ' There are %d unread messages of %d messages in the inbox.' % (messagesUnread, numMessages)
|
print (' There are %d unread messages of %d messages in the inbox.' % (messagesUnread, numMessages))
|
||||||
print ' -----------------------------------\n'
|
print (' -----------------------------------\n')
|
||||||
|
|
||||||
|
|
||||||
def outbox():
|
def outbox():
|
||||||
|
@ -956,32 +956,37 @@ def outbox():
|
||||||
outboxMessages = json.loads(api.getAllSentMessages())
|
outboxMessages = json.loads(api.getAllSentMessages())
|
||||||
numMessages = len(outboxMessages['sentMessages'])
|
numMessages = len(outboxMessages['sentMessages'])
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
for msgNum in range(0, numMessages): # processes all of the messages in the outbox
|
for msgNum in range(0, numMessages): # processes all of the messages in the outbox
|
||||||
print '\n -----------------------------------\n'
|
print ('\n -----------------------------------\n')
|
||||||
print ' Message Number:', msgNum # Message Number
|
print (' Message Number:', msgNum) # Message Number)
|
||||||
# print ' Message ID:', outboxMessages['sentMessages'][msgNum]['msgid']
|
# print (' Message ID:', outboxMessages['sentMessages'][msgNum]['msgid'])
|
||||||
print ' To:', getLabelForAddress(outboxMessages['sentMessages'][msgNum]['toAddress']) # Get the to address
|
print (' To:', getLabelForAddress(outboxMessages['sentMessages'][msgNum]['toAddress'])) # Get the to address)
|
||||||
# Get the from address
|
# Get the from address
|
||||||
print ' From:', getLabelForAddress(outboxMessages['sentMessages'][msgNum]['fromAddress'])
|
print (' From:', getLabelForAddress(outboxMessages['sentMessages'][msgNum]['fromAddress']))
|
||||||
print ' Subject:', outboxMessages['sentMessages'][msgNum]['subject'].decode('base64') # Get the subject
|
print (' Subject:', outboxMessages['sentMessages'][msgNum]['subject'].decode('base64')) # Get the subject)
|
||||||
print ' Status:', outboxMessages['sentMessages'][msgNum]['status'] # Get the subject
|
print (' Status:', outboxMessages['sentMessages'][msgNum]['status']) # Get the subject)
|
||||||
|
|
||||||
print ''.join([
|
# print (''.join([
|
||||||
|
# ' Last Action Time:',
|
||||||
|
# datetime.datetime.fromtimestamp(
|
||||||
|
# float(outboxMessages['sentMessages'][msgNum]['lastActionTime'])).strftime('%Y-%m-%d %H:%M:%S'),
|
||||||
|
# ]))
|
||||||
|
print (''.join([
|
||||||
' Last Action Time:',
|
' Last Action Time:',
|
||||||
datetime.datetime.fromtimestamp(
|
datetime.datetime.fromtimestamp(
|
||||||
float(outboxMessages['sentMessages'][msgNum]['lastActionTime'])).strftime('%Y-%m-%d %H:%M:%S'),
|
float(outboxMessages['sentMessages'][msgNum]['lastActionTime'])).strftime('%Y-%m-%d %H:%M:%S'),
|
||||||
])
|
]))
|
||||||
|
|
||||||
if msgNum % 20 == 0 and msgNum != 0:
|
if msgNum % 20 == 0 and msgNum != 0:
|
||||||
userInput('(Press Enter to continue or type (Exit) to return to the main menu.)').lower() # uInput =
|
userInput('(Press Enter to continue or type (Exit) to return to the main menu.)').lower() # uInput =
|
||||||
|
|
||||||
print '\n -----------------------------------'
|
print ('\n -----------------------------------')
|
||||||
print ' There are ', numMessages, ' messages in the outbox.'
|
print (' There are ', numMessages, ' messages in the outbox.')
|
||||||
print ' -----------------------------------\n'
|
print (' -----------------------------------\n')
|
||||||
|
|
||||||
|
|
||||||
def readSentMsg(msgNum):
|
def readSentMsg(msgNum):
|
||||||
|
@ -992,14 +997,14 @@ def readSentMsg(msgNum):
|
||||||
outboxMessages = json.loads(api.getAllSentMessages())
|
outboxMessages = json.loads(api.getAllSentMessages())
|
||||||
numMessages = len(outboxMessages['sentMessages'])
|
numMessages = len(outboxMessages['sentMessages'])
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
print ' '
|
print (' ')
|
||||||
|
|
||||||
if msgNum >= numMessages:
|
if msgNum >= numMessages:
|
||||||
print '\n Invalid Message Number.\n'
|
print ('\n Invalid Message Number.\n')
|
||||||
main()
|
main()
|
||||||
|
|
||||||
# Begin attachment detection
|
# Begin attachment detection
|
||||||
|
@ -1035,19 +1040,19 @@ def readSentMsg(msgNum):
|
||||||
|
|
||||||
# End attachment Detection
|
# End attachment Detection
|
||||||
|
|
||||||
print '\n To:', getLabelForAddress(outboxMessages['sentMessages'][msgNum]['toAddress']) # Get the to address
|
print ('\n To:', getLabelForAddress(outboxMessages['sentMessages'][msgNum]['toAddress'])) # Get the to address)
|
||||||
# Get the from address
|
# Get the from address
|
||||||
print ' From:', getLabelForAddress(outboxMessages['sentMessages'][msgNum]['fromAddress'])
|
print (' From:', getLabelForAddress(outboxMessages['sentMessages'][msgNum]['fromAddress']))
|
||||||
print ' Subject:', outboxMessages['sentMessages'][msgNum]['subject'].decode('base64') # Get the subject
|
print (' Subject:', outboxMessages['sentMessages'][msgNum]['subject'].decode('base64')) # Get the subject)
|
||||||
print ' Status:', outboxMessages['sentMessages'][msgNum]['status'] # Get the subject
|
print (' Status:', outboxMessages['sentMessages'][msgNum]['status']) # Get the subject)
|
||||||
print ''.join([
|
print (''.join([
|
||||||
' Last Action Time:',
|
' Last Action Time:',
|
||||||
datetime.datetime.fromtimestamp(
|
datetime.datetime.fromtimestamp(
|
||||||
float(outboxMessages['sentMessages'][msgNum]['lastActionTime'])).strftime('%Y-%m-%d %H:%M:%S'),
|
float(outboxMessages['sentMessages'][msgNum]['lastActionTime'])).strftime('%Y-%m-%d %H:%M:%S'),
|
||||||
])
|
]))
|
||||||
print ' Message:\n'
|
print (' Message:\n')
|
||||||
print message # inboxMessages['inboxMessages'][msgNum]['message'].decode('base64')
|
print (message) # inboxMessages['inboxMessages'][msgNum]['message'].decode('base64'))
|
||||||
print ' '
|
print (' ')
|
||||||
|
|
||||||
|
|
||||||
def readMsg(msgNum):
|
def readMsg(msgNum):
|
||||||
|
@ -1057,12 +1062,12 @@ def readMsg(msgNum):
|
||||||
inboxMessages = json.loads(api.getAllInboxMessages())
|
inboxMessages = json.loads(api.getAllInboxMessages())
|
||||||
numMessages = len(inboxMessages['inboxMessages'])
|
numMessages = len(inboxMessages['inboxMessages'])
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
if msgNum >= numMessages:
|
if msgNum >= numMessages:
|
||||||
print '\n Invalid Message Number.\n'
|
print ('\n Invalid Message Number.\n')
|
||||||
main()
|
main()
|
||||||
|
|
||||||
# Begin attachment detection
|
# Begin attachment detection
|
||||||
|
@ -1097,17 +1102,17 @@ def readMsg(msgNum):
|
||||||
break
|
break
|
||||||
|
|
||||||
# End attachment Detection
|
# End attachment Detection
|
||||||
print '\n To:', getLabelForAddress(inboxMessages['inboxMessages'][msgNum]['toAddress']) # Get the to address
|
print ('\n To:', getLabelForAddress(inboxMessages['inboxMessages'][msgNum]['toAddress'])) # Get the to address)
|
||||||
# Get the from address
|
# Get the from address
|
||||||
print ' From:', getLabelForAddress(inboxMessages['inboxMessages'][msgNum]['fromAddress'])
|
print (' From:', getLabelForAddress(inboxMessages['inboxMessages'][msgNum]['fromAddress']))
|
||||||
print ' Subject:', inboxMessages['inboxMessages'][msgNum]['subject'].decode('base64') # Get the subject
|
print (' Subject:', inboxMessages['inboxMessages'][msgNum]['subject'].decode('base64')) # Get the subject)
|
||||||
print ''.join([
|
print (''.join([
|
||||||
' Received:', datetime.datetime.fromtimestamp(
|
' Received:', datetime.datetime.fromtimestamp(
|
||||||
float(inboxMessages['inboxMessages'][msgNum]['receivedTime'])).strftime('%Y-%m-%d %H:%M:%S'),
|
float(inboxMessages['inboxMessages'][msgNum]['receivedTime'])).strftime('%Y-%m-%d %H:%M:%S'),
|
||||||
])
|
]))
|
||||||
print ' Message:\n'
|
print (' Message:\n')
|
||||||
print message # inboxMessages['inboxMessages'][msgNum]['message'].decode('base64')
|
print (message) # inboxMessages['inboxMessages'][msgNum]['message'].decode('base64'))
|
||||||
print ' '
|
print (' ')
|
||||||
return inboxMessages['inboxMessages'][msgNum]['msgid']
|
return inboxMessages['inboxMessages'][msgNum]['msgid']
|
||||||
|
|
||||||
|
|
||||||
|
@ -1119,7 +1124,7 @@ def replyMsg(msgNum, forwardORreply):
|
||||||
try:
|
try:
|
||||||
inboxMessages = json.loads(api.getAllInboxMessages())
|
inboxMessages = json.loads(api.getAllInboxMessages())
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -1141,14 +1146,14 @@ def replyMsg(msgNum, forwardORreply):
|
||||||
|
|
||||||
if toAdd == "c":
|
if toAdd == "c":
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
print ' '
|
print (' ')
|
||||||
main()
|
main()
|
||||||
elif validAddress(toAdd) is False:
|
elif validAddress(toAdd) is False:
|
||||||
print '\n Invalid Address. "c" to cancel. Please try again.\n'
|
print ('\n Invalid Address. "c" to cancel. Please try again.\n')
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
print '\n Invalid Selection. Reply or Forward only'
|
print ('\n Invalid Selection. Reply or Forward only')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -1180,7 +1185,7 @@ def delMsg(msgNum):
|
||||||
|
|
||||||
msgAck = api.trashMessage(msgId)
|
msgAck = api.trashMessage(msgId)
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -1197,7 +1202,7 @@ def delSentMsg(msgNum):
|
||||||
msgId = outboxMessages['sentMessages'][int(msgNum)]['msgid']
|
msgId = outboxMessages['sentMessages'][int(msgNum)]['msgid']
|
||||||
msgAck = api.trashSentMessage(msgId)
|
msgAck = api.trashSentMessage(msgId)
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -1233,7 +1238,7 @@ def buildKnownAddresses():
|
||||||
if entry['address'] not in knownAddresses:
|
if entry['address'] not in knownAddresses:
|
||||||
knownAddresses[entry['address']] = "%s (%s)" % (entry['label'].decode('base64'), entry['address'])
|
knownAddresses[entry['address']] = "%s (%s)" % (entry['label'].decode('base64'), entry['address'])
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -1248,7 +1253,7 @@ def buildKnownAddresses():
|
||||||
if entry['address'] not in knownAddresses:
|
if entry['address'] not in knownAddresses:
|
||||||
knownAddresses[entry['address']] = "%s (%s)" % (entry['label'].decode('base64'), entry['address'])
|
knownAddresses[entry['address']] = "%s (%s)" % (entry['label'].decode('base64'), entry['address'])
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -1263,21 +1268,18 @@ def listAddressBookEntries():
|
||||||
if "API Error" in response:
|
if "API Error" in response:
|
||||||
return getAPIErrorCode(response)
|
return getAPIErrorCode(response)
|
||||||
addressBook = json.loads(response)
|
addressBook = json.loads(response)
|
||||||
print
|
print (' --------------------------------------------------------------')
|
||||||
print ' --------------------------------------------------------------'
|
print (' | Label | Address |')
|
||||||
print ' | Label | Address |'
|
print (' |--------------------|---------------------------------------|')
|
||||||
print ' |--------------------|---------------------------------------|'
|
|
||||||
for entry in addressBook['addresses']:
|
for entry in addressBook['addresses']:
|
||||||
label = entry['label'].decode('base64')
|
label = entry['label'].decode('base64')
|
||||||
address = entry['address']
|
address = entry['address']
|
||||||
if len(label) > 19:
|
if len(label) > 19:
|
||||||
label = label[:16] + '...'
|
label = label[:16] + '...'
|
||||||
print ' | ' + label.ljust(19) + '| ' + address.ljust(37) + ' |'
|
print (' | ' + label.ljust(19) + '| ' + address.ljust(37) + ' |')
|
||||||
print ' --------------------------------------------------------------'
|
print (' --------------------------------------------------------------')
|
||||||
print
|
|
||||||
|
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -1292,7 +1294,7 @@ def addAddressToAddressBook(address, label):
|
||||||
if "API Error" in response:
|
if "API Error" in response:
|
||||||
return getAPIErrorCode(response)
|
return getAPIErrorCode(response)
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -1307,7 +1309,7 @@ def deleteAddressFromAddressBook(address):
|
||||||
if "API Error" in response:
|
if "API Error" in response:
|
||||||
return getAPIErrorCode(response)
|
return getAPIErrorCode(response)
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -1331,7 +1333,7 @@ def markMessageRead(messageID):
|
||||||
if "API Error" in response:
|
if "API Error" in response:
|
||||||
return getAPIErrorCode(response)
|
return getAPIErrorCode(response)
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -1346,7 +1348,7 @@ def markMessageUnread(messageID):
|
||||||
if "API Error" in response:
|
if "API Error" in response:
|
||||||
return getAPIErrorCode(response)
|
return getAPIErrorCode(response)
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -1359,7 +1361,7 @@ def markAllMessagesRead():
|
||||||
try:
|
try:
|
||||||
inboxMessages = json.loads(api.getAllInboxMessages())['inboxMessages']
|
inboxMessages = json.loads(api.getAllInboxMessages())['inboxMessages']
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
for message in inboxMessages:
|
for message in inboxMessages:
|
||||||
|
@ -1375,7 +1377,7 @@ def markAllMessagesUnread():
|
||||||
try:
|
try:
|
||||||
inboxMessages = json.loads(api.getAllInboxMessages())['inboxMessages']
|
inboxMessages = json.loads(api.getAllInboxMessages())['inboxMessages']
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
for message in inboxMessages:
|
for message in inboxMessages:
|
||||||
|
@ -1384,22 +1386,22 @@ def markAllMessagesUnread():
|
||||||
|
|
||||||
|
|
||||||
def clientStatus():
|
def clientStatus():
|
||||||
"""Print the client status"""
|
"""Print (the client status"""
|
||||||
|
|
||||||
global usrPrompt
|
global usrPrompt
|
||||||
|
|
||||||
try:
|
try:
|
||||||
client_status = json.loads(api.clientStatus())
|
client_status = json.loads(api.clientStatus())
|
||||||
except:
|
except:
|
||||||
print '\n Connection Error\n'
|
print ('\n Connection Error\n')
|
||||||
usrPrompt = 0
|
usrPrompt = 0
|
||||||
main()
|
main()
|
||||||
|
|
||||||
print "\nnetworkStatus: " + client_status['networkStatus'] + "\n"
|
print ("\nnetworkStatus: " + client_status['networkStatus'] + "\n")
|
||||||
print "\nnetworkConnections: " + str(client_status['networkConnections']) + "\n"
|
print ("\nnetworkConnections: " + str(client_status['networkConnections']) + "\n")
|
||||||
print "\nnumberOfPubkeysProcessed: " + str(client_status['numberOfPubkeysProcessed']) + "\n"
|
print ("\nnumberOfPubkeysProcessed: " + str(client_status['numberOfPubkeysProcessed']) + "\n")
|
||||||
print "\nnumberOfMessagesProcessed: " + str(client_status['numberOfMessagesProcessed']) + "\n"
|
print ("\nnumberOfMessagesProcessed: " + str(client_status['numberOfMessagesProcessed']) + "\n")
|
||||||
print "\nnumberOfBroadcastsProcessed: " + str(client_status['numberOfBroadcastsProcessed']) + "\n"
|
print ("\nnumberOfBroadcastsProcessed: " + str(client_status['numberOfBroadcastsProcessed']) + "\n")
|
||||||
|
|
||||||
|
|
||||||
def shutdown():
|
def shutdown():
|
||||||
|
@ -1409,7 +1411,7 @@ def shutdown():
|
||||||
api.shutdown()
|
api.shutdown()
|
||||||
except socket.error:
|
except socket.error:
|
||||||
pass
|
pass
|
||||||
print "\nShutdown command relayed\n"
|
print ("\nShutdown command relayed\n")
|
||||||
|
|
||||||
|
|
||||||
def UI(usrInput):
|
def UI(usrInput):
|
||||||
|
@ -1418,75 +1420,75 @@ def UI(usrInput):
|
||||||
global usrPrompt
|
global usrPrompt
|
||||||
|
|
||||||
if usrInput == "help" or usrInput == "h" or usrInput == "?":
|
if usrInput == "help" or usrInput == "h" or usrInput == "?":
|
||||||
print ' '
|
print (' ')
|
||||||
print ' -------------------------------------------------------------------------'
|
print (' -------------------------------------------------------------------------')
|
||||||
print ' | https://github.com/Dokument/PyBitmessage-Daemon |'
|
print (' | https://github.com/Dokument/PyBitmessage-Daemon |')
|
||||||
print ' |-----------------------------------------------------------------------|'
|
print (' |-----------------------------------------------------------------------|')
|
||||||
print ' | Command | Description |'
|
print (' | Command | Description |')
|
||||||
print ' |------------------------|----------------------------------------------|'
|
print (' |------------------------|----------------------------------------------|')
|
||||||
print ' | help | This help file. |'
|
print (' | help | This help file. |')
|
||||||
print ' | apiTest | Tests the API |'
|
print (' | apiTest | Tests the API |')
|
||||||
print ' | addInfo | Returns address information (If valid) |'
|
print (' | addInfo | Returns address information (If valid) |')
|
||||||
print ' | bmSettings | BitMessage settings |'
|
print (' | bmSettings | BitMessage settings |')
|
||||||
print ' | exit | Use anytime to return to main menu |'
|
print (' | exit | Use anytime to return to main menu |')
|
||||||
print ' | quit | Quits the program |'
|
print (' | quit | Quits the program |')
|
||||||
print ' |------------------------|----------------------------------------------|'
|
print (' |------------------------|----------------------------------------------|')
|
||||||
print ' | listAddresses | Lists all of the users addresses |'
|
print (' | listAddresses | Lists all of the users addresses |')
|
||||||
print ' | generateAddress | Generates a new address |'
|
print (' | generateAddress | Generates a new address |')
|
||||||
print ' | getAddress | Get determinist address from passphrase |'
|
print (' | getAddress | Get determinist address from passphrase |')
|
||||||
print ' |------------------------|----------------------------------------------|'
|
print (' |------------------------|----------------------------------------------|')
|
||||||
print ' | listAddressBookEntries | Lists entries from the Address Book |'
|
print (' | listAddressBookEntries | Lists entries from the Address Book |')
|
||||||
print ' | addAddressBookEntry | Add address to the Address Book |'
|
print (' | addAddressBookEntry | Add address to the Address Book |')
|
||||||
print ' | deleteAddressBookEntry | Deletes address from the Address Book |'
|
print (' | deleteAddressBookEntry | Deletes address from the Address Book |')
|
||||||
print ' |------------------------|----------------------------------------------|'
|
print (' |------------------------|----------------------------------------------|')
|
||||||
print ' | subscribe | Subscribes to an address |'
|
print (' | subscribe | Subscribes to an address |')
|
||||||
print ' | unsubscribe | Unsubscribes from an address |'
|
print (' | unsubscribe | Unsubscribes from an address |')
|
||||||
print ' |------------------------|----------------------------------------------|'
|
print (' |------------------------|----------------------------------------------|')
|
||||||
print ' | create | Creates a channel |'
|
print (' | create | Creates a channel |')
|
||||||
print ' | join | Joins a channel |'
|
print (' | join | Joins a channel |')
|
||||||
print ' | leave | Leaves a channel |'
|
print (' | leave | Leaves a channel |')
|
||||||
print ' |------------------------|----------------------------------------------|'
|
print (' |------------------------|----------------------------------------------|')
|
||||||
print ' | inbox | Lists the message information for the inbox |'
|
print (' | inbox | Lists the message information for the inbox |')
|
||||||
print ' | outbox | Lists the message information for the outbox |'
|
print (' | outbox | Lists the message information for the outbox |')
|
||||||
print ' | send | Send a new message or broadcast |'
|
print (' | send | Send a new message or broadcast |')
|
||||||
print ' | unread | Lists all unread inbox messages |'
|
print (' | unread | Lists all unread inbox messages |')
|
||||||
print ' | read | Reads a message from the inbox or outbox |'
|
print (' | read | Reads a message from the inbox or outbox |')
|
||||||
print ' | save | Saves message to text file |'
|
print (' | save | Saves message to text file |')
|
||||||
print ' | delete | Deletes a message or all messages |'
|
print (' | delete | Deletes a message or all messages |')
|
||||||
print ' -------------------------------------------------------------------------'
|
print (' -------------------------------------------------------------------------')
|
||||||
print ' '
|
print (' ')
|
||||||
main()
|
main()
|
||||||
|
|
||||||
elif usrInput == "apitest": # tests the API Connection.
|
elif usrInput == "apitest": # tests the API Connection.
|
||||||
if apiTest():
|
if apiTest():
|
||||||
print '\n API connection test has: PASSED\n'
|
print ('\n API connection test has: PASSED\n')
|
||||||
else:
|
else:
|
||||||
print '\n API connection test has: FAILED\n'
|
print ('\n API connection test has: FAILED\n')
|
||||||
main()
|
main()
|
||||||
|
|
||||||
elif usrInput == "addinfo":
|
elif usrInput == "addinfo":
|
||||||
tmp_address = userInput('\nEnter the Bitmessage Address.')
|
tmp_address = userInput('\nEnter the Bitmessage Address.')
|
||||||
address_information = json.loads(api.decodeAddress(tmp_address))
|
address_information = json.loads(api.decodeAddress(tmp_address))
|
||||||
|
|
||||||
print '\n------------------------------'
|
print ('\n------------------------------')
|
||||||
|
|
||||||
if 'success' in str(address_information['status']).lower():
|
if 'success' in str(address_information['status']).lower():
|
||||||
print ' Valid Address'
|
print (' Valid Address')
|
||||||
print ' Address Version: %s' % str(address_information['addressVersion'])
|
print (' Address Version: %s' % str(address_information['addressVersion']))
|
||||||
print ' Stream Number: %s' % str(address_information['streamNumber'])
|
print (' Stream Number: %s' % str(address_information['streamNumber']))
|
||||||
else:
|
else:
|
||||||
print ' Invalid Address !'
|
print (' Invalid Address !')
|
||||||
|
|
||||||
print '------------------------------\n'
|
print ('------------------------------\n')
|
||||||
main()
|
main()
|
||||||
|
|
||||||
elif usrInput == "bmsettings": # tests the API Connection.
|
elif usrInput == "bmsettings": # tests the API Connection.
|
||||||
bmSettings()
|
bmSettings()
|
||||||
print ' '
|
print (' ')
|
||||||
main()
|
main()
|
||||||
|
|
||||||
elif usrInput == "quit": # Quits the application
|
elif usrInput == "quit": # Quits the application
|
||||||
print '\n Bye\n'
|
print ('\n Bye\n')
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
elif usrInput == "listaddresses": # Lists all of the identities in the addressbook
|
elif usrInput == "listaddresses": # Lists all of the identities in the addressbook
|
||||||
|
@ -1508,17 +1510,17 @@ def UI(usrInput):
|
||||||
|
|
||||||
if isRipe == "y":
|
if isRipe == "y":
|
||||||
ripe = True
|
ripe = True
|
||||||
print genAdd(lbl, deterministic, passphrase, numOfAdd, addVNum, streamNum, ripe)
|
print (genAdd(lbl, deterministic, passphrase, numOfAdd, addVNum, streamNum, ripe))
|
||||||
main()
|
main()
|
||||||
elif isRipe == "n":
|
elif isRipe == "n":
|
||||||
ripe = False
|
ripe = False
|
||||||
print genAdd(lbl, deterministic, passphrase, numOfAdd, addVNum, streamNum, ripe)
|
print (genAdd(lbl, deterministic, passphrase, numOfAdd, addVNum, streamNum, ripe))
|
||||||
main()
|
main()
|
||||||
elif isRipe == "exit":
|
elif isRipe == "exit":
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
main()
|
main()
|
||||||
else:
|
else:
|
||||||
print '\n Invalid input\n'
|
print ('\n Invalid input\n')
|
||||||
main()
|
main()
|
||||||
|
|
||||||
elif uInput == "r" or uInput == "random": # Creates a random address with user-defined label
|
elif uInput == "r" or uInput == "random": # Creates a random address with user-defined label
|
||||||
|
@ -1526,18 +1528,18 @@ def UI(usrInput):
|
||||||
null = ''
|
null = ''
|
||||||
lbl = userInput('Enter the label for the new address.')
|
lbl = userInput('Enter the label for the new address.')
|
||||||
|
|
||||||
print genAdd(lbl, deterministic, null, null, null, null, null)
|
print (genAdd(lbl, deterministic, null, null, null, null, null))
|
||||||
main()
|
main()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
print '\n Invalid input\n'
|
print ('\n Invalid input\n')
|
||||||
main()
|
main()
|
||||||
|
|
||||||
elif usrInput == "getaddress": # Gets the address for/from a passphrase
|
elif usrInput == "getaddress": # Gets the address for/from a passphrase
|
||||||
phrase = userInput("Enter the address passphrase.")
|
phrase = userInput("Enter the address passphrase.")
|
||||||
print '\n Working...\n'
|
print ('\n Working...\n')
|
||||||
address = getAddress(phrase, 4, 1) # ,vNumber,sNumber)
|
address = getAddress(phrase, 4, 1) # ,vNumber,sNumber)
|
||||||
print '\n Address: ' + address + '\n'
|
print ('\n Address: ' + address + '\n')
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -1572,17 +1574,17 @@ def UI(usrInput):
|
||||||
main()
|
main()
|
||||||
|
|
||||||
elif usrInput == "inbox":
|
elif usrInput == "inbox":
|
||||||
print '\n Loading...\n'
|
print ('\n Loading...\n')
|
||||||
inbox()
|
inbox()
|
||||||
main()
|
main()
|
||||||
|
|
||||||
elif usrInput == "unread":
|
elif usrInput == "unread":
|
||||||
print '\n Loading...\n'
|
print ('\n Loading...\n')
|
||||||
inbox(True)
|
inbox(True)
|
||||||
main()
|
main()
|
||||||
|
|
||||||
elif usrInput == "outbox":
|
elif usrInput == "outbox":
|
||||||
print '\n Loading...\n'
|
print ('\n Loading...\n')
|
||||||
outbox()
|
outbox()
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -1603,14 +1605,14 @@ def UI(usrInput):
|
||||||
uInput = userInput("Would you like to read a message from the (I)nbox or (O)utbox?").lower()
|
uInput = userInput("Would you like to read a message from the (I)nbox or (O)utbox?").lower()
|
||||||
|
|
||||||
if (uInput != 'i' and uInput != 'inbox' and uInput != 'o' and uInput != 'outbox'):
|
if (uInput != 'i' and uInput != 'inbox' and uInput != 'o' and uInput != 'outbox'):
|
||||||
print '\n Invalid Input.\n'
|
print ('\n Invalid Input.\n')
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
main()
|
main()
|
||||||
|
|
||||||
msgNum = int(userInput("What is the number of the message you wish to open?"))
|
msgNum = int(userInput("What is the number of the message you wish to open?"))
|
||||||
|
|
||||||
if (uInput == 'i' or uInput == 'inbox'):
|
if (uInput == 'i' or uInput == 'inbox'):
|
||||||
print '\n Loading...\n'
|
print ('\n Loading...\n')
|
||||||
messageID = readMsg(msgNum)
|
messageID = readMsg(msgNum)
|
||||||
|
|
||||||
uInput = userInput("\nWould you like to keep this message unread, (Y)es or (N)o?").lower()
|
uInput = userInput("\nWould you like to keep this message unread, (Y)es or (N)o?").lower()
|
||||||
|
@ -1622,14 +1624,14 @@ def UI(usrInput):
|
||||||
uInput = userInput("\nWould you like to (D)elete, (F)orward, (R)eply to, or (Exit) this message?").lower()
|
uInput = userInput("\nWould you like to (D)elete, (F)orward, (R)eply to, or (Exit) this message?").lower()
|
||||||
|
|
||||||
if uInput in ['r', 'reply']:
|
if uInput in ['r', 'reply']:
|
||||||
print '\n Loading...\n'
|
print ('\n Loading...\n')
|
||||||
print ' '
|
print (' ')
|
||||||
replyMsg(msgNum, 'reply')
|
replyMsg(msgNum, 'reply')
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
|
|
||||||
elif uInput == 'f' or uInput == 'forward':
|
elif uInput == 'f' or uInput == 'forward':
|
||||||
print '\n Loading...\n'
|
print ('\n Loading...\n')
|
||||||
print ' '
|
print (' ')
|
||||||
replyMsg(msgNum, 'forward')
|
replyMsg(msgNum, 'forward')
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
|
|
||||||
|
@ -1638,12 +1640,12 @@ def UI(usrInput):
|
||||||
|
|
||||||
if uInput == "y":
|
if uInput == "y":
|
||||||
delMsg(msgNum)
|
delMsg(msgNum)
|
||||||
print '\n Message Deleted.\n'
|
print ('\n Message Deleted.\n')
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
else:
|
else:
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
else:
|
else:
|
||||||
print '\n Invalid entry\n'
|
print ('\n Invalid entry\n')
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
|
|
||||||
elif (uInput == 'o' or uInput == 'outbox'):
|
elif (uInput == 'o' or uInput == 'outbox'):
|
||||||
|
@ -1657,12 +1659,12 @@ def UI(usrInput):
|
||||||
|
|
||||||
if uInput == "y":
|
if uInput == "y":
|
||||||
delSentMsg(msgNum)
|
delSentMsg(msgNum)
|
||||||
print '\n Message Deleted.\n'
|
print ('\n Message Deleted.\n')
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
else:
|
else:
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
else:
|
else:
|
||||||
print '\n Invalid Entry\n'
|
print ('\n Invalid Entry\n')
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
|
|
||||||
main()
|
main()
|
||||||
|
@ -1672,7 +1674,7 @@ def UI(usrInput):
|
||||||
uInput = userInput("Would you like to save a message from the (I)nbox or (O)utbox?").lower()
|
uInput = userInput("Would you like to save a message from the (I)nbox or (O)utbox?").lower()
|
||||||
|
|
||||||
if uInput not in ['i', 'inbox', 'o', 'outbox']:
|
if uInput not in ['i', 'inbox', 'o', 'outbox']:
|
||||||
print '\n Invalid Input.\n'
|
print ('\n Invalid Input.\n')
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -1684,7 +1686,7 @@ def UI(usrInput):
|
||||||
msgNum = int(userInput("What is the number of the message you wish to save?"))
|
msgNum = int(userInput("What is the number of the message you wish to save?"))
|
||||||
|
|
||||||
if msgNum >= numMessages:
|
if msgNum >= numMessages:
|
||||||
print '\n Invalid Message Number.\n'
|
print ('\n Invalid Message Number.\n')
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
|
|
||||||
|
@ -1700,7 +1702,7 @@ def UI(usrInput):
|
||||||
msgNum = int(userInput("What is the number of the message you wish to save?"))
|
msgNum = int(userInput("What is the number of the message you wish to save?"))
|
||||||
|
|
||||||
if msgNum >= numMessages:
|
if msgNum >= numMessages:
|
||||||
print '\n Invalid Message Number.\n'
|
print ('\n Invalid Message Number.\n')
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
|
|
||||||
|
@ -1729,7 +1731,7 @@ def UI(usrInput):
|
||||||
if msgNum == 'a' or msgNum == 'all':
|
if msgNum == 'a' or msgNum == 'all':
|
||||||
break
|
break
|
||||||
elif int(msgNum) >= numMessages:
|
elif int(msgNum) >= numMessages:
|
||||||
print '\n Invalid Message Number.\n'
|
print ('\n Invalid Message Number.\n')
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
|
|
||||||
|
@ -1737,17 +1739,17 @@ def UI(usrInput):
|
||||||
|
|
||||||
if uInput == "y":
|
if uInput == "y":
|
||||||
if msgNum in ['a', 'all']:
|
if msgNum in ['a', 'all']:
|
||||||
print ' '
|
print (' ')
|
||||||
for msgNum in range(0, numMessages): # processes all of the messages in the inbox
|
for msgNum in range(0, numMessages): # processes all of the messages in the inbox
|
||||||
print ' Deleting message ', msgNum + 1, ' of ', numMessages
|
print (' Deleting message ', msgNum + 1, ' of ', numMessages)
|
||||||
delMsg(0)
|
delMsg(0)
|
||||||
|
|
||||||
print '\n Inbox is empty.'
|
print ('\n Inbox is empty.')
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
else:
|
else:
|
||||||
delMsg(int(msgNum))
|
delMsg(int(msgNum))
|
||||||
|
|
||||||
print '\n Notice: Message numbers may have changed.\n'
|
print ('\n Notice: Message numbers may have changed.\n')
|
||||||
main()
|
main()
|
||||||
else:
|
else:
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
|
@ -1763,7 +1765,7 @@ def UI(usrInput):
|
||||||
if msgNum in ['a', 'all']:
|
if msgNum in ['a', 'all']:
|
||||||
break
|
break
|
||||||
elif int(msgNum) >= numMessages:
|
elif int(msgNum) >= numMessages:
|
||||||
print '\n Invalid Message Number.\n'
|
print ('\n Invalid Message Number.\n')
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
|
|
||||||
|
@ -1771,33 +1773,33 @@ def UI(usrInput):
|
||||||
|
|
||||||
if uInput == "y":
|
if uInput == "y":
|
||||||
if msgNum in ['a', 'all']:
|
if msgNum in ['a', 'all']:
|
||||||
print ' '
|
print (' ')
|
||||||
for msgNum in range(0, numMessages): # processes all of the messages in the outbox
|
for msgNum in range(0, numMessages): # processes all of the messages in the outbox
|
||||||
print ' Deleting message ', msgNum + 1, ' of ', numMessages
|
print (' Deleting message ', msgNum + 1, ' of ', numMessages)
|
||||||
delSentMsg(0)
|
delSentMsg(0)
|
||||||
|
|
||||||
print '\n Outbox is empty.'
|
print ('\n Outbox is empty.')
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
else:
|
else:
|
||||||
delSentMsg(int(msgNum))
|
delSentMsg(int(msgNum))
|
||||||
print '\n Notice: Message numbers may have changed.\n'
|
print ('\n Notice: Message numbers may have changed.\n')
|
||||||
main()
|
main()
|
||||||
else:
|
else:
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
else:
|
else:
|
||||||
print '\n Invalid Entry.\n'
|
print ('\n Invalid Entry.\n')
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
main()
|
main()
|
||||||
|
|
||||||
elif usrInput == "exit":
|
elif usrInput == "exit":
|
||||||
print '\n You are already at the main menu. Use "quit" to quit.\n'
|
print ('\n You are already at the main menu. Use "quit" to quit.\n')
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
main()
|
main()
|
||||||
|
|
||||||
elif usrInput == "listaddressbookentries":
|
elif usrInput == "listaddressbookentries":
|
||||||
res = listAddressBookEntries()
|
res = listAddressBookEntries()
|
||||||
if res == 20:
|
if res == 20:
|
||||||
print '\n Error: API function not supported.\n'
|
print ('\n Error: API function not supported.\n')
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -1806,9 +1808,9 @@ def UI(usrInput):
|
||||||
label = userInput('Enter label')
|
label = userInput('Enter label')
|
||||||
res = addAddressToAddressBook(address, label)
|
res = addAddressToAddressBook(address, label)
|
||||||
if res == 16:
|
if res == 16:
|
||||||
print '\n Error: Address already exists in Address Book.\n'
|
print ('\n Error: Address already exists in Address Book.\n')
|
||||||
if res == 20:
|
if res == 20:
|
||||||
print '\n Error: API function not supported.\n'
|
print ('\n Error: API function not supported.\n')
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -1816,7 +1818,7 @@ def UI(usrInput):
|
||||||
address = userInput('Enter address')
|
address = userInput('Enter address')
|
||||||
res = deleteAddressFromAddressBook(address)
|
res = deleteAddressFromAddressBook(address)
|
||||||
if res == 20:
|
if res == 20:
|
||||||
print '\n Error: API function not supported.\n'
|
print ('\n Error: API function not supported.\n')
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -1841,7 +1843,7 @@ def UI(usrInput):
|
||||||
main()
|
main()
|
||||||
|
|
||||||
else:
|
else:
|
||||||
print '\n "', usrInput, '" is not a command.\n'
|
print ('\n "', usrInput, '" is not a command.\n')
|
||||||
usrPrompt = 1
|
usrPrompt = 1
|
||||||
main()
|
main()
|
||||||
|
|
||||||
|
@ -1853,24 +1855,24 @@ def main():
|
||||||
global usrPrompt
|
global usrPrompt
|
||||||
|
|
||||||
if usrPrompt == 0:
|
if usrPrompt == 0:
|
||||||
print '\n ------------------------------'
|
print ('\n ------------------------------')
|
||||||
print ' | Bitmessage Daemon by .dok |'
|
print (' | Bitmessage Daemon by .dok |')
|
||||||
print ' | Version 0.3.1 for BM 0.6.2 |'
|
print (' | Version 0.3.1 for BM 0.6.2 |')
|
||||||
print ' ------------------------------'
|
print (' ------------------------------')
|
||||||
api = xmlrpclib.ServerProxy(apiData()) # Connect to BitMessage using these api credentials
|
api = xmlrpclib.ServerProxy(apiData()) # Connect to BitMessage using these api credentials
|
||||||
|
|
||||||
if apiTest() is False:
|
if apiTest() is False:
|
||||||
print '\n ****************************************************************'
|
print ('\n ****************************************************************')
|
||||||
print ' WARNING: You are not connected to the Bitmessage client.'
|
print (' WARNING: You are not connected to the Bitmessage client.')
|
||||||
print ' Either Bitmessage is not running or your settings are incorrect.'
|
print (' Either Bitmessage is not running or your settings are incorrect.')
|
||||||
print ' Use the command "apiTest" or "bmSettings" to resolve this issue.'
|
print (' Use the command "apiTest" or "bmSettings" to resolve this issue.')
|
||||||
print ' ****************************************************************\n'
|
print (' ****************************************************************\n')
|
||||||
|
|
||||||
print 'Type (H)elp for a list of commands.' # Startup message
|
print ('Type (H)elp for a list of commands.') # Startup message)
|
||||||
usrPrompt = 2
|
usrPrompt = 2
|
||||||
|
|
||||||
elif usrPrompt == 1:
|
elif usrPrompt == 1:
|
||||||
print '\nType (H)elp for a list of commands.' # Startup message
|
print ('\nType (H)elp for a list of commands.') # Startup message)
|
||||||
usrPrompt = 2
|
usrPrompt = 2
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -53,18 +53,16 @@ BMConfigDefaults = {
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
class BMConfigParser(SafeConfigParser):
|
class BMConfigParser(SafeConfigParser):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Singleton class inherited from :class:`ConfigParser.SafeConfigParser`
|
Singleton class inherited from :class:`ConfigParser.SafeConfigParser`
|
||||||
with additional methods specific to bitmessage config.
|
with additional methods specific to bitmessage config.
|
||||||
"""
|
"""
|
||||||
# pylint: disable=too-many-ancestors
|
# pylint: disable=too-many-ancestors
|
||||||
|
|
||||||
_temp = {}
|
_temp = {}
|
||||||
|
|
||||||
def set(self, section, option, value=None):
|
def set(self, section, option, value=None):
|
||||||
if self._optcre is self.OPTCRE or value:
|
if self._optcre is self.OPTCRE or value:
|
||||||
if not isinstance(value, basestring):
|
if not isinstance(value, str):
|
||||||
raise TypeError("option values must be strings")
|
raise TypeError("option values must be strings")
|
||||||
if not self.validate(section, option, value):
|
if not self.validate(section, option, value):
|
||||||
raise ValueError("Invalid value %s" % value)
|
raise ValueError("Invalid value %s" % value)
|
||||||
|
@ -76,16 +74,16 @@ class BMConfigParser(SafeConfigParser):
|
||||||
try:
|
try:
|
||||||
if section == "bitmessagesettings" and option == "timeformat":
|
if section == "bitmessagesettings" and option == "timeformat":
|
||||||
return ConfigParser.ConfigParser.get(
|
return ConfigParser.ConfigParser.get(
|
||||||
self, section, option)
|
self, section, option, raw=True, vars=vars)
|
||||||
try:
|
try:
|
||||||
return self._temp[section][option]
|
return self._temp[section][option]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
return ConfigParser.ConfigParser.get(
|
return ConfigParser.ConfigParser.get(
|
||||||
self, section, option)
|
self, section, option, raw=True, vars=vars)
|
||||||
except ConfigParser.InterpolationError:
|
except ConfigParser.InterpolationError:
|
||||||
return ConfigParser.ConfigParser.get(
|
return ConfigParser.ConfigParser.get(
|
||||||
self, section, option)
|
self, section, option, raw=True, vars=vars)
|
||||||
except (ConfigParser.NoSectionError, ConfigParser.NoOptionError) as e:
|
except (ConfigParser.NoSectionError, ConfigParser.NoOptionError) as e:
|
||||||
try:
|
try:
|
||||||
return BMConfigDefaults[section][option]
|
return BMConfigDefaults[section][option]
|
||||||
|
@ -122,6 +120,10 @@ class BMConfigParser(SafeConfigParser):
|
||||||
def safeGetBoolean(self, section, field):
|
def safeGetBoolean(self, section, field):
|
||||||
"""Return value as boolean, False on exceptions"""
|
"""Return value as boolean, False on exceptions"""
|
||||||
try:
|
try:
|
||||||
|
# Used in the python2.7
|
||||||
|
# return self.getboolean(section, field)
|
||||||
|
# Used in the python3.5.2
|
||||||
|
# print(config, section, field)
|
||||||
return self.getboolean(section, field)
|
return self.getboolean(section, field)
|
||||||
except (ConfigParser.NoSectionError, ConfigParser.NoOptionError,
|
except (ConfigParser.NoSectionError, ConfigParser.NoOptionError,
|
||||||
ValueError, AttributeError):
|
ValueError, AttributeError):
|
||||||
|
@ -131,7 +133,10 @@ class BMConfigParser(SafeConfigParser):
|
||||||
"""Return value as integer, default on exceptions,
|
"""Return value as integer, default on exceptions,
|
||||||
0 if default missing"""
|
0 if default missing"""
|
||||||
try:
|
try:
|
||||||
return self.getint(section, field)
|
# Used in the python2.7
|
||||||
|
# return self.getint(section, field)
|
||||||
|
# Used in the python3.7.0
|
||||||
|
return int(self.get(section, field))
|
||||||
except (ConfigParser.NoSectionError, ConfigParser.NoOptionError,
|
except (ConfigParser.NoSectionError, ConfigParser.NoOptionError,
|
||||||
ValueError, AttributeError):
|
ValueError, AttributeError):
|
||||||
return default
|
return default
|
||||||
|
@ -145,11 +150,39 @@ class BMConfigParser(SafeConfigParser):
|
||||||
return default
|
return default
|
||||||
|
|
||||||
def items(self, section, raw=False, variables=None):
|
def items(self, section, raw=False, variables=None):
|
||||||
|
# pylint: disable=signature-differs
|
||||||
"""Return section variables as parent,
|
"""Return section variables as parent,
|
||||||
but override the "raw" argument to always True"""
|
but override the "raw" argument to always True"""
|
||||||
# pylint: disable=arguments-differ
|
|
||||||
return ConfigParser.ConfigParser.items(self, section, True, variables)
|
return ConfigParser.ConfigParser.items(self, section, True, variables)
|
||||||
|
|
||||||
|
if sys.version_info[0] == 3:
|
||||||
|
@staticmethod
|
||||||
|
def addresses(hidden=False):
|
||||||
|
"""Return a list of local bitmessage addresses (from section labels)"""
|
||||||
|
return [x for x in BMConfigParser().sections() if x.startswith('BM-') and (
|
||||||
|
hidden or not BMConfigParser().safeGetBoolean(x, 'hidden'))]
|
||||||
|
|
||||||
|
def read(self, filenames):
|
||||||
|
ConfigParser.ConfigParser.read(self, filenames)
|
||||||
|
for section in self.sections():
|
||||||
|
for option in self.options(section):
|
||||||
|
try:
|
||||||
|
if not self.validate(
|
||||||
|
section, option,
|
||||||
|
self[section][option]
|
||||||
|
):
|
||||||
|
try:
|
||||||
|
newVal = BMConfigDefaults[section][option]
|
||||||
|
except ConfigParser.NoSectionError:
|
||||||
|
continue
|
||||||
|
except KeyError:
|
||||||
|
continue
|
||||||
|
ConfigParser.ConfigParser.set(
|
||||||
|
self, section, option, newVal)
|
||||||
|
except ConfigParser.InterpolationError:
|
||||||
|
continue
|
||||||
|
|
||||||
|
else:
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def addresses():
|
def addresses():
|
||||||
"""Return a list of local bitmessage addresses (from section labels)"""
|
"""Return a list of local bitmessage addresses (from section labels)"""
|
||||||
|
@ -198,8 +231,8 @@ class BMConfigParser(SafeConfigParser):
|
||||||
# The backup failed. This can happen if the file
|
# The backup failed. This can happen if the file
|
||||||
# didn't exist before.
|
# didn't exist before.
|
||||||
fileNameExisted = False
|
fileNameExisted = False
|
||||||
# write the file
|
|
||||||
with open(fileName, 'wb') as configfile:
|
with open(fileName, 'w') as configfile:
|
||||||
self.write(configfile)
|
self.write(configfile)
|
||||||
# delete the backup
|
# delete the backup
|
||||||
if fileNameExisted:
|
if fileNameExisted:
|
||||||
|
@ -208,6 +241,10 @@ class BMConfigParser(SafeConfigParser):
|
||||||
def validate(self, section, option, value):
|
def validate(self, section, option, value):
|
||||||
"""Input validator interface (using factory pattern)"""
|
"""Input validator interface (using factory pattern)"""
|
||||||
try:
|
try:
|
||||||
|
if sys.version_info[0] == 3:
|
||||||
|
return getattr(self, 'validate_{}_{}'.format(
|
||||||
|
section, option))(value)
|
||||||
|
else:
|
||||||
return getattr(self, 'validate_%s_%s' % (section, option))(value)
|
return getattr(self, 'validate_%s_%s' % (section, option))(value)
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
return True
|
return True
|
||||||
|
@ -222,4 +259,3 @@ class BMConfigParser(SafeConfigParser):
|
||||||
if value < 0 or value > 8:
|
if value < 0 or value > 8:
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
|
@ -9,15 +9,28 @@ import sys
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
|
|
||||||
import helper_sql
|
if sys.version_info[0] == 3:
|
||||||
import helper_startup
|
from . import helper_sql
|
||||||
import paths
|
from . import helper_startup
|
||||||
import queues
|
from . import paths
|
||||||
import state
|
from . import queues
|
||||||
import tr
|
from . import state
|
||||||
from bmconfigparser import BMConfigParser
|
from . import tr
|
||||||
from debug import logger
|
from .bmconfigparser import BMConfigParser
|
||||||
# pylint: disable=attribute-defined-outside-init,protected-access
|
from .debug import logger
|
||||||
|
# pylint: disable=attribute-defined-outside-init,protected-access
|
||||||
|
from .addresses import encodeAddress
|
||||||
|
else:
|
||||||
|
import helper_sql
|
||||||
|
import helper_startup
|
||||||
|
import paths
|
||||||
|
import queues
|
||||||
|
import state
|
||||||
|
import tr
|
||||||
|
from bmconfigparser import BMConfigParser
|
||||||
|
from debug import logger
|
||||||
|
# pylint: disable=attribute-defined-outside-init,protected-access
|
||||||
|
from addresses import encodeAddress
|
||||||
|
|
||||||
|
|
||||||
class sqlThread(threading.Thread):
|
class sqlThread(threading.Thread):
|
||||||
|
@ -35,6 +48,9 @@ class sqlThread(threading.Thread):
|
||||||
|
|
||||||
self.cur.execute('PRAGMA secure_delete = true')
|
self.cur.execute('PRAGMA secure_delete = true')
|
||||||
|
|
||||||
|
# call create_function for encode address
|
||||||
|
self.create_function()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.cur.execute(
|
self.cur.execute(
|
||||||
'''CREATE TABLE inbox (msgid blob, toaddress text, fromaddress text, subject text,'''
|
'''CREATE TABLE inbox (msgid blob, toaddress text, fromaddress text, subject text,'''
|
||||||
|
@ -325,6 +341,7 @@ class sqlThread(threading.Thread):
|
||||||
|
|
||||||
# We'll also need a `sleeptill` field and a `ttl` field. Also we
|
# We'll also need a `sleeptill` field and a `ttl` field. Also we
|
||||||
# can combine the pubkeyretrynumber and msgretrynumber into one.
|
# can combine the pubkeyretrynumber and msgretrynumber into one.
|
||||||
|
|
||||||
item = '''SELECT value FROM settings WHERE key='version';'''
|
item = '''SELECT value FROM settings WHERE key='version';'''
|
||||||
parameters = ''
|
parameters = ''
|
||||||
self.cur.execute(item, parameters)
|
self.cur.execute(item, parameters)
|
||||||
|
@ -358,16 +375,11 @@ class sqlThread(threading.Thread):
|
||||||
logger.debug('In messages.dat database, adding address field to the pubkeys table.')
|
logger.debug('In messages.dat database, adding address field to the pubkeys table.')
|
||||||
# We're going to have to calculate the address for each row in the pubkeys
|
# We're going to have to calculate the address for each row in the pubkeys
|
||||||
# table. Then we can take out the hash field.
|
# table. Then we can take out the hash field.
|
||||||
self.cur.execute('''ALTER TABLE pubkeys ADD address text DEFAULT '' ''')
|
self.cur.execute('''ALTER TABLE pubkeys ADD address text DEFAULT '' ;''')
|
||||||
self.cur.execute('''SELECT hash, addressversion FROM pubkeys''')
|
|
||||||
queryResult = self.cur.fetchall()
|
# replica for loop to update hashed address
|
||||||
from addresses import encodeAddress
|
self.cur.execute('''UPDATE pubkeys SET address=(enaddr(pubkeys.addressversion, 1, hash)); ''')
|
||||||
for row in queryResult:
|
|
||||||
addressHash, addressVersion = row
|
|
||||||
address = encodeAddress(addressVersion, 1, hash)
|
|
||||||
item = '''UPDATE pubkeys SET address=? WHERE hash=?;'''
|
|
||||||
parameters = (address, addressHash)
|
|
||||||
self.cur.execute(item, parameters)
|
|
||||||
# Now we can remove the hash field from the pubkeys table.
|
# Now we can remove the hash field from the pubkeys table.
|
||||||
self.cur.execute(
|
self.cur.execute(
|
||||||
'''CREATE TEMPORARY TABLE pubkeys_backup'''
|
'''CREATE TEMPORARY TABLE pubkeys_backup'''
|
||||||
|
@ -622,3 +634,12 @@ class sqlThread(threading.Thread):
|
||||||
|
|
||||||
helper_sql.sqlReturnQueue.put((self.cur.fetchall(), rowcount))
|
helper_sql.sqlReturnQueue.put((self.cur.fetchall(), rowcount))
|
||||||
# helper_sql.sqlSubmitQueue.task_done()
|
# helper_sql.sqlSubmitQueue.task_done()
|
||||||
|
|
||||||
|
def create_function(self):
|
||||||
|
# create_function
|
||||||
|
try:
|
||||||
|
self.conn.create_function("enaddr", 3, func=encodeAddress, deterministic=True)
|
||||||
|
except (TypeError, sqlite3.NotSupportedError) as err:
|
||||||
|
logger.debug(
|
||||||
|
"Got error while pass deterministic in sqlite create function {}, Passing 3 params".format(err))
|
||||||
|
self.conn.create_function("enaddr", 3, encodeAddress)
|
||||||
|
|
21
src/debug.py
21
src/debug.py
|
@ -35,14 +35,26 @@ Logging is thread-safe so you don't have to worry about locks,
|
||||||
just import and log.
|
just import and log.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import ConfigParser
|
# import ConfigParser
|
||||||
|
import sys
|
||||||
|
if sys.version_info[0] == 3:
|
||||||
|
# python 3
|
||||||
|
import configparser as ConfigParser
|
||||||
|
else:
|
||||||
|
# python 2
|
||||||
|
import ConfigParser
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
import logging.config
|
import logging.config
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
import helper_startup
|
if sys.version_info[0] == 3:
|
||||||
import state
|
from . import helper_startup
|
||||||
|
from . import state
|
||||||
|
else:
|
||||||
|
import helper_startup
|
||||||
|
import state
|
||||||
|
|
||||||
helper_startup.loadConfig()
|
helper_startup.loadConfig()
|
||||||
|
|
||||||
|
@ -74,7 +86,7 @@ def configureLogging():
|
||||||
False,
|
False,
|
||||||
'Loaded logger configuration from %s' % logging_config
|
'Loaded logger configuration from %s' % logging_config
|
||||||
)
|
)
|
||||||
except (OSError, ConfigParser.NoSectionError):
|
except (OSError, ConfigParser.NoSectionError, KeyError):
|
||||||
if os.path.isfile(logging_config):
|
if os.path.isfile(logging_config):
|
||||||
fail_msg = \
|
fail_msg = \
|
||||||
'Failed to load logger configuration from %s, using default' \
|
'Failed to load logger configuration from %s, using default' \
|
||||||
|
@ -149,6 +161,7 @@ def resetLogging():
|
||||||
|
|
||||||
|
|
||||||
# !
|
# !
|
||||||
|
|
||||||
preconfigured, msg = configureLogging()
|
preconfigured, msg = configureLogging()
|
||||||
logger = logging.getLogger('default')
|
logger = logging.getLogger('default')
|
||||||
if msg:
|
if msg:
|
||||||
|
|
|
@ -2,8 +2,11 @@
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import random
|
import random
|
||||||
|
import sys
|
||||||
from pyelliptic.openssl import OpenSSL
|
if sys.version_info[0] == 3:
|
||||||
|
from .pyelliptic.openssl import OpenSSL
|
||||||
|
else:
|
||||||
|
from pyelliptic.openssl import OpenSSL
|
||||||
|
|
||||||
NoneType = type(None)
|
NoneType = type(None)
|
||||||
|
|
||||||
|
|
|
@ -16,9 +16,17 @@ SQLite objects can only be used from one thread.
|
||||||
or isn't thread-safe.
|
or isn't thread-safe.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import Queue
|
|
||||||
|
# import Queue
|
||||||
|
import sys
|
||||||
|
if sys.version_info[0] == 3:
|
||||||
|
import queue as Queue #python3
|
||||||
|
else:
|
||||||
|
import Queue #python2
|
||||||
|
|
||||||
import threading
|
import threading
|
||||||
|
|
||||||
|
|
||||||
sqlSubmitQueue = Queue.Queue()
|
sqlSubmitQueue = Queue.Queue()
|
||||||
"""the queue for SQL"""
|
"""the queue for SQL"""
|
||||||
sqlReturnQueue = Queue.Queue()
|
sqlReturnQueue = Queue.Queue()
|
||||||
|
@ -105,11 +113,23 @@ def sqlExecute(sql_statement, *args):
|
||||||
return rowcount
|
return rowcount
|
||||||
|
|
||||||
|
|
||||||
|
def sqlExecuteScript(sql_statement):
|
||||||
|
"""Execute SQL script statement"""
|
||||||
|
|
||||||
|
statements = sql_statement.split(";")
|
||||||
|
with SqlBulkExecute() as sql:
|
||||||
|
for q in statements:
|
||||||
|
sql.execute("{}".format(q))
|
||||||
|
|
||||||
|
|
||||||
def sqlStoredProcedure(procName):
|
def sqlStoredProcedure(procName):
|
||||||
"""Schedule procName to be run"""
|
"""Schedule procName to be run"""
|
||||||
assert sql_available
|
assert sql_available
|
||||||
sql_lock.acquire()
|
sql_lock.acquire()
|
||||||
sqlSubmitQueue.put(procName)
|
sqlSubmitQueue.put(procName)
|
||||||
|
if procName == "exit":
|
||||||
|
sqlSubmitQueue.task_done()
|
||||||
|
sqlSubmitQueue.put("terminate")
|
||||||
sql_lock.release()
|
sql_lock.release()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -10,11 +10,19 @@ import sys
|
||||||
import time
|
import time
|
||||||
from distutils.version import StrictVersion
|
from distutils.version import StrictVersion
|
||||||
|
|
||||||
import defaults
|
import sys
|
||||||
import helper_random
|
if sys.version_info[0] == 3:
|
||||||
import paths
|
from . import defaults
|
||||||
import state
|
from . import helper_random
|
||||||
from bmconfigparser import BMConfigParser
|
from . import paths
|
||||||
|
from . import state
|
||||||
|
from .bmconfigparser import BMConfigParser
|
||||||
|
else:
|
||||||
|
import defaults
|
||||||
|
import helper_random
|
||||||
|
import paths
|
||||||
|
import state
|
||||||
|
from bmconfigparser import BMConfigParser
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from plugins.plugin import get_plugin
|
from plugins.plugin import get_plugin
|
||||||
|
|
|
@ -3,10 +3,18 @@ A queue with multiple internal subqueues.
|
||||||
Elements are added into a random subqueue, and retrieval rotates
|
Elements are added into a random subqueue, and retrieval rotates
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import Queue
|
import sys
|
||||||
|
if sys.version_info[0] == 3:
|
||||||
|
import queue as Queue
|
||||||
|
else:
|
||||||
|
import Queue
|
||||||
|
|
||||||
from collections import deque
|
from collections import deque
|
||||||
|
|
||||||
import helper_random
|
if sys.version_info[0] == 3:
|
||||||
|
from . import helper_random
|
||||||
|
else:
|
||||||
|
import helper_random
|
||||||
|
|
||||||
|
|
||||||
class MultiQueue(Queue.Queue):
|
class MultiQueue(Queue.Queue):
|
||||||
|
|
|
@ -174,7 +174,7 @@ class namecoinConnection(object):
|
||||||
message = ('failed', tr._translate("MainWindow", 'Couldn\'t understand NMControl.'))
|
message = ('failed', tr._translate("MainWindow", 'Couldn\'t understand NMControl.'))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
print "Unsupported Namecoin type"
|
print ("Unsupported Namecoin type")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
return message
|
return message
|
||||||
|
|
|
@ -1,11 +1,19 @@
|
||||||
"""Most of the queues used by bitmessage threads are defined here."""
|
"""Most of the queues used by bitmessage threads are defined here."""
|
||||||
|
|
||||||
import Queue
|
import sys
|
||||||
|
if sys.version_info[0] == 3:
|
||||||
|
import queue as Queue
|
||||||
|
else:
|
||||||
|
import Queue
|
||||||
|
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from multiqueue import MultiQueue
|
import sys
|
||||||
|
if sys.version_info[0] == 3:
|
||||||
|
from .multiqueue import MultiQueue
|
||||||
|
else:
|
||||||
|
from multiqueue import MultiQueue
|
||||||
|
|
||||||
class ObjectProcessorQueue(Queue.Queue):
|
class ObjectProcessorQueue(Queue.Queue):
|
||||||
"""Special queue class using lock for `.threads.objectProcessor`"""
|
"""Special queue class using lock for `.threads.objectProcessor`"""
|
||||||
|
|
|
@ -75,7 +75,7 @@ class singleinstance(object):
|
||||||
fcntl.lockf(self.fp, fcntl.LOCK_EX | fcntl.LOCK_NB)
|
fcntl.lockf(self.fp, fcntl.LOCK_EX | fcntl.LOCK_NB)
|
||||||
self.lockPid = os.getpid()
|
self.lockPid = os.getpid()
|
||||||
except IOError:
|
except IOError:
|
||||||
print 'Another instance of this application is already running'
|
print ('Another instance of this application is already running')
|
||||||
sys.exit(-1)
|
sys.exit(-1)
|
||||||
else:
|
else:
|
||||||
pidLine = "%i\n" % self.lockPid
|
pidLine = "%i\n" % self.lockPid
|
||||||
|
@ -99,7 +99,7 @@ class singleinstance(object):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
return
|
return
|
||||||
print "Cleaning up lockfile"
|
print ("Cleaning up lockfile")
|
||||||
try:
|
try:
|
||||||
if sys.platform == 'win32':
|
if sys.platform == 'win32':
|
||||||
if hasattr(self, 'fd'):
|
if hasattr(self, 'fd'):
|
||||||
|
|
9
src/tests/sql/create_function.sql
Normal file
9
src/tests/sql/create_function.sql
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
CREATE TABLE `testhash` (
|
||||||
|
`addressversion` int DEFAULT NULL,
|
||||||
|
`hash` blob DEFAULT NULL,
|
||||||
|
`address` text DEFAULT NULL,
|
||||||
|
UNIQUE(address) ON CONFLICT IGNORE
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO testhash (addressversion, hash) VALUES(4, "21122112211221122112");
|
||||||
|
|
|
@ -5,6 +5,9 @@ Tests using API.
|
||||||
import base64
|
import base64
|
||||||
import json
|
import json
|
||||||
import time
|
import time
|
||||||
|
from .common import skip_python3
|
||||||
|
|
||||||
|
skip_python3()
|
||||||
|
|
||||||
try: # nosec
|
try: # nosec
|
||||||
from xmlrpclib import ServerProxy, ProtocolError
|
from xmlrpclib import ServerProxy, ProtocolError
|
||||||
|
|
|
@ -4,6 +4,9 @@ Test for ECC blind signatures
|
||||||
import os
|
import os
|
||||||
import unittest
|
import unittest
|
||||||
from hashlib import sha256
|
from hashlib import sha256
|
||||||
|
from .common import skip_python3
|
||||||
|
|
||||||
|
skip_python3()
|
||||||
|
|
||||||
from pybitmessage.pyelliptic import ECCBlind, ECCBlindChain, OpenSSL
|
from pybitmessage.pyelliptic import ECCBlind, ECCBlindChain, OpenSSL
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,9 @@ import os
|
||||||
import tempfile
|
import tempfile
|
||||||
from pybitmessage.bmconfigparser import BMConfigParser
|
from pybitmessage.bmconfigparser import BMConfigParser
|
||||||
from .test_process import TestProcessProto
|
from .test_process import TestProcessProto
|
||||||
|
from .common import skip_python3
|
||||||
|
|
||||||
|
skip_python3()
|
||||||
|
|
||||||
|
|
||||||
class TestProcessConfig(TestProcessProto):
|
class TestProcessConfig(TestProcessProto):
|
||||||
|
|
|
@ -5,6 +5,9 @@ import random
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from time import time
|
from time import time
|
||||||
|
from .common import skip_python3
|
||||||
|
|
||||||
|
skip_python3()
|
||||||
|
|
||||||
|
|
||||||
class TestRandomTrackingDict(unittest.TestCase):
|
class TestRandomTrackingDict(unittest.TestCase):
|
||||||
|
|
75
src/tests/test_sqlthread.py
Normal file
75
src/tests/test_sqlthread.py
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
"""
|
||||||
|
Test for sqlThread
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os
|
||||||
|
import unittest
|
||||||
|
from ..helper_sql import sqlStoredProcedure, sql_ready, sqlExecute, SqlBulkExecute, sqlQuery, sqlExecuteScript
|
||||||
|
from ..class_sqlThread import (sqlThread)
|
||||||
|
from ..addresses import encodeAddress
|
||||||
|
|
||||||
|
import threading
|
||||||
|
|
||||||
|
class TestSqlThread(unittest.TestCase):
|
||||||
|
"""
|
||||||
|
Test case for SQLThread
|
||||||
|
"""
|
||||||
|
|
||||||
|
# query file path
|
||||||
|
root_path = os.path.dirname(os.path.dirname(__file__))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUpClass(cls):
|
||||||
|
# Start SQL thread
|
||||||
|
sqlLookup = sqlThread()
|
||||||
|
sqlLookup.daemon = True
|
||||||
|
sqlLookup.start()
|
||||||
|
sql_ready.wait()
|
||||||
|
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def setUp(cls):
|
||||||
|
tables = list(sqlQuery("select name from sqlite_master where type is 'table'"))
|
||||||
|
with SqlBulkExecute() as sql:
|
||||||
|
for q in tables:
|
||||||
|
sql.execute("drop table if exists %s" % q)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def tearDown(cls):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def tearDownClass(cls):
|
||||||
|
sqlStoredProcedure('exit')
|
||||||
|
for thread in threading.enumerate():
|
||||||
|
if thread.name == "SQL":
|
||||||
|
thread.join()
|
||||||
|
|
||||||
|
def initialise_database(self, file):
|
||||||
|
"""
|
||||||
|
Initialise DB
|
||||||
|
"""
|
||||||
|
with open(os.path.join(self.root_path, "tests/sql/{}.sql".format(file)), 'r') as sql_as_string:
|
||||||
|
# sql_as_string = open(os.path.join(self.root_path, "tests/sql/{}.sql".format(file))).read()
|
||||||
|
sql_as_string = sql_as_string.read()
|
||||||
|
sqlExecuteScript(sql_as_string)
|
||||||
|
|
||||||
|
def test_create_function(self):
|
||||||
|
# call create function
|
||||||
|
encoded_str = encodeAddress(4, 1, "21122112211221122112")
|
||||||
|
|
||||||
|
# Initialise Database
|
||||||
|
self.initialise_database("create_function")
|
||||||
|
|
||||||
|
sqlExecute('''INSERT INTO testhash (addressversion, hash) VALUES(4, "21122112211221122112")''')
|
||||||
|
# call function in query
|
||||||
|
|
||||||
|
# sqlExecute('''UPDATE testhash SET address=(enaddr(testhash.addressversion, 1, hash)) WHERE hash=testhash.hash''')
|
||||||
|
sqlExecute('''UPDATE testhash SET address=(enaddr(testhash.addressversion, 1, hash));''')
|
||||||
|
|
||||||
|
# Assertion
|
||||||
|
query = sqlQuery('''select * from testhash;''')
|
||||||
|
self.assertEqual(query[0][-1], encoded_str, "test case fail for create_function")
|
||||||
|
sqlExecute('''DROP TABLE testhash''')
|
12
src/tr.py
12
src/tr.py
|
@ -3,7 +3,11 @@ Translating text
|
||||||
"""
|
"""
|
||||||
import os
|
import os
|
||||||
|
|
||||||
import state
|
import sys
|
||||||
|
if sys.version_info[0] == 3:
|
||||||
|
from . import state
|
||||||
|
else:
|
||||||
|
import state
|
||||||
|
|
||||||
|
|
||||||
class translateClass:
|
class translateClass:
|
||||||
|
@ -40,12 +44,12 @@ def translateText(context, text, n=None):
|
||||||
try:
|
try:
|
||||||
from PyQt4 import QtCore, QtGui
|
from PyQt4 import QtCore, QtGui
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
print 'PyBitmessage requires PyQt unless you want to run it as a daemon'\
|
print ('PyBitmessage requires PyQt unless you want to run it as a daemon'\
|
||||||
' and interact with it using the API.'\
|
' and interact with it using the API.'\
|
||||||
' You can download PyQt from http://www.riverbankcomputing.com/software/pyqt/download'\
|
' You can download PyQt from http://www.riverbankcomputing.com/software/pyqt/download'\
|
||||||
' or by searching Google for \'PyQt Download\'.'\
|
' or by searching Google for \'PyQt Download\'.'\
|
||||||
' If you want to run in daemon mode, see https://bitmessage.org/wiki/Daemon'
|
' If you want to run in daemon mode, see https://bitmessage.org/wiki/Daemon')
|
||||||
print 'Error message:', err
|
print('Error message:', err)
|
||||||
os._exit(0) # pylint: disable=protected-access
|
os._exit(0) # pylint: disable=protected-access
|
||||||
if n is None:
|
if n is None:
|
||||||
return QtGui.QApplication.translate(context, text)
|
return QtGui.QApplication.translate(context, text)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user