Verifiers are services that check real-world claims and issue cryptographic credentials. freeq's policy system uses these credentials to gate channel access.
The GitHub verifier checks organization membership and repository access via GitHub OAuth.
Set the GitHub OAuth App client ID and secret in the server environment:
GITHUB_CLIENT_ID=Iv23li...
GITHUB_CLIENT_SECRET=...
github:org:<name> — Is the user a member of this GitHub org?github:repo:<owner/repo> — Is the user a collaborator on this repo?The simplest verifier: user reads the channel rules and clicks "I accept."
accept-rulesPOLICY #channel SET RULES <markdown>User → JOIN #channel
→ Server checks policy
→ Missing credential? Redirect to verifier
→ Verifier checks claim (GitHub, etc.)
→ Issues signed credential (JWT-like, ed25519)
→ Credential stored in policy DB
→ User can now join
{
"iss": "did:web:irc.freeq.at:verify",
"sub": "did:plc:user123",
"type": "github:org:mycompany",
"iat": 1709000000,
"exp": 1709604800
}
Signed with the verifier's ed25519 key. Credentials have a TTL and are automatically revalidated.
A verifier is any service that:
The server's verifier endpoint is at /.well-known/did.json for DID resolution. Custom verifiers can be added by implementing the credential issuance API.