Skip to content

fix(daemon): base64 encode encrypted track data for JSON transport#139

Merged
AnnatarHe merged 1 commit intomainfrom
fix/encrypted-mode-base64-encoding
Dec 12, 2025
Merged

fix(daemon): base64 encode encrypted track data for JSON transport#139
AnnatarHe merged 1 commit intomainfrom
fix/encrypted-mode-base64-encoding

Conversation

@AnnatarHe
Copy link
Copy Markdown
Contributor

Summary

  • Fix encrypted mode failing when using JSON transport in the track API
  • Add base64 encoding for Encrypted, AesKey, and Nonce fields before sending to server

Root Cause

Raw binary ciphertext was being stored as strings and JSON-serialized, causing data corruption due to invalid UTF-8 sequences being replaced with \ufffd.

Changes

  • daemon/handlers.sync.go: Base64 encode encryptedData, encodedKey, and nonce before storing in PostTrackArgs

Related PR

  • Server PR: shelltime/server (deploy together)

Test plan

  • Deploy server and CLI together (both need to be updated)
  • Test encrypted mode with JSON content-type
  • Test encrypted mode with msgpack content-type
  • Verify unencrypted mode still works

🤖 Generated with Claude Code

Raw binary ciphertext was being stored as strings and JSON-serialized,
causing data corruption due to invalid UTF-8 sequences. This fix adds
base64 encoding for the Encrypted, AesKey, and Nonce fields before
sending to the server.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@gemini-code-assist
Copy link
Copy Markdown
Contributor

Summary of Changes

Hello @AnnatarHe, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request provides a crucial fix for the daemon's track API, specifically addressing data corruption that occurred when encrypted information was transmitted using JSON. The core problem stemmed from binary ciphertext being improperly serialized as strings, leading to invalid UTF-8 characters. By introducing base64 encoding for the encrypted payload, AES key, and nonce, the changes ensure that binary data is safely converted to a text-based format suitable for JSON transport, thereby preventing data loss and enabling the reliable operation of encrypted tracking.

Highlights

  • Fix Encrypted Mode with JSON Transport: Resolved an issue where the encrypted mode of the track API failed when using JSON transport, ensuring reliable data transmission.
  • Base64 Encoding for Encrypted Fields: Implemented base64 encoding for the Encrypted data, AesKey, and Nonce fields before they are sent to the server, preventing data corruption.
  • Root Cause Addressed: The fix addresses data corruption caused by raw binary ciphertext being stored as strings and JSON-serialized, which led to invalid UTF-8 sequences being replaced.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request correctly addresses a data corruption issue by base64-encoding encrypted binary data before JSON serialization. The changes are correct and effectively fix the bug. While reviewing, I noticed that some error handling paths in the surrounding encryption logic could be improved to prevent potential panics or sending invalid data. Since those are outside the scope of this PR's changes, I recommend addressing them in a follow-up to enhance the overall robustness of the feature.

@codecov
Copy link
Copy Markdown

codecov Bot commented Dec 12, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.

Flag Coverage Δ
unittests 23.48% <100.00%> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
daemon/handlers.sync.go 64.40% <100.00%> (+0.65%) ⬆️

... and 64 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@AnnatarHe AnnatarHe merged commit 4c85b8b into main Dec 12, 2025
4 checks passed
@AnnatarHe AnnatarHe deleted the fix/encrypted-mode-base64-encoding branch December 12, 2025 17:48
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