blob: 89a32b59a5b2ca41ec1df9e7b39e367430eb1012 [file] [log] [blame]
🏅 Open Badge Issuer Toolkit (Python)
======================================
A lightweight toolkit to create, award, bake, and verify [Open Badges v2.0](https://www.imsglobal.org/openbadges) using Python.
📁 Badge Directory Structure
---------------------
.
└── badges/
└── <badge_slug>/
├── badge.png
├── badgeclass.json
├── issuer.json
└── assertions/
└── <recipient>.json
🚀 Scripts
----------
1. create_badge.py
Create a new badge definition.
Usage:
python create_badge.py
- Prompts for badge name, description, and narrative (criteria)
- Creates:
- badges/<slug>/issuer.json
- badges/<slug>/badgeclass.json
- badges/<slug>/badge.png
- Requires:
- <slug>.png to already exist
2. award_badges.py
Award the badge to multiple recipients from a CSV file.
Usage:
python award_badges.py
- Reads recipients.csv:
email
alice@example.com
bob@example.com
- Outputs for each recipient:
- badges/<slug>/assertions/<recipient>.json
- badges/<slug>/badge_<slug>_<recipient>.png (baked image)
3. award_badge.py
Award a badge to a single recipient interactively.
Usage:
python award_badge.py
- Prompts for:
- Badge (from list of available badges)
- Recipient email
- Outputs:
- badges/<slug>/assertions/<recipient>.json
- badges/<slug>/badge_<slug>_<recipient>.png (baked image)
4. verify_badge.py
Verify a baked badge PNG file.
Usage:
python verify_badge.py badge.png
- Extracts and displays the baked assertion
- Validates structure and required fields
- Checks that the hosted assertion matches the baked one
5. verify_email.py
Verify a baked badge email hash.
Usage:
python verify_email.py badge.png someone@example.com
- Computes SHA-256 hash of the provided email
- Compares it to the metadata in the baked badge
5. find_hash.py
Find badge assertions issued to a specific email address.
Usage:
python tools/find_hash.py someone@example.com
- Computes the SHA-256 hash of the email
- Uses the first 12 characters of the hash as a filename prefix
- Matches any `.json` assertion file that starts with that prefix
📦 Requirements
---------------
Install dependencies with:
pip install openbadges-bakery requests
🌐 URLs
-------
Badges use the training.apache.org namespace by default:
- Issuer:
https://training.apache.org/badges/<slug>/issuer.json
- BadgeClass:
https://training.apache.org/badges/<slug>/badgeclass.json
- Assertions:
https://training.apache.org/assertions/<slug>/<recipient>.json
To enable public verification, upload the relevant files to match those URLs.
🛡️ Notes
--------
- Email addresses are hashed using SHA-256
- Assertions follow Open Badges v2.0 JSON-LD format
- Baked PNGs are valid standalone badges with embedded metadata
✅ Example
----------
python create_badge.py
python award_badge.py
python verify_badge.py alice-smith.png