From 962910f0de2d1f8eae91c3faef5749c90d6f1ced Mon Sep 17 00:00:00 2001 From: Deluan Date: Mon, 7 Sep 2026 18:53:38 -0400 Subject: [PATCH] feat(config): add EnableUserAvatarUpload flag --- conf/configuration.go | 2 ++ conf/configuration_test.go | 7 +++++++ consts/consts.go | 3 +++ core/metrics/insights.go | 1 + core/metrics/insights/data.go | 1 + server/serve_index.go | 1 + 6 files changed, 15 insertions(+) diff --git a/conf/configuration.go b/conf/configuration.go index ff119417a..9ef0e37de 100644 --- a/conf/configuration.go +++ b/conf/configuration.go @@ -91,6 +91,7 @@ type configOptions struct { EnableStarRating bool EnableUserEditing bool EnableArtworkUpload bool + EnableUserAvatarUpload bool MaxImageUploadSize string MaxImageSize string EnableSharing bool @@ -1028,6 +1029,7 @@ func setViperDefaults() { viper.SetDefault("enablenowplaying", true) viper.SetDefault("uiplaybackreportinterval", consts.DefaultUIPlaybackReportInterval) viper.SetDefault("enableartworkupload", true) + viper.SetDefault("enableuseravatarupload", true) viper.SetDefault("maximageuploadsize", consts.DefaultMaxImageUploadSize) viper.SetDefault("maximagesize", consts.DefaultMaxImageSize) viper.SetDefault("enablesharing", true) diff --git a/conf/configuration_test.go b/conf/configuration_test.go index 2c7f8edaa..ca97f2efb 100644 --- a/conf/configuration_test.go +++ b/conf/configuration_test.go @@ -76,6 +76,13 @@ var _ = Describe("Configuration", func() { }) }) + Describe("user avatar upload", func() { + It("is enabled by default", func() { + conf.Load(true) + Expect(conf.Server.EnableUserAvatarUpload).To(BeTrue()) + }) + }) + Describe("ValidateURL", func() { It("accepts a valid http URL", func() { fn := conf.ValidateURL("TestOption", "http://example.com/path") diff --git a/consts/consts.go b/consts/consts.go index 486ea66bc..938f2ad57 100644 --- a/consts/consts.go +++ b/consts/consts.go @@ -89,6 +89,7 @@ const ( I18nFolder = "i18n" ScanIgnoreFile = ".ndignore" ArtworkFolder = "artwork" + AvatarFolder = "avatar" // HashedArtworkFolder is a subtree of ArtworkFolder, kept apart from the name-addressed // upload folders beside it so Prune's sweep never reaches them. HashedArtworkFolder = "hashed" @@ -118,6 +119,7 @@ const ( DefaultUICoverArtSize = 300 DefaultMaxImageUploadSize = "10MB" DefaultMaxImageSize = "20MB" + MaxAvatarSize = 512 ) // Prometheus options @@ -143,6 +145,7 @@ const ( EntityArtist = "artist" EntityPlaylist = "playlist" EntityRadio = "radio" + EntityUser = "user" ) const ( diff --git a/core/metrics/insights.go b/core/metrics/insights.go index d952f517a..ce45f1263 100644 --- a/core/metrics/insights.go +++ b/core/metrics/insights.go @@ -202,6 +202,7 @@ var staticData = sync.OnceValue(func() insights.Data { data.Config.DefaultBackgroundURLSet = conf.Server.UILoginBackgroundURL == consts.DefaultUILoginBackgroundURL data.Config.EnableArtworkPrecache = conf.Server.EnableArtworkPrecache data.Config.EnableArtworkUpload = conf.Server.EnableArtworkUpload + data.Config.EnableUserAvatarUpload = conf.Server.EnableUserAvatarUpload data.Config.CoverArtQuality = conf.Server.CoverArtQuality data.Config.EnableWebPEncoding = conf.Server.EnableWebPEncoding data.Config.UICoverArtSize = conf.Server.UICoverArtSize diff --git a/core/metrics/insights/data.go b/core/metrics/insights/data.go index 8559d4204..fd99f9e88 100644 --- a/core/metrics/insights/data.go +++ b/core/metrics/insights/data.go @@ -67,6 +67,7 @@ type Data struct { EnableJukebox bool `json:"enableJukebox,omitempty"` EnablePrometheus bool `json:"enablePrometheus,omitempty"` EnableArtworkUpload bool `json:"enableArtworkUpload,omitempty"` + EnableUserAvatarUpload bool `json:"enableUserAvatarUpload,omitempty"` CoverArtQuality int `json:"coverArtQuality,omitempty"` EnableWebPEncoding bool `json:"enableWebPEncoding,omitempty"` UICoverArtSize int `json:"uiCoverArtSize,omitempty"` diff --git a/server/serve_index.go b/server/serve_index.go index a538daf1a..750885697 100644 --- a/server/serve_index.go +++ b/server/serve_index.go @@ -64,6 +64,7 @@ func serveIndex(ds model.DataStore, fs fs.FS, shareInfo *model.Share) http.Handl "devActivityPanel": conf.Server.DevActivityPanel, "enableUserEditing": conf.Server.EnableUserEditing, "enableArtworkUpload": conf.Server.EnableArtworkUpload, + "enableUserAvatarUpload": conf.Server.EnableUserAvatarUpload, "enableSharing": conf.Server.EnableSharing, "shareURL": conf.Server.ShareURL, "defaultDownloadableShare": conf.Server.DefaultDownloadableShare,