agentbbs/internal
Anthony Ettinger eb8ef546cf
files: provision-user CLI + anonymous public HTTP serving (#58)
* feat(files): provision-user CLI + anonymous public HTTP serving

Lets external services (the TronBrowser extension store) host files on
files.profullstack.com without the interactive `ssh join@` onboarding.

- `agentbbs provision-user --name <h> --pubkey "<ssh key>"`: registers a member
  from an SSH *public* key (account = handle + key fingerprint). Reuses
  SanitizeUsername (same rules as join@) + EnsureUser; Files/SFTP access is free
  for members, so the account can immediately
  `scp … files@host:/public/extensions/<slug>/`. JSON output; refuses on key/
  handle collision. New auth.FingerprintAuthorizedKey() parses an
  authorized_keys line to the same SHA256 fp as a live session key (tested).
- setup.sh: the files.<host> Caddy site now serves the shared /public area as
  unauthenticated, read-only static files (handle_path /public/*), so .crx/.zip
  download links work for anyone — mapping 1:1 to the SFTP path. Non-/public
  paths still hit the auth'd web file manager.
- docs/files.md updated.

Note: not compiled here — repo go.mod requires go 1.26 and this sandbox has
1.22.2; changes pass gofmt parse/format checks. Reuses existing store/auth APIs.

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

* fix(vet): redundant newline in wish.Println premium-flow messages

`go test ./...` / `go vet ./...` fail on `wish.Println(… "…\n")` — Println
already appends a newline. Pre-existing on main (its CI is red for the same two
lines); surfaced here. Switched both to `wish.Print` with an explicit trailing
"\n\n" so output bytes are unchanged and vet is satisfied.

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

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 11:37:45 -07:00
..
admin Fix/pod public html bind mount (#30) 2026-06-15 08:06:32 -07:00
ascii
auth files: provision-user CLI + anonymous public HTTP serving (#58) 2026-06-25 11:37:45 -07:00
brand Use the Profullstack </> ASCII logo as the BBS banner 2026-06-14 16:46:59 +00:00
calls
chat
files feat(files): web file browser at files.<host> with webmail-password login 2026-06-23 14:09:18 +00:00
forgejo Merge branch 'feat/files-sftp' into feat/notify-creds 2026-06-23 10:46:00 +00:00
forwardemail
games
hub Fix/pod public html bind mount (#30) 2026-06-15 08:06:32 -07:00
mail
mailbox fix(mailbox): verify SMTP STARTTLS against the mail host, not the dial IP 2026-06-23 15:54:30 +00:00
mailu Feat/mail all members (#55) 2026-06-23 03:38:31 -07:00
motd Wire shared MOTD into BBS hub and IRC 2026-06-25 11:51:06 +00:00
news fix: reject malformed NNTP OVER ranges instead of returning all articles (#48) 2026-06-22 05:22:58 -07:00
payments Rebrand paid tier to $99 Founding Lifetime Member 2026-06-14 12:46:23 +00:00
plugin fix(arcade): give ncurses games a TERM so they launch 2026-06-18 12:01:26 +00:00
pods feat(pods): SSH agent forwarding → git push from the pod with your key 2026-06-23 09:16:29 +00:00
qryptinvite Fix flaky TestTamperedTokenFails in qryptinvite 2026-06-14 17:05:30 +00:00
sandbox
sites
source fix: block shared/reserved IP ranges in SSRF guard (#47) 2026-06-22 05:23:15 -07:00
store Merge remote-tracking branch 'origin/main' into feat/files-sftp 2026-06-23 10:42:32 +00:00
tor
ui Fix/pod public html bind mount (#30) 2026-06-15 08:06:32 -07:00