perform get_alias in a thread
This commit is contained in:
parent
a041b48f4d
commit
25e3993a53
|
@ -28,25 +28,6 @@ _ud = re.compile('%([0-9a-hA-H]{2})', re.MULTILINE)
|
||||||
urldecode = lambda x: _ud.sub(lambda m: chr(int(m.group(1), 16)), x)
|
urldecode = lambda x: _ud.sub(lambda m: chr(int(m.group(1), 16)), x)
|
||||||
|
|
||||||
|
|
||||||
def alias(x):
|
|
||||||
import urllib
|
|
||||||
if wallet.is_valid(x):
|
|
||||||
xx = x
|
|
||||||
else:
|
|
||||||
m = re.match('([\w\-\.]+)@((\w[\w\-]+\.)+[\w\-]+)', x)
|
|
||||||
if m:
|
|
||||||
url = 'http://' + m.group(2) + '/bitcoin.id/' + m.group(1)
|
|
||||||
else:
|
|
||||||
url = 'http://' + x + '/bitcoin.id'
|
|
||||||
print url
|
|
||||||
try:
|
|
||||||
xx = urllib.urlopen(url).read().strip()
|
|
||||||
except:
|
|
||||||
xx = ''
|
|
||||||
if not wallet.is_valid(xx):
|
|
||||||
xx = ''
|
|
||||||
return xx
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
known_commands = ['help', 'validateaddress', 'balance', 'contacts', 'create', 'payto', 'sendtx', 'password', 'newaddress', 'addresses', 'history', 'label', 'gui', 'mktx','seed','import','signmessage','verifymessage']
|
known_commands = ['help', 'validateaddress', 'balance', 'contacts', 'create', 'payto', 'sendtx', 'password', 'newaddress', 'addresses', 'history', 'label', 'gui', 'mktx','seed','import','signmessage','verifymessage']
|
||||||
|
@ -81,7 +62,7 @@ if __name__ == '__main__':
|
||||||
if re.match('^bitcoin:', cmd):
|
if re.match('^bitcoin:', cmd):
|
||||||
|
|
||||||
o = cmd[8:].split('?')
|
o = cmd[8:].split('?')
|
||||||
address = alias(o[0])
|
address = o[0]
|
||||||
if len(o)>1:
|
if len(o)>1:
|
||||||
params = o[1].split('&')
|
params = o[1].split('&')
|
||||||
else:
|
else:
|
||||||
|
@ -95,20 +76,11 @@ if __name__ == '__main__':
|
||||||
elif k == 'label': label = uv
|
elif k == 'label': label = uv
|
||||||
elif k == 'signature':
|
elif k == 'signature':
|
||||||
identity, signature = uv.split(':')
|
identity, signature = uv.split(':')
|
||||||
signing_address = alias(identity)
|
|
||||||
cmd = cmd.replace('&%s=%s'%(k,v),'')
|
cmd = cmd.replace('&%s=%s'%(k,v),'')
|
||||||
else:
|
else:
|
||||||
print k,v
|
print k,v
|
||||||
|
|
||||||
if signature:
|
gui.set_send_tab(address, amount, label, identity, signature, cmd)
|
||||||
try:
|
|
||||||
wallet.verify_message(signing_address, signature, cmd )
|
|
||||||
except:
|
|
||||||
gui.show_message('Warning: the URI contains a bad signature.\nThe identity of the recipient cannot be verified.\nContinue at your own risks!')
|
|
||||||
address = amount = label = identity = ''
|
|
||||||
|
|
||||||
if address:
|
|
||||||
gui.set_send_tab(address, amount, label, identity)
|
|
||||||
|
|
||||||
gui.main()
|
gui.main()
|
||||||
wallet.save()
|
wallet.save()
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
import thread, time, ast, sys
|
import thread, time, ast, sys, re
|
||||||
import socket, traceback
|
import socket, traceback
|
||||||
import pygtk
|
import pygtk
|
||||||
pygtk.require('2.0')
|
pygtk.require('2.0')
|
||||||
|
@ -580,6 +580,21 @@ class BitcoinGUI:
|
||||||
gobject.idle_add( self.update_status_bar )
|
gobject.idle_add( self.update_status_bar )
|
||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
|
|
||||||
|
|
||||||
|
def check_recipient_thread():
|
||||||
|
old_r = ''
|
||||||
|
while True:
|
||||||
|
time.sleep(0.5)
|
||||||
|
r = self.payto_entry.get_text()
|
||||||
|
if r != old_r:
|
||||||
|
old_r = r
|
||||||
|
if re.match('^(|([\w\-\.]+)@)((\w[\w\-]+\.)+[\w\-]+)$', r):
|
||||||
|
to_address = self.wallet.get_alias(r)
|
||||||
|
if to_address:
|
||||||
|
s = r+ ' <'+to_address+'>'
|
||||||
|
gobject.idle_add( lambda: self.payto_entry.set_text(s) )
|
||||||
|
|
||||||
|
|
||||||
def update_wallet_thread():
|
def update_wallet_thread():
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
|
@ -627,6 +642,7 @@ class BitcoinGUI:
|
||||||
|
|
||||||
thread.start_new_thread(update_wallet_thread, ())
|
thread.start_new_thread(update_wallet_thread, ())
|
||||||
thread.start_new_thread(update_status_bar_thread, ())
|
thread.start_new_thread(update_status_bar_thread, ())
|
||||||
|
thread.start_new_thread(check_recipient_thread, ())
|
||||||
self.notebook.set_current_page(0)
|
self.notebook.set_current_page(0)
|
||||||
|
|
||||||
|
|
||||||
|
@ -649,10 +665,10 @@ class BitcoinGUI:
|
||||||
payto = gtk.HBox()
|
payto = gtk.HBox()
|
||||||
payto_label = gtk.Label('Pay to:')
|
payto_label = gtk.Label('Pay to:')
|
||||||
payto_label.set_size_request(100,-1)
|
payto_label.set_size_request(100,-1)
|
||||||
payto_label.show()
|
#payto_label.show()
|
||||||
payto.pack_start(payto_label, False)
|
payto.pack_start(payto_label, False)
|
||||||
payto_entry = gtk.Entry()
|
payto_entry = gtk.Entry()
|
||||||
payto_entry.set_size_request(350, 26)
|
payto_entry.set_size_request(450, 26)
|
||||||
payto_entry.show()
|
payto_entry.show()
|
||||||
payto.pack_start(payto_entry, False)
|
payto.pack_start(payto_entry, False)
|
||||||
vbox.pack_start(payto, False, False, 5)
|
vbox.pack_start(payto, False, False, 5)
|
||||||
|
@ -663,7 +679,7 @@ class BitcoinGUI:
|
||||||
label_label.show()
|
label_label.show()
|
||||||
label.pack_start(label_label, False)
|
label.pack_start(label_label, False)
|
||||||
label_entry = gtk.Entry()
|
label_entry = gtk.Entry()
|
||||||
label_entry.set_size_request(350, 26)
|
label_entry.set_size_request(450, 26)
|
||||||
label_entry.show()
|
label_entry.show()
|
||||||
label.pack_start(label_entry, False)
|
label.pack_start(label_entry, False)
|
||||||
vbox.pack_start(label, False, False, 5)
|
vbox.pack_start(label, False, False, 5)
|
||||||
|
@ -736,7 +752,7 @@ class BitcoinGUI:
|
||||||
self.error = 'Not enough funds'
|
self.error = 'Not enough funds'
|
||||||
|
|
||||||
amount_entry.connect('changed', entry_changed, False)
|
amount_entry.connect('changed', entry_changed, False)
|
||||||
fee_entry.connect('changed', entry_changed, True)
|
fee_entry.connect('changed', entry_changed, True)
|
||||||
|
|
||||||
self.payto_entry = payto_entry
|
self.payto_entry = payto_entry
|
||||||
self.payto_fee_entry = fee_entry
|
self.payto_fee_entry = fee_entry
|
||||||
|
@ -757,9 +773,17 @@ class BitcoinGUI:
|
||||||
entry.modify_base(gtk.STATE_NORMAL, gtk.gdk.color_parse("#ffffff"))
|
entry.modify_base(gtk.STATE_NORMAL, gtk.gdk.color_parse("#ffffff"))
|
||||||
|
|
||||||
|
|
||||||
def set_send_tab(self, address, amount, label, identity):
|
def set_send_tab(self, payto, amount, label, identity, signature, cmd):
|
||||||
|
if signature:
|
||||||
|
try:
|
||||||
|
signing_address = self.wallet.get_alias(identity)
|
||||||
|
self.wallet.verify_message(signing_address, signature, cmd )
|
||||||
|
except:
|
||||||
|
self.show_message('Warning: the URI contains a bad signature.\nThe identity of the recipient cannot be verified.\nContinue at your own risks!')
|
||||||
|
address = amount = label = identity = ''
|
||||||
|
|
||||||
self.notebook.set_current_page(1)
|
self.notebook.set_current_page(1)
|
||||||
self.payto_entry.set_text(address)
|
self.payto_entry.set_text(payto)
|
||||||
self.payto_label_entry.set_text(label)
|
self.payto_label_entry.set_text(label)
|
||||||
self.payto_amount_entry.set_text(amount)
|
self.payto_amount_entry.set_text(amount)
|
||||||
if identity:
|
if identity:
|
||||||
|
@ -788,16 +812,19 @@ class BitcoinGUI:
|
||||||
for entry in [self.payto_entry,self.payto_amount_entry,self.payto_label_entry]:
|
for entry in [self.payto_entry,self.payto_amount_entry,self.payto_label_entry]:
|
||||||
self.set_frozen(entry,False)
|
self.set_frozen(entry,False)
|
||||||
entry.set_text('')
|
entry.set_text('')
|
||||||
|
|
||||||
|
|
||||||
def do_send(self, w, data):
|
def do_send(self, w, data):
|
||||||
payto_entry, label_entry, amount_entry, fee_entry = data
|
payto_entry, label_entry, amount_entry, fee_entry = data
|
||||||
|
|
||||||
label = label_entry.get_text()
|
label = label_entry.get_text()
|
||||||
|
r = payto_entry.get_text()
|
||||||
to_address = payto_entry.get_text()
|
m = re.match('(|([\w\-\.]+)@)((\w[\w\-]+\.)+[\w\-]+) \<([1-9A-HJ-NP-Za-km-z]{26,})\>', r)
|
||||||
|
if m:
|
||||||
|
to_address = m.group(5)
|
||||||
|
else:
|
||||||
|
to_address = r
|
||||||
if not self.wallet.is_valid(to_address):
|
if not self.wallet.is_valid(to_address):
|
||||||
self.show_message( "invalid bitcoin address")
|
self.show_message( "invalid bitcoin address:\n"+to_address)
|
||||||
return
|
return
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -19,6 +19,9 @@
|
||||||
|
|
||||||
import random, socket, ast
|
import random, socket, ast
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Interface:
|
class Interface:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.servers = ['ecdsa.org','electrum.novit.ro'] # list of default servers
|
self.servers = ['ecdsa.org','electrum.novit.ro'] # list of default servers
|
||||||
|
|
|
@ -218,6 +218,7 @@ from version import ELECTRUM_VERSION, SEED_VERSION
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Wallet:
|
class Wallet:
|
||||||
def __init__(self, interface):
|
def __init__(self, interface):
|
||||||
|
|
||||||
|
@ -703,3 +704,25 @@ class Wallet:
|
||||||
return False, "error: " + out
|
return False, "error: " + out
|
||||||
return True, out
|
return True, out
|
||||||
|
|
||||||
|
def get_alias(self, x):
|
||||||
|
# this might not be the right place for this function.
|
||||||
|
import urllib
|
||||||
|
if self.is_valid(x):
|
||||||
|
return x
|
||||||
|
else:
|
||||||
|
m1 = re.match('([\w\-\.]+)@((\w[\w\-]+\.)+[\w\-]+)', x)
|
||||||
|
m2 = re.match('((\w[\w\-]+\.)+[\w\-]+)', x)
|
||||||
|
if m1:
|
||||||
|
url = 'http://' + m1.group(2) + '/bitcoin.id/' + m1.group(1)
|
||||||
|
elif m2:
|
||||||
|
url = 'http://' + x + '/bitcoin.id'
|
||||||
|
else:
|
||||||
|
return ''
|
||||||
|
try:
|
||||||
|
print url
|
||||||
|
xx = urllib.urlopen(url).read().strip()
|
||||||
|
except:
|
||||||
|
return ''
|
||||||
|
if not self.is_valid(xx):
|
||||||
|
return ''
|
||||||
|
return xx
|
||||||
|
|
Loading…
Reference in New Issue