Files
chat-deploy/pkg/common/config/config.go
kim.dev.6789 b7f8db7d08 复制项目
2026-01-14 22:35:45 +08:00

248 lines
6.9 KiB
Go

package config
import (
_ "embed"
"github.com/openimsdk/tools/db/mongoutil"
"github.com/openimsdk/tools/db/redisutil"
)
var (
//go:embed version
Version string
//go:embed template.xlsx
ImportTemplate []byte
)
type Share struct {
OpenIM struct {
ApiURL string `mapstructure:"apiURL"`
Secret string `mapstructure:"secret"`
AdminUserID string `mapstructure:"adminUserID"`
TokenRefreshInterval int `mapstructure:"tokenRefreshInterval"`
} `mapstructure:"openIM"`
ChatAdmin []string `mapstructure:"chatAdmin"`
ProxyHeader string `mapstructure:"proxyHeader"`
}
type RpcService struct {
Chat string `mapstructure:"chat"`
Admin string `mapstructure:"admin"`
Bot string `mapstructure:"bot"`
}
func (r *RpcService) GetServiceNames() []string {
return []string{
r.Chat,
r.Admin,
}
}
type API struct {
Api struct {
ListenIP string `mapstructure:"listenIP"`
Ports []int `mapstructure:"ports"`
} `mapstructure:"api"`
}
type APIBot struct {
Api struct {
ListenIP string `mapstructure:"listenIP"`
Ports []int `mapstructure:"ports"`
} `mapstructure:"api"`
}
type Mongo struct {
URI string `mapstructure:"uri"`
Address []string `mapstructure:"address"`
Database string `mapstructure:"database"`
Username string `mapstructure:"username"`
Password string `mapstructure:"password"`
AuthSource string `mapstructure:"authSource"`
MaxPoolSize int `mapstructure:"maxPoolSize"`
MaxRetry int `mapstructure:"maxRetry"`
}
func (m *Mongo) Build() *mongoutil.Config {
return &mongoutil.Config{
Uri: m.URI,
Address: m.Address,
Database: m.Database,
Username: m.Username,
Password: m.Password,
AuthSource: m.AuthSource,
MaxPoolSize: m.MaxPoolSize,
MaxRetry: m.MaxRetry,
}
}
type Redis struct {
Address []string `mapstructure:"address"`
Username string `mapstructure:"username"`
Password string `mapstructure:"password"`
EnablePipeline bool `mapstructure:"enablePipeline"`
ClusterMode bool `mapstructure:"clusterMode"`
DB int `mapstructure:"db"`
MaxRetry int `mapstructure:"MaxRetry"`
}
func (r *Redis) Build() *redisutil.Config {
return &redisutil.Config{
ClusterMode: r.ClusterMode,
Address: r.Address,
Username: r.Username,
Password: r.Password,
DB: r.DB,
MaxRetry: r.MaxRetry,
}
}
type Discovery struct {
Enable string `mapstructure:"enable"`
Etcd Etcd `mapstructure:"etcd"`
Kubernetes Kubernetes `mapstructure:"kubernetes"`
RpcService RpcService `mapstructure:"rpcService"`
}
type Kubernetes struct {
Namespace string `mapstructure:"namespace"`
}
type Etcd struct {
RootDirectory string `mapstructure:"rootDirectory"`
Address []string `mapstructure:"address"`
Username string `mapstructure:"username"`
Password string `mapstructure:"password"`
}
type Chat struct {
RPC struct {
RegisterIP string `mapstructure:"registerIP"`
ListenIP string `mapstructure:"listenIP"`
Ports []int `mapstructure:"ports"`
} `mapstructure:"rpc"`
VerifyCode VerifyCode `mapstructure:"verifyCode"`
LiveKit struct {
URL string `mapstructure:"url"`
Key string `mapstructure:"key"`
Secret string `mapstructure:"secret"`
} `mapstructure:"liveKit"`
AllowRegister bool `mapstructure:"allowRegister"`
}
type Bot struct {
RPC struct {
RegisterIP string `mapstructure:"registerIP"`
ListenIP string `mapstructure:"listenIP"`
Ports []int `mapstructure:"ports"`
} `mapstructure:"rpc"`
Timeout int `mapstructure:"timeout"`
}
type VerifyCode struct {
ValidTime int `mapstructure:"validTime"`
ValidCount int `mapstructure:"validCount"`
UintTime int `mapstructure:"uintTime"`
MaxCount int `mapstructure:"maxCount"`
SuperCode string `mapstructure:"superCode"`
Len int `mapstructure:"len"`
Phone struct {
Use string `mapstructure:"use"`
Ali struct {
Endpoint string `mapstructure:"endpoint"`
AccessKeyID string `mapstructure:"accessKeyId"`
AccessKeySecret string `mapstructure:"accessKeySecret"`
SignName string `mapstructure:"signName"`
VerificationCodeTemplateCode string `mapstructure:"verificationCodeTemplateCode"`
} `mapstructure:"ali"`
Bao struct {
Endpoint string `mapstructure:"endpoint"`
AccessKeyID string `mapstructure:"accessKeyId"`
AccessKeySecret string `mapstructure:"accessKeySecret"`
SignName string `mapstructure:"signName"`
VerificationCodeTemplateCode string `mapstructure:"verificationCodeTemplateCode"`
} `mapstructure:"bao"`
} `mapstructure:"phone"`
Mail struct {
Use string `mapstructure:"use"`
Title string `mapstructure:"title"`
SenderMail string `mapstructure:"senderMail"`
SenderAuthorizationCode string `mapstructure:"senderAuthorizationCode"`
SMTPAddr string `mapstructure:"smtpAddr"`
SMTPPort int `mapstructure:"smtpPort"`
} `mapstructure:"mail"`
}
type Admin struct {
RPC struct {
RegisterIP string `mapstructure:"registerIP"`
ListenIP string `mapstructure:"listenIP"`
Ports []int `mapstructure:"ports"`
} `mapstructure:"rpc"`
TokenPolicy struct {
Expire int `mapstructure:"expire"`
} `mapstructure:"tokenPolicy"`
Secret string `mapstructure:"secret"`
}
type Log struct {
StorageLocation string `mapstructure:"storageLocation"`
RotationTime uint `mapstructure:"rotationTime"`
RemainRotationCount uint `mapstructure:"remainRotationCount"`
RemainLogLevel int `mapstructure:"remainLogLevel"`
IsStdout bool `mapstructure:"isStdout"`
IsJson bool `mapstructure:"isJson"`
IsSimplify bool `mapstructure:"isSimplify"`
WithStack bool `mapstructure:"withStack"`
}
type AllConfig struct {
AdminAPI API
ChatAPI API
Admin Admin
Chat Chat
Discovery Discovery
Log Log
Mongo Mongo
Redis Redis
Share Share
}
func (a *AllConfig) Name2Config(name string) any {
switch name {
case ChatAPIAdminCfgFileName:
return a.AdminAPI
case ChatAPIChatCfgFileName:
return a.ChatAPI
case ChatRPCAdminCfgFileName:
return a.Admin
case ChatRPCChatCfgFileName:
return a.Chat
case DiscoveryConfigFileName:
return a.Discovery
case LogConfigFileName:
return a.Log
case MongodbConfigFileName:
return a.Mongo
case RedisConfigFileName:
return a.Redis
case ShareFileName:
return a.Share
default:
return nil
}
}
func (a *AllConfig) GetConfigNames() []string {
return []string{
ShareFileName,
RedisConfigFileName,
DiscoveryConfigFileName,
MongodbConfigFileName,
LogConfigFileName,
ChatAPIAdminCfgFileName,
ChatAPIChatCfgFileName,
ChatRPCAdminCfgFileName,
ChatRPCChatCfgFileName,
}
}