AA ACL Checker
A plugin app for Alliance Auth (AA) that pulls Access Control Lists (ACLs) from EVE's ESI API, stores them in the database, and flags characters that appear on an ACL but are not registered in Auth.
Features
- Periodically syncs ACLs from ESI and stores them in the database.
- Flags characters that are granted access on an ACL but not registered in Auth.
- Has its own menu item in the sidebar showing flagged characters.
Installing Into Your Dev AA
Make sure you're in your venv, then install it in editable mode:
pip install -e aa-acl-checker
Add acl_checker to INSTALLED_APPS in settings/local.py, then run:
python manage.py makemigrations
python manage.py check
python manage.py migrate
Finally, restart your AA server.
Installing Into Production AA
pip install git+https://github.com/Solar-Helix-Independent-Transport/aa-acl-checker
Then add acl_checker to INSTALLED_APPS in settings/local.py, run migrations and
restart your allianceserver.
Usage
- Link a character: someone with the
add_ownerpermission clicks "Add / Refresh Character" and authorizes with theesi-access.read_lists.v1scope. ESI only lets a character list Access Lists it is a Manager or Admin of, so the linked character must actually hold one of those roles on the ACLs you want tracked. Linking immediately queues a sync and re-authorizes an already-linked character if its token has expired or lost the scope. - Flagged Characters: the main page lists every character that ESI
reports as
Allowed/Manager/Adminon a tracked ACL but who has no linked, owned character in Auth - i.e. someone with structure/fleet access who was never (or is no longer) registered.
Post-install setup
Linking a character syncs its Access Lists once immediately, but nothing refreshes them after that unless a periodic task is scheduled. Run this once after installing/upgrading:
python manage.py acl_checker_setup
This registers an hourly PeriodicTask (via django-celery-beat) that calls
acl_checker.tasks.update_all_acls for every tracked (active) owner
character. It's safe to run again after upgrades - it just updates the
existing schedule rather than duplicating it.
How syncing works
For each active Owner (a character with a valid esi-access.read_lists.v1
token):
GET /characters/{character_id}/access-listslists the Access Lists that character manages or administers.- For each one,
GET /characters/{character_id}/access-lists/{access_list_id}fetches its full membership - separate lists of characters, corporations, and alliances, each with an access level (Unspecified/Allowed/Blocked/Manager/Admin). - The ACL's local membership rows are fully replaced with what ESI just returned (ESI's detail response is always a complete snapshot, so a diff isn't needed).
ESI never includes a name alongside a character/corporation/alliance ID in
the Access List detail, so none is cached locally - display names are
resolved from Auth's own EveCharacter cache at read time instead.
Flagging is computed live, not stored: AclCharacterEntry.objects.flagged()
checks whether a granted character_id has an owned EveCharacter in Auth.
That means a character clears the flagged list the moment someone registers
it, and a newly-added ACL character shows up as flagged immediately on the
next sync - no separate reconciliation step required.
Writing Unit Tests
Write your unit tests in acl_checker/tests/ using the test_ filename prefix.
Metadata
Release files for aa-acl-checker 0.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| aa_acl_checker-0.0.1.tar.gz | 42.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| aa_acl_checker-0.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 91.8 kB
Release files / aa_acl_checker-0.0.1.tar.gz
| Download URL | aa_acl_checker-0.0.1.tar.gz |
|---|---|
| Size | 42.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f1387efcb517cd73d931ddcd6934c75f1ac93dea7e86456abb450fc4cc994353
|
|
BLAKE2b-256 checksum How to use checksums |
3537a437965d782361164bbbece1e16692a08406c2c0024d14cf63eb461b500b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 5, 2026.
Transparency logRelease files / aa_acl_checker-0.0.1-py3-none-any.whl
| Download URL | aa_acl_checker-0.0.1-py3-none-any.whl |
|---|---|
| Size | 49.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
29a1378d12a480a9f8c7dfeaaf471bec85429ccf2408a46307a2776cc8aa46b3
|
|
BLAKE2b-256 checksum How to use checksums |
1e6dd2742b7f0184b15befb67310208dd73a397c7a1092596b1ec6d7a1321480
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 5, 2026.
Transparency log