98 lines
2.4 KiB
Go
98 lines
2.4 KiB
Go
package configuration
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/qdm12/golibs/logging"
|
|
"github.com/qdm12/golibs/os"
|
|
"github.com/qdm12/golibs/params"
|
|
)
|
|
|
|
// Settings contains all settings for the program to run.
|
|
type Settings struct {
|
|
OpenVPN OpenVPN
|
|
System System
|
|
DNS DNS
|
|
Firewall Firewall
|
|
HTTPProxy HTTPProxy
|
|
ShadowSocks ShadowSocks
|
|
Updater Updater
|
|
PublicIP PublicIP
|
|
VersionInformation bool
|
|
ControlServer ControlServer
|
|
}
|
|
|
|
func (settings *Settings) String() string {
|
|
return strings.Join(settings.lines(), "\n")
|
|
}
|
|
|
|
func (settings *Settings) lines() (lines []string) {
|
|
lines = append(lines, "Settings summary below:")
|
|
lines = append(lines, settings.OpenVPN.lines()...)
|
|
lines = append(lines, settings.DNS.lines()...)
|
|
lines = append(lines, settings.Firewall.lines()...)
|
|
lines = append(lines, settings.System.lines()...)
|
|
lines = append(lines, settings.HTTPProxy.lines()...)
|
|
lines = append(lines, settings.ShadowSocks.lines()...)
|
|
lines = append(lines, settings.ControlServer.lines()...)
|
|
lines = append(lines, settings.Updater.lines()...)
|
|
lines = append(lines, settings.PublicIP.lines()...)
|
|
if settings.VersionInformation {
|
|
lines = append(lines, lastIndent+"Github version information: enabled")
|
|
}
|
|
return lines
|
|
}
|
|
|
|
// Read obtains all configuration options for the program and returns an error as soon
|
|
// as an error is encountered reading them.
|
|
func (settings *Settings) Read(env params.Env, os os.OS, logger logging.Logger) (err error) {
|
|
r := newReader(env, os, logger)
|
|
|
|
settings.VersionInformation, err = r.env.OnOff("VERSION_INFORMATION", params.Default("on"))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := settings.OpenVPN.read(r); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := settings.System.read(r); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := settings.DNS.read(r); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := settings.Firewall.read(r); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := settings.HTTPProxy.read(r); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := settings.ShadowSocks.read(r); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := settings.ControlServer.read(r); err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := settings.Updater.read(r); err != nil {
|
|
return err
|
|
}
|
|
|
|
if ip := settings.DNS.PlaintextAddress; ip != nil {
|
|
settings.Updater.DNSAddress = ip.String()
|
|
}
|
|
|
|
if err := settings.PublicIP.read(r); err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|