Alliance Auth Mumble Authenticator
Русская версия: README.ru.md.
Bridges a Mumble (Murmur) ICE server to an Alliance Auth MariaDB backend, with optional EVE Online templink guest access, EVE portrait textures, Prometheus metrics, and a self-healing ICE healthcheck.
The authenticator runs as a single long-lived process. It connects to the
Murmur ICE interface, validates Mumble logins against the Alliance Auth
database (and, optionally, short-lived templink guest credentials), serves
avatars as channel textures, and parks idle users. Configuration is
supplied entirely through MA__-prefixed environment variables.
Prerequisites
- CPython 3.12, Linux
amd64only.zeroc-iceships pre-built wheels forcp312on Linux only; Python 3.11 or 3.13 will not resolve. - A reachable Alliance Auth MariaDB/MySQL database.
- A running Murmur (Mumble) server with the ICE interface enabled and
its
Ice.Secretknown. - Docker — only for the container install path.
Install
A release X.Y.Z is published to both PyPI and Docker Hub on each tagged
release. You can also install from source
(repository) or
build the image locally (see Docker usage).
PyPI:
pip install eveo7-mumble-authenticator
Docker Hub (linux/amd64):
docker pull docker.io/6run0/eveo7-mumble-authenticator:X.Y.Z
Pull a concrete release tag (X.Y.Z); latest tracks the newest release.
Quick start
Configuration is read only from MA__-prefixed environment variables.
Create an authenticator.env file with the three required secrets and the
connection coordinates:
# Required — startup fails closed if any of these is unset.
MA__ALLIANCE_AUTH__DATABASE__PASSWORD=your-db-password
MA__ICE_SERVER__SECRET=your-murmur-ice-secret
MA__ICE_CLIENT__SECRET=your-murmur-ice-secret # must equal ICE_SERVER__SECRET
# Point at your Alliance Auth database and Murmur ICE endpoint.
MA__ALLIANCE_AUTH__DATABASE__HOST=127.0.0.1
MA__ALLIANCE_AUTH__DATABASE__NAME=alliance_auth
MA__ALLIANCE_AUTH__DATABASE__USER=alliance
MA__ICE_SERVER__HOST=127.0.0.1
MA__ICE_SERVER__PORT=6502
Run it (installed from PyPI):
set -a; . ./authenticator.env; set +a
authenticator
Verify the console script responds (no configuration required for this):
authenticator --version
The complete set of variables, with every default and which ones are
required, lives in
example.env.
Docker usage
docker run --rm \
--env-file authenticator.env \
-p 13004:13004 \
-p 8000:8000 \
-v "$(pwd)/data:/data" \
docker.io/6run0/eveo7-mumble-authenticator:X.Y.Z
13004— ICE callback adapter;8000— Prometheus metrics./data— diskcache directory (avatar textures + the SELECT fallback cache). Persist it with a volume.- The container runs as a non-root user (uid/gid
10000). - To expose metrics outside the container, add
MA__PROMETHEUS__HOST=0.0.0.0to the env file — the endpoint binds loopback by default.
Build the image locally instead of pulling:
docker build -t eveo7-mumble-authenticator .
The build is multi-stage: by default it builds the wheel from this source
tree; pass --build-arg WHEEL_FROM=pypi to install the published release
instead. A reference Compose service is in
docker-compose.yml.
Networking caveat
Running the container attached to multiple Docker networks is
discouraged. The ICE callback adapter announces a single callback address
to Murmur; with several interfaces it may advertise the wrong one, and the
Mumble server then tries to reach an address that is unroutable from its
network. Prefer network_mode: host with a single interface, or attach a single
network. With network_mode: host and Murmur on the same host, the
default MA__ICE_CLIENT__HOST=127.0.0.1 is correct. Override it only
when Murmur runs on a different host; in that case ensure the ICE secret
is set and the callback port is firewalled from untrusted networks.
Configuration
Variables mirror the nested settings tree: uppercase each key, join nested
keys with __, prefix everything with MA__, and pass list values as a
single JSON array. For example, a raw ICE property:
MA__ICE_PROPERTIES__LINES='["Ice.ThreadPool.Server.Size = 5"]'
The most commonly set variables:
| Variable | Default | Description |
|---|---|---|
MA__ALLIANCE_AUTH__DATABASE__HOST |
127.0.0.1 |
Alliance Auth MariaDB host |
MA__ALLIANCE_AUTH__DATABASE__NAME |
alliance_auth |
Schema holding the Mumble tables |
MA__ALLIANCE_AUTH__DATABASE__USER |
alliance |
Database user |
MA__ALLIANCE_AUTH__DATABASE__PASSWORD |
— (required) | Database password |
MA__ICE_SERVER__HOST |
127.0.0.1 |
Murmur ICE Meta host |
MA__ICE_SERVER__PORT |
6502 |
Murmur ICE Meta port |
MA__ICE_SERVER__SECRET |
— (required) | Shared ICE secret; empty disables the check |
MA__ICE_CLIENT__SECRET |
— (required) | Callback secret; must match the server secret |
MA__ALLIANCE_AUTH__AVATAR__ENABLED |
true |
Serve EVE portraits as Mumble textures |
MA__IDLEHANDLER__ENABLED |
false |
Move idle (AFK) users to a parking channel |
MA__PROMETHEUS__ENABLED |
true |
Expose the Prometheus metrics endpoint |
Templink guest access is configured under MA__GUEST_LINK__*; it defaults
to the Alliance Auth database connection. YAML configuration files are no
longer accepted and cause an immediate startup error.
The name Mumble shows after login is configurable via
MA__BACKENDS__DISPLAY_NAME_FORMAT (and MA__BACKENDS__TEMP_DISPLAY_NAME_FORMAT
for guests), composed from Alliance Auth NameFormatter-compatible
placeholders such as {character_name}, {corp_ticker}, and {state},
plus operator-defined {group_tags} drawn from MA__BACKENDS__GROUP_TAGS.
Left unset, each backend keeps its previous naming. The full reference,
generated from the settings schema, is
example.env.
MA__BACKENDS__GROUP_TAGS keys must use the Mumble-ACL form of the
group name, not the human-readable one. The same group list is what the
authenticator hands Murmur for channel ACLs, and a Mumble group name cannot
contain a space, so Alliance Auth replaces spaces (and other non-word
characters) in group names with hyphens. An AA group Academy Fleetcom is
reported — and must be matched — as Academy-Fleetcom:
MA__BACKENDS__GROUP_TAGS: '{"Mumble-admin": "#ADM", "Academy-Fleetcom": "#FC", "Fleetcom": "#FC"}'
Matching is case-insensitive, but the hyphenation is not optional — a key
with a literal space never matches. To see the exact tokens a user carries,
read the groups the backend resolves (live auth_group names on
alliance_auth5, or the mumble_mumbleuser.groups snapshot on the legacy
alliance_auth backend).
Limitations
-
Platform:
linux/amd64, CPython 3.12 only (pinned by thezeroc-icewheel availability). -
Configuration: environment variables only — YAML and command-line configuration are rejected at startup.
-
Templinks: the temporary guest password is carried in the
mumble://URI in plaintext by design, so it cannot be stored hashed. Treat templinks as single-use, short-lived secrets. Seedocs/behavior-changes-v2.md. -
Alliance Auth 5 backend — do not run alongside the built-in AA5 authenticator: When using the
alliance_auth5backend, do not run Alliance Auth 5's own built-in Mumble authenticator against the same database simultaneously. Both processes write tocerthash,last_connect,last_disconnect,release, andversionon the same rows — running both creates a write race that corrupts session state. This authenticator is a replacement for the built-in one, not a supplement. Enable exactly one:# In Alliance Auth: disable the built-in authenticator in local.py # (remove 'mumble_authenticator' from INSTALLED_APPS or stop its worker). # In this authenticator: enable the AA5 backend. MA__BACKENDS__ENABLED='["alliance_auth5"]'
alliance_auth5is also exclusive withinMA__BACKENDS__ENABLED: startup fails when any other backend is listed alongside it, and anyMA__GUEST_LINK__*configuration is rejected. Templinks are served natively from the AA5mumble_tempusertable, so do not enableguest_link— that backend targets the legacymumbletemps_tempuserschema of the AA3/4 mumble-temps app.
Versioning
Semantic Versioning. A release X.Y.Z is published
simultaneously to PyPI (eveo7-mumble-authenticator==X.Y.Z) and Docker Hub
(docker.io/6run0/eveo7-mumble-authenticator:X.Y.Z); the Docker latest
tag tracks the newest release.
Documentation
example.env— full configuration reference.docs/architecture.md— architecture overview: composition root, layering, ICE dispatch pipeline.docs/ice-properties.md— ICE property assembly order and thread-pool tuning reference.docs/operator-runbook.md— capture sessions, baseline refreshes, snapshot workflow.docs/behavior-changes-v2.md— catalogue of observable behaviour contracts.CHANGELOG.md— release history.
License
GPL-3.0-or-later. A fork of the Alliance Auth Mumble authenticator, extended with EVE Online templink guest support and an env-only, protocol-based architecture.
Metadata
Release files for eveo7-mumble-authenticator 3.2.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 | Provenance | |
|---|---|---|---|---|
| eveo7_mumble_authenticator-3.2.1.tar.gz | 111.9 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| eveo7_mumble_authenticator-3.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 238.9 kB
Release files / eveo7_mumble_authenticator-3.2.1.tar.gz
| Download URL | eveo7_mumble_authenticator-3.2.1.tar.gz |
|---|---|
| Size | 111.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
96414b7ed7660f46910d8ee76452a6c76f7e518d15a3534f72bf8c8131e52da3
|
|
BLAKE2b-256 checksum How to use checksums |
6945a727a05778c4d1e200003b3b21dc4c7cda45c77b72a80a995502ec2adbd1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / eveo7_mumble_authenticator-3.2.1-py3-none-any.whl
| Download URL | eveo7_mumble_authenticator-3.2.1-py3-none-any.whl |
|---|---|
| Size | 127.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f36a803bcb93e5944b634839961decd3b38ccd1514e57432a61b3eae8819c19d
|
|
BLAKE2b-256 checksum How to use checksums |
35706c4bd2ee9d4d3bb7af2dcb211c9cfdcce8ed47163cffe4f4ca1c50a85088
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for eveo7-mumble-authenticator 3.2.1
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.