feat: load oss media config from sys config
This commit is contained in:
+53
-5
@@ -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), ¶ms); 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 {
|
||||
|
||||
Reference in New Issue
Block a user