feat: add S3-compatible storage support (MinIO)#11
Merged
Conversation
- Add web app manifest (name, theme, icons) - Add service worker for offline static asset caching - Add PWA meta tags to all templates - Serve sw.js and manifest with correct MIME types - Update README and CONTRIBUTING with PWA docs Co-authored-by: Cursor <cursoragent@cursor.com>
- Isolate theme-color in manifest only (remove from HTML) - DRY: extract PWA meta into partials/pwa.tmpl, reuse in all templates - sw.js: Vue *.template.vue cached on first fetch via /static/ prefix - sw.js: use CACHE_EXACT and CACHE_PREFIXES arrays for path matching Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
- Parse Content-ID from MIME parts during full email extraction - Rewrite cid: refs in HTML to data: base64 URIs for iframe display - Add ExtractPartByCID and /api/email/cid for API-based serving - Add tests for CID parsing and extraction Co-authored-by: Cursor <cursoragent@cursor.com>
- Parts with Content-Disposition: inline and Content-ID are CID refs - Case-insensitive disposition check for robustness - Add real email test (skips when users/ file missing) Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
- Add S3 env vars to docker-compose and .env.example - Add MinIO service (profile s3) on port 9900 - Add internal/storage package with S3Client (Put, Get, EnsureBucket) - Add integration tests (skip when S3_ENDPOINT not set) - Document S3 config and test run in README Co-authored-by: Cursor <cursoragent@cursor.com>
- Add BlobStore abstraction (FS + S3) for user data - Store user.json, accounts.yml, sessions.json, .eml on S3 when configured - Keep sync.sqlite and index.parquet on local filesystem - Update README with S3 usage and architecture - Merge feat/cid-inline-images Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
…BlobStore Also gofmt fixes for parser, user store, handlers. Co-authored-by: Cursor <cursoragent@cursor.com>
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.
Summary
Adds S3-compatible object storage support for future email data storage.
Changes
S3_ENDPOINT,S3_ACCESS_KEY_ID,S3_SECRET_ACCESS_KEY,S3_BUCKET,S3_USE_SSL) for the mails servicedocker compose --profile s3 up minio) on port 9900PutBytes,Get,EnsureBucket(AWS SDK v2, works with MinIO)TestS3StoreRetrieveandTestS3GetNotFound— skip whenS3_ENDPOINTnot setRun S3 tests
docker compose --profile s3 up -d minio S3_ENDPOINT=http://localhost:9900 S3_ACCESS_KEY_ID=minioadmin S3_SECRET_ACCESS_KEY=minioadmin S3_BUCKET=mails-test S3_USE_SSL=false go test -v ./internal/storage/Made with Cursor