From 2c169e7f8344aeb828169412408a2538b11680cf Mon Sep 17 00:00:00 2001 From: "Hafizh A. Y" Date: Wed, 28 Jan 2026 10:26:13 +0700 Subject: [PATCH] fix(BE): s3 prefix path --- internal/config/config.go | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/internal/config/config.go b/internal/config/config.go index 8660704b..71fb430c 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -73,6 +73,7 @@ var ( S3SecretKey string S3ForcePathStyle bool S3PublicBaseURL string + S3EnvPrefix string S3DocumentKeyPrefix string ) @@ -123,7 +124,12 @@ func init() { S3SecretKey = strings.TrimSpace(viper.GetString("S3_SECRET_KEY")) S3ForcePathStyle = viper.GetBool("S3_FORCE_PATH_STYLE") S3PublicBaseURL = strings.TrimSuffix(strings.TrimSpace(viper.GetString("S3_PUBLIC_BASE_URL")), "/") - S3DocumentKeyPrefix = defaultString(strings.Trim(strings.TrimSpace(viper.GetString("S3_DOCUMENT_PREFIX")), "/"), "docs") + S3EnvPrefix = defaultString(strings.Trim(strings.TrimSpace(viper.GetString("S3_ENV_PREFIX")), "/"), "local") + docPrefix := strings.Trim(strings.TrimSpace(viper.GetString("S3_DOCUMENT_PREFIX")), "/") + if docPrefix == "" { + docPrefix = "docs" + } + S3DocumentKeyPrefix = joinPath(S3EnvPrefix, docPrefix) // SSO integration SSOIssuer = viper.GetString("SSO_ISSUER") @@ -242,6 +248,17 @@ func defaultString(v, def string) string { return v } +func joinPath(parts ...string) string { + out := make([]string, 0, len(parts)) + for _, part := range parts { + part = strings.Trim(part, "/") + if part != "" { + out = append(out, part) + } + } + return strings.Join(out, "/") +} + func ensureProdConfig() { if SSOAuthorizeURL == "" || !strings.HasPrefix(SSOAuthorizeURL, "https://") { panic("SSO_AUTHORIZE_URL must be https in production")