From e7f3245acd1b6de9fd9f3d61879b736a8bdf0e8a Mon Sep 17 00:00:00 2001 From: Deluan Date: Mon, 7 Sep 2026 19:43:18 -0400 Subject: [PATCH] fix(subsonic): keep placeholder for unknown username when Gravatar is off The old getAvatar never looked up the user when Gravatar was disabled (the default), so an unknown username served the placeholder. Restore that for the unresolvable-user case now that lookup always happens. --- server/subsonic/media_retrieval.go | 5 +++++ server/subsonic/media_retrieval_test.go | 13 ++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) 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() {