package config import "strings" type SafeBrandingConfig struct { SiteName string `json:"siteName"` PortalTitle string `json:"portalTitle"` PortalSubtitle string `json:"portalSubtitle"` AdminTitle string `json:"adminTitle"` AdminSubtitle string `json:"adminSubtitle"` SiteIconURL string `json:"siteIconUrl"` LogoURL string `json:"logoUrl"` DeveloperAvatarURL string `json:"developerAvatarUrl"` DeveloperName string `json:"developerName"` FeedbackEmail string `json:"feedbackEmail"` } func SafeBranding(cfg BrandingConfig) SafeBrandingConfig { normalized := NormalizeBranding(BrandingConfig{}, cfg) return SafeBrandingConfig{ SiteName: strings.TrimSpace(normalized.SiteName), PortalTitle: strings.TrimSpace(normalized.PortalTitle), PortalSubtitle: strings.TrimSpace(normalized.PortalSubtitle), AdminTitle: strings.TrimSpace(normalized.AdminTitle), AdminSubtitle: strings.TrimSpace(normalized.AdminSubtitle), SiteIconURL: strings.TrimSpace(normalized.SiteIconURL), LogoURL: strings.TrimSpace(normalized.LogoURL), DeveloperAvatarURL: strings.TrimSpace(normalized.DeveloperAvatarURL), DeveloperName: strings.TrimSpace(normalized.DeveloperName), FeedbackEmail: strings.TrimSpace(normalized.FeedbackEmail), } } func NormalizeBranding(current BrandingConfig, incoming BrandingConfig) BrandingConfig { next := current if value := strings.TrimSpace(incoming.SiteName); value != "" { next.SiteName = value } if value := strings.TrimSpace(incoming.PortalTitle); value != "" { next.PortalTitle = value } if value := strings.TrimSpace(incoming.PortalSubtitle); value != "" { next.PortalSubtitle = value } if value := strings.TrimSpace(incoming.AdminTitle); value != "" { next.AdminTitle = value } if value := strings.TrimSpace(incoming.AdminSubtitle); value != "" { next.AdminSubtitle = value } if value := strings.TrimSpace(incoming.SiteIconURL); value != "" { next.SiteIconURL = value } if value := strings.TrimSpace(incoming.LogoURL); value != "" { next.LogoURL = 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.SiteName == "" { next.SiteName = "YMhut Box" } if next.PortalTitle == "" { next.PortalTitle = next.SiteName + " 统一服务门户" } if next.PortalSubtitle == "" { next.PortalSubtitle = "统一发布、反馈与接口源状态门户" } if next.AdminTitle == "" { next.AdminTitle = "YMhut 统一管理台" } if next.AdminSubtitle == "" { next.AdminSubtitle = "发布、反馈、接口源与系统运维" } if next.SiteIconURL == "" { next.SiteIconURL = "/assets/favicon.ico" } if next.LogoURL == "" { next.LogoURL = next.SiteIconURL } 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 }