HTTP proxy written in Go to replace Tinyproxy (#269)
This commit is contained in:
78
internal/params/httpproxy.go
Normal file
78
internal/params/httpproxy.go
Normal file
@@ -0,0 +1,78 @@
|
||||
package params
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
libparams "github.com/qdm12/golibs/params"
|
||||
)
|
||||
|
||||
// GetHTTPProxy obtains if the HTTP proxy is on from the environment variable
|
||||
// HTTPPROXY, and using PROXY and TINYPROXY as retro-compatibility names.
|
||||
func (r *reader) GetHTTPProxy() (enabled bool, err error) {
|
||||
retroKeysOption := libparams.RetroKeys(
|
||||
[]string{"TINYPROXY", "PROXY"},
|
||||
r.onRetroActive,
|
||||
)
|
||||
return r.envParams.GetOnOff("HTTPPROXY", retroKeysOption, libparams.Default("off"))
|
||||
}
|
||||
|
||||
// GetHTTPProxyLog obtains the if http proxy requests should be logged from
|
||||
// the environment variable HTTPPROXY_LOG, and using PROXY_LOG_LEVEL and
|
||||
// TINYPROXY_LOG as retro-compatibility names.
|
||||
func (r *reader) GetHTTPProxyLog() (log bool, err error) {
|
||||
s, _ := r.envParams.GetEnv("HTTPPROXY_LOG")
|
||||
if len(s) == 0 {
|
||||
s, _ = r.envParams.GetEnv("PROXY_LOG_LEVEL")
|
||||
if len(s) == 0 {
|
||||
s, _ = r.envParams.GetEnv("TINYPROXY_LOG")
|
||||
if len(s) == 0 {
|
||||
return false, nil // default log disabled
|
||||
}
|
||||
}
|
||||
switch strings.ToLower(s) {
|
||||
case "info", "connect", "notice":
|
||||
return true, nil
|
||||
default:
|
||||
return false, nil
|
||||
}
|
||||
}
|
||||
return r.envParams.GetOnOff("HTTPPROXY_LOG", libparams.Default("off"))
|
||||
}
|
||||
|
||||
// GetHTTPProxyPort obtains the HTTP proxy listening port from the environment variable
|
||||
// HTTPPROXY_PORT, and using PROXY_PORT and TINYPROXY_PORT as retro-compatibility names.
|
||||
func (r *reader) GetHTTPProxyPort() (port uint16, err error) {
|
||||
retroKeysOption := libparams.RetroKeys(
|
||||
[]string{"TINYPROXY_PORT", "PROXY_PORT"},
|
||||
r.onRetroActive,
|
||||
)
|
||||
return r.envParams.GetPort("HTTPPROXY_PORT", retroKeysOption, libparams.Default("8888"))
|
||||
}
|
||||
|
||||
// GetHTTPProxyUser obtains the HTTP proxy server user from the environment variable
|
||||
// HTTPPROXY_USER, and using TINYPROXY_USER and PROXY_USER as retro-compatibility names.
|
||||
func (r *reader) GetHTTPProxyUser() (user string, err error) {
|
||||
retroKeysOption := libparams.RetroKeys(
|
||||
[]string{"TINYPROXY_USER", "PROXY_USER"},
|
||||
r.onRetroActive,
|
||||
)
|
||||
return r.envParams.GetEnv("HTTPPROXY_USER",
|
||||
retroKeysOption, libparams.CaseSensitiveValue(), libparams.Unset())
|
||||
}
|
||||
|
||||
// GetHTTPProxyPassword obtains the HTTP proxy server password from the environment variable
|
||||
// HTTPPROXY_PASSWORD, and using TINYPROXY_PASSWORD and PROXY_PASSWORD as retro-compatibility names.
|
||||
func (r *reader) GetHTTPProxyPassword() (password string, err error) {
|
||||
retroKeysOption := libparams.RetroKeys(
|
||||
[]string{"TINYPROXY_PASSWORD", "PROXY_PASSWORD"},
|
||||
r.onRetroActive,
|
||||
)
|
||||
return r.envParams.GetEnv("HTTPPROXY_PASSWORD",
|
||||
retroKeysOption, libparams.CaseSensitiveValue(), libparams.Unset())
|
||||
}
|
||||
|
||||
// GetHTTPProxyStealth obtains the HTTP proxy server stealth mode
|
||||
// from the environment variable HTTPPROXY_STEALTH.
|
||||
func (r *reader) GetHTTPProxyStealth() (stealth bool, err error) {
|
||||
return r.envParams.GetOnOff("HTTPPROXY_STEALTH", libparams.Default("off"))
|
||||
}
|
||||
@@ -102,12 +102,13 @@ type Reader interface {
|
||||
GetShadowSocksPassword() (password string, err error)
|
||||
GetShadowSocksMethod() (method string, err error)
|
||||
|
||||
// Tinyproxy getters
|
||||
GetTinyProxy() (activated bool, err error)
|
||||
GetTinyProxyLog() (models.TinyProxyLogLevel, error)
|
||||
GetTinyProxyPort() (port uint16, err error)
|
||||
GetTinyProxyUser() (user string, err error)
|
||||
GetTinyProxyPassword() (password string, err error)
|
||||
// HTTP proxy getters
|
||||
GetHTTPProxy() (activated bool, err error)
|
||||
GetHTTPProxyLog() (log bool, err error)
|
||||
GetHTTPProxyPort() (port uint16, err error)
|
||||
GetHTTPProxyUser() (user string, err error)
|
||||
GetHTTPProxyPassword() (password string, err error)
|
||||
GetHTTPProxyStealth() (stealth bool, err error)
|
||||
|
||||
// Public IP getters
|
||||
GetPublicIPPeriod() (period time.Duration, err error)
|
||||
|
||||
@@ -1,120 +0,0 @@
|
||||
package params
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
|
||||
"github.com/qdm12/gluetun/internal/models"
|
||||
libparams "github.com/qdm12/golibs/params"
|
||||
)
|
||||
|
||||
// GetTinyProxy obtains if TinyProxy is on from the environment variable
|
||||
// TINYPROXY, and using PROXY as a retro-compatibility name.
|
||||
func (r *reader) GetTinyProxy() (activated bool, err error) {
|
||||
// Retro-compatibility
|
||||
s, err := r.envParams.GetEnv("PROXY")
|
||||
if err != nil {
|
||||
return false, err
|
||||
} else if len(s) != 0 {
|
||||
r.logger.Warn("You are using the old environment variable PROXY, please consider changing it to TINYPROXY")
|
||||
return r.envParams.GetOnOff("PROXY", libparams.Compulsory())
|
||||
}
|
||||
return r.envParams.GetOnOff("TINYPROXY", libparams.Default("off"))
|
||||
}
|
||||
|
||||
// GetTinyProxyLog obtains the TinyProxy log level from the environment variable
|
||||
// TINYPROXY_LOG, and using PROXY_LOG_LEVEL as a retro-compatibility name.
|
||||
func (r *reader) GetTinyProxyLog() (models.TinyProxyLogLevel, error) {
|
||||
// Retro-compatibility
|
||||
s, err := r.envParams.GetEnv("PROXY_LOG_LEVEL")
|
||||
if err != nil {
|
||||
return models.TinyProxyLogLevel(s), err
|
||||
} else if len(s) != 0 {
|
||||
r.logger.Warn("You are using the old environment variable PROXY_LOG_LEVEL, please consider changing it to TINYPROXY_LOG") //nolint:lll
|
||||
s, err = r.envParams.GetValueIfInside("PROXY_LOG_LEVEL",
|
||||
[]string{"Info", "Connect", "Notice", "Warning", "Error", "Critical"},
|
||||
libparams.Compulsory())
|
||||
return models.TinyProxyLogLevel(s), err
|
||||
}
|
||||
s, err = r.envParams.GetValueIfInside("TINYPROXY_LOG",
|
||||
[]string{"Info", "Connect", "Notice", "Warning", "Error", "Critical"},
|
||||
libparams.Default("Connect"))
|
||||
return models.TinyProxyLogLevel(s), err
|
||||
}
|
||||
|
||||
// GetTinyProxyPort obtains the TinyProxy listening port from the environment variable
|
||||
// TINYPROXY_PORT, and using PROXY_PORT as a retro-compatibility name.
|
||||
func (r *reader) GetTinyProxyPort() (port uint16, err error) {
|
||||
// Retro-compatibility
|
||||
portStr, err := r.envParams.GetEnv("PROXY_PORT")
|
||||
switch {
|
||||
case err != nil:
|
||||
return 0, err
|
||||
case len(portStr) != 0:
|
||||
r.logger.Warn("You are using the old environment variable PROXY_PORT, please consider changing it to TINYPROXY_PORT")
|
||||
default:
|
||||
portStr, err = r.envParams.GetEnv("TINYPROXY_PORT", libparams.Default("8888"))
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
}
|
||||
if err := r.verifier.VerifyPort(portStr); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
portUint64, err := strconv.ParseUint(portStr, 10, 16)
|
||||
return uint16(portUint64), err
|
||||
}
|
||||
|
||||
// GetTinyProxyUser obtains the TinyProxy server user from the environment variable
|
||||
// TINYPROXY_USER, and using PROXY_USER as a retro-compatibility name.
|
||||
func (r *reader) GetTinyProxyUser() (user string, err error) {
|
||||
defer func() {
|
||||
unsetErr := r.unsetEnv("PROXY_USER")
|
||||
if err == nil {
|
||||
err = unsetErr
|
||||
}
|
||||
}()
|
||||
defer func() {
|
||||
unsetErr := r.unsetEnv("TINYPROXY_USER")
|
||||
if err == nil {
|
||||
err = unsetErr
|
||||
}
|
||||
}()
|
||||
// Retro-compatibility
|
||||
user, err = r.envParams.GetEnv("PROXY_USER", libparams.CaseSensitiveValue())
|
||||
if err != nil {
|
||||
return user, err
|
||||
}
|
||||
if len(user) != 0 {
|
||||
r.logger.Warn("You are using the old environment variable PROXY_USER, please consider changing it to TINYPROXY_USER")
|
||||
return user, nil
|
||||
}
|
||||
return r.envParams.GetEnv("TINYPROXY_USER", libparams.CaseSensitiveValue())
|
||||
}
|
||||
|
||||
// GetTinyProxyPassword obtains the TinyProxy server password from the environment variable
|
||||
// TINYPROXY_PASSWORD, and using PROXY_PASSWORD as a retro-compatibility name.
|
||||
func (r *reader) GetTinyProxyPassword() (password string, err error) {
|
||||
defer func() {
|
||||
unsetErr := r.unsetEnv("PROXY_PASSWORD")
|
||||
if err == nil {
|
||||
err = unsetErr
|
||||
}
|
||||
}()
|
||||
defer func() {
|
||||
unsetErr := r.unsetEnv("TINYPROXY_PASSWORD")
|
||||
if err == nil {
|
||||
err = unsetErr
|
||||
}
|
||||
}()
|
||||
|
||||
// Retro-compatibility
|
||||
password, err = r.envParams.GetEnv("PROXY_PASSWORD", libparams.CaseSensitiveValue())
|
||||
if err != nil {
|
||||
return password, err
|
||||
}
|
||||
if len(password) != 0 {
|
||||
r.logger.Warn("You are using the old environment variable PROXY_PASSWORD, please consider changing it to TINYPROXY_PASSWORD") //nolint:lll
|
||||
return password, nil
|
||||
}
|
||||
return r.envParams.GetEnv("TINYPROXY_PASSWORD", libparams.CaseSensitiveValue())
|
||||
}
|
||||
Reference in New Issue
Block a user