Bitween redesign: the new admin UI on the r10.0 line - #234
Conversation
Static SPA files out of wwwroot with a fallback to index.html, so the admin UI ships with the API instead of as a separate deployment.
The full React/Tailwind app: shell and navigation, the detail pages, entity pickers, the ported JSON mapper editor, and staged settings drafts. Runs on mock data here; each commit after this wires one area to the real backend and the mock is deleted once nothing needs it.
JWT bearer auth end to end, replacing the mock session: login, refresh, and a session context the route guards read.
Information types gain an optional Code and an auto-generated Id, falling back to the name when no code is set. Also fixes edit drafts going stale after a save on every detail page.
Work groups report a live consumer count from the bus. Includes fixes for "Used by" panels coming back empty, retry groups with no conditions matching nothing, and bus message names containing spaces breaking queue naming.
Covers the unified integrations page plus the API and bus gateways, and fixes mapping tokens that failed on keys with hyphens, spaces or leading digits.
Exchanges, scheduled retries, queue health and the dashboard. Schedules were computed and fired in different timezones; inputs now show the local-time translation beside UTC.
The mapper editor showed template text instead of evaluated JSON, and adapter pickers rendered "vundefined" for custom adapters. Also adds the Documents auto-id migration that SQL Server and MySQL were missing.
Permissions are owned by C# and resolved per request rather than from the JWT; built-in roles compute their grants at runtime. Members, invites and password resets are wired to the backend, and every handler is permission-checked.
A key/value table with a C#-owned catalog. Only settings that apply live are editable; the rest are shown as read-only environment values, or as set/not-set where the value shouldn't leave the server. Secrets are encrypted at rest.
|
| GitGuardian id | GitGuardian status | Secret | Commit | Filename | |
|---|---|---|---|---|---|
| 3998894 | Triggered | Generic Password | 62c5acc | SW.Bitween.Web/ClientApp/e2e/retry-policies.spec.ts | View secret |
| 3998894 | Triggered | Generic Password | 47ac99e | SW.Bitween.Web/ClientApp/e2e/exchanges.spec.ts | View secret |
| 3998894 | Triggered | Generic Password | 62c5acc | SW.Bitween.Web/ClientApp/e2e/global-values.spec.ts | View secret |
| 3998894 | Triggered | Generic Password | cae9079 | SW.Bitween.Web/ClientApp/e2e/information-types.spec.ts | View secret |
| 3998894 | Triggered | Generic Password | 47ac99e | SW.Bitween.Web/ClientApp/e2e/dashboard.spec.ts | View secret |
| 3998894 | Triggered | Generic Password | 5456b05 | SW.Bitween.Web/ClientApp/e2e/integrations.spec.ts | View secret |
| 3998894 | Triggered | Generic Password | 5456b05 | SW.Bitween.Web/ClientApp/e2e/gateways.spec.ts | View secret |
| 3998894 | Triggered | Generic Password | 62c5acc | SW.Bitween.Web/ClientApp/e2e/work-groups.spec.ts | View secret |
🛠 Guidelines to remediate hardcoded secrets
- Understand the implications of revoking this secret by investigating where it is used in your code.
- Replace and store your secrets safely. Learn here the best practices.
- Revoke and rotate these secrets.
- If possible, rewrite git history. Rewriting git history is not a trivial act. You might completely break other contributing developers' workflow and you risk accidentally deleting legitimate data.
To avoid such incidents in the future consider
- following these best practices for managing and storing secrets including API keys and other credentials
- install secret detection on pre-commit to catch secret before it leaves your machine and ease remediation.
🦉 GitGuardian detects secrets in your source code to help developers and security teams secure the modern development process. You are seeing this because you or someone else with access to this repository has authorized GitGuardian to scan your pull request.
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. 🗂️ Base branches to auto review (5)
Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository: simplify9/coderabbit/.coderabbit.yaml Review profile: ASSERTIVE Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
The redesigned Bitween admin UI, served by the backend, plus the backend work it needed. This opens the
r10.0line; the .NET 10 upgrade itself is a separate PR on top of this one, deliberately kept apart so a runtime failure can't be ambiguous between "new UI" and "new framework".How to read 357 files
The line count is dominated by generated and new-file content, not by changes to review:
SW.Bitween.Web/ClientApp— the new SPASW.Bitween.Api— the actual backend changeThe branch is 10 commits, one per area, each a coherent slice. Read it commit by commit, not file by file:
Each commit's tree is a state that really existed on the original branch, so this is bisectable — and every one of the ten was verified to build (C# and
tsc) before being pushed, not just the tip.Merge resolutions worth a look
releases/r10.0was merged into this branch so the conflicts are resolved here, in the open, rather than inside the merge commit that lands it. Three needed a decision:Accounts/Create.cs— r8'sDisableEmailPasswordLoginand this branch's RBAC rewrite both changed the same lines. Both kept: roles come fromRoleIds, and a Microsoft-only instance creates accounts with no password.RuleFor(i => i.Role).NotNull()was dropped, sinceRolebecame optional in favour ofRoleIds. Lands in commit 9.Subscriptions/Search.cs— merged without a conflict but did not compile:RetryPolicyIdwas added on both sides, so git kept both (CS1912). Deduped. Worth knowing that a clean auto-merge produced a broken tree here.SW.Bitween.Api.csproj— whitespace only.One regression the merge caused, fixed here
DisableEmailPasswordLogin(r8, #230) was enforced by the backend but unknown to the new sign-in page, which still offered a form theLoginhandler would reject. It's now a proper setting in the catalog, and the page hides the form when it's on — including the case where it's on with no MSAL configured, which would otherwise render an empty card.Verification
dotnet build SW.Bitween.slntsc -b/yarn lint/yarn buildThe Playwright failure is
exchanges.spec.ts:17— pre-existing data drift, where the fixture exchange has aged past page 1 of 25. It fails identically before this merge.Integration tests are Testcontainers-based and were compiled but not run (they need Docker).
Follow-up PRs, not in scope here
dotnet-version,major-version, and the hardcodedreleases/r8.0job gate, which currently makes everyreleases/r10.0push a no-op). Dependabot has already written part of it in chore(deps): bump dotnet/sdk from 8.0 to 10.0 #197 and chore(deps): bump dotnet/aspnet from 8.0 to 10.0 #199, both aimed atreleases/r8.0where they'd break the image — retarget rather than redo. Bump Npgsql.EntityFrameworkCore.PostgreSQL from 8.0.11 to 9.0.4 #220 and Bump Pomelo.EntityFrameworkCore.MySql from 8.0.3 to 9.0.0 #221 (EF 9 providers) are in the same boat..github/dependabot.ymlhardcodestarget-branch: releases/r8.0in all three ecosystems, so Dependabot will never seereleases/r10.0.🤖 Generated with Claude Code