fabro/lib/crates
Bryan Helmkamp 75f8ed845b
fix(install): harden web wizard against review findings
Tighten the browser-based install flow after correctness and adversarial
review, without changing the external wizard shape.

- Persist the actual bind in server.listen, not the canonical URL
- Reject concurrent /install/finish and rapid GitHub App retries
- Keep the prior GitHub Token strategy until App callback succeeds
- Recover from poisoned install locks instead of propagating panics
- Rollback both settings and vault on failed persistence
- Redirect GitHub callback errors back into the wizard UI
- Validate LLM keys via /models probe instead of a billed generate()
- Reject canonical URLs with trailing slash, path, query, or fragment
- Accept any valid install-token source, not just the first present one
- Redact the install token in structured logs
- Assert install-mode SPA marker injection at startup
- Warn on suspected concurrent operators via UA + X-Forwarded-For
- Add component-level test for the GitHub callback error banner

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19 12:43:00 -04:00
..
fabro-agent ci: switch clippy to pinned nightly, clean up workspace lints 2026-04-16 18:59:11 -04:00
fabro-api refactor(http): centralize reqwest behind fabro-http 2026-04-12 11:48:54 -04:00
fabro-auth feat(install): add browser-based setup flow 2026-04-19 11:20:58 -04:00
fabro-checkpoint refactor(async): lint std::process::Command across all targets 2026-04-12 13:35:57 -04:00
fabro-cli fix(install): harden web wizard against review findings 2026-04-19 12:43:00 -04:00
fabro-config refactor(server): simplify IP allowlist parsing and expansion 2026-04-19 09:47:22 -04:00
fabro-core ci: switch clippy to pinned nightly, clean up workspace lints 2026-04-16 18:59:11 -04:00
fabro-devcontainer fix: wrap propagated io errors with anyhow context across prod code 2026-04-17 11:44:38 -04:00
fabro-github Merge remote-tracking branch 'origin/main' 2026-04-12 13:43:38 -04:00
fabro-graphviz ci: switch clippy to pinned nightly, clean up workspace lints 2026-04-16 18:59:11 -04:00
fabro-hooks fix: simplify fabro-http crate and fix correctness issues 2026-04-12 12:20:55 -04:00
fabro-http feat(install): add browser-based setup flow 2026-04-19 11:20:58 -04:00
fabro-install fix(install): harden web wizard against review findings 2026-04-19 12:43:00 -04:00
fabro-interview fix: wrap propagated io errors with anyhow context across prod code 2026-04-17 11:44:38 -04:00
fabro-llm fix(llm): send Gemini API key via x-goog-api-key header 2026-04-18 04:32:23 -04:00
fabro-macros refactor(settings): stage 6.3b shrink server runtime types + delete Combine 2026-04-09 18:27:46 -04:00
fabro-mcp fix: simplify fabro-http crate and fix correctness issues 2026-04-12 12:20:55 -04:00
fabro-model wip 2026-04-16 13:13:09 -04:00
fabro-oauth Add typed provider credential auth flow 2026-04-12 22:10:11 -04:00
fabro-proc fmt: apply nightly rustfmt after merge 2026-04-11 13:43:30 -04:00
fabro-retro ci: switch clippy to pinned nightly, clean up workspace lints 2026-04-16 18:59:11 -04:00
fabro-sandbox deps: bump rand 0.8 → 0.9 (#163) 2026-04-17 07:57:10 -04:00
fabro-server fix(install): harden web wizard against review findings 2026-04-19 12:43:00 -04:00
fabro-slack refactor(http): centralize reqwest behind fabro-http 2026-04-12 11:48:54 -04:00
fabro-spa feat(install): add browser-based setup flow 2026-04-19 11:20:58 -04:00
fabro-store ci: switch clippy to pinned nightly, clean up workspace lints 2026-04-16 18:59:11 -04:00
fabro-telemetry fix: wrap propagated io errors with anyhow context across prod code 2026-04-17 11:44:38 -04:00
fabro-template refactor(async): lint std::process::Command across all targets 2026-04-12 13:35:57 -04:00
fabro-test feat(install): add browser-based setup flow 2026-04-19 11:20:58 -04:00
fabro-tracker refactor(http): centralize reqwest behind fabro-http 2026-04-12 11:48:54 -04:00
fabro-types feat(server): add IP allowlist middleware with GitHub webhook support 2026-04-19 09:47:22 -04:00
fabro-util feat(install): add browser-based setup flow 2026-04-19 11:20:58 -04:00
fabro-validate fmt: apply nightly rustfmt after merge 2026-04-11 13:43:30 -04:00
fabro-vault fix: wrap propagated io errors with anyhow context across prod code 2026-04-17 11:44:38 -04:00
fabro-workflow test(harness): flush workflow store events before returning 2026-04-18 09:44:54 -04:00