Observed since 20 Oct, 17:04 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Restricted, configurable access to Alliance Auth's built-in SRP
aa-srp-access is a standalone Alliance Auth application that provides a
restricted frontend for Alliance Auth's built-in Ship Replacement Program
(SRP). It does not replace the built-in SRP backend or administration.
Restricted users can access the frontend only when both conditions are true:
They see only built-in SRP fleets explicitly exposed to one of their Groups by
an administrator. Different Groups can therefore have separate fleet lists,
while a fleet may deliberately be shared with multiple Groups.
Requests are stored as normal built-in SrpUserRequest records, so existing
SRP administrators continue to approve, reject, update, and pay them through
the normal Alliance Auth SRP interface.
5.2.x3.10 through 3.14, matching Alliance Auth 5.2 metadata5.2.x, supplied by Alliance AuthThe initial compatibility target is Alliance Auth 5.2.0. Test upgrades before changing either the Alliance Auth or app version constraint.
Every plugin view performs server-side authorization. Navigation visibility is only a convenience and is not treated as access control. A submitted fleet ID is re-queried through the authorized fleet queryset, and an unexposed fleet returns a safe 404. Anonymous users are redirected to login; authenticated users who fail the State or Group check receive 403.
State, Group, and fleet names are never authorization constants. Configuration
uses database relations to authentication.State, per-fleet auth.Group
mappings, and the built-in srp.SrpFleetMain model.
auth.srp_management permission for app configurationAdd a pinned release to the Alliance Auth requirements file:
aa-srp-access==0.1.3
Add the Python module to local settings:
INSTALLED_APPS += [
"srp_access",
]
Rebuild the application image, then run:
python manage.py migrate srp_access
python manage.py collectstatic --noinput
Restart the web, worker, and scheduler processes using the deployment's normal procedure. No Alliance Auth core files or core migrations are changed.
Service names vary between deployments. From the correct Compose project directory, the usual sequence is:
aa-srp-access==0.1.3 to conf/requirements.txt.srp_access to INSTALLED_APPS in local Django settings.docker compose build.docker compose run --rm <web-service> python manage.py migrate srp_access.docker compose run --rm <web-service> python manage.py collectstatic --noinput.Back up the database and configuration first. Determine the correct Compose project and service names before running commands; do not copy the examples blindly into a production deployment.
auth.srp_management.State.public=True; orAn exposure with no selected Groups is inaccessible by design.
An exposed fleet must also be open in built-in SRP: it needs a non-empty SRP code and an incomplete status. Disabling or completing it in built-in SRP removes it from the restricted list without deleting the exposure mapping.
Access Groups are application data selected separately on each fleet exposure; their names are not fixed. State eligibility and membership of at least one Group assigned to the requested fleet are both mandatory. Superuser or staff status does not bypass the restricted frontend's State-and-Group rule.
Configuration in Django admin is guarded by Alliance Auth's existing
auth.srp_management permission. Normal built-in SRP permissions and pages are
not modified.
Create fleets through the normal built-in SRP interface. In Django admin, add an Exposed SRP fleet mapping, select the existing fleet object, and select its access Groups. The one-to-one relation prevents duplicate fleet mappings. Removing a built-in fleet also removes its exposure mapping; it does not affect unrelated SRP data.
aa-srp-access version in requirements.python manage.py migrate srp_access.collectstatic when release notes require it.When upgrading from 0.1.1, the migration copies the previous global required Group to every existing fleet exposure before removing the global field. You can then split those mappings into separate Groups in Django admin.
Test Alliance Auth upgrades on a test server with the currently pinned plugin version before upgrading production.
Removing the app does not remove built-in SRP fleets or requests. Plugin-owned
settings and exposure mappings remain in the database unless their tables are
explicitly removed. Back up first; do not reverse migrations casually on a
production installation. Remove srp_access from INSTALLED_APPS only after
planning whether to retain or remove those plugin tables.
Run tests against a Redis instance on localhost database 15:
python -m django test srp_access.tests --settings=testauth.settings
Build and validate distributions:
python -m pip install --upgrade build twine
python -m build
python -m twine check dist/*
The test suite uses SQLite and arbitrary fixture names. It covers anonymous, State, per-fleet Group isolation, migration of legacy Group mappings, direct URL protection, submission, built-in SRP regression, and built-in administrator behavior.
Update the changelog and version, merge tested changes, and create a deliberate
GitHub Release. The release workflow builds and validates wheel/sdist artifacts
before publishing through a PyPI Trusted Publisher and the protected pypi
GitHub environment. Ordinary pushes never publish.
pypistats · 34 observations shown. Missing days are unknown. Source category: overall: without mirrors.
| Date / source period | Value | Observed at |
|---|---|---|
| 2026-10-19 – 2026-10-19 | 2 | 2026-10-20T20:18:17.4400904Z |
| 2026-10-18 – 2026-10-18 | 18 | 2026-10-20T20:18:17.4400904Z |
| 2026-10-17 – 2026-10-17 | 4 | 2026-10-20T20:18:17.4400904Z |
| 2026-10-16 – 2026-10-16 | 3 | 2026-10-20T20:18:17.4400904Z |
| 2026-10-14 – 2026-10-14 | 2 | 2026-10-20T20:18:17.4400904Z |
| 2026-10-13 – 2026-10-13 | 2 | 2026-10-20T20:18:17.4400904Z |
| 2026-10-12 – 2026-10-12 | 5 | 2026-10-20T20:18:17.4400904Z |
| 2026-10-10 – 2026-10-10 | 4 | 2026-10-20T20:18:17.4400904Z |
| 2026-10-09 – 2026-10-09 | 7 | 2026-10-20T20:18:17.4400904Z |
| 2026-10-08 – 2026-10-08 | 7 | 2026-10-20T20:18:17.4400904Z |
| 2026-10-07 – 2026-10-07 | 3 | 2026-10-20T20:18:17.4400904Z |
| 2026-10-06 – 2026-10-06 | 1 | 2026-10-20T20:18:17.4400904Z |
| 2026-10-05 – 2026-10-05 | 13 | 2026-10-20T20:18:17.4400904Z |
| 2026-10-04 – 2026-10-04 | 8 | 2026-10-20T20:18:17.4400904Z |
| 2026-10-03 – 2026-10-03 | 13 | 2026-10-20T20:18:17.4400904Z |
| 2026-10-02 – 2026-10-02 | 4 | 2026-10-20T20:18:17.4400904Z |
| 2026-09-30 – 2026-09-30 | 5 | 2026-10-20T20:18:17.4400904Z |
| 2026-09-29 – 2026-09-29 | 10 | 2026-10-20T20:18:17.4400904Z |
| 2026-09-28 – 2026-09-28 | 1 | 2026-10-20T20:18:17.4400904Z |
| 2026-09-27 – 2026-09-27 | 9 | 2026-10-20T20:18:17.4400904Z |
| 2026-09-26 – 2026-09-26 | 97 | 2026-10-20T20:18:17.4400904Z |
| 2026-09-25 – 2026-09-25 | 3 | 2026-10-20T20:18:17.4400904Z |
| 2026-09-24 – 2026-09-24 | 18 | 2026-10-20T20:18:17.4400904Z |
| 2026-09-23 – 2026-09-23 | 3 | 2026-10-20T20:18:17.4400904Z |
| 2026-09-22 – 2026-09-22 | 2 | 2026-10-20T20:18:17.4400904Z |
| 2026-09-21 – 2026-09-21 | 7 | 2026-10-20T20:18:17.4400904Z |
| 2026-09-20 – 2026-09-20 | 9 | 2026-10-20T20:18:17.4400904Z |
| 2026-09-19 – 2026-09-19 | 10 | 2026-10-20T20:18:17.4400904Z |
| 2026-09-18 – 2026-09-18 | 119 | 2026-10-20T20:18:17.4400904Z |
| 2026-09-16 – 2026-09-16 | 14 | 2026-10-20T20:18:17.4400904Z |
| 2026-09-15 – 2026-09-15 | 8 | 2026-10-20T20:18:17.4400904Z |
| 2026-09-14 – 2026-09-14 | 16 | 2026-10-20T20:18:17.4400904Z |
| 2026-09-13 – 2026-09-13 | 25 | 2026-10-20T20:18:17.4400904Z |
| 2026-09-12 – 2026-09-12 | 316 | 2026-10-20T20:18:17.4400904Z |
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.1.5 | 26 Sept 2026 | 5 |
This describes our collected data; it is not a security assessment.
Shared repository data · GitHub
Observed since 20 Oct, 17:04 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:22d315cf2bf2d163aa311083d9120db930f699054c010e5df3b257968a5ef196