83 lines
2.2 KiB
Go
83 lines
2.2 KiB
Go
package recorder
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"strings"
|
|
|
|
"github.com/go-gost/core/recorder"
|
|
"github.com/go-gost/x/config"
|
|
"github.com/go-gost/x/internal/plugin"
|
|
xrecorder "github.com/go-gost/x/recorder"
|
|
)
|
|
|
|
func ParseRecorder(cfg *config.RecorderConfig) (r recorder.Recorder) {
|
|
if cfg == nil {
|
|
return nil
|
|
}
|
|
|
|
if cfg.Plugin != nil {
|
|
var tlsCfg *tls.Config
|
|
if cfg.Plugin.TLS != nil {
|
|
tlsCfg = &tls.Config{
|
|
ServerName: cfg.Plugin.TLS.ServerName,
|
|
InsecureSkipVerify: !cfg.Plugin.TLS.Secure,
|
|
}
|
|
}
|
|
switch strings.ToLower(cfg.Plugin.Type) {
|
|
case "http":
|
|
return xrecorder.NewHTTPPlugin(
|
|
cfg.Name, cfg.Plugin.Addr,
|
|
plugin.TLSConfigOption(tlsCfg),
|
|
plugin.TimeoutOption(cfg.Plugin.Timeout),
|
|
)
|
|
default:
|
|
return xrecorder.NewGRPCPlugin(
|
|
cfg.Name, cfg.Plugin.Addr,
|
|
plugin.TokenOption(cfg.Plugin.Token),
|
|
plugin.TLSConfigOption(tlsCfg),
|
|
)
|
|
}
|
|
}
|
|
|
|
if cfg.File != nil && cfg.File.Path != "" {
|
|
return xrecorder.FileRecorder(cfg.File.Path,
|
|
xrecorder.SepRecorderOption(cfg.File.Sep),
|
|
)
|
|
}
|
|
|
|
if cfg.TCP != nil && cfg.TCP.Addr != "" {
|
|
return xrecorder.TCPRecorder(cfg.TCP.Addr, xrecorder.TimeoutTCPRecorderOption(cfg.TCP.Timeout))
|
|
}
|
|
|
|
if cfg.HTTP != nil && cfg.HTTP.URL != "" {
|
|
return xrecorder.HTTPRecorder(cfg.HTTP.URL, xrecorder.TimeoutHTTPRecorderOption(cfg.HTTP.Timeout))
|
|
}
|
|
|
|
if cfg.Redis != nil &&
|
|
cfg.Redis.Addr != "" &&
|
|
cfg.Redis.Key != "" {
|
|
switch cfg.Redis.Type {
|
|
case "list": // redis list
|
|
return xrecorder.RedisListRecorder(cfg.Redis.Addr,
|
|
xrecorder.DBRedisRecorderOption(cfg.Redis.DB),
|
|
xrecorder.KeyRedisRecorderOption(cfg.Redis.Key),
|
|
xrecorder.PasswordRedisRecorderOption(cfg.Redis.Password),
|
|
)
|
|
case "sset": // sorted set
|
|
return xrecorder.RedisSortedSetRecorder(cfg.Redis.Addr,
|
|
xrecorder.DBRedisRecorderOption(cfg.Redis.DB),
|
|
xrecorder.KeyRedisRecorderOption(cfg.Redis.Key),
|
|
xrecorder.PasswordRedisRecorderOption(cfg.Redis.Password),
|
|
)
|
|
default: // redis set
|
|
return xrecorder.RedisSetRecorder(cfg.Redis.Addr,
|
|
xrecorder.DBRedisRecorderOption(cfg.Redis.DB),
|
|
xrecorder.KeyRedisRecorderOption(cfg.Redis.Key),
|
|
xrecorder.PasswordRedisRecorderOption(cfg.Redis.Password),
|
|
)
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|