98 lines
2.0 KiB
Go
98 lines
2.0 KiB
Go
package config
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"helmet/pkg/client"
|
|
|
|
"go.yaml.in/yaml/v4"
|
|
)
|
|
|
|
const (
|
|
configFilename = "minilbd.yaml"
|
|
)
|
|
|
|
var (
|
|
buildVersion = "NONE"
|
|
)
|
|
|
|
type Service struct {
|
|
Port uint32 `json:"port" yaml:"port"`
|
|
}
|
|
|
|
type Auth struct {
|
|
Username string `json:"username" yaml:"username"`
|
|
Password string `json:"password" yaml:"password"`
|
|
}
|
|
|
|
type Config struct {
|
|
Service Service `json:"service" yaml:"service"`
|
|
Auths []Auth `json:"auths" yaml:"auths"`
|
|
Hostname string `json:"hostname" yaml:"hostname"`
|
|
LogPath string `json:"logfile" yaml:"logfile"`
|
|
RunPath string `json:"runfile" yaml:"runfile"`
|
|
AsDaemon bool `json:"asDaemon" yaml:"asDaemon"`
|
|
LogLimit int64 `json:"logLimit" yaml:logLimit`
|
|
|
|
}
|
|
|
|
func NewConfig() (*Config, error) {
|
|
conf := &Config{
|
|
Service: Service{
|
|
Port: client.DefaultServicePort,
|
|
},
|
|
AsDaemon: false,
|
|
LogLimit: 1024 * 1024 * 10, // 10 Mb
|
|
}
|
|
hostname, err := os.Hostname()
|
|
if err != nil {
|
|
return conf, err
|
|
}
|
|
conf.Hostname = hostname
|
|
exeName := filepath.Base(os.Args[0])
|
|
conf.LogPath = filepath.Join(logdirPath, fmt.Sprintf("%s.log", exeName))
|
|
conf.RunPath = filepath.Join(rundirPath, fmt.Sprintf("%s.pid", exeName))
|
|
return conf, err
|
|
}
|
|
|
|
func (conf *Config) Read() error {
|
|
var err error
|
|
configPath := filepath.Join(confdirPath, configFilename)
|
|
confBytes, err := os.ReadFile(configPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = yaml.Unmarshal(confBytes, conf)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (conf *Config) Validate() error {
|
|
var err []error
|
|
for i := range conf.Auths {
|
|
if conf.Auths[i].Username == "" {
|
|
err = append(err, errors.New("Username must be set"))
|
|
}
|
|
if conf.Auths[i].Password == "" {
|
|
err = append(err, errors.New("Password must be set"))
|
|
}
|
|
}
|
|
return errors.Join(err...)
|
|
}
|
|
|
|
func (conf *Config) YAML() (string, error) {
|
|
var err error
|
|
var res string
|
|
yamlBytes, err := yaml.Marshal(conf)
|
|
if err != nil {
|
|
return res, err
|
|
}
|
|
res = string(yamlBytes)
|
|
return res, err
|
|
}
|