Initial commit

This commit is contained in:
nemunaire 2026-04-21 21:47:58 +07:00
commit 2c2fb07129
18 changed files with 2504 additions and 0 deletions

73
README.md Normal file
View file

@ -0,0 +1,73 @@
# checker-xmpp
XMPP server checker for [happyDomain](https://www.happydomain.org/).
Probes a domain's XMPP deployment the same way
[xmpp.net](https://xmpp.net/) does: SRV discovery, stream negotiation,
STARTTLS, SASL mechanisms, federation auth (dialback / SASL EXTERNAL),
and XEP-0368 direct-TLS. Produces an actionable HTML report with a
remediation panel surfacing the most common real-world failures.
TLS certificate chain / SAN / expiry / cipher posture is **out of scope**
— a dedicated TLS checker handles that. This checker only confirms that
STARTTLS completes and records the negotiated TLS version/cipher for
context.
When a TLS checker runs against the endpoints we publish via
`EndpointDiscoverer`, its observations are automatically folded into our
rule aggregation and HTML report via the SDK's `GetRelated` /
`CheckerHTMLReporterCtx` composition path — so a bad cert on an XMPP
endpoint shows up on the XMPP service page, not only in a separate TLS
view. The expected observation key is `tls_probes`.
## What it checks
For each of `_xmpp-client._tcp`, `_xmpp-server._tcp`,
`_xmpps-client._tcp`, `_xmpps-server._tcp` (and legacy `_jabber._tcp`):
1. SRV and A/AAAA resolution.
2. TCP reachability.
3. `<stream:stream>` open, stream features parsing.
4. STARTTLS advertised (and `<required/>`).
5. STARTTLS handshake success.
6. Post-TLS SASL mechanism list (flags PLAIN-only, missing SCRAM).
7. Server-to-server dialback / SASL EXTERNAL availability.
8. XEP-0368 direct TLS (`_xmpps-*`) when published.
9. IPv4 / IPv6 coverage.
10. Fallback probe on `<domain>:5222`/`:5269` when no SRV is published.
## Usage
### Standalone HTTP server
```bash
make
./checker-xmpp -listen :8080
```
### Docker
```bash
make docker
docker run -p 8080:8080 happydomain/checker-xmpp
```
### happyDomain plugin
```bash
make plugin
```
## Options
| Scope | Id | Description |
| ----- | ---------- | ----------------------------------------------------------- |
| Run | `domain` | Domain to test (auto-filled from the service) |
| Run | `mode` | `c2s`, `s2s`, or `both` (default) |
| Run | `timeout` | Per-endpoint timeout in seconds (default `10`) |
Applies to services of type `abstract.XMPP`.
## License
MIT (see `LICENSE`). Third-party attributions in `NOTICE`.