feat: gdrive export ui integration#5252
Open
Sentiaus wants to merge 6 commits into
Open
Conversation
… DB schema - Add user_oauth_token table to store encrypted OAuth refresh tokens per provider - Add TokenEncryptionService using jose4j AES-256-GCM for encrypting auth blobs - Add AuthConfig.encryptionSecretKey reading from auth.encryption.256-bit-secret - Add GoogleDriveAuthResource with /connect, /callback, and /token endpoints - Add GoogleAuthResource config endpoint exposing client ID and redirect URI - Add DriveTokenIssueResponse and GoogleAuthConfigResponse HTTP models - Wire GoogleDriveAuthResource into TexeraWebApplication and GuestAuthFilter - Add google.client-id, client-secret, and app-domain to UserSystemConfig - Update k8s values with new config keys Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…nd error case Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…rive - Add DriveService to manage Drive token retrieval, OAuth connection, and file export - Add GoogleDriveConnectComponent as the OAuth callback landing page - Add /gdrive-connect route to the app router - Inject gapi and Google Identity Services scripts into index.html Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…pace menu - Add Drive export action to list-item component (workflows and datasets) - Add Drive export buttons to dataset-detail download section - Add Drive export to workspace menu download button - Subscribe to DriveService.onConnected to update connection state and show toast - Add unit tests for all three UI surfaces Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #5252 +/- ##
============================================
- Coverage 48.95% 48.95% -0.01%
Complexity 2377 2377
============================================
Files 1048 1048
Lines 40270 40264 -6
Branches 4272 4272
============================================
- Hits 19714 19710 -4
+ Misses 19402 19400 -2
Partials 1154 1154
*This pull request uses carry forward flags. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changes were proposed in this PR?
Wires the Drive export action into the three UI surfaces where download is currently available. The download button in each location has been converted to a dropdown with "Download" and "Export to Drive" (or "Connect to Drive" when not connected) options:
list-item.component) — for workflows and datasetsdataset-detail.component) — separate dropdowns for per-version ZIP download and per-file downloadmenu.component) — for the workflow JSON export buttonAll three surfaces:
DriveService.getToken()on init to set initial connection stateDriveService.onConnected()to update state live and show a "Google Drive connected" toast when the OAuth flow completes in the popupconnect()(orconnect(true)oninvalid_grant) when the user clicks "Connect to Drive" while not connectedAny related issues, documentation, discussions?
Closes #4240
How was this PR tested?
Unit tests added for all three components:
list-item.component.spec.ts—Drive integrationdescribe block: token status setsisDriveConnected,onConnectedemission updates state and shows toast,connect()called when not connected, workflow and dataset export paths callexportToDriveand show success toastmenu.component.spec.ts—Drive integrationdescribe block: same connection state coverage, plusonClickDriveExportWorkflowserializes workflow content and shows success toastdataset-detail.component.spec.ts— new spec file: token status,onConnectedtoast,onClickDriveExportVersionandonClickDriveExportFileacross connected/disconnected/missing-selection/success pathsWas this PR authored or co-authored using generative AI tooling?
Generated-by: Claude Sonnet 4.6