diff --git a/TODO.md b/TODO.md index 404abd1..be3eb08 100644 --- a/TODO.md +++ b/TODO.md @@ -29,6 +29,11 @@ P2: security: referer blacklist # Completed Steps +- 2026-10-04 dead code in `internal/imgcache` is gone (closes #73): `Purge`, + which only returned an error and which nothing called, is no longer part of + the `ImageCache` interface or `Service`; the `SignatureValidator`, + `Allowlist` and `Storage` interfaces, which nothing implemented or used, are + deleted. Nothing else changes. - 2026-10-04 upstream host semaphores and variant `.meta` files no longer outlive their use (closes #87): the fetcher counts the fetches holding or waiting for a slot of each upstream host's semaphore and removes the host's diff --git a/internal/imgcache/imgcache.go b/internal/imgcache/imgcache.go index a74e783..1647658 100644 --- a/internal/imgcache/imgcache.go +++ b/internal/imgcache/imgcache.go @@ -5,7 +5,6 @@ import ( "context" "errors" "io" - "net/url" "time" ) @@ -154,9 +153,6 @@ type ImageCache interface { // Warm pre-fetches and caches an image without returning it Warm(ctx context.Context, req *ImageRequest) error - // Purge removes a cached image - Purge(ctx context.Context, req *ImageRequest) error - // Stats returns cache statistics Stats(ctx context.Context) (*CacheStats, error) } @@ -176,29 +172,3 @@ type CacheStats struct { // HitRate is HitCount / (HitCount + MissCount) HitRate float64 } - -// SignatureValidator validates request signatures -type SignatureValidator interface { - // Validate checks if the signature is valid for the request - Validate(req *ImageRequest) error - // Generate creates a signature for a request - Generate(req *ImageRequest) string -} - -// Allowlist checks if a URL is allowlisted (no signature required) -type Allowlist interface { - // IsAllowlisted returns true if the URL doesn't require a signature - IsAllowlisted(u *url.URL) bool -} - -// Storage handles persistent storage of cached content -type Storage interface { - // Store saves content and returns its hash - Store(ctx context.Context, content io.Reader) (hash string, err error) - // Load retrieves content by hash - Load(ctx context.Context, hash string) (io.ReadCloser, error) - // Delete removes content by hash - Delete(ctx context.Context, hash string) error - // Exists checks if content exists - Exists(ctx context.Context, hash string) (bool, error) -} diff --git a/internal/imgcache/service.go b/internal/imgcache/service.go index 77c7ce9..968dd95 100644 --- a/internal/imgcache/service.go +++ b/internal/imgcache/service.go @@ -56,11 +56,10 @@ type ServiceConfig struct { Logger *slog.Logger } -// Static errors for service construction and unimplemented operations. +// Static errors for service construction. var ( - errCacheRequired = errors.New("cache is required") - errSigningKeyRequired = errors.New("signing key is required") - errPurgeNotImplemented = errors.New("purge not implemented") + errCacheRequired = errors.New("cache is required") + errSigningKeyRequired = errors.New("signing key is required") ) // NewService creates a new image service. @@ -189,11 +188,6 @@ func (s *Service) Warm(ctx context.Context, req *ImageRequest) error { return err } -// Purge removes a cached image. Purging is not implemented yet. -func (s *Service) Purge(_ context.Context, _ *ImageRequest) error { - return errPurgeNotImplemented -} - // Stats returns cache statistics. func (s *Service) Stats(ctx context.Context) (*CacheStats, error) { return s.cache.Stats(ctx)