URI: 
       tstore payment requests even if M2Crypto is not available - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 14dfa6f5b0dcdf1d62afd09778d3f996b106349c
   DIR parent 513f9c2d89e9a530710bb163ea713f6948185fbc
  HTML Author: ThomasV <thomasv@gitorious>
       Date:   Sat,  7 Jun 2014 11:11:49 +0200
       
       store payment requests even if M2Crypto is not available
       
       Diffstat:
         M lib/paymentrequest.py               |      70 ++++++++++++++++++++-----------
       
       1 file changed, 45 insertions(+), 25 deletions(-)
       ---
   DIR diff --git a/lib/paymentrequest.py b/lib/paymentrequest.py
       t@@ -14,15 +14,15 @@ except:
            print "protoc --proto_path=lib/ --python_out=lib/ lib/paymentrequest.proto"
            raise Exception()
        
       -import urlparse
       -import requests
       -from M2Crypto import X509
       +try:
       +    import requests
       +except ImportError:
       +    sys.exit("Error: requests does not seem to be installed. Try 'sudo pip install requests'")
        
       -import bitcoin
       -from bitcoin import is_valid
        import urlparse
        
        
       +import bitcoin
        import util
        import transaction
        
       t@@ -39,29 +39,40 @@ PR_PAID    = 3     # send and propagated
        
        
        
       -ca_path = os.path.expanduser("~/.electrum/ca/ca-bundle.crt")
        ca_list = {}
       -try:
       -    with open(ca_path, 'r') as ca_f:
       -        c = ""
       -        for line in ca_f:
       -            if line == "-----BEGIN CERTIFICATE-----\n":
       -                c = line
       -            else:
       -                c += line
       -            if line == "-----END CERTIFICATE-----\n":
       -                x = X509.load_cert_string(c)
       -                ca_list[x.get_fingerprint()] = x
       -except Exception:
       -    print "ERROR: Could not open %s"%ca_path
       -    print "ca-bundle.crt file should be placed in ~/.electrum/ca/ca-bundle.crt"
       -    print "Documentation on how to download or create the file here: http://curl.haxx.se/docs/caextract.html"
       -    print "Payment will continue with manual verification."
       -    raise Exception()
        
       +def load_certificates():
       +    try:
       +        from M2Crypto import X509
       +    except:
       +        print_error("ERROR: Could not import M2Crypto")
       +        return False
       +
       +    ca_path = os.path.expanduser("~/.electrum/ca/ca-bundle.crt")
       +    try:
       +        ca_f = open(ca_path, 'r')
       +    except Exception:
       +        print "ERROR: Could not open %s"%ca_path
       +        print "ca-bundle.crt file should be placed in ~/.electrum/ca/ca-bundle.crt"
       +        print "Documentation on how to download or create the file here: http://curl.haxx.se/docs/caextract.html"
       +        print "Payment will continue with manual verification."
       +        return False
       +    c = ""
       +    for line in ca_f:
       +        if line == "-----BEGIN CERTIFICATE-----\n":
       +            c = line
       +        else:
       +            c += line
       +        if line == "-----END CERTIFICATE-----\n":
       +            x = X509.load_cert_string(c)
       +            ca_list[x.get_fingerprint()] = x
       +    ca_f.close()
       +    return True
       +
       +load_certificates()
        
       -class PaymentRequest:
        
       +class PaymentRequest:
            def __init__(self, config):
                self.config = config
                self.outputs = []
       t@@ -72,7 +83,6 @@ class PaymentRequest:
        
                u = urlparse.urlparse(url)
                self.domain = u.netloc
       -
                try:
                    connection = httplib.HTTPConnection(u.netloc) if u.scheme == 'http' else httplib.HTTPSConnection(u.netloc)
                    connection.request("GET",u.geturl(), headers=REQUEST_HEADERS)
       t@@ -107,6 +117,16 @@ class PaymentRequest:
        
        
            def verify(self):
       +        try:
       +            from M2Crypto import X509
       +        except:
       +            self.error = "cannot import M2Crypto"
       +            return False
       +
       +        if not ca_list:
       +            self.error = "Trusted certificate authorities list not found"
       +            return False
       +
                paymntreq = self.data
                sig = paymntreq.signature
                if not sig: