From 03f302227f59dac19f92c13c9eb42c282cb5a1d4 Mon Sep 17 00:00:00 2001 From: Roman Perekhod Date: Tue, 16 Jan 2024 13:00:03 +0100 Subject: [PATCH] fix update and reset the logo --- changelog/unreleased/fix-upload-reset-logo.md | 6 ++++ services/web/pkg/service/v0/branding.go | 29 ++++++++++--------- 2 files changed, 22 insertions(+), 13 deletions(-) create mode 100644 changelog/unreleased/fix-upload-reset-logo.md diff --git a/changelog/unreleased/fix-upload-reset-logo.md b/changelog/unreleased/fix-upload-reset-logo.md new file mode 100644 index 0000000000..7077a00685 --- /dev/null +++ b/changelog/unreleased/fix-upload-reset-logo.md @@ -0,0 +1,6 @@ +Bugfix: Updating and reset logo failed + +We fixed a bug when admin tried to update or reset the logo. + +https://github.com/owncloud/ocis/pull/8211 +https://github.com/owncloud/ocis/issues/8101 diff --git a/services/web/pkg/service/v0/branding.go b/services/web/pkg/service/v0/branding.go index 7afaf46e04..06606387b9 100644 --- a/services/web/pkg/service/v0/branding.go +++ b/services/web/pkg/service/v0/branding.go @@ -145,12 +145,7 @@ func (p Web) getLogoPath(r io.Reader) (string, error) { var m map[string]interface{} _ = json.NewDecoder(r).Decode(&m) - webCfg, ok := m["clients"].(map[string]interface{})["web"].(map[string]interface{}) - if !ok { - return "", errInvalidThemeConfig - } - - logoCfg, ok := webCfg["defaults"].(map[string]interface{})["logo"].(map[string]interface{}) + logoCfg, ok := extractMap(m, "clients", "web", "defaults", "logo") if !ok { return "", errInvalidThemeConfig } @@ -175,18 +170,13 @@ func (p Web) updateLogoThemeConfig(logoPath string) error { _ = json.NewDecoder(f).Decode(&m) // change logo in common part - commonCfg, ok := m["common"].(map[string]interface{}) + commonCfg, ok := extractMap(m, "common") if !ok { return errInvalidThemeConfig } commonCfg["logo"] = logoPath - webCfg, ok := m["clients"].(map[string]interface{})["web"].(map[string]interface{}) - if !ok { - return errInvalidThemeConfig - } - - logoCfg, ok := webCfg["defaults"].(map[string]interface{})["logo"].(map[string]interface{}) + logoCfg, ok := extractMap(m, "clients", "web", "defaults", "logo") if !ok { return errInvalidThemeConfig } @@ -209,3 +199,16 @@ func allowedFiletype(filename, mediatype string) bool { mt, ok := _allowedExtensionMediatypes[ext] return ok && mt == mediatype } + +// extractMap extracts embedded map[string]interface{} by the keys chain +func extractMap(data map[string]interface{}, keys ...string) (map[string]interface{}, bool) { + last := data + var ok bool + for _, key := range keys { + last, ok = last[key].(map[string]interface{}) + if !ok { + return nil, false + } + } + return last, true +}