[tor-commits] [bridgedb/develop] Add support for generating QRCodes with 'bridge://' schema for Orbot.
isis at torproject.org
isis at torproject.org
Mon Feb 2 19:53:00 UTC 2015
commit 66ef631c51176777da212ab02f7a0d47dff00579
Author: Isis Lovecruft <isis at torproject.org>
Date: Sun Feb 1 00:15:59 2015 +0000
Add support for generating QRCodes with 'bridge://' schema for Orbot.
---
lib/bridgedb/qrcodes.py | 21 +++++++++++++++++----
1 file changed, 17 insertions(+), 4 deletions(-)
diff --git a/lib/bridgedb/qrcodes.py b/lib/bridgedb/qrcodes.py
index a76cf8f..8016262 100644
--- a/lib/bridgedb/qrcodes.py
+++ b/lib/bridgedb/qrcodes.py
@@ -25,13 +25,15 @@ except ImportError:
"work. On Debian-based systems, this should be in the "
"python-qrcode package."))
-def generateQR(bridgelines, imageFormat=u'JPEG'):
+
+def generateQR(bridgelines, imageFormat=u'JPEG', bridgeSchema=False):
"""Generate a QRCode for the client's bridge lines.
:param str bridgelines: The Bridge Lines which we are distributing to the
client.
+ :param bool bridgeSchema: If ``True``, prepend ``'bridge://'`` to the
+ beginning of each bridge line before QR encoding.
:rtype: str or ``None``
-
:returns: The generated QRCode, as a string.
"""
logging.debug("Attempting to encode bridge lines into a QRCode...")
@@ -43,16 +45,26 @@ def generateQR(bridgelines, imageFormat=u'JPEG'):
logging.info("Not creating QRCode for bridgelines; no qrcode module.")
try:
+ if bridgeSchema:
+ # See https://bugs.torproject.org/12639 for why bridge:// is used.
+ # (Hopefully, Orbot will pick up the ACTION_VIEW intent.)
+ schema = 'bridge://'
+ prefixed = []
+ for line in bridgelines.strip().split('\n'):
+ prefixed.append(schema + line)
+ bridgelines = '\n'.join(prefixed)
+
+ logging.debug("QR encoding bridge lines: %s" % bridgelines)
qr = qrcode.QRCode()
qr.add_data(bridgelines)
+
buf = cStringIO.StringIO()
img = qr.make_image().resize([350, 350])
img.save(buf, imageFormat)
buf.seek(0)
+
imgstr = buf.read()
- logging.debug("Got QRCode image string.")
-
return imgstr
except KeyError as error:
@@ -62,3 +74,4 @@ def generateQR(bridgelines, imageFormat=u'JPEG'):
except Exception as error:
logging.error(("There was an error while attempting to generate the "
"QRCode: %s") % str(error))
+
More information about the tor-commits
mailing list