SHADOWSOCKS_METHOD environment variable (#117)

This commit is contained in:
Quentin McGaw
2020-03-29 20:06:27 -04:00
committed by GitHub
parent e5adccd9c5
commit 0235df74a0
9 changed files with 31 additions and 9 deletions

View File

@@ -66,6 +66,7 @@ type ParamsReader interface {
GetShadowSocksLog() (activated bool, err error)
GetShadowSocksPort() (port uint16, err error)
GetShadowSocksPassword() (password string, err error)
GetShadowSocksMethod() (method string, err error)
// Tinyproxy getters
GetTinyProxy() (activated bool, err error)

View File

@@ -38,3 +38,9 @@ func (p *paramsReader) GetShadowSocksPassword() (password string, err error) {
defer p.unsetEnv("SHADOWSOCKS_PASSWORD")
return p.envParams.GetEnv("SHADOWSOCKS_PASSWORD", libparams.CaseSensitiveValue())
}
// GetShadowSocksMethod obtains the ShadowSocks method to use from the environment variable
// SHADOWSOCKS_METHOD
func (p *paramsReader) GetShadowSocksMethod() (method string, err error) {
return p.envParams.GetEnv("SHADOWSOCKS_METHOD", libparams.Default("chacha20-ietf-poly1305"))
}

View File

@@ -13,15 +13,23 @@ type ShadowSocks struct {
Password string
Log bool
Port uint16
Method string
}
func (s *ShadowSocks) String() string {
if !s.Enabled {
return "ShadowSocks settings: disabled"
}
log := "disabled"
if s.Log {
log = "enabled"
}
settingsList := []string{
"ShadowSocks settings:",
"Password: [redacted]",
"Log: " + log,
fmt.Sprintf("Port: %d", s.Port),
"Method: " + s.Method,
}
return strings.Join(settingsList, "\n |--")
}
@@ -44,5 +52,9 @@ func GetShadowSocksSettings(params params.ParamsReader) (settings ShadowSocks, e
if err != nil {
return settings, err
}
settings.Method, err = params.GetShadowSocksMethod()
if err != nil {
return settings, err
}
return settings, nil
}

View File

@@ -8,9 +8,9 @@ import (
"github.com/qdm12/private-internet-access-docker/internal/constants"
)
func (c *configurator) MakeConf(port uint16, password string, uid, gid int) (err error) {
func (c *configurator) MakeConf(port uint16, password, method string, uid, gid int) (err error) {
c.logger.Info("%s: generating configuration file", logPrefix)
data := generateConf(port, password)
data := generateConf(port, password, method)
return c.fileManager.WriteToFile(
string(constants.ShadowsocksConf),
data,
@@ -18,7 +18,7 @@ func (c *configurator) MakeConf(port uint16, password string, uid, gid int) (err
files.Permissions(0400))
}
func generateConf(port uint16, password string) (data []byte) {
func generateConf(port uint16, password, method string) (data []byte) {
conf := struct {
Server string `json:"server"`
User string `json:"user"`
@@ -33,7 +33,7 @@ func generateConf(port uint16, password string) (data []byte) {
}{
Server: "0.0.0.0",
User: "nonrootuser",
Method: "chacha20-ietf-poly1305",
Method: method,
Timeout: 30,
FastOpen: false,
Mode: "tcp_and_udp",

View File

@@ -32,7 +32,7 @@ func Test_generateConf(t *testing.T) {
tc := tc
t.Run(name, func(t *testing.T) {
t.Parallel()
data := generateConf(tc.port, tc.password)
data := generateConf(tc.port, tc.password, "chacha20-ietf-poly1305")
assert.Equal(t, tc.data, data)
})
}
@@ -65,7 +65,7 @@ func Test_MakeConf(t *testing.T) {
).
Return(tc.writeErr).Once()
c := &configurator{logger: logger, fileManager: fileManager}
err := c.MakeConf(2000, "abcde", 1000, 1001)
err := c.MakeConf(2000, "abcde", "chacha20-ietf-poly1305", 1000, 1001)
if tc.err != nil {
require.Error(t, err)
assert.Equal(t, tc.err.Error(), err.Error())

View File

@@ -12,7 +12,7 @@ const logPrefix = "shadowsocks configurator"
type Configurator interface {
Version() (string, error)
MakeConf(port uint16, password string, uid, gid int) (err error)
MakeConf(port uint16, password, method string, uid, gid int) (err error)
Start(server string, port uint16, password string, log bool) (stdout io.ReadCloser, waitFn func() error, err error)
}