diff --git a/config.go b/config.go index 2d41379..c3f986c 100644 --- a/config.go +++ b/config.go @@ -107,3 +107,5 @@ func parseConfig(path string) (myConfig, error) { return sampleConfig, err } + +/* vim: set ft=go noet ai ts=4 sw=4 sts=4: */ diff --git a/globals.go b/globals.go index 5372ed9..4278f10 100644 --- a/globals.go +++ b/globals.go @@ -32,3 +32,5 @@ var sigChan = make(chan os.Signal, 1) var settingsDB = make(map[string]*pebble.DB) var tg echotron.API + +/* vim: set ft=go noet ai ts=4 sw=4 sts=4: */ diff --git a/main.go b/main.go index 1db11b6..ae03b50 100644 --- a/main.go +++ b/main.go @@ -113,3 +113,5 @@ func main() { redisMsgParser(msg.Payload) } } + +/* vim: set ft=go noet ai ts=4 sw=4 sts=4: */ diff --git a/telegram.go b/telegram.go index 0e52204..d75421e 100644 --- a/telegram.go +++ b/telegram.go @@ -156,3 +156,5 @@ func ConstructTelegramHighlightName(u *echotron.User) string { return fmt.Sprintf("[%s](%s)", username, link) } + +/* vim: set ft=go noet ai ts=4 sw=4 sts=4: */ diff --git a/types.go b/types.go index 3dbe4f9..35fa237 100644 --- a/types.go +++ b/types.go @@ -64,3 +64,5 @@ type sMsg struct { Username string `json:"username"` } `json:"misc"` } + +/* vim: set ft=go noet ai ts=4 sw=4 sts=4: */ diff --git a/util.go b/util.go index b07a9a4..8ac7eb3 100644 --- a/util.go +++ b/util.go @@ -1,145 +1,12 @@ package main import ( - "encoding/json" - "fmt" "os" - "path/filepath" "syscall" - "github.com/hjson/hjson-go" log "github.com/sirupsen/logrus" ) -// readConfig считывает и парсит конфиг-файл. -func readConfig() { - configLoaded := false - executablePath, err := os.Executable() - - if err != nil { - log.Errorf("Unable to get current executable path: %s", err) - } - - configJSONPath := fmt.Sprintf("%s/data/config.json", filepath.Dir(executablePath)) - - locations := []string{ - "~/.aleesa-telegram-go.json", - "~/aleesa-telegram-go.json", - "/etc/aleesa-telegram-go.json", - configJSONPath, - } - - for _, location := range locations { - fileInfo, err := os.Stat(location) - - // Предполагаем, что файла либо нет, либо мы не можем его прочитать, второе надо бы логгировать, но пока забьём. - if err != nil { - continue - } - - // Конфиг-файл длинноват для конфига, попробуем следующего кандидата. - if fileInfo.Size() > 65535 { - log.Warnf("Config file %s is too long for config, skipping", location) - - continue - } - - buf, err := os.ReadFile(location) - - // Не удалось прочитать, попробуем следующего кандидата. - if err != nil { - log.Warnf("Skip reading config file %s: %s", location, err) - - continue - } - - // Исходя из документации, hjson какбы умеет парсить "кривой" json, но парсит его в map-ку. - // Интереснее на выходе получить структурку: то есть мы вначале конфиг преобразуем в map-ку, затем эту map-ку - // сериализуем в json, а потом json преврщааем в стркутурку. Не очень эффективно, но он и не часто требуется. - var ( - sampleConfig myConfig - tmp map[string]interface{} - ) - - err = hjson.Unmarshal(buf, &tmp) - - // Не удалось распарсить - попробуем следующего кандидата. - if err != nil { - log.Warnf("Skip parsing config file %s: %s", location, err) - - continue - } - - tmpjson, err := json.Marshal(tmp) - - // Не удалось преобразовать map-ку в json. - if err != nil { - log.Warnf("Skip parsing config file %s: %s", location, err) - - continue - } - - if err := json.Unmarshal(tmpjson, &sampleConfig); err != nil { - log.Warnf("Skip parsing config file %s: %s", location, err) - - continue - } - - // Валидируем значения из конфига. - if sampleConfig.Redis.Server == "" { - sampleConfig.Redis.Server = "localhost" - - log.Infof("Redis server is not defined in config, using localhost") - } - - if sampleConfig.Redis.Port == 0 { - sampleConfig.Redis.Port = 6379 - } - - if sampleConfig.Redis.Channel == "" { - log.Errorf("Channel field in config file %s must be set", location) - os.Exit(1) - } - - if sampleConfig.Redis.MyChannel == "" { - log.Errorf("My_channel field in config file %s must be set", location) - os.Exit(1) - } - - if sampleConfig.Loglevel == "" { - sampleConfig.Loglevel = "info" - } - - // sampleConfig.Log = "" if not set - - if sampleConfig.Csign == "" { - log.Errorf("Csign field in config file %s must be set", location) - os.Exit(1) - } - - if sampleConfig.ForwardsMax == 0 { - sampleConfig.ForwardsMax = forwardMax - } - - if sampleConfig.DataDir == "" { - log.Errorf("Data_dir field in config file %s must be set", location) - os.Exit(1) - } - - config = sampleConfig - configLoaded = true - - log.Infof("Using %s as config file", location) - - break - } - - if !configLoaded { - log.Error("Config was not loaded! Refusing to start.") - os.Exit(1) - } -} - // sigHandler хэндлер сигналов закрывает все бд, все сетевые соединения и сваливает из приложения. func sigHandler() { var err error