Metadata-Version: 2.4
Name: admitiq
Version: 0.3.4
Summary: AdmitiQ: signed, expiring, revocable tokens for QR codes and ticket links. https://admitiq.logiclitz.org
Author: LogicLitz
License: MIT
Project-URL: Homepage, https://admitiq.logiclitz.org
Project-URL: Documentation, https://github.com/HyperXfury1873/admitiq/tree/main/docs
Project-URL: Repository, https://github.com/HyperXfury1873/admitiq
Project-URL: Issues, https://github.com/HyperXfury1873/admitiq/issues
Keywords: qr,qrcode,security,tokens,tickets,attendance,coupons,hmac,signed-url,single-use,admitiq
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.8
Description-Content-Type: text/markdown
Provides-Extra: qr
Requires-Dist: qrcode[pil]>=7.4; extra == "qr"
Provides-Extra: ec
Requires-Dist: cryptography>=41.0; extra == "ec"
Provides-Extra: redis
Requires-Dist: redis>=4.5; extra == "redis"
Provides-Extra: dev
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: fastapi>=0.100; extra == "dev"
Requires-Dist: flask>=2.3; extra == "dev"
Requires-Dist: httpx>=0.24; extra == "dev"

# AdmitiQ (Python)

[![PyPI](https://img.shields.io/pypi/v/admitiq.svg)](https://pypi.org/project/admitiq/)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](../LICENSE)

**A [LogicLitz](https://logiclitz.org) open-source project.**

Signed, expiring, revocable tokens for QR codes and links.

> New here? Start with the [interactive tutorial](https://admitiq.logiclitz.org) or [../docs/what-is-admitiq.md](../docs/what-is-admitiq.md).

## Install

```bash
pip install admitiq
pip install "admitiq[qr]"     # optional: QR images
pip install "admitiq[ec]"     # optional: ES256
pip install "admitiq[redis]"  # optional: Redis single-use store
```

## Tiny example

```python
from admitiq import issue, verify, issue_url, issue_qr

token = issue({"ticket_id": "abc123"}, ttl_seconds=3600, secret="your-secret-key")
url = issue_url("https://example.com/scan", {"ticket_id": "abc123"}, ttl_seconds=3600, secret="your-secret-key")
# issue_qr(..., output_path="ticket.png")  # needs: pip install "admitiq[qr]"

payload = verify(token, secret="your-secret-key")
print(payload["data"])
```

A Node app can verify this same token with the same secret (`npm install admitiq`).

## More

| Topic | Link |
|-------|------|
| Full Python guide | [docs/python.md](../docs/python.md) |
| Getting started | [docs/getting-started.md](../docs/getting-started.md) |
| Landing / tutorial | [docs/landing.md](../docs/landing.md) |
| QR & URL delivery | [docs/delivering-tokens.md](../docs/delivering-tokens.md) |
| Key rotation | [docs/key-rotation.md](../docs/key-rotation.md) |
| Security | [SECURITY.md](../SECURITY.md) |
| Publish to PyPI | [PUBLISH.md](../PUBLISH.md) |
| Flask demo | [examples/flask-attendance](../examples/flask-attendance) |
| PyPI | https://pypi.org/project/admitiq/ |

## License

MIT — [LogicLitz](https://logiclitz.org)
