diff --git a/server/subsonic/media_retrieval.go b/server/subsonic/media_retrieval.go index 619545b03..ccc73c162 100644 --- a/server/subsonic/media_retrieval.go +++ b/server/subsonic/media_retrieval.go @@ -28,6 +28,11 @@ func (api *Router) GetAvatar(w http.ResponseWriter, r *http.Request) (*responses ctx := r.Context() u, err := api.ds.User(ctx).FindByUsername(username) if err != nil { + // Preserve the pre-upload-avatar behaviour: an unresolvable user must not surface + // as an error when Gravatar is off, since the old handler never looked it up. + if !conf.Server.EnableGravatar { + return api.getPlaceHolderAvatar(w, r) + } return nil, err } // An uploaded avatar wins regardless of Gravatar settings, so it must be checked first. diff --git a/server/subsonic/media_retrieval_test.go b/server/subsonic/media_retrieval_test.go index da22130ff..0b961e834 100644 --- a/server/subsonic/media_retrieval_test.go +++ b/server/subsonic/media_retrieval_test.go @@ -246,11 +246,22 @@ var _ = Describe("MediaRetrievalController", func() { Expect(w.Code).To(Equal(http.StatusOK)) }) - It("returns the same error as before for an unknown username", func() { + It("returns the same error as before for an unknown username when Gravatar is on", func() { + conf.Server.EnableGravatar = true + _, err := router.GetAvatar(w, newGetRequest("username=ghost")) Expect(err).To(MatchError(model.ErrNotFound)) }) + + It("serves the placeholder for an unknown username when Gravatar is off, as before", func() { + conf.Server.EnableGravatar = false + + _, err := router.GetAvatar(w, newGetRequest("username=ghost")) + + Expect(err).ToNot(HaveOccurred()) + Expect(w.Code).To(Equal(http.StatusOK)) + }) }) Describe("GetLyrics", func() {