diff --git a/README.md b/README.md index c98bbc3..1242158 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,8 @@ start dev server `uv run fastapi dev` Swagger UI @ http://127.0.0.1:8000/docs start prod server `uv run fastapi run` +You need to set services.pcscd.enable = true; for the smartcard reader to work + Issues: - `nix run` currently broken - no door state diff --git a/flake.lock b/flake.lock index 41ccd5f..9401486 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "nixpkgs": { "locked": { - "lastModified": 1775710090, - "narHash": "sha256-ar3rofg+awPB8QXDaFJhJ2jJhu+KqN/PRCXeyuXR76E=", + "lastModified": 1778869304, + "narHash": "sha256-30sZNZoA1cqF5JNO9fVX+wgiQYjB7HJqqJ4ztCDeBZE=", "owner": "nixos", "repo": "nixpkgs", - "rev": "4c1018dae018162ec878d42fec712642d214fdfa", + "rev": "d233902339c02a9c334e7e593de68855ad26c4cb", "type": "github" }, "original": { @@ -29,11 +29,11 @@ ] }, "locked": { - "lastModified": 1773870109, - "narHash": "sha256-ZoTdqZP03DcdoyxvpFHCAek4bkPUTUPUF3oCCgc3dP4=", + "lastModified": 1776659114, + "narHash": "sha256-qapCOQmR++yZSY43dzrp3wCrkOTLpod+ONtJWBk6iKU=", "owner": "pyproject-nix", "repo": "build-system-pkgs", - "rev": "b6e74f433b02fa4b8a7965ee24680f4867e2926f", + "rev": "ffaa2161dd5d63e0e94591f86b54fc239660fb2e", "type": "github" }, "original": { @@ -49,11 +49,11 @@ ] }, "locked": { - "lastModified": 1776120154, - "narHash": "sha256-mtIBTmVKzyoFYoAGdd8Cd7iswFna9YQVyjObZLXPO64=", + "lastModified": 1778901413, + "narHash": "sha256-GSKXTAnFqRAMlZkJrIPcQMYf+lpMr66K3i60mB9STvc=", "owner": "pyproject-nix", "repo": "pyproject.nix", - "rev": "29dc4e9960d2b7f122b52b155e0e8f87cd5c5c08", + "rev": "a228447c3e179d477c1b6246ef3efa8cfe3c469a", "type": "github" }, "original": { @@ -80,11 +80,11 @@ ] }, "locked": { - "lastModified": 1776114780, - "narHash": "sha256-aYUgp40qkY7oNSm+G9A/woNYP+eDeFM0bYckfmxEUiY=", + "lastModified": 1779269674, + "narHash": "sha256-P1LHCRdYpdtHAEzuEsNHrI6d9mVPl5a2fyFDZGHNVbI=", "owner": "pyproject-nix", "repo": "uv2nix", - "rev": "73ff87a3e489b07b9cf842f917963a9e40d49225", + "rev": "69aec536f6d1acc415ed2e20299312802aba98c6", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index d9156b8..bc38ce8 100644 --- a/flake.nix +++ b/flake.nix @@ -58,6 +58,13 @@ lib.composeManyExtensions [ pyproject-build-systems.overlays.wheel overlay + (final: prev: { + pyscard = prev.pyscard.overrideAttrs (old: { + nativeBuildInputs = (old.nativeBuildInputs or []) ++ [ pkgs.swig pkgs.pkg-config]; + buildInputs = (old.buildInputs or []) ++ [ pkgs.pcsclite.dev ]; + NIX_CFLAGS_COMPILE = "-I${pkgs.pcsclite.dev}/include/PCSC"; + }); + }) ] ) ); @@ -76,11 +83,16 @@ packages = [ virtualenv pkgs.uv + pkgs.pcsclite + pkgs.pcsclite.dev + pkgs.swig + pkgs.pkg-config ]; env = { UV_NO_SYNC = "1"; UV_PYTHON = pythonSet.python.interpreter; UV_PYTHON_DOWNLOADS = "never"; + LD_LIBRARY_PATH = "${lib.getLib pkgs.pcsclite}/lib"; }; shellHook = '' unset PYTHONPATH diff --git a/pyproject.toml b/pyproject.toml index 1e2b0aa..61d585a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,6 +15,8 @@ dependencies = [ "pytest>=9.0.3", "requests>=2.33.1", "pytest-cov>=7.1.0", + "setuptools>=82.0.1", + "pyscard>=2.3.1", ] [tool.uv.sources] @@ -22,3 +24,4 @@ python-desfire = { git = "https://github.com/waza-ari/python-desfire" } [tool.uv.extra-build-dependencies] python-desfire = ["poetry"] +"pyscard" = ["setuptools"] diff --git a/uv.lock b/uv.lock index a379a7f..2a2442c 100644 --- a/uv.lock +++ b/uv.lock @@ -613,10 +613,12 @@ dependencies = [ { name = "poetry" }, { name = "pwdlib", extra = ["argon2"] }, { name = "pyjwt", extra = ["crypto"] }, + { name = "pyscard" }, { name = "pytest" }, { name = "pytest-cov" }, { name = "python-desfire" }, { name = "requests" }, + { name = "setuptools" }, { name = "sqlmodel" }, ] @@ -627,10 +629,12 @@ requires-dist = [ { name = "poetry", specifier = ">=2.3.4" }, { name = "pwdlib", extras = ["argon2"], specifier = ">=0.3.0" }, { name = "pyjwt", extras = ["crypto"], specifier = ">=2.12.1" }, + { name = "pyscard", specifier = ">=2.3.1" }, { name = "pytest", specifier = ">=9.0.3" }, { name = "pytest-cov", specifier = ">=7.1.0" }, { name = "python-desfire", git = "https://github.com/waza-ari/python-desfire" }, { name = "requests", specifier = ">=2.33.1" }, + { name = "setuptools", specifier = ">=82.0.1" }, { name = "sqlmodel", specifier = ">=0.0.38" }, ] @@ -1230,6 +1234,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl", hash = "sha256:9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913", size = 10216, upload-time = "2024-09-29T09:24:11.978Z" }, ] +[[package]] +name = "pyscard" +version = "2.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/93/c9/65c68738a94b44b67b3c5e68a815890bbd225f2ae11ef1ace9b61fa9d5f3/pyscard-2.3.1.tar.gz", hash = "sha256:a24356f57a0a950740b6e54f51f819edd5296ee8892a6625b0da04724e9e6c13", size = 160650, upload-time = "2025-10-29T15:49:08.353Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/08/e2/d8f967fe6fee82c02ee35d736e8707d65ed1e37fa7635f3bdca96bdcd2ff/pyscard-2.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c11a596407e18cdcf16a4ccd8cdeaa55846d4f7ec2eefc529483e201f6906658", size = 170956, upload-time = "2025-10-29T15:53:32.072Z" }, + { url = "https://files.pythonhosted.org/packages/ca/a1/508fc5733e2ce01a71c6abc94dae543311cf9d0962e309b0a78b4cb4031a/pyscard-2.3.1-cp313-cp313-macosx_15_0_x86_64.whl", hash = "sha256:72b1ab922fad5e050144ec72762e36741271b09d2389cda9b976b61ee0564e71", size = 138809, upload-time = "2025-10-29T15:49:06.528Z" }, + { url = "https://files.pythonhosted.org/packages/18/a4/5481cd54f882ea61bfc334667f1e5126ac51124a464297dbe24592288b14/pyscard-2.3.1-cp313-cp313-win32.whl", hash = "sha256:a0b59d1961ff9fb15d980ad64edae13e4512b7e641ea8959e86133f34091aa5c", size = 139294, upload-time = "2025-10-29T15:53:35.805Z" }, + { url = "https://files.pythonhosted.org/packages/8c/2b/c98e7bcf45958905d1bfdab59fe5acd67fe9ff0ad78145c4783886c38c84/pyscard-2.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:df2b256bc719b701807114bdd179f7b303f309a954d5689188b088adfc33ead2", size = 145501, upload-time = "2025-10-29T15:53:33.549Z" }, + { url = "https://files.pythonhosted.org/packages/93/a6/74cca0ec3c08f35c1a7468a8508d0e3989e63298d3a4b1f928542719aebc/pyscard-2.3.1-cp313-cp313-win_arm64.whl", hash = "sha256:f58b46cd78455a29a0abceabff21b37da81a385a737b29e6dd5e25acb7e3f3da", size = 140758, upload-time = "2025-10-29T15:53:34.542Z" }, +] + [[package]] name = "pytest" version = "9.0.3" @@ -1529,6 +1546,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fa/eb/d875669993b762556ae8b2efd86219943b4c0864d22204d622a9aee3052b/sentry_sdk-2.58.0-py2.py3-none-any.whl", hash = "sha256:688d1c704ddecf382ea3326f21a67453d4caa95592d722b7c780a36a9d23109e", size = 460919, upload-time = "2026-04-13T17:23:24.675Z" }, ] +[[package]] +name = "setuptools" +version = "82.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4f/db/cfac1baf10650ab4d1c111714410d2fbb77ac5a616db26775db562c8fab2/setuptools-82.0.1.tar.gz", hash = "sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9", size = 1152316, upload-time = "2026-03-09T12:47:17.221Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl", hash = "sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb", size = 1006223, upload-time = "2026-03-09T12:47:15.026Z" }, +] + [[package]] name = "shellingham" version = "1.5.4"