Skip to content

Harden protocol, authentication, and session lifecycle#29

Merged
krotname merged 2 commits into
mainfrom
agent/full-repository-hardening
Jul 14, 2026
Merged

Harden protocol, authentication, and session lifecycle#29
krotname merged 2 commits into
mainfrom
agent/full-repository-hardening

Conversation

@krotname

Copy link
Copy Markdown
Owner

Summary

  • bound and strictly validate UTF-8 protocol frames, handshake deadlines, message metadata, and client/server lifecycle state
  • harden authentication, TLS, storage paths, atomic history persistence, legacy account migration, and server concurrency cleanup
  • fix GUI deduplication/export edge cases and make release SBOM/provenance tasks Gradle 10 compatible
  • expand unit, integration, concurrency, security, and UI coverage

Validation

  • clean check jacocoAllReport releaseBundle --offline --no-daemon --warning-mode all
  • 92 tests, 0 failures or skips
  • JaCoCo: 80.61% lines, 66.88% branches
  • Checkstyle, Spotless, SpotBugs (main/test/integration/UI), release bundle: passed

Compatibility

  • newly generated account rows use an explicit pbkdf2-sha256$210000$ marker
  • canonical legacy SHA-256 rows remain usable for migration and should be rotated with createAccount

@sonarqubecloud

Copy link
Copy Markdown

@krotname krotname marked this pull request as ready for review July 14, 2026 10:58
@krotname krotname merged commit a85c8a2 into main Jul 14, 2026
8 checks passed
@krotname krotname deleted the agent/full-repository-hardening branch July 14, 2026 11:03

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d510a2d74e

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

}
closeConnection(expectedConnection);
try {
broadcast(ChatMessage.withData(MessageType.USER_REMOVED, userName, null), null);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Avoid broadcasting while holding the session lock

When a user disconnects while any remaining client is slow or not reading, this broadcast(...) can block indefinitely in ChatConnection.send() while sessionsMonitor is still held. That lock is also needed by new handshakes before adding a session, so one stuck USER_REMOVED delivery can stall other users from logging in or being cleaned up; copy the recipients under the lock, then close/broadcast outside it.

Useful? React with 👍 / 👎.

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