Skip to content

feat(irc): gate IRC on the BBS user store; remove ssh irc@; external clients only#15

Merged
ralyodio merged 1 commit into
mainfrom
feat/irc-store-auth
Jun 15, 2026
Merged

feat(irc): gate IRC on the BBS user store; remove ssh irc@; external clients only#15
ralyodio merged 1 commit into
mainfrom
feat/irc-store-auth

Conversation

@ralyodio

Copy link
Copy Markdown
Contributor

Reworks the IRC access model to the agreed design: the bbs.profullstack.com user store is the single user-level source of truth. Supersedes #13.

Changes

  • Auth via the store, not OS users. New loopback endpoint /irc-auth?account=<name> (served on the /verify server) returns {member,premium} from the store (UserByName). Ergo's auth-script curls it instead of getent passwd. The OS-user (tilde.town) useradd reconcile in setup.sh is reverted. require-sasl on, registration off.
  • ssh irc@ removed. Deleted internal/irc (in-process client + TUI), handleIRC/runIRC, the hub IRC menu entry, and the dispatch case. Members use an external client (or web) at irc.profullstack.com:6697 / wss://…/irc. IRCNames kept only to reserve the name.
  • External clients kept; irc.profullstack.com hostname + cert work retained.

Premium channels — not yet enforced

/irc-auth already returns each account's premium, but creation-gating isn't wired (the old irc@ /create went away with the route, and Ergo can't gate creation per-account natively). operator-only-creation stays off; the planned server-side mechanism (a ChanServ-style bot keyed on premium) is a documented follow-up.

Verified locally

  • bash -n + gofmt clean; rendered ircd.yaml parses (auth-script.args=[<url>]).
  • auth-script against a mock store endpoint: members→success, non-member→deny, bad-chars/no-account→deny, fail-closed on curl error.
  • Go not built locally (no go1.26 toolchain) — relying on this PR's CI.

🤖 Generated with Claude Code

Rework the IRC access model to the user-level source of truth — the
bbs.profullstack.com user store — per the agreed design:

- Auth via the store, not OS users. New loopback endpoint /irc-auth (on the
  /verify server) answers {member,premium} from the store via UserByName. Ergo's
  auth-script now curls it instead of `getent passwd`; the OS-user (tilde.town)
  reconcile in setup.sh is reverted. require-sasl on, registration off.
- Remove the in-BBS `ssh irc@` route: delete internal/irc (in-process client +
  TUI), handleIRC/runIRC, the hub IRC menu entry, and the dispatch case. Members
  connect with an external client (or web) at irc.profullstack.com:6697 / wss.
  IRCNames kept only to reserve the "irc" name (IsIRCName removed).
- Keep external clients; keep the irc.profullstack.com hostname + cert work.

Premium channel creation: /irc-auth already returns each account's premium
status, but enforcement is NOT yet wired (the old irc@ /create was removed with
the route; Ergo can't gate creation per-account natively). operator-only-creation
stays off for now; server-side premium gating (a ChanServ-style bot) is a
documented follow-up. See docs/irc.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

vu1nz Security Review

0 finding(s) in PR #?

No security issues found.

@ralyodio
ralyodio merged commit 336ff00 into main Jun 15, 2026
5 checks passed
@ralyodio
ralyodio deleted the feat/irc-store-auth branch June 15, 2026 03:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant