REQUEST_HEADERS = {'Accept': 'application/bitcoin-paymentrequest', 'User-Agent': 'Electrum'}
ACK_HEADERS = {'Content-Type':'application/bitcoin-payment','Accept':'application/bitcoin-paymentack','User-Agent':'Electrum'}
-# status can be:
-PR_UNPAID = 0
-PR_EXPIRED = 1
-PR_SENT = 2 # sent but not propagated
-PR_PAID = 3 # send and propagated
-PR_ERROR = 4 # could not parse
-
ca_list = {}
+ca_path = requests.certs.where()
def load_certificates():
-
- ca_path = os.path.expanduser("~/.electrum/ca/ca-bundle.crt")
try:
ca_f = open(ca_path, 'r')
except Exception:
try:
x.parse(c)
except Exception as e:
- print "cannot parse cert:", e
+ util.print_error("cannot parse cert:", e)
ca_list[x.getFingerprint()] = x
ca_f.close()
util.print_error("%d certificates"%len(ca_list))
with open(filename,'r') as f:
r = f.read()
+ assert key == bitcoin.sha256(r)[0:16].encode('hex')
+ self.id = key
self.parse(r)
x.slow_parse()
x509_chain.append(x)
if i == 0:
- if not x.check_name(self.domain):
- self.error = "Certificate Domain Mismatch"
+ try:
+ x.check_date()
+ x.check_name(self.domain)
+ except Exception as e:
+ self.error = str(e)
return
else:
if not x.check_ca():
self.payment_url = self.details.payment_url
- if self.has_expired():
- self.error = "ERROR: Payment Request has Expired."
- return False
-
return True
def has_expired(self):
return self.details.expires and self.details.expires < int(time.time())
+ def get_expiration_date(self):
+ return self.details.expires
+
def get_amount(self):
return sum(map(lambda x:x[1], self.outputs))
def get_domain(self):
return self.domain
+ def get_memo(self):
+ return self.memo
+
def get_id(self):
return self.id
def get_outputs(self):
- return self.outputs
+ return self.outputs[:]
def send_ack(self, raw_tx, refund_addr):
- if self.has_expired():
- return False, "has expired"
-
pay_det = self.details
if not self.details.payment_url:
return False, "no url"
uri = sys.argv[1]
except:
print "usage: %s url"%sys.argv[0]
- print "example url: \"bitcoin:mpu3yTLdqA1BgGtFUwkVJmhnU3q5afaFkf?r=https%3A%2F%2Fbitcoincore.org%2F%7Egavin%2Ff.php%3Fh%3D2a828c05b8b80dc440c80a5d58890298&amount=1\""
+ print "example url: \"bitcoin:17KjQgnXC96jakzJe9yo8zxqerhqNptmhq?amount=0.0018&r=https%3A%2F%2Fbitpay.com%2Fi%2FMXc7qTM5f87EC62SWiS94z\""
sys.exit(1)
- address, amount, label, message, request_url, url = util.parse_url(uri)
- pr = PaymentRequest(request_url)
+ address, amount, label, message, request_url = util.parse_URI(uri)
+ from simple_config import SimpleConfig
+ config = SimpleConfig()
+ pr = PaymentRequest(config)
+ pr.read(request_url)
if not pr.verify():
+ print 'verify failed'
+ print pr.error
sys.exit(1)
print 'Payment Request Verified Domain: ', pr.domain