From f4c30e2b0e958f03237a2a0a2c2196eab2589869 Mon Sep 17 00:00:00 2001 From: Alexandre Tuleu Date: Mon, 25 Jan 2016 16:13:29 +0100 Subject: [PATCH] Have nicer 404 errors for covers --- album_cover_cache.go | 8 +++++++- router.go | 7 +++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/album_cover_cache.go b/album_cover_cache.go index a813a41..efbb1a4 100644 --- a/album_cover_cache.go +++ b/album_cover_cache.go @@ -20,6 +20,12 @@ type AlbumCoverCache struct { TTL time.Duration } +type ErrorNotRegistered AlbumID + +func (e ErrorNotRegistered) Error() string { + return fmt.Sprintf("Cover URL for Album %d is not registered", AlbumID(e)) +} + // NewAlbumCoverCache is creating a new cache at specified location on the fs func NewAlbumCoverCache(basepath string, maxRequest uint, window time.Duration) *AlbumCoverCache { res := &AlbumCoverCache{ @@ -37,7 +43,7 @@ func NewAlbumCoverCache(basepath string, maxRequest uint, window time.Duration) func (c *AlbumCoverCache) fetch(ID AlbumID) (io.ReadCloser, string, error) { URL, ok := c.URLs[ID] if ok == false { - return nil, "", fmt.Errorf("Cover URL for Album %d is not registered", ID) + return nil, "", ErrorNotRegistered(ID) } ext := AlbumCoverExt(URL) diff --git a/router.go b/router.go index 0110882..2ec5d85 100644 --- a/router.go +++ b/router.go @@ -97,6 +97,7 @@ func (a *appData) buildRouter() http.Handler { if err != nil { narco.Error(ctx, w, http.StatusText(http.StatusNotFound), http.StatusNotFound) + return } rc, ext, err := a.cover.GetCover(AlbumID(ID)) @@ -104,10 +105,16 @@ func (a *appData) buildRouter() http.Handler { defer closeOrPanic(rc, "Album cover "+name) } if err != nil { + if _, ok := err.(ErrorNotRegistered); ok == true { + narco.Error(ctx, w, http.StatusText(http.StatusNotFound), http.StatusNotFound) + return + } narco.Error(ctx, w, err, http.StatusInternalServerError) + return } if ext != requestedExt { narco.Error(ctx, w, http.StatusText(http.StatusNotFound), http.StatusNotFound) + return } io.Copy(w, rc)