feat: load oss media config from sys config

This commit is contained in:
richjohnrambo
2026-09-08 22:19:00 +08:00
parent 0f984b0ab4
commit aae13c9265
10 changed files with 224 additions and 9 deletions
+53 -5
View File
@@ -13,6 +13,7 @@ package main
import (
"context"
"encoding/json"
"errors"
"flag"
"net/http"
"os"
@@ -254,6 +255,52 @@ type mediaConfig struct {
Handlers map[string]json.RawMessage `json:"handlers"`
}
func resolveMediaHandlerConfig(config *mediaConfig) (string, string, error) {
if config == nil {
return "", "", nil
}
handler := strings.TrimSpace(config.UseHandler)
if handler == "sys_config" {
values, err := store.ThirdPartyConfig.Get("im_third_party", "media_handler")
if err != nil {
return "", "", err
}
handler = strings.TrimSpace(values["media_handler"])
}
if handler == "" {
return "", "", errors.New("empty media handler")
}
var conf string
if config.Handlers != nil {
if params := config.Handlers[handler]; params != nil {
conf = string(params)
}
}
if handler == "oss" {
ossConf, err := ensureOSSUsesSysConfig(conf)
if err != nil {
return "", "", err
}
return handler, ossConf, nil
}
return handler, conf, nil
}
func ensureOSSUsesSysConfig(conf string) (string, error) {
params := map[string]any{}
if strings.TrimSpace(conf) != "" {
if err := json.Unmarshal([]byte(conf), &params); err != nil {
return "", err
}
}
params["use_sys_config"] = true
encoded, err := json.Marshal(params)
if err != nil {
return "", err
}
return string(encoded), nil
}
// Contentx of the configuration file
type configType struct {
// HTTP(S) address:port to listen on for websocket and long polling clients. Either a
@@ -640,12 +687,13 @@ func main() {
} else {
globals.maxFileUploadSize = config.Media.MaxFileUploadSize
if config.Media.Handlers != nil {
var conf string
if params := config.Media.Handlers[config.Media.UseHandler]; params != nil {
conf = string(params)
handler, conf, err := resolveMediaHandlerConfig(config.Media)
if err != nil {
logs.Err.Fatalf("Failed to resolve media handler config: %s", err)
}
if err = store.Store.UseMediaHandler(config.Media.UseHandler, conf); err != nil {
logs.Err.Fatalf("Failed to init media handler '%s': %s", config.Media.UseHandler, err)
config.Media.UseHandler = handler
if err = store.Store.UseMediaHandler(handler, conf); err != nil {
logs.Err.Fatalf("Failed to init media handler '%s': %s", handler, err)
}
}
if config.Media.GcPeriod > 0 && config.Media.GcBlockSize > 0 {