Stop handing the database's own error text to whoever is signing in

FixSecurityService
Shipped
September 5, 2026 at 6:53 PM UTC
Author
Kamo
Commit
24ee442

The catch-all at the end of login() put e.getMessage() in the response body, and that body is rendered verbatim on the sign-in screen. On 2026-09-05 the exception arriving there was a Yugabyte catalog-version conflict, so what a member saw was Hibernate's generated SELECT: every column of depts, orgs and org_mtg, the shape of the joins between them, and the internal table id — a schema dump handed to someone who is by definition not signed in yet. Nothing is lost by withholding it. The type, the message and the full stack trace are already logged immediately above, which is where a failure at this layer gets diagnosed from; the person typing a password can do nothing with a SQL statement. The wording matches kamo-login's own fallback for this case, so the screen reads the same whether the message came from here or the browser never got one. This is the second half of the fix for that report, not the fix itself: the conflict that caused it is now retried in MemberRightsAppliedService. This is what the screen shows if a failure gets past the retry anyway, and it is also what it will show for every other exception that ends up here. Leaves the same pattern in logout, /validate and the session-refresh endpoint alone; none of them appeared in the report and each deserves its own look. Compiles clean; no test asserted the old message.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing