---
tags:
  - service
  - josiedot
  - irc-now
domain: txt.irc.now
status: active
stack:
  - Rust
  - Axum
  - Keycloak OIDC
  - PostgreSQL
auth: Keycloak
---
# irc.now Pastebin (txt.irc.now)

Authenticated pastebin for irc.now users. Supports anonymous viewing, authenticated creation.

## URLs
- https://txt.irc.now

## Stack
- Rust (Axum 0.8, openid 0.23, tower-sessions, askama 0.15)
- PostgreSQL via CNPG (paste-db)
- nanoid for paste IDs

## Auth
Keycloak OIDC via `irc-now` realm, client `paste`.
- Session: tower-sessions MemoryStore, SameSite::Lax

## Routes
- /auth/login, /auth/callback, /auth/logout
- / (GET: create page, POST: create paste)
- /my (user's pastes)
- /{id} (view), /{id}/raw (raw text), /{id}/delete (POST)

## Limits
- Free: 5 pastes, 24h expiry
- Pro + content_expires=true: unlimited pastes, 90-day expiry
- Pro + content_expires=false: unlimited pastes, no expiry
- Hourly cleanup task deletes expired pastes
- Plan and content_expires extracted from Keycloak ID token JWT custom claims

## Deployment
- OCP namespace: irc-josie-cloud
- Build: `oc start-build paste --from-archive` (rust:1.88 -> ubi9-minimal)
- Containerfile: crates/txt/Containerfile
- Resources: 64Mi/256Mi memory, 50m/500m cpu
- TLS: cert-manager Certificate CR -> externalCertificate on Route
- Certificate: txt-irc-now-tls
- Env from secrets: paste-db-app, oidc-paste

## Source
- Repo: ~/development/irc-now
- Crate: `crates/txt/`

## Related
- [[irc-now-portal]]
- [[irc-now-pics]]
