golint
This commit is contained in:
parent
695c9fc353
commit
7e036fd795
|
@ -9,12 +9,14 @@ import (
|
|||
"gopkg.in/yaml.v2"
|
||||
)
|
||||
|
||||
// Config is for top-level struct for config
|
||||
type Config struct {
|
||||
Telegram TelegramConfig `yaml:":telegram"`
|
||||
Xmpp XmppConfig `yaml:":xmpp"`
|
||||
XMPP XMPPConfig `yaml:":xmpp"`
|
||||
}
|
||||
|
||||
type XmppConfig struct {
|
||||
// XMPPConfig is for :xmpp: subtree
|
||||
type XMPPConfig struct {
|
||||
Loglevel string `yaml:":loglevel"`
|
||||
Jid string `yaml:":jid"`
|
||||
Host string `yaml:":host"`
|
||||
|
@ -23,6 +25,7 @@ type XmppConfig struct {
|
|||
Db string `yaml:":db"`
|
||||
}
|
||||
|
||||
// TelegramConfig is for :telegram: subtree
|
||||
type TelegramConfig struct {
|
||||
Loglevel string `yaml:":loglevel"`
|
||||
Content TelegramContentConfig `yaml:":content"`
|
||||
|
@ -30,26 +33,31 @@ type TelegramConfig struct {
|
|||
Tdlib TelegramTdlibConfig `yaml:":tdlib"`
|
||||
}
|
||||
|
||||
// TelegramContentConfig is for :content: subtree
|
||||
type TelegramContentConfig struct {
|
||||
Path string `yaml:":path"`
|
||||
Link string `yaml:":link"`
|
||||
Upload string `yaml:":upload"`
|
||||
}
|
||||
|
||||
// TelegramTdlibConfig is for :tdlib: subtree
|
||||
type TelegramTdlibConfig struct {
|
||||
Path string `yaml:":lib_path"`
|
||||
Client TelegramTdlibClientConfig `yaml:":client"`
|
||||
Path string `yaml:":lib_path"`
|
||||
Logfile string `yaml:":logfile"`
|
||||
Client TelegramTdlibClientConfig `yaml:":client"`
|
||||
}
|
||||
|
||||
// TelegramTdlibClientConfig is for :client: subtree
|
||||
type TelegramTdlibClientConfig struct {
|
||||
ApiId string `yaml:":api_id"`
|
||||
ApiHash string `yaml:":api_hash"`
|
||||
APIID string `yaml:":api_id"`
|
||||
APIHash string `yaml:":api_hash"`
|
||||
DeviceModel string `yaml:":device_model"`
|
||||
ApplicationVersion string `yaml:":application_version"`
|
||||
UseChatInfoDatabase bool `yaml:":use_chat_info_database"`
|
||||
}
|
||||
|
||||
func ReadConfig(path string, schema_path string) (Config, error) {
|
||||
// ReadConfig reads the specified config file, validates it and returns a struct
|
||||
func ReadConfig(path string, schemaPath string) (Config, error) {
|
||||
var config Config
|
||||
|
||||
file, err := ioutil.ReadFile(path)
|
||||
|
@ -62,7 +70,7 @@ func ReadConfig(path string, schema_path string) (Config, error) {
|
|||
return config, errors.Wrap(err, "Error parsing config")
|
||||
}
|
||||
|
||||
err = validateConfig(file, schema_path)
|
||||
err = validateConfig(file, schemaPath)
|
||||
if err != nil {
|
||||
return config, errors.Wrap(err, "Validation error")
|
||||
}
|
||||
|
@ -70,25 +78,25 @@ func ReadConfig(path string, schema_path string) (Config, error) {
|
|||
return config, nil
|
||||
}
|
||||
|
||||
func validateConfig(file []byte, schema_path string) error {
|
||||
schema, err := jsonschema.Compile(schema_path)
|
||||
func validateConfig(file []byte, schemaPath string) error {
|
||||
schema, err := jsonschema.Compile(schemaPath)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Corrupted JSON schema")
|
||||
}
|
||||
|
||||
var config_generic interface{}
|
||||
var configGeneric interface{}
|
||||
|
||||
err = yaml.Unmarshal(file, &config_generic)
|
||||
err = yaml.Unmarshal(file, &configGeneric)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Error re-parsing config")
|
||||
}
|
||||
|
||||
config_generic, err = convertToStringKeysRecursive(config_generic, "")
|
||||
configGeneric, err = convertToStringKeysRecursive(configGeneric, "")
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Config conversion error")
|
||||
}
|
||||
|
||||
err = schema.ValidateInterface(config_generic)
|
||||
err = schema.ValidateInterface(configGeneric)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "Config validation error")
|
||||
}
|
||||
|
|
|
@ -4,24 +4,24 @@ import (
|
|||
"testing"
|
||||
)
|
||||
|
||||
const SCHEMA_PATH string = "../config_schema.json"
|
||||
const schemaPath string = "../config_schema.json"
|
||||
|
||||
func TestNoConfig(t *testing.T) {
|
||||
_, err := ReadConfig("../test/sfklase.yml", SCHEMA_PATH)
|
||||
_, err := ReadConfig("../test/sfklase.yml", schemaPath)
|
||||
if err == nil {
|
||||
t.Errorf("Non-existent config was successfully read")
|
||||
}
|
||||
}
|
||||
|
||||
func TestGoodConfig(t *testing.T) {
|
||||
_, err := ReadConfig("../test/good_config.yml", SCHEMA_PATH)
|
||||
_, err := ReadConfig("../test/good_config.yml", schemaPath)
|
||||
if err != nil {
|
||||
t.Errorf("Good config is not accepted: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestBadConfig(t *testing.T) {
|
||||
_, err := ReadConfig("../test/bad_config.yml", SCHEMA_PATH)
|
||||
_, err := ReadConfig("../test/bad_config.yml", schemaPath)
|
||||
if err == nil {
|
||||
t.Errorf("Bad config is accepted but it shouldn't!")
|
||||
} else {
|
||||
|
|
|
@ -7,16 +7,18 @@ import (
|
|||
"dev.narayana.im/narayana/telegabber/xmpp"
|
||||
)
|
||||
|
||||
const CONFIG_PATH string = "config.yml"
|
||||
const SCHEMA_PATH string = "./config_schema.json"
|
||||
// YAML config, compatible with the format of Zhabogram 2.0.0
|
||||
const configPath string = "config.yml"
|
||||
// JSON schema (not for editing by a user)
|
||||
const schemaPath string = "./config_schema.json"
|
||||
|
||||
func main() {
|
||||
config, err := config.ReadConfig(CONFIG_PATH, SCHEMA_PATH)
|
||||
config, err := config.ReadConfig(configPath, schemaPath)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
cm := xmpp.NewComponent(config.Xmpp)
|
||||
cm := xmpp.NewComponent(config.XMPP)
|
||||
|
||||
// reconnect automatically
|
||||
log.Fatal(cm.Run())
|
||||
|
|
|
@ -8,7 +8,9 @@ import (
|
|||
"gosrc.io/xmpp"
|
||||
)
|
||||
|
||||
func NewComponent(conf config.XmppConfig) *xmpp.StreamManager {
|
||||
// NewComponent starts a new component and wraps it in
|
||||
// a stream manager that you should start yourself
|
||||
func NewComponent(conf config.XMPPConfig) *xmpp.StreamManager {
|
||||
options := xmpp.ComponentOptions{
|
||||
Address: conf.Host + ":" + conf.Port,
|
||||
Domain: conf.Jid,
|
||||
|
|
|
@ -8,6 +8,7 @@ import (
|
|||
"gosrc.io/xmpp/stanza"
|
||||
)
|
||||
|
||||
// HandleMessage processes an incoming XMPP message
|
||||
func HandleMessage(s xmpp.Sender, p stanza.Packet) {
|
||||
msg, ok := p.(stanza.Message)
|
||||
if !ok {
|
||||
|
|
Loading…
Reference in a new issue