5de7a26735
Add failing tests for security headers middleware
...
Tests for X-Content-Type-Options, X-Frame-Options, Referrer-Policy,
X-XSS-Protection headers on responses.
2026-01-08 10:01:36 -08:00
9592175238
Merge feature/security-validations: Add input dimension and path traversal validation
2026-01-08 08:50:43 -08:00
90be4e7763
Update TODO.md: mark security validations as complete
2026-01-08 08:50:37 -08:00
95408e68d4
Implement max input dimensions and path traversal validation
...
- Reject input images exceeding MaxInputDimension (8192px) to prevent DoS
- Detect path traversal: ../, encoded variants, backslashes, null bytes
2026-01-08 08:50:18 -08:00
c964feac7e
Add failing tests for input dimension and path traversal validation
...
Tests for:
- ErrInputTooLarge when input image exceeds MaxInputDimension
- ErrPathTraversal for ../, encoded traversal, backslashes, null bytes
2026-01-08 08:48:11 -08:00
857be30e82
Update TODO.md: mark auth/encrypted URLs feature as complete
2026-01-08 08:43:23 -08:00
06c99b6f4e
Merge feature/auth-and-encrypted-urls: Add login, sessions, and encrypted URLs
2026-01-08 07:41:28 -08:00
f601e17812
Add implementation plan for auth and encrypted URLs feature
2026-01-08 07:39:31 -08:00
6355886dba
Add vendoring and repo size guidelines to CLAUDE.md
2026-01-08 07:39:27 -08:00
2cbafe374c
Add mock fetcher and service tests for imgcache
...
Introduces Fetcher interface, mock implementation for testing,
and ApplyMigrations helper for test database setup.
2026-01-08 07:39:18 -08:00
1f0ec59eb5
Wire up auth routes and encrypted URL endpoint
...
Add session manager and encurl generator to handlers.
Register /, /logout, /generate, /v1/e/{token}, /static/* routes.
2026-01-08 07:38:44 -08:00
08d6e264ed
Add auth and encrypted image handlers
...
Login page, logout, URL generator form, and /v1/e/{token}
endpoint for serving images from encrypted URLs.
2026-01-08 07:38:15 -08:00
aad5e59d23
Add static files and HTML templates for web UI
...
Embedded Tailwind CSS and login/generator templates.
Self-contained with no external dependencies.
2026-01-08 07:38:09 -08:00
c033e918f0
Add encurl package for encrypted URL tokens
...
CBOR-encoded payloads with NaCl secretbox encryption.
Supports expiration, image parameters with omitempty defaults.
2026-01-08 07:38:05 -08:00
041b18f651
Add session package for encrypted cookie management
...
Uses gorilla/securecookie with keys derived via HKDF.
30-day TTL, HttpOnly, Secure, SameSiteStrict cookies.
2026-01-08 07:37:58 -08:00
3f4f345d1c
Add seal package for authenticated encryption
...
Provides HKDF-SHA256 key derivation and NaCl secretbox
(XSalsa20-Poly1305) encryption/decryption utilities.
2026-01-08 07:37:53 -08:00
1e890ffbcc
Fix spelling, punctuation, and capitalization in CLAUDE.md
2026-01-08 05:29:08 -08:00
f244d9c7e0
Add per-host connection limits for upstream fetching
...
- Add upstream_connections_per_host config option (default: 20)
- Implement per-host semaphores to limit concurrent connections
- Semaphore released when response body is closed
- Prevents overwhelming origin servers with parallel requests
2026-01-08 05:19:20 -08:00
49ff72dfa8
Add bin/ to gitignore
2026-01-08 05:14:11 -08:00
6304556837
Refactor to serve all responses from cached files on disk
...
- StoreOutput now returns output hash for immediate retrieval
- Cache misses now serve from disk file after storing (same as hits)
- Log served_bytes from actual io.Copy result (avoids stat calls)
- Remove ContentLength field usage for cache hits (stream from file)
- Fix tests to properly check all return values
2026-01-08 05:11:55 -08:00
1a97f42cd8
Add detailed logging for image requests with cache status and timing
2026-01-08 05:04:08 -08:00
6a20406b0f
Add -config flag using cobra to specify config file path
2026-01-08 04:58:05 -08:00
271527679e
Add example config file with whitelisted hosts
2026-01-08 04:09:06 -08:00
9647829ac9
Support YAML list format for whitelist_hosts config
2026-01-08 04:08:51 -08:00
3fcf9d9146
Add failing test for YAML list format in whitelist_hosts config
2026-01-08 04:08:11 -08:00
cc0fd29954
Update TODO.md with completed image processing items
2026-01-08 04:02:53 -08:00
fd2d108f9c
Wire up image handler endpoint with service orchestration
...
- Add image proxy config options (signing_key, whitelist_hosts, allow_http)
- Create Service to orchestrate cache, fetcher, and processor
- Initialize image service in handlers OnStart hook
- Implement HandleImage with URL parsing, signature validation, cache
- Implement HandleRobotsTxt for search engine prevention
- Parse query params for signature, quality, and fit mode
2026-01-08 04:01:53 -08:00
5462c9222c
Add pure Go image processor with resize and format conversion
...
Implements the Processor interface using disintegration/imaging library.
Supports JPEG, PNG, GIF, WebP decoding and JPEG, PNG, GIF encoding.
Includes all fit modes: cover, contain, fill, inside, outside.
2026-01-08 03:54:50 -08:00
9629139989
Add tests for cache service
...
Tests cover: lookup miss/hit, store source/output, negative caching,
negative cache expiry, hot cache, output retrieval, stats, and cleanup.
2026-01-08 03:39:23 -08:00
11295db68a
Exclude vendor directory from format checks
2026-01-08 03:37:58 -08:00
d9e57de108
Add TDD and commit workflow rules to CLAUDE.md
2026-01-08 03:36:22 -08:00
b14c897408
Update TODO.md with completed caching layer items
2026-01-08 03:36:05 -08:00
6d32b7ee23
Fix formatting in fetcher and signature tests
2026-01-08 03:36:00 -08:00
30c5c077e5
Add cache service with hot cache and negative caching
...
Implements cache lookup with in-memory hot path, source/output storage,
negative caching for failed fetches, TTL expiration, and statistics tracking.
2026-01-08 03:35:55 -08:00
2f20c71da0
Add content-addressable storage and cache key generation
...
ContentStorage stores blobs at <dir>/<ab>/<cd>/<sha256> paths.
MetadataStorage stores JSON at <dir>/<host>/<path_hash>.json.
CacheKey generates unique keys from request parameters.
2026-01-08 03:35:50 -08:00
4595929275
Add embedded SQL migrations system
...
Migrations are stored in schema/*.sql and embedded via go:embed.
Applied migrations are tracked in schema_migrations table.
Initial schema includes source_content, source_metadata, output_content,
request_cache, negative_cache, and cache_stats tables.
2026-01-08 03:35:43 -08:00
27eb9fb513
Add HMAC signature specification to README
...
Documents the signature scheme: HMAC-SHA256 over host:path:query:width:height:format:expiration
with base64url encoding and Unix timestamp expiration.
2026-01-08 03:35:36 -08:00
30d63e80dc
Add magic byte detection for image format validation
...
Implements format detection by checking file magic bytes for JPEG, PNG,
GIF, WebP, AVIF, and SVG. Includes validation against declared Content-Type.
2026-01-08 03:35:29 -08:00
9ff44b7e65
Update TODO.md with completed core features
2026-01-08 03:02:24 -08:00
cc2c40bfbf
Implement HMAC-SHA256 signature generation and verification
2026-01-08 03:02:09 -08:00
2b0ccd6052
Implement host whitelist for source domains
2026-01-08 03:00:53 -08:00
018c280267
Add ParseImagePath for chi wildcard and upstream fetcher with SSRF protection
2026-01-08 02:59:48 -08:00
c69ddf6f61
Implement URL parser for image proxy routes
2026-01-08 02:55:05 -08:00
a9573a4b10
Mark project setup tasks complete in TODO.md
2026-01-08 02:53:49 -08:00
09a0e6f039
Fix formatting alignment in server constants
2026-01-08 02:31:01 -08:00
1ac16bcfb4
Remove unused respondError function
2026-01-08 02:30:13 -08:00
837c91e0dd
Rename unused ctx parameters in server hooks
2026-01-08 02:29:48 -08:00
827f9743b8
Add package and const block comments to imgcache
2026-01-08 02:29:25 -08:00
453fd22ce2
Add doc comment to HandleHealthCheck method
2026-01-08 02:28:30 -08:00
eb2ba92745
Add comment to SQLite blank import
2026-01-08 02:28:05 -08:00