summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuval Adam <_@yuv.al>2021-12-31 11:12:47 +0200
committerYuval Adam <_@yuv.al>2021-12-31 11:15:21 +0200
commitabef9a61beef6f55772a1230b0d520009227ce5e (patch)
tree2e9252f4a2b0b15567f3c926231af07f6f935a2a
parent361da8e734f63c1ce9391085399e258388ebd45e (diff)
Initial round of removing click from verifier
-rw-r--r--greenpass/cli.py7
-rw-r--r--greenpass/tests/test_verifier.py9
-rw-r--r--greenpass/verifier.py31
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