support passing raw HC1 data via cmdline
[greenpass.git] / greenpass.py
index 853a758d1961658c3b1d8a9c23d250b7046c5d0d..f81d60d868f9587a897a7581c8b3c24df8484a78 100644 (file)
@@ -3,7 +3,7 @@
 # Copyright 2021 Tobias Girstmair (https://gir.st). Consider this code GPLv3
 # licensed.
 
-# pip3 install flynn base45 PyPDF2 pyzbar
+# pip3 install flynn base45 PyPDF2 pyzbar Pillow
 # dnf install zbar || apt install libzbar0
 
 import sys
@@ -13,6 +13,7 @@ import zlib
 import flynn
 import base45
 import PyPDF2
+import os
 from PIL import Image
 from pyzbar import pyzbar
 from datetime import datetime
@@ -27,21 +28,27 @@ if len(sys.argv) < 2:
     except:
         print(f"Usage: {sys.argv[0]} COVID-19-*-*-*.pdf", file=sys.stderr)
         print(f"Usage: {sys.argv[0]} QR_CODE.png", file=sys.stderr)
+        print(f"Usage: {sys.argv[0]} 'HC1:.....'", file=sys.stderr)
         sys.exit(1)
 else:
-    infile = sys.argv[1]
+    if os.path.exists(sys.argv[1]):
+        infile = sys.argv[1]
+    else:
+        infile = None
+        qr_data_zlib_b45 = sys.argv[1]
 
-if open(infile, "rb").read(4) == b"%PDF":
-    # extract QR code from PDF using hard-coded index, size and bit depth.
-    # This will only work with the official Austrian green pass PDFs.
-    pdf=PyPDF2.PdfFileReader(open(infile, "rb"))
-    qr_img = pdf.getPage(0)['/Resources']['/XObject']['/Im3']
-    qr_pil = Image.frombytes("1", (400,400), qr_img.getData())
-else: # assume image
-    qr_pil = Image.open(infile)
+if infile:
+    if open(infile, "rb").read(4) == b"%PDF":
+        # extract QR code from PDF using hard-coded index, size and bit depth.
+        # This will only work with the official Austrian green pass PDFs.
+        pdf=PyPDF2.PdfFileReader(open(infile, "rb"))
+        qr_img = pdf.getPage(0)['/Resources']['/XObject']['/Im3']
+        qr_pil = Image.frombytes("1", (400,400), qr_img.getData())
+    else: # assume image
+        qr_pil = Image.open(infile)
 
-# decode QR code into raw bytes:
-qr_data_zlib_b45 = pyzbar.decode(qr_pil)[0].data
+    # decode QR code into raw bytes:
+    qr_data_zlib_b45 = pyzbar.decode(qr_pil)[0].data
 
 # strip header ('HC1:') and decompress data:
 qr_data_zlib = base45.b45decode(qr_data_zlib_b45[4:])
Imprint / Impressum