Commit Graph
53 Commits
Author SHA1 Message Date
sneak 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
sneak 1a97f42cd8 Add detailed logging for image requests with cache status and timing 2026-01-08 05:04:08 -08:00
sneak 6a20406b0f Add -config flag using cobra to specify config file path 2026-01-08 04:58:05 -08:00
sneak 271527679e Add example config file with whitelisted hosts 2026-01-08 04:09:06 -08:00
sneak 9647829ac9 Support YAML list format for whitelist_hosts config 2026-01-08 04:08:51 -08:00
sneak 3fcf9d9146 Add failing test for YAML list format in whitelist_hosts config 2026-01-08 04:08:11 -08:00
sneak cc0fd29954 Update TODO.md with completed image processing items 2026-01-08 04:02:53 -08:00
sneak 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
sneak 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
sneak 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
sneak 11295db68a Exclude vendor directory from format checks 2026-01-08 03:37:58 -08:00
sneak d9e57de108 Add TDD and commit workflow rules to CLAUDE.md 2026-01-08 03:36:22 -08:00
sneak b14c897408 Update TODO.md with completed caching layer items 2026-01-08 03:36:05 -08:00
sneak 6d32b7ee23 Fix formatting in fetcher and signature tests 2026-01-08 03:36:00 -08:00
sneak 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
sneak 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
sneak 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
sneak 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
sneak 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
sneak 9ff44b7e65 Update TODO.md with completed core features 2026-01-08 03:02:24 -08:00
sneak cc2c40bfbf Implement HMAC-SHA256 signature generation and verification 2026-01-08 03:02:09 -08:00
sneak 2b0ccd6052 Implement host whitelist for source domains 2026-01-08 03:00:53 -08:00
sneak 018c280267 Add ParseImagePath for chi wildcard and upstream fetcher with SSRF protection 2026-01-08 02:59:48 -08:00
sneak c69ddf6f61 Implement URL parser for image proxy routes 2026-01-08 02:55:05 -08:00
sneak a9573a4b10 Mark project setup tasks complete in TODO.md 2026-01-08 02:53:49 -08:00
sneak 09a0e6f039 Fix formatting alignment in server constants 2026-01-08 02:31:01 -08:00
sneak 1ac16bcfb4 Remove unused respondError function 2026-01-08 02:30:13 -08:00
sneak 837c91e0dd Rename unused ctx parameters in server hooks 2026-01-08 02:29:48 -08:00
sneak 827f9743b8 Add package and const block comments to imgcache 2026-01-08 02:29:25 -08:00
sneak 453fd22ce2 Add doc comment to HandleHealthCheck method 2026-01-08 02:28:30 -08:00
sneak eb2ba92745 Add comment to SQLite blank import 2026-01-08 02:28:05 -08:00
sneak 29adb6ee47 Rename unused parameters to _ to satisfy linter 2026-01-08 02:27:45 -08:00
sneak 146eeee070 Use bit shift for HTTPMaxHeaderBytes constant 2026-01-08 02:26:47 -08:00
sneak 31df1a4a03 Rename LoggerParams to Params to avoid stuttering 2026-01-08 02:26:15 -08:00
sneak 1824d99f55 Rename ServerParams to Params to avoid stuttering 2026-01-08 02:25:56 -08:00
sneak 3f6328766c Rename MiddlewareParams to Params to avoid stuttering 2026-01-08 02:25:42 -08:00
sneak ad89bd9232 Rename HealthcheckParams and HealthcheckResponse to avoid stuttering 2026-01-08 02:25:28 -08:00
sneak 43e4172fb3 Rename HandlersParams to Params to avoid stuttering 2026-01-08 02:25:00 -08:00
sneak c68c8909f7 Rename DatabaseParams to Params to avoid stuttering 2026-01-08 02:24:40 -08:00
sneak d95d31df25 Rename ConfigParams to Params to avoid stuttering 2026-01-08 02:24:20 -08:00
sneak 34fb126e6c Add package comment and fix var-declaration in main 2026-01-08 02:23:56 -08:00
sneak ef6e67e786 Add blank line before return in SourceURL 2026-01-08 02:23:23 -08:00
sneak 751e557884 Define ShutdownTimeout and SentryFlushTimeout constants 2026-01-08 02:22:58 -08:00
sneak 0eb6193431 Use HTTPWriteTimeout constant for request timeout 2026-01-08 02:22:25 -08:00
sneak bf24a310bc Define HTTP server timeout and header size constants 2026-01-08 02:21:54 -08:00
sneak 115f92660d Define CORSMaxAgeSeconds constant 2026-01-08 02:21:30 -08:00
sneak ce25ea8f6f Define DefaultPort and DefaultStateDir constants 2026-01-08 02:21:00 -08:00
sneak 516853626d Add basic webserver skeleton with healthcheck 2026-01-08 02:20:23 -08:00
sneak 38faf56be0 Add .gitignore 2026-01-08 02:20:18 -08:00
sneak c491bc7af3 Add Go module definition 2026-01-08 02:18:49 -08:00
sneak 6071fd5bb7 Add project documentation and linter config 2026-01-08 02:18:45 -08:00
sneak 4ef9141960 Add Makefile with check, lint, test, fmt targets
- check: default target, runs fmt-check, lint, and test
- fmt-check: verifies code is properly formatted
- fmt: formats code with gofmt
- lint: runs golangci-lint
- test: runs go test
- build: builds pixad binary with version info
- clean: removes build artifacts
2026-01-08 01:51:46 -08:00
sneak 12f6f6fe75 Add TODO.md with implementation checklist
Complete linear checklist of tasks to implement the pixa caching
image reverse proxy server, covering project setup, core features,
caching, image processing, security, and operational concerns.
2026-01-08 01:51:15 -08:00