Conversation
There was a problem hiding this comment.
Pull request overview
This pull request adds Dropbox integration as a new sync adapter for the floccus bookmarks sync extension. The implementation follows the established pattern of the existing Google Drive adapter, providing OAuth authentication, file operations (create, upload, download, delete), custom file locking mechanism using Dropbox file properties, and end-to-end encryption support.
Changes:
- Adds a new Dropbox adapter (
src/lib/adapters/Dropbox.ts) with OAuth2 authentication, file operations, and locking mechanism using custom file properties/templates - Adds UI components for Dropbox account setup and configuration (
OptionsDropbox.vue) - Integrates Dropbox option into existing views (NewAccount.vue, AccountOptions.vue, Options.vue, AddBookmarkIntent.vue, Drawer.vue)
- Adds error handling classes specific to Dropbox (DropboxAuthenticationError, DropboxOAuthTokenError, DropboxSearchError, DropboxTemplateError)
- Adds test coverage for both encrypted and non-encrypted Dropbox configurations
- Updates documentation (README, Android metadata) and localization strings
- Adds Dropbox API credentials file and updates build configuration
Reviewed changes
Copilot reviewed 21 out of 21 changed files in this pull request and generated 15 comments.
Show a summary per file
| File | Description |
|---|---|
| src/lib/adapters/Dropbox.ts | New Dropbox adapter implementation with OAuth, file operations, encryption, and custom locking mechanism |
| src/ui/components/OptionsDropbox.vue | New Vue component for Dropbox account configuration options |
| src/ui/views/NewAccount.vue | Added Dropbox adapter selection and setup flow |
| src/ui/views/AccountOptions.vue | Integrated OptionsDropbox component for account management |
| src/ui/views/native/Options.vue | Added OptionsDropbox for native mobile options |
| src/ui/views/native/AddBookmarkIntent.vue | Added Dropbox icon mapping |
| src/ui/components/native/Drawer.vue | Added Dropbox icon to navigation drawer |
| src/lib/Account.ts | Registered Dropbox adapter in adapter factory |
| src/errors/Error.ts | Renamed GoogleOAuthTokenError and added Dropbox-specific error classes |
| src/test/test.js | Added test cleanup logic for Dropbox and test accounts |
| test/selenium-runner.js | Added Dropbox refresh token environment variable handling |
| .github/workflows/tests.yml | Added Dropbox and Dropbox-encrypted test configurations |
| dropbox-api.credentials.json | New file with Dropbox OAuth credentials for web, Android, and iOS |
| android/app/src/main/AndroidManifest.xml | Added Dropbox OAuth redirect URI intent filter |
| _locales/en/messages.json | Added Dropbox error messages and UI strings |
| README.md | Updated feature list to mention Dropbox support |
| fastlane/metadata/android/en-US/full_description.txt | Updated app description to include Dropbox |
| .github/ISSUE_TEMPLATE/bug_report.yml | Added Dropbox to adapter selection dropdown |
| gulpfile.js | Added error handling for Dropbox credentials file |
| manifest.firefox.json | Removed deprecated chrome_style property from browser_action |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
Looks really good, apart from the above comments :) I will try setting up my own OAuth client soon and test this. |
Dropbox App Registration1. Open Dropbox Developer ConsoleGo to https://www.dropbox.com/developers/apps Login using Dropbox account 2. Create appClick on button Create app 3. Choose API TypeSelect Scoped access 4. Choose App TypePick one based on your use case:
For Floccus: Use Full Dropbox since we are trying to access root of the Dropbox 5. Name Your App
Click Create app 6. App Dashboard OverviewOnce created, you’ll land on the App Settings page, where you’ll find:
Note: Never expose App Secret in front-end code, Keep a note of these details as it needs to be produced in 7. Set branding
8. Set Redirect URIs (OAuth)Scroll to OAuth 2 → Redirect URIs Add:
Must exactly match what you use in OAuth code. Click Add after each URI. 9. Enable Refresh TokensStill in OAuth 2 section: Allow public clients (implicit grant & PKCE) → Allow 10. Set Permissions (Scopes)Go to Permissions tab. Common scopes (select only what you need):
Click Submit after changing scopes. Note: Scope changes invalidate existing tokens. 11. Apply for production (Development vs Production)
For public release:
|
…fyAccountData Signed-off-by: Marcel Klehr <mklehr@gmx.net>
|
Hey @aaryanvangari |
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
Signed-off-by: Marcel Klehr <mklehr@gmx.net>
|
I'm on it |
|
opened a new PR myself, so that CI doesn't fail due to security measures. |
Web
Screenshots
Test Cases
Screenshots
Android
Screenshots
iPhone 13 Mini (iOS)
Screenshots