04230fa7f0
- config.json → config.yaml (формат YAML)
- github.com/spf13/viper не нужен — используем gopkg.in/yaml.v3
- Поддержка .yaml и .yml расширений
- Флаг -config по умолчанию смотрит config.yaml
- config.local.{yaml,yml} добавлены в .gitignore
- Ветка переименована master → main
56 lines
1.1 KiB
Go
56 lines
1.1 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"gopkg.in/yaml.v3"
|
|
)
|
|
|
|
type Config struct {
|
|
ServerName string `yaml:"server_name"`
|
|
ListenAddr string `yaml:"listen_addr"`
|
|
Domain string `yaml:"domain"`
|
|
DataDir string `yaml:"data_dir"`
|
|
MaxFileSize int64 `yaml:"max_file_size"`
|
|
Federation bool `yaml:"federation"`
|
|
FederatedWith []string `yaml:"federated_with"`
|
|
LogLevel string `yaml:"log_level"`
|
|
}
|
|
|
|
func Default() *Config {
|
|
return &Config{
|
|
ServerName: "JustAMessenger",
|
|
ListenAddr: ":8443",
|
|
Domain: "localhost",
|
|
DataDir: "./data",
|
|
MaxFileSize: 2 << 30,
|
|
Federation: false,
|
|
LogLevel: "info",
|
|
}
|
|
}
|
|
|
|
func Load(path string) (*Config, error) {
|
|
cfg := Default()
|
|
abs, err := filepath.Abs(path)
|
|
if err != nil {
|
|
return cfg, nil
|
|
}
|
|
data, err := os.ReadFile(abs)
|
|
if err != nil {
|
|
return cfg, nil
|
|
}
|
|
|
|
ext := strings.ToLower(filepath.Ext(path))
|
|
switch ext {
|
|
case ".yaml", ".yml":
|
|
if err := yaml.Unmarshal(data, cfg); err != nil {
|
|
return nil, err
|
|
}
|
|
default:
|
|
return cfg, nil
|
|
}
|
|
return cfg, nil
|
|
}
|