2022-01-06 06:40:23 -05:00
|
|
|
package settings
|
|
|
|
|
|
|
|
|
|
import (
|
2023-05-25 12:08:43 +00:00
|
|
|
"github.com/qdm12/gosettings"
|
2022-01-06 06:40:23 -05:00
|
|
|
"github.com/qdm12/gotree"
|
|
|
|
|
"github.com/qdm12/ss-server/pkg/tcpudp"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// Shadowsocks contains settings to configure the Shadowsocks server.
|
|
|
|
|
type Shadowsocks struct {
|
|
|
|
|
// Enabled is true if the server should be running.
|
|
|
|
|
// It defaults to false, and cannot be nil in the internal state.
|
|
|
|
|
Enabled *bool
|
|
|
|
|
// Settings are settings for the TCP+UDP server.
|
|
|
|
|
tcpudp.Settings
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s Shadowsocks) validate() (err error) {
|
|
|
|
|
return s.Settings.Validate()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *Shadowsocks) copy() (copied Shadowsocks) {
|
|
|
|
|
return Shadowsocks{
|
2023-05-25 12:08:43 +00:00
|
|
|
Enabled: gosettings.CopyPointer(s.Enabled),
|
2022-01-06 06:40:23 -05:00
|
|
|
Settings: s.Settings.Copy(),
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// mergeWith merges the other settings into any
|
|
|
|
|
// unset field of the receiver settings object.
|
|
|
|
|
func (s *Shadowsocks) mergeWith(other Shadowsocks) {
|
2023-05-25 12:08:43 +00:00
|
|
|
s.Enabled = gosettings.MergeWithPointer(s.Enabled, other.Enabled)
|
2023-05-31 14:26:31 +00:00
|
|
|
s.Settings = s.Settings.MergeWith(other.Settings)
|
2022-01-06 06:40:23 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// overrideWith overrides fields of the receiver
|
|
|
|
|
// settings object with any field set in the other
|
|
|
|
|
// settings.
|
|
|
|
|
func (s *Shadowsocks) overrideWith(other Shadowsocks) {
|
2023-05-25 12:08:43 +00:00
|
|
|
s.Enabled = gosettings.OverrideWithPointer(s.Enabled, other.Enabled)
|
2022-01-06 06:40:23 -05:00
|
|
|
s.Settings.OverrideWith(other.Settings)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *Shadowsocks) setDefaults() {
|
2023-05-25 12:08:43 +00:00
|
|
|
s.Enabled = gosettings.DefaultPointer(s.Enabled, false)
|
2022-01-06 06:40:23 -05:00
|
|
|
s.Settings.SetDefaults()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s Shadowsocks) String() string {
|
|
|
|
|
return s.toLinesNode().String()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s Shadowsocks) toLinesNode() (node *gotree.Node) {
|
|
|
|
|
node = gotree.New("Shadowsocks server settings:")
|
|
|
|
|
|
2023-05-28 10:33:36 +00:00
|
|
|
node.Appendf("Enabled: %s", gosettings.BoolToYesNo(s.Enabled))
|
2022-01-06 06:40:23 -05:00
|
|
|
if !*s.Enabled {
|
|
|
|
|
return node
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// TODO have ToLinesNode in qdm12/ss-server
|
2023-05-31 14:26:31 +00:00
|
|
|
node.Appendf("Listening address: %s", *s.Address)
|
2022-01-06 06:40:23 -05:00
|
|
|
node.Appendf("Cipher: %s", s.CipherName)
|
2023-05-28 10:33:36 +00:00
|
|
|
node.Appendf("Password: %s", gosettings.ObfuscateKey(*s.Password))
|
|
|
|
|
node.Appendf("Log addresses: %s", gosettings.BoolToYesNo(s.LogAddresses))
|
2022-01-06 06:40:23 -05:00
|
|
|
|
|
|
|
|
return node
|
|
|
|
|
}
|