mirror of
https://github.com/qdm12/gluetun.git
synced 2025-12-11 13:56:50 -06:00
110 lines
2.9 KiB
Go
110 lines
2.9 KiB
Go
package configuration
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/qdm12/golibs/params"
|
|
"github.com/qdm12/ss-server/pkg/tcpudp"
|
|
)
|
|
|
|
// ShadowSocks contains settings to configure the Shadowsocks server.
|
|
type ShadowSocks struct {
|
|
Enabled bool
|
|
tcpudp.Settings
|
|
}
|
|
|
|
func (settings *ShadowSocks) String() string {
|
|
return strings.Join(settings.lines(), "\n")
|
|
}
|
|
|
|
func (settings *ShadowSocks) lines() (lines []string) {
|
|
if !settings.Enabled {
|
|
return nil
|
|
}
|
|
|
|
lines = append(lines, lastIndent+"Shadowsocks server:")
|
|
|
|
lines = append(lines, indent+lastIndent+"Listening address: "+settings.Address)
|
|
|
|
lines = append(lines, indent+lastIndent+"Cipher: "+settings.CipherName)
|
|
|
|
if settings.LogAddresses {
|
|
lines = append(lines, indent+lastIndent+"Log addresses: enabled")
|
|
}
|
|
|
|
return lines
|
|
}
|
|
|
|
func (settings *ShadowSocks) read(r reader) (err error) {
|
|
settings.Enabled, err = r.env.OnOff("SHADOWSOCKS", params.Default("off"))
|
|
if !settings.Enabled {
|
|
return nil
|
|
} else if err != nil {
|
|
return fmt.Errorf("environment variable SHADOWSOCKS: %w", err)
|
|
}
|
|
|
|
settings.Password, err = r.getFromEnvOrSecretFile("SHADOWSOCKS_PASSWORD", settings.Enabled, nil)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
settings.LogAddresses, err = r.env.OnOff("SHADOWSOCKS_LOG", params.Default("off"))
|
|
if err != nil {
|
|
return fmt.Errorf("environment variable SHADOWSOCKS_LOG: %w", err)
|
|
}
|
|
|
|
settings.CipherName, err = r.env.Get("SHADOWSOCKS_CIPHER", params.Default("chacha20-ietf-poly1305"),
|
|
params.RetroKeys([]string{"SHADOWSOCKS_METHOD"}, r.onRetroActive))
|
|
if err != nil {
|
|
return fmt.Errorf("environment variable SHADOWSOCKS_CIPHER (or SHADOWSOCKS_METHOD): %w", err)
|
|
}
|
|
|
|
warning, err := settings.getAddress(r.env)
|
|
if warning != "" {
|
|
r.warner.Warn(warning)
|
|
}
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (settings *ShadowSocks) getAddress(env params.Interface) (
|
|
warning string, err error) {
|
|
address, err := env.Get("SHADOWSOCKS_LISTENING_ADDRESS")
|
|
if err != nil {
|
|
return "", fmt.Errorf("environment variable SHADOWSOCKS_LISTENING_ADDRESS: %w", err)
|
|
}
|
|
|
|
if address != "" {
|
|
address, warning, err := env.ListeningAddress("SHADOWSOCKS_LISTENING_ADDRESS")
|
|
if err != nil {
|
|
return "", fmt.Errorf("environment variable SHADOWSOCKS_LISTENING_ADDRESS: %w", err)
|
|
}
|
|
settings.Address = address
|
|
return warning, nil
|
|
}
|
|
|
|
// Retro-compatibility
|
|
const retroWarning = "You are using the old environment variable " +
|
|
"SHADOWSOCKS_PORT, please consider using " +
|
|
"SHADOWSOCKS_LISTENING_ADDRESS instead"
|
|
portStr, err := env.Get("SHADOWSOCKS_PORT")
|
|
if err != nil {
|
|
return retroWarning, fmt.Errorf("environment variable SHADOWSOCKS_PORT: %w", err)
|
|
} else if portStr != "" {
|
|
port, _, err := env.ListeningPort("SHADOWSOCKS_PORT")
|
|
if err != nil {
|
|
return retroWarning, fmt.Errorf("environment variable SHADOWSOCKS_PORT: %w", err)
|
|
}
|
|
settings.Address = ":" + fmt.Sprint(port)
|
|
return retroWarning, nil
|
|
}
|
|
|
|
// Default value
|
|
settings.Address = ":8388"
|
|
return "", nil
|
|
}
|