package config import "strings" type SafeBrandingConfig struct { SiteIconURL string `json:"siteIconUrl"` DeveloperAvatarURL string `json:"developerAvatarUrl"` DeveloperName string `json:"developerName"` FeedbackEmail string `json:"feedbackEmail"` } func SafeBranding(cfg BrandingConfig) SafeBrandingConfig { return SafeBrandingConfig{ SiteIconURL: strings.TrimSpace(cfg.SiteIconURL), DeveloperAvatarURL: strings.TrimSpace(cfg.DeveloperAvatarURL), DeveloperName: strings.TrimSpace(firstNonEmpty(cfg.DeveloperName, "YMhut")), FeedbackEmail: strings.TrimSpace(firstNonEmpty(cfg.FeedbackEmail, "support@ymhut.cn")), } } func NormalizeBranding(current BrandingConfig, incoming BrandingConfig) BrandingConfig { next := current if value := strings.TrimSpace(incoming.SiteIconURL); value != "" { next.SiteIconURL = value } if value := strings.TrimSpace(incoming.DeveloperAvatarURL); value != "" { next.DeveloperAvatarURL = value } if value := strings.TrimSpace(incoming.DeveloperName); value != "" { next.DeveloperName = value } if value := strings.TrimSpace(incoming.FeedbackEmail); value != "" { next.FeedbackEmail = value } if next.SiteIconURL == "" { next.SiteIconURL = "/assets/favicon.ico" } if next.DeveloperAvatarURL == "" { next.DeveloperAvatarURL = "/assets/developer-avatar.png" } if next.DeveloperName == "" { next.DeveloperName = "YMhut" } if next.FeedbackEmail == "" { next.FeedbackEmail = "support@ymhut.cn" } return next }