124 lines
3.5 KiB
Go
124 lines
3.5 KiB
Go
package config
|
|
|
|
import (
|
|
"testmqtt/hooks/auth"
|
|
"testmqtt/hooks/debug"
|
|
"testmqtt/hooks/storage/badger"
|
|
"testmqtt/hooks/storage/bolt"
|
|
"testmqtt/hooks/storage/pebble"
|
|
"testmqtt/hooks/storage/redis"
|
|
"testmqtt/mqtt"
|
|
)
|
|
|
|
// HookConfigs 全部Hook的配置
|
|
// HookConfigs contains configurations to enable individual hooks.
|
|
type HookConfigs struct {
|
|
Auth *HookAuthConfig `yaml:"auth" json:"auth"` // Auth AuthHook配置
|
|
Storage *HookStorageConfig `yaml:"storage" json:"storage"` // Storage StorageHook配置
|
|
Debug *debug.Options `yaml:"debug" json:"debug"` // Debug DebugHook配置
|
|
}
|
|
|
|
// HookAuthConfig AuthHook的配置
|
|
// HookAuthConfig contains configurations for the auth hook.
|
|
type HookAuthConfig struct {
|
|
Ledger auth.Ledger `yaml:"ledger" json:"ledger"`
|
|
AllowAll bool `yaml:"allow_all" json:"allow_all"`
|
|
}
|
|
|
|
// HookStorageConfig StorageHook的配置
|
|
// HookStorageConfig contains configurations for the different storage hooks.
|
|
type HookStorageConfig struct {
|
|
Badger *badger.Options `yaml:"badger" json:"badger"`
|
|
Bolt *bolt.Options `yaml:"bolt" json:"bolt"`
|
|
Pebble *pebble.Options `yaml:"pebble" json:"pebble"`
|
|
Redis *redis.Options `yaml:"redis" json:"redis"`
|
|
}
|
|
|
|
// HookDebugConfig DebugHook的配置
|
|
// HookDebugConfig contains configuration settings for the debug output.
|
|
type HookDebugConfig struct {
|
|
Enable bool `yaml:"enable" json:"enable"` // non-zero field for enabling hook using file-based config
|
|
ShowPacketData bool `yaml:"show_packet_data" json:"show_packet_data"` // include decoded packet data (default false)
|
|
ShowPings bool `yaml:"show_pings" json:"show_pings"` // show ping requests and responses (default false)
|
|
ShowPasswords bool `yaml:"show_passwords" json:"show_passwords"` // show connecting user passwords (default false)
|
|
}
|
|
|
|
// ToHooks converts Hook file configurations into Hooks to be added to the server.
|
|
func (hc HookConfigs) ToHooks() []mqtt.HookLoadConfig {
|
|
var hlc []mqtt.HookLoadConfig
|
|
|
|
if hc.Auth != nil {
|
|
hlc = append(hlc, hc.toHooksAuth()...)
|
|
}
|
|
|
|
if hc.Storage != nil {
|
|
hlc = append(hlc, hc.toHooksStorage()...)
|
|
}
|
|
|
|
if hc.Debug != nil {
|
|
hlc = append(hlc, mqtt.HookLoadConfig{
|
|
Hook: new(debug.Hook),
|
|
Config: hc.Debug,
|
|
})
|
|
}
|
|
|
|
return hlc
|
|
}
|
|
|
|
// toHooksAuth converts auth hook configurations into auth hooks.
|
|
func (hc HookConfigs) toHooksAuth() []mqtt.HookLoadConfig {
|
|
var hlc []mqtt.HookLoadConfig
|
|
if hc.Auth.AllowAll {
|
|
hlc = append(hlc, mqtt.HookLoadConfig{
|
|
Hook: new(auth.AllowHook),
|
|
})
|
|
} else {
|
|
hlc = append(hlc, mqtt.HookLoadConfig{
|
|
Hook: new(auth.Hook),
|
|
Config: &auth.Options{
|
|
Ledger: &auth.Ledger{ // avoid copying sync.Locker
|
|
Users: hc.Auth.Ledger.Users,
|
|
Auth: hc.Auth.Ledger.Auth,
|
|
ACL: hc.Auth.Ledger.ACL,
|
|
},
|
|
},
|
|
})
|
|
}
|
|
return hlc
|
|
}
|
|
|
|
// toHooksAuth converts storage hook configurations into storage hooks.
|
|
func (hc HookConfigs) toHooksStorage() []mqtt.HookLoadConfig {
|
|
|
|
var hlc []mqtt.HookLoadConfig
|
|
|
|
if hc.Storage.Badger != nil {
|
|
hlc = append(hlc, mqtt.HookLoadConfig{
|
|
Hook: new(badger.Hook),
|
|
Config: hc.Storage.Badger,
|
|
})
|
|
}
|
|
|
|
if hc.Storage.Bolt != nil {
|
|
hlc = append(hlc, mqtt.HookLoadConfig{
|
|
Hook: new(bolt.Hook),
|
|
Config: hc.Storage.Bolt,
|
|
})
|
|
}
|
|
|
|
if hc.Storage.Redis != nil {
|
|
hlc = append(hlc, mqtt.HookLoadConfig{
|
|
Hook: new(redis.Hook),
|
|
Config: hc.Storage.Redis,
|
|
})
|
|
}
|
|
|
|
if hc.Storage.Pebble != nil {
|
|
hlc = append(hlc, mqtt.HookLoadConfig{
|
|
Hook: new(pebble.Hook),
|
|
Config: hc.Storage.Pebble,
|
|
})
|
|
}
|
|
return hlc
|
|
}
|