1
0
mirror of https://blitiri.com.ar/repos/chasquid synced 2025-12-17 14:37:02 +00:00
Files
go-chasquid-smtp/internal/config/config.go
Alberto Bertogli 9ed30a747b config: Add a "data_dir" option
This patch adds a "data_dir" option, that chasquid will use to store
persistent data. It defaults to "/var/lib/chasquid" (for now, at least).

Users will come in subsequent patches.
2016-10-10 00:51:04 +01:00

79 lines
1.8 KiB
Go

// Package config implements the chasquid configuration.
package config
// Generate the config protobuf.
//go:generate protoc --go_out=. config.proto
import (
"io/ioutil"
"os"
"github.com/golang/glog"
"github.com/golang/protobuf/proto"
)
// Load the config from the given file.
func Load(path string) (*Config, error) {
c := &Config{}
buf, err := ioutil.ReadFile(path)
if err != nil {
glog.Errorf("Failed to read config at %q", path)
glog.Errorf(" (%v)", err)
return nil, err
}
err = proto.UnmarshalText(string(buf), c)
if err != nil {
glog.Errorf("Error parsing config: %v", err)
return nil, err
}
// Fill in defaults for anything that's missing.
if c.Hostname == "" {
c.Hostname, err = os.Hostname()
if err != nil {
glog.Errorf("Could not get hostname: %v", err)
return nil, err
}
}
if c.MaxDataSizeMb == 0 {
c.MaxDataSizeMb = 50
}
if len(c.SmtpAddress) == 0 {
c.SmtpAddress = append(c.SmtpAddress, "systemd")
}
if len(c.SubmissionAddress) == 0 {
c.SubmissionAddress = append(c.SubmissionAddress, "systemd")
}
if c.MailDeliveryAgentBin == "" {
c.MailDeliveryAgentBin = "procmail"
}
if len(c.MailDeliveryAgentArgs) == 0 {
c.MailDeliveryAgentArgs = append(c.MailDeliveryAgentArgs,
"-d", "%user%")
}
if c.DataDir == "" {
c.DataDir = "/var/lib/chasquid"
}
logConfig(c)
return c, nil
}
func logConfig(c *Config) {
glog.Infof("Configuration:")
glog.Infof(" Hostname: %q", c.Hostname)
glog.Infof(" Max data size (MB): %d", c.MaxDataSizeMb)
glog.Infof(" SMTP Addresses: %v", c.SmtpAddress)
glog.Infof(" Submission Addresses: %v", c.SubmissionAddress)
glog.Infof(" Monitoring address: %s", c.MonitoringAddress)
glog.Infof(" MDA: %s %v", c.MailDeliveryAgentBin, c.MailDeliveryAgentArgs)
glog.Infof(" Data directory: %s", c.DataDir)
}