Files
im_server/server/filesafety/config.go
T

105 lines
2.9 KiB
Go

package filesafety
import (
"errors"
"strconv"
"strings"
"github.com/tinode/chat/server/filesafety/aliyun"
"github.com/tinode/chat/server/store"
"github.com/tinode/chat/server/store/types"
)
const thirdPartyConfigGroup = "im_third_party"
type ContentReviewConfig struct {
Enabled bool
Provider string
Green aliyun.GreenConfig
}
type MalwareReviewConfig struct {
Enabled bool
Provider string
RegionID string
}
type Config struct {
Content ContentReviewConfig
Malware MalwareReviewConfig
}
func LoadConfig() (*Config, error) {
values, err := store.ThirdPartyConfig.Get(thirdPartyConfigGroup,
"file_review_content_enabled",
"file_review_content_provider",
"aliyun_green_region_id",
"aliyun_green_endpoint",
"aliyun_green_document_service",
"file_review_malware_enabled",
"file_review_malware_provider",
"aliyun_sas_region_id",
"aliyun_access_key_id",
"aliyun_access_key_secret",
)
if err != nil {
return nil, err
}
config := &Config{
Content: ContentReviewConfig{
Enabled: boolValue(values["file_review_content_enabled"]),
Provider: stringDefault(values["file_review_content_provider"], types.FileReviewProviderAliyunGreen),
Green: aliyun.GreenConfig{
AccessKeyID: strings.TrimSpace(values["aliyun_access_key_id"]),
AccessKeySecret: strings.TrimSpace(values["aliyun_access_key_secret"]),
RegionID: strings.TrimSpace(values["aliyun_green_region_id"]),
Endpoint: strings.TrimSpace(values["aliyun_green_endpoint"]),
DocumentService: strings.TrimSpace(values["aliyun_green_document_service"]),
},
},
Malware: MalwareReviewConfig{
Enabled: boolValue(values["file_review_malware_enabled"]),
Provider: stringDefault(values["file_review_malware_provider"], types.FileReviewProviderAliyunSAS),
RegionID: strings.TrimSpace(values["aliyun_sas_region_id"]),
},
}
if config.Content.Enabled && config.Content.Provider != types.FileReviewProviderAliyunGreen {
return nil, errors.New("unsupported file content review provider: " + config.Content.Provider)
}
if config.Malware.Enabled && config.Malware.Provider != types.FileReviewProviderAliyunSAS {
return nil, errors.New("unsupported malware review provider: " + config.Malware.Provider)
}
return config, nil
}
func NewGreenClientFromConfig() (*aliyun.GreenClient, error) {
config, err := LoadConfig()
if err != nil {
return nil, err
}
if !config.Content.Enabled {
return nil, types.ErrUnsupported
}
return aliyun.NewGreenClient(config.Content.Green)
}
func boolValue(value string) bool {
if parsed, err := strconv.ParseBool(strings.TrimSpace(value)); err == nil {
return parsed
}
switch strings.ToLower(strings.TrimSpace(value)) {
case "1", "yes", "on":
return true
default:
return false
}
}
func stringDefault(value, fallback string) string {
if value = strings.TrimSpace(value); value != "" {
return value
}
return fallback
}