feat(s3): add S3-compatible object storage connections - #6582
Conversation
🌐 I18n autofill completed✅ Added translations for 33 new
|
c8e82cb to
8305aee
Compare
t8y2
left a comment
There was a problem hiding this comment.
I'm requesting changes for now. Three issues need fixing before this is safe to merge:
-
ConnectionDialog.vuestores the temporary S3 session token inexternal_config. The existing persistence, no-save-password, and cloud-sync scrubbers do not treat this field as a secret, so it can remain in plaintext configuration and shared runtime state. Please move it through the same secret-store/session-isolation lifecycle as the secret access key. -
sigv4.rspasses the already escapedUrl::path()throughpercent_encode_pathagain. Keys containing spaces, Unicode,%,?, or similar characters are therefore signed with%25escapes that differ from the transmitted path, causingSignatureDoesNotMatch. Canonicalize the raw key exactly once and add path-style and virtual-hosted regression tests with special-character keys.The
urlcrate documents thatUrl::set_pathpercent-encodes its input, while AWS SigV4 requires the canonical URI to match the transmitted absolute path: https://docs.rs/url/2.5.8/url/struct.Url.html#method.set_path and https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv-create-signed-request.html -
S3Browser.vuealways requests 200 entries with a null continuation token and ignoresisTruncated/nextContinuationToken, so larger folders silently hide every later object and common prefix. Add load-more or bounded page accumulation with a 201+ object/prefix test. AWS documents that truncatedListObjectsV2results must continue withNextContinuationToken: https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html#AmazonS3-ListObjectsV2-response-NextContinuationToken
GitHub also currently reports this head as conflicting, while the main CI workflow stopped at action_required without running any jobs.
Introduce a native SigV4 S3 client with bucket browser UI for MinIO and AWS, unifying desktop and web on PoolKind::S3 and fixing query-string signing for list-objects delimiters plus Range header support for previews. Co-authored-by: Cursor <cursoragent@cursor.com>
Move temporary S3 session tokens through the existing secret lifecycle, fix SigV4 path handling, and finish the S3 browser with pagination plus bucket/object management flows so the connector is safe and review-ready. Co-authored-by: Cursor <cursoragent@cursor.com>
8305aee to
abf0e6c
Compare
|
Thanks for the detailed review and for calling out the risky parts so precisely. I’ve addressed the requested changes in the latest head:
Also took the opportunity to finish the missing object-browser workflows in the same pass: bucket delete, folder/prefix creation, download, and copy/move/rename operations. Thanks again for the careful review. |
Fill the new S3 browser strings in secondary locales so the autofill check no longer depends on a partial machine-translation response. Co-authored-by: Cursor <cursoragent@cursor.com>
Summary
main, and expanding targeted test coverage.What’s Included
dbx-core,dbx-web, and Tauri commands.ListObjectsV2browsing withNextContinuationTokensave_password = false.%, and?in keys.Test Plan
cargo test -p dbx-core s3:: --libcargo test -p dbx-core session_credentials::tests --libpnpm typecheckpnpm vitest run apps/desktop/src/components/s3/__tests__/S3Browser.spec.tsNotes For Review
mainand the previous merge conflict state is resolved.