diff options
| author | Yuval Adam <_@yuv.al> | 2021-12-31 11:12:47 +0200 |
|---|---|---|
| committer | Yuval Adam <_@yuv.al> | 2021-12-31 11:15:21 +0200 |
| commit | abef9a61beef6f55772a1230b0d520009227ce5e (patch) | |
| tree | 2e9252f4a2b0b15567f3c926231af07f6f935a2a | |
| parent | 361da8e734f63c1ce9391085399e258388ebd45e (diff) | |
Initial round of removing click from verifier
| -rw-r--r-- | greenpass/cli.py | 7 | ||||
| -rw-r--r-- | greenpass/tests/test_verifier.py | 9 | ||||
| -rw-r--r-- | greenpass/verifier.py | 31 |
3 files changed, 29 insertions, 18 deletions
diff --git a/greenpass/cli.py b/greenpass/cli.py index 3546aeb..165ae38 100644 --- a/greenpass/cli.py +++ b/greenpass/cli.py @@ -28,4 +28,9 @@ def verify(pdf_path="", image_path="", txt_path=""): ctx = click.get_current_context() click.echo(ctx.get_help()) ctx.exit() - verifier.verify() + + valid = verifier.verify() + if valid: + click.secho("✅ Valid signature!", fg="green", bold=True) + else: + click.secho("❌ Invalid signature!", fg="red", bold=True) diff --git a/greenpass/tests/test_verifier.py b/greenpass/tests/test_verifier.py index e69de29..2a44b3e 100644 --- a/greenpass/tests/test_verifier.py +++ b/greenpass/tests/test_verifier.py @@ -0,0 +1,9 @@ +from pathlib import Path + +from ..verifier import GreenPassVerifier + +SAMPLES_DIR = Path(__file__).parent / "samples" + + +def test_good(): + assert 1 == 1 diff --git a/greenpass/verifier.py b/greenpass/verifier.py index 9bfce3b..ec9cf69 100644 --- a/greenpass/verifier.py +++ b/greenpass/verifier.py @@ -1,5 +1,4 @@ import base64 - import fitz import json @@ -17,7 +16,6 @@ class GreenPassVerifier(object): def __init__(self, data_bytes): self.validate_bytes(data_bytes) - print(data_bytes) sig, self.payload = data_bytes.split(b"#", maxsplit=1) self.signature = base64.decodebytes(sig) self.data = json.loads(self.payload) @@ -50,25 +48,25 @@ class GreenPassVerifier(object): with open(f"/tmp/greenpass/{xref}.png", "wb") as f: f.write(data) return cls.from_qr(BytesIO(data)) - except: + except IndexError: pass else: raise Exception("No QR found") def validate_bytes(self, bs): if bs.decode().startswith("GreenPass"): - click.secho( - "⚠️ Green pass QR code contains no signature to verify", - fg="yellow", - bold=True, - ) - click.get_current_context().exit() + raise Exception("Green pass QR code contains no signature to verify") + # click.secho( + # "⚠️ ", + # fg="yellow", + # bold=True, + # ) + # click.get_current_context().exit() def validate_data(self): ct = self.data["ct"] if ct not in (1, 2): - click.secho(f"Unknown certificate type ct={ct}", fg="red", bold=True) - click.get_current_context().exit() + raise Exception(f"Unknown certificate type {ct=}") def get_cert_path(self, name): return Path(__file__).absolute().parent / "certs" / name @@ -107,9 +105,9 @@ class GreenPassVerifier(object): def verify(self): for d in self.details: - click.echo(f"\tIsraeli ID Number {d['id_num']}") - click.echo(f"\tID valid by {d['valid_by']}") - click.echo(f"\tCert Unique ID {d['cert_id']}") + print(f"\tIsraeli ID Number {d['id_num']}") + print(f"\tID valid by {d['valid_by']}") + print(f"\tCert Unique ID {d['cert_id']}") certs = [ [ @@ -126,9 +124,8 @@ class GreenPassVerifier(object): k = serialization.load_pem_public_key(f.read()) try: k.verify(self.signature, self.digest, *method) - click.secho("✅ Valid signature!", fg="green", bold=True) - break + return True except InvalidSignature: pass else: - click.secho("❌ Invalid signature!", fg="red", bold=True) + return False |
