#!python

import sys
import zlib
import pprint
import argparse

import PIL.Image
import pyzbar.pyzbar
import base45
import cbor2

ap = argparse.ArgumentParser()
ap.add_argument("input", nargs=1,
                help="Filename (default: image file, e.g. png/jpg)")
ap.add_argument("-t", "--textfile", action="store_true",
                help="Input as text file")
ap.add_argument("-c", "--commandline", action="store_true",
                help="Input via command line")
args = ap.parse_args()

if args.textfile:
    with open(args.input[0]) as f:
        cert = f.read()
elif args.commandline:
    cert = args.input[0]
else:
    data = pyzbar.pyzbar.decode(PIL.Image.open(args.input[0]))
    if data == []:
        sys.stderr.write("Error: Unable to decode QR code\n")
        sys.exit(1)
    cert = data[0].data.decode()

b45data = cert.replace("HC1:", "")

zlibdata = base45.b45decode(b45data)

cbordata = zlib.decompress(zlibdata)

decoded = cbor2.loads(cbordata)

pprint.pprint(cbor2.loads(decoded.value[2]))
