Authentication¶
Certificate-based authentication decorators and helpers.
CertificateIdentity¶
Represents a user identity based on their client certificate.
CertificateIdentity
dataclass
¶
Represents a user identity based on their client certificate.
Example
identity = get_identity(request) if identity: print(f"User: {identity.short_id}")
Helper Functions¶
get_identity¶
get_identity
¶
Get the certificate-based identity from a request.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
request
|
'Request'
|
The current request. |
required |
Returns:
| Type | Description |
|---|---|
CertificateIdentity | None
|
CertificateIdentity if a client certificate was provided, None otherwise. |
Example
@app.gemini("/whoami") def whoami(request: Request): identity = get_identity(request) if identity: return f"# Your ID: {identity.short_id}" return "# You are anonymous"
Source code in src/xitzin/auth.py
Decorators¶
require_certificate¶
require_certificate
¶
Decorator that requires a valid client certificate.
If no certificate is provided, returns status 60 (certificate required).
Example
@app.gemini("/admin") @require_certificate def admin_panel(request: Request): return "# Admin Panel"
Source code in src/xitzin/auth.py
require_fingerprint¶
require_fingerprint
¶
require_fingerprint(
*allowed_fingerprints: str,
) -> Callable[[Callable[..., Any]], Callable[..., Any]]
Decorator factory that requires specific certificate fingerprints.
If the client certificate fingerprint is not in the allowed list, returns status 61 (certificate not authorized).
Uses timing-safe comparison to prevent fingerprint enumeration attacks.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
*allowed_fingerprints
|
str
|
SHA-256 fingerprints that are allowed. |
()
|
Example
ADMIN_CERTS = [ "abc123...", # Alice's certificate "def456...", # Bob's certificate ]
@app.gemini("/admin") @require_fingerprint(*ADMIN_CERTS) def admin_panel(request: Request): return "# Admin Panel"
Source code in src/xitzin/auth.py
optional_certificate¶
optional_certificate
¶
Decorator that makes certificate identity available but not required.
Sets request.state.identity to CertificateIdentity or None.
Example
@app.gemini("/profile") @optional_certificate def profile(request: Request): identity = request.state.identity if identity: return f"# Welcome back, {identity.short_id}" return "# Welcome, anonymous visitor"