summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Pipfile1
-rw-r--r--Pipfile.lock92
-rw-r--r--verify.py16
3 files changed, 75 insertions, 34 deletions
diff --git a/Pipfile b/Pipfile
index 8f5191a..375f555 100644
--- a/Pipfile
+++ b/Pipfile
@@ -7,6 +7,7 @@ name = "pypi"
cryptography = "*"
pillow = "*"
pyzbar = "*"
+pymupdf = "*"
[dev-packages]
diff --git a/Pipfile.lock b/Pipfile.lock
index ea45a3b..b61de87 100644
--- a/Pipfile.lock
+++ b/Pipfile.lock
@@ -1,7 +1,7 @@
{
"_meta": {
"hash": {
- "sha256": "88288ba4a29083a5f9a6ec0d894e55dc651b0227f35984fdfde3c7fa0e66f228"
+ "sha256": "cdf5770078ddbccea03971d385dd543c729159f2da40215c86311cf4293fa047"
},
"pipfile-spec": 6,
"requires": {},
@@ -76,41 +76,42 @@
},
"pillow": {
"hashes": [
- "sha256:165c88bc9d8dba670110c689e3cc5c71dbe4bfb984ffa7cbebf1fac9554071d6",
- "sha256:1d208e670abfeb41b6143537a681299ef86e92d2a3dac299d3cd6830d5c7bded",
- "sha256:22d070ca2e60c99929ef274cfced04294d2368193e935c5d6febfd8b601bf865",
- "sha256:2353834b2c49b95e1313fb34edf18fca4d57446675d05298bb694bca4b194174",
- "sha256:39725acf2d2e9c17356e6835dccebe7a697db55f25a09207e38b835d5e1bc032",
- "sha256:3de6b2ee4f78c6b3d89d184ade5d8fa68af0848f9b6b6da2b9ab7943ec46971a",
- "sha256:47c0d93ee9c8b181f353dbead6530b26980fe4f5485aa18be8f1fd3c3cbc685e",
- "sha256:5e2fe3bb2363b862671eba632537cd3a823847db4d98be95690b7e382f3d6378",
- "sha256:604815c55fd92e735f9738f65dabf4edc3e79f88541c221d292faec1904a4b17",
- "sha256:6c5275bd82711cd3dcd0af8ce0bb99113ae8911fc2952805f1d012de7d600a4c",
- "sha256:731ca5aabe9085160cf68b2dbef95fc1991015bc0a3a6ea46a371ab88f3d0913",
- "sha256:7612520e5e1a371d77e1d1ca3a3ee6227eef00d0a9cddb4ef7ecb0b7396eddf7",
- "sha256:7916cbc94f1c6b1301ac04510d0881b9e9feb20ae34094d3615a8a7c3db0dcc0",
- "sha256:81c3fa9a75d9f1afafdb916d5995633f319db09bd773cb56b8e39f1e98d90820",
- "sha256:887668e792b7edbfb1d3c9d8b5d8c859269a0f0eba4dda562adb95500f60dbba",
- "sha256:93a473b53cc6e0b3ce6bf51b1b95b7b1e7e6084be3a07e40f79b42e83503fbf2",
- "sha256:96d4dc103d1a0fa6d47c6c55a47de5f5dafd5ef0114fa10c85a1fd8e0216284b",
- "sha256:a3d3e086474ef12ef13d42e5f9b7bbf09d39cf6bd4940f982263d6954b13f6a9",
- "sha256:b02a0b9f332086657852b1f7cb380f6a42403a6d9c42a4c34a561aa4530d5234",
- "sha256:b09e10ec453de97f9a23a5aa5e30b334195e8d2ddd1ce76cc32e52ba63c8b31d",
- "sha256:b6f00ad5ebe846cc91763b1d0c6d30a8042e02b2316e27b05de04fa6ec831ec5",
- "sha256:bba80df38cfc17f490ec651c73bb37cd896bc2400cfba27d078c2135223c1206",
- "sha256:c3d911614b008e8a576b8e5303e3db29224b455d3d66d1b2848ba6ca83f9ece9",
- "sha256:ca20739e303254287138234485579b28cb0d524401f83d5129b5ff9d606cb0a8",
- "sha256:cb192176b477d49b0a327b2a5a4979552b7a58cd42037034316b8018ac3ebb59",
- "sha256:cdbbe7dff4a677fb555a54f9bc0450f2a21a93c5ba2b44e09e54fcb72d2bd13d",
- "sha256:cf6e33d92b1526190a1de904df21663c46a456758c0424e4f947ae9aa6088bf7",
- "sha256:d355502dce85ade85a2511b40b4c61a128902f246504f7de29bbeec1ae27933a",
- "sha256:d673c4990acd016229a5c1c4ee8a9e6d8f481b27ade5fc3d95938697fa443ce0",
- "sha256:dc577f4cfdda354db3ae37a572428a90ffdbe4e51eda7849bf442fb803f09c9b",
- "sha256:dd9eef866c70d2cbbea1ae58134eaffda0d4bfea403025f4db6859724b18ab3d",
- "sha256:f50e7a98b0453f39000619d845be8b06e611e56ee6e8186f7f60c3b1e2f0feae"
+ "sha256:15306d71a1e96d7e271fd2a0737038b5a92ca2978d2e38b6ced7966583e3d5af",
+ "sha256:1940fc4d361f9cc7e558d6f56ff38d7351b53052fd7911f4b60cd7bc091ea3b1",
+ "sha256:1f93f2fe211f1ef75e6f589327f4d4f8545d5c8e826231b042b483d8383e8a7c",
+ "sha256:30d33a1a6400132e6f521640dd3f64578ac9bfb79a619416d7e8802b4ce1dd55",
+ "sha256:328240f7dddf77783e72d5ed79899a6b48bc6681f8d1f6001f55933cb4905060",
+ "sha256:46c2bcf8e1e75d154e78417b3e3c64e96def738c2a25435e74909e127a8cba5e",
+ "sha256:5762ebb4436f46b566fc6351d67a9b5386b5e5de4e58fdaa18a1c83e0e20f1a8",
+ "sha256:5a2d957eb4aba9d48170b8fe6538ec1fbc2119ffe6373782c03d8acad3323f2e",
+ "sha256:5cf03b9534aca63b192856aa601c68d0764810857786ea5da652581f3a44c2b0",
+ "sha256:5daba2b40782c1c5157a788ec4454067c6616f5a0c1b70e26ac326a880c2d328",
+ "sha256:63cd413ac52ee3f67057223d363f4f82ce966e64906aea046daf46695e3c8238",
+ "sha256:6efac40344d8f668b6c4533ae02a48d52fd852ef0654cc6f19f6ac146399c733",
+ "sha256:71b01ee69e7df527439d7752a2ce8fb89e19a32df484a308eca3e81f673d3a03",
+ "sha256:71f31ee4df3d5e0b366dd362007740106d3210fb6a56ec4b581a5324ba254f06",
+ "sha256:72027ebf682abc9bafd93b43edc44279f641e8996fb2945104471419113cfc71",
+ "sha256:74cd9aa648ed6dd25e572453eb09b08817a1e3d9f8d1bd4d8403d99e42ea790b",
+ "sha256:81b3716cc9744ffdf76b39afb6247eae754186838cedad0b0ac63b2571253fe6",
+ "sha256:8565355a29655b28fdc2c666fd9a3890fe5edc6639d128814fafecfae2d70910",
+ "sha256:87f42c976f91ca2fc21a3293e25bd3cd895918597db1b95b93cbd949f7d019ce",
+ "sha256:89e4c757a91b8c55d97c91fa09c69b3677c227b942fa749e9a66eef602f59c28",
+ "sha256:8c4e32218c764bc27fe49b7328195579581aa419920edcc321c4cb877c65258d",
+ "sha256:903293320efe2466c1ab3509a33d6b866dc850cfd0c5d9cc92632014cec185fb",
+ "sha256:90882c6f084ef68b71bba190209a734bf90abb82ab5e8f64444c71d5974008c6",
+ "sha256:98afcac3205d31ab6a10c5006b0cf040d0026a68ec051edd3517b776c1d78b09",
+ "sha256:a01da2c266d9868c4f91a9c6faf47a251f23b9a862dce81d2ff583135206f5be",
+ "sha256:aeab4cd016e11e7aa5cfc49dcff8e51561fa64818a0be86efa82c7038e9369d0",
+ "sha256:b07c660e014852d98a00a91adfbe25033898a9d90a8f39beb2437d22a203fc44",
+ "sha256:bead24c0ae3f1f6afcb915a057943ccf65fc755d11a1410a909c1fefb6c06ad1",
+ "sha256:d1d6bca39bb6dd94fba23cdb3eeaea5e30c7717c5343004d900e2a63b132c341",
+ "sha256:e2cd8ac157c1e5ae88b6dd790648ee5d2777e76f1e5c7d184eaddb2938594f34",
+ "sha256:e5739ae63636a52b706a0facec77b2b58e485637e1638202556156e424a02dc2",
+ "sha256:f36c3ff63d6fc509ce599a2f5b0d0732189eed653420e7294c039d342c6e204a",
+ "sha256:f91b50ad88048d795c0ad004abbe1390aa1882073b1dca10bfd55d0b8cf18ec5"
],
"index": "pypi",
- "version": "==8.1.0"
+ "version": "==8.1.2"
},
"pycparser": {
"hashes": [
@@ -120,6 +121,29 @@
"markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'",
"version": "==2.20"
},
+ "pymupdf": {
+ "hashes": [
+ "sha256:2267737702a0bdb85e328108429ea79bb1c392e01f3589f5e12e10c02e977b17",
+ "sha256:37dac2a3ea35da0375b3f19d488070b8f8e4eba4b243e66f3bbf4056e887c411",
+ "sha256:4b5352569339cde5f0379cda550f35c340e57d38f2a2d73e3545c17f7702bbfc",
+ "sha256:5afe6a5f6905334e06f21c3a1284427289fa333b19ae87fd932ebde01b7d820e",
+ "sha256:5b94b885d9d5b7483871e08bbd189b37e2bc30a4760d4eb809de5f18d4e4beb0",
+ "sha256:5c07e65208cabdf6aa2a14c4dce571252260f0e121420b8a631ad9df05e4e2d6",
+ "sha256:642cd1122ead198518cf4f9675274d1fee563857350051802ba5ce76b60abca7",
+ "sha256:65a1daaf77434f6da95fa63437713fabe8d818f00e4e3af9f4a64fe16804ad32",
+ "sha256:7cdae7822754526a5401b10ba175f8979c62711a6b10610d88c8e698e5be9ffa",
+ "sha256:9b526f0e7cebb56abb2ad569552bd313c37cabc5ce59614791079816ba6459d4",
+ "sha256:9eb91dd17b948e12b87406e8a33503d36ed6d054a856d63c6b731ec73a80aecd",
+ "sha256:a28d5bdc89ff4c0ecaec51e83d0cdc084156727e8f0505bcbb9f25c7b455c1f3",
+ "sha256:cb6ba6c5038ce590a088b9bf320c6e9ce714c1fa304181ece8b551d8589a8b21",
+ "sha256:d554e5711dc6a3be67af9b8bcdd4093ad6bcc4081af319a0fb0433815df73f5e",
+ "sha256:dff30cca066033f8a48e5e75f9a833b3d4de481a66cbe2bfe1ed9a824691385a",
+ "sha256:fa12cd8075a0223cc4a89859e46b1b8127fbde2c6d44a75720fca91d83f9433b",
+ "sha256:fe450ff5b0012b7ef795abafcb156ff3b0108a12c184bd8105c5df7794788d3c"
+ ],
+ "index": "pypi",
+ "version": "==1.18.9"
+ },
"pyzbar": {
"hashes": [
"sha256:0e204b904e093e5e75aa85e0203bb0e02888105732a509b51f31cff400f34265",
diff --git a/verify.py b/verify.py
index db3c589..a42106d 100644
--- a/verify.py
+++ b/verify.py
@@ -1,5 +1,6 @@
import argparse
import base64
+import fitz
import json
from pathlib import Path
@@ -54,6 +55,12 @@ def read_qr_code(image_path):
return pyzbar.decode(Image.open(image_path))[0].data
+def read_pdf(pdf_path):
+ doc = fitz.open(pdf_path)
+ for (xref, *_) in doc.get_page_images(0, full=True):
+ img = fitz.Pixmap(doc, xref)
+ img.writePNG(f"{xref}.png")
+
def create_arg_parser():
parser = argparse.ArgumentParser("Green Pass QR code verifier")
group = parser.add_mutually_exclusive_group(required=True)
@@ -65,6 +72,13 @@ def create_arg_parser():
default=None,
)
group.add_argument(
+ "-p",
+ "--pdf-path",
+ type=Path,
+ help="Path to PDF file",
+ default=None,
+ )
+ group.add_argument(
"-t",
"--txt-path",
type=Path,
@@ -80,6 +94,8 @@ if __name__ == "__main__":
if args.image_path:
verify(read_qr_code(args.image_path))
+ elif args.pdf_path:
+ read_pdf(args.pdf_path)
elif args.txt_path:
with open(args.txt_path, "rb") as f:
verify(f.read().strip())