Files
2026-05-18 19:38:23 +08:00

69 lines
1.5 KiB
Go

package handler
import (
"os"
"strings"
)
const storageAllowListEnv = "STORAGE_ALLOW_LIST"
var supportedStorageProviders = []string{"local", "minio", "cos", "tos", "s3", "oss", "ks3", "obs"}
func getSupportedStorageProviders() []string {
providers := make([]string, len(supportedStorageProviders))
copy(providers, supportedStorageProviders)
return providers
}
func getAllowedStorageProviders() map[string]bool {
raw := strings.TrimSpace(os.Getenv(storageAllowListEnv))
allowed := make(map[string]bool, len(supportedStorageProviders))
if raw == "" {
for _, provider := range supportedStorageProviders {
allowed[provider] = true
}
return allowed
}
for _, item := range strings.FieldsFunc(raw, func(r rune) bool {
switch r {
case ',', ';', '|', '\n', '\t', ' ':
return true
default:
return false
}
}) {
provider := strings.ToLower(strings.TrimSpace(item))
if provider == "" {
continue
}
for _, supported := range supportedStorageProviders {
if provider == supported {
allowed[provider] = true
break
}
}
}
return allowed
}
func isStorageProviderAllowed(provider string) bool {
provider = strings.ToLower(strings.TrimSpace(provider))
if provider == "" {
return true
}
return getAllowedStorageProviders()[provider]
}
func firstAllowedStorageProvider() string {
allowed := getAllowedStorageProviders()
for _, provider := range supportedStorageProviders {
if allowed[provider] {
return provider
}
}
return ""
}