update cmd
This commit is contained in:
parent
fa8375f763
commit
ece51cb0b8
@ -38,7 +38,10 @@ func buildService(cfg *config.Config) (services []*service.Service) {
|
|||||||
|
|
||||||
for _, svc := range cfg.Services {
|
for _, svc := range cfg.Services {
|
||||||
serviceLogger := log.WithFields(map[string]interface{}{
|
serviceLogger := log.WithFields(map[string]interface{}{
|
||||||
"service": svc.Name,
|
"kind": "service",
|
||||||
|
"service": svc.Name,
|
||||||
|
"listener": svc.Listener.Type,
|
||||||
|
"handler": svc.Handler.Type,
|
||||||
})
|
})
|
||||||
|
|
||||||
listenerLogger := serviceLogger.WithFields(map[string]interface{}{
|
listenerLogger := serviceLogger.WithFields(map[string]interface{}{
|
||||||
|
@ -5,6 +5,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/go-gost/gost/pkg/config"
|
"github.com/go-gost/gost/pkg/config"
|
||||||
|
"github.com/go-gost/gost/pkg/registry"
|
||||||
)
|
)
|
||||||
|
|
||||||
// normConfig normalizes the config.
|
// normConfig normalizes the config.
|
||||||
@ -41,8 +42,36 @@ func normService(svc *config.ServiceConfig) {
|
|||||||
md[k] = v[0]
|
md[k] = v[0]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if u.User != nil {
|
||||||
|
md["users"] = []interface{}{u.User.String()}
|
||||||
|
}
|
||||||
|
|
||||||
svc.Addr = u.Host
|
svc.Addr = u.Host
|
||||||
|
|
||||||
|
if h := registry.GetHandler(handler); h == nil {
|
||||||
|
handler = "auto"
|
||||||
|
}
|
||||||
|
if ln := registry.GetListener(listener); ln == nil {
|
||||||
|
listener = "tcp"
|
||||||
|
if handler == "ssu" {
|
||||||
|
listener = "udp"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if remotes := strings.Trim(u.EscapedPath(), "/"); remotes != "" {
|
||||||
|
svc.Forwarder = &config.ForwarderConfig{
|
||||||
|
Targets: strings.Split(remotes, ","),
|
||||||
|
}
|
||||||
|
if handler != "relay" {
|
||||||
|
if listener == "tcp" || listener == "udp" ||
|
||||||
|
listener == "rtcp" || listener == "rudp" {
|
||||||
|
handler = listener
|
||||||
|
} else {
|
||||||
|
handler = "tcp"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
svc.Handler = &config.HandlerConfig{
|
svc.Handler = &config.HandlerConfig{
|
||||||
Type: handler,
|
Type: handler,
|
||||||
Metadata: md,
|
Metadata: md,
|
||||||
@ -51,12 +80,6 @@ func normService(svc *config.ServiceConfig) {
|
|||||||
Type: listener,
|
Type: listener,
|
||||||
Metadata: md,
|
Metadata: md,
|
||||||
}
|
}
|
||||||
|
|
||||||
if remotes := strings.Trim(u.EscapedPath(), "/"); remotes != "" {
|
|
||||||
svc.Forwarder = &config.ForwarderConfig{
|
|
||||||
Targets: strings.Split(remotes, ","),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func normChain(chain *config.ChainConfig) {
|
func normChain(chain *config.ChainConfig) {
|
||||||
@ -85,8 +108,22 @@ func normChain(chain *config.ChainConfig) {
|
|||||||
md[k] = v[0]
|
md[k] = v[0]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if u.User != nil {
|
||||||
|
md["user"] = []interface{}{u.User.String()}
|
||||||
|
}
|
||||||
|
|
||||||
node.Addr = u.Host
|
node.Addr = u.Host
|
||||||
|
|
||||||
|
if c := registry.GetConnector(connector); c == nil {
|
||||||
|
connector = "http"
|
||||||
|
}
|
||||||
|
if d := registry.GetDialer(dialer); d == nil {
|
||||||
|
dialer = "tcp"
|
||||||
|
if connector == "ssu" {
|
||||||
|
dialer = "udp"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
node.Connector = &config.ConnectorConfig{
|
node.Connector = &config.ConnectorConfig{
|
||||||
Type: connector,
|
Type: connector,
|
||||||
Metadata: md,
|
Metadata: md,
|
||||||
|
2
go.mod
2
go.mod
@ -8,7 +8,7 @@ require (
|
|||||||
github.com/ginuerzh/tls-dissector v0.0.2-0.20201202075250-98fa925912da
|
github.com/ginuerzh/tls-dissector v0.0.2-0.20201202075250-98fa925912da
|
||||||
github.com/go-gost/gosocks4 v0.0.1
|
github.com/go-gost/gosocks4 v0.0.1
|
||||||
github.com/go-gost/gosocks5 v0.3.1-0.20211109033403-d894d75b7f09
|
github.com/go-gost/gosocks5 v0.3.1-0.20211109033403-d894d75b7f09
|
||||||
github.com/go-gost/relay v0.1.1-0.20211117133957-4b109438dc89
|
github.com/go-gost/relay v0.1.1-0.20211122150329-54ee406ea49d
|
||||||
github.com/gobwas/glob v0.2.3
|
github.com/gobwas/glob v0.2.3
|
||||||
github.com/golang/snappy v0.0.3
|
github.com/golang/snappy v0.0.3
|
||||||
github.com/google/gopacket v1.1.19 // indirect
|
github.com/google/gopacket v1.1.19 // indirect
|
||||||
|
4
go.sum
4
go.sum
@ -119,6 +119,10 @@ github.com/go-gost/relay v0.1.1-0.20211028021513-03c783f893bc h1:F8wBeQYP8JvzIG/
|
|||||||
github.com/go-gost/relay v0.1.1-0.20211028021513-03c783f893bc/go.mod h1:lcX+23LCQ3khIeASBo+tJ/WbwXFO32/N5YN6ucuYTG8=
|
github.com/go-gost/relay v0.1.1-0.20211028021513-03c783f893bc/go.mod h1:lcX+23LCQ3khIeASBo+tJ/WbwXFO32/N5YN6ucuYTG8=
|
||||||
github.com/go-gost/relay v0.1.1-0.20211117133957-4b109438dc89 h1:1EtXLpAYeGVcptB0Jt8AeRe+GQnbTjbqeYA3L02pCIY=
|
github.com/go-gost/relay v0.1.1-0.20211117133957-4b109438dc89 h1:1EtXLpAYeGVcptB0Jt8AeRe+GQnbTjbqeYA3L02pCIY=
|
||||||
github.com/go-gost/relay v0.1.1-0.20211117133957-4b109438dc89/go.mod h1:lcX+23LCQ3khIeASBo+tJ/WbwXFO32/N5YN6ucuYTG8=
|
github.com/go-gost/relay v0.1.1-0.20211117133957-4b109438dc89/go.mod h1:lcX+23LCQ3khIeASBo+tJ/WbwXFO32/N5YN6ucuYTG8=
|
||||||
|
github.com/go-gost/relay v0.1.1-0.20211122140942-99db08018413 h1:vF0HQWLlwu2GTZQgS9HJlOWUhnEZy8np/fCbWizI/08=
|
||||||
|
github.com/go-gost/relay v0.1.1-0.20211122140942-99db08018413/go.mod h1:lcX+23LCQ3khIeASBo+tJ/WbwXFO32/N5YN6ucuYTG8=
|
||||||
|
github.com/go-gost/relay v0.1.1-0.20211122150329-54ee406ea49d h1:rzGVzkSvxuDZg8PoYmOR+tvcAg9Dr8whgV19kzuO4YA=
|
||||||
|
github.com/go-gost/relay v0.1.1-0.20211122150329-54ee406ea49d/go.mod h1:lcX+23LCQ3khIeASBo+tJ/WbwXFO32/N5YN6ucuYTG8=
|
||||||
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I=
|
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I=
|
||||||
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
|
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
|
||||||
github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
|
github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
|
||||||
|
@ -22,7 +22,7 @@ func (c *httpConnector) parseMetadata(md md.Metadata) (err error) {
|
|||||||
const (
|
const (
|
||||||
connectTimeout = "timeout"
|
connectTimeout = "timeout"
|
||||||
userAgent = "userAgent"
|
userAgent = "userAgent"
|
||||||
auth = "auth"
|
user = "user"
|
||||||
)
|
)
|
||||||
|
|
||||||
c.md.connectTimeout = md.GetDuration(connectTimeout)
|
c.md.connectTimeout = md.GetDuration(connectTimeout)
|
||||||
@ -31,7 +31,7 @@ func (c *httpConnector) parseMetadata(md md.Metadata) (err error) {
|
|||||||
c.md.UserAgent = defaultUserAgent
|
c.md.UserAgent = defaultUserAgent
|
||||||
}
|
}
|
||||||
|
|
||||||
if v := md.GetString(auth); v != "" {
|
if v := md.GetString(user); v != "" {
|
||||||
ss := strings.SplitN(v, ":", 2)
|
ss := strings.SplitN(v, ":", 2)
|
||||||
if len(ss) == 1 {
|
if len(ss) == 1 {
|
||||||
c.md.User = url.User(ss[0])
|
c.md.User = url.User(ss[0])
|
||||||
|
@ -3,7 +3,6 @@ package relay
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"net"
|
"net"
|
||||||
"strconv"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-gost/gost/pkg/connector"
|
"github.com/go-gost/gost/pkg/connector"
|
||||||
@ -72,29 +71,12 @@ func (c *relayConnector) Connect(ctx context.Context, conn net.Conn, network, ad
|
|||||||
}
|
}
|
||||||
|
|
||||||
if address != "" {
|
if address != "" {
|
||||||
host, port, _ := net.SplitHostPort(address)
|
af := &relay.AddrFeature{}
|
||||||
nport, _ := strconv.ParseUint(port, 10, 16)
|
if err := af.ParseFrom(address); err != nil {
|
||||||
if host == "" {
|
return nil, err
|
||||||
host = net.IPv4zero.String()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if nport > 0 {
|
req.Features = append(req.Features, af)
|
||||||
var atype uint8
|
|
||||||
ip := net.ParseIP(host)
|
|
||||||
if ip == nil {
|
|
||||||
atype = relay.AddrDomain
|
|
||||||
} else if ip.To4() == nil {
|
|
||||||
atype = relay.AddrIPv6
|
|
||||||
} else {
|
|
||||||
atype = relay.AddrIPv4
|
|
||||||
}
|
|
||||||
|
|
||||||
req.Features = append(req.Features, &relay.TargetAddrFeature{
|
|
||||||
AType: atype,
|
|
||||||
Host: host,
|
|
||||||
Port: uint16(nport),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return conn, nil
|
return conn, nil
|
||||||
|
@ -16,12 +16,12 @@ type metadata struct {
|
|||||||
|
|
||||||
func (c *relayConnector) parseMetadata(md md.Metadata) (err error) {
|
func (c *relayConnector) parseMetadata(md md.Metadata) (err error) {
|
||||||
const (
|
const (
|
||||||
auth = "auth"
|
user = "user"
|
||||||
connectTimeout = "connectTimeout"
|
connectTimeout = "connectTimeout"
|
||||||
nodelay = "nodelay"
|
nodelay = "nodelay"
|
||||||
)
|
)
|
||||||
|
|
||||||
if v := md.GetString(auth); v != "" {
|
if v := md.GetString(user); v != "" {
|
||||||
ss := strings.SplitN(v, ":", 2)
|
ss := strings.SplitN(v, ":", 2)
|
||||||
if len(ss) == 1 {
|
if len(ss) == 1 {
|
||||||
c.md.user = url.User(ss[0])
|
c.md.user = url.User(ss[0])
|
||||||
|
@ -16,11 +16,11 @@ type metadata struct {
|
|||||||
func (c *socks4Connector) parseMetadata(md md.Metadata) (err error) {
|
func (c *socks4Connector) parseMetadata(md md.Metadata) (err error) {
|
||||||
const (
|
const (
|
||||||
connectTimeout = "timeout"
|
connectTimeout = "timeout"
|
||||||
auth = "auth"
|
user = "user"
|
||||||
disable4a = "disable4a"
|
disable4a = "disable4a"
|
||||||
)
|
)
|
||||||
|
|
||||||
if v := md.GetString(auth); v != "" {
|
if v := md.GetString(user); v != "" {
|
||||||
c.md.User = url.User(v)
|
c.md.User = url.User(v)
|
||||||
}
|
}
|
||||||
c.md.connectTimeout = md.GetDuration(connectTimeout)
|
c.md.connectTimeout = md.GetDuration(connectTimeout)
|
||||||
|
@ -19,11 +19,11 @@ type metadata struct {
|
|||||||
func (c *socks5Connector) parseMetadata(md md.Metadata) (err error) {
|
func (c *socks5Connector) parseMetadata(md md.Metadata) (err error) {
|
||||||
const (
|
const (
|
||||||
connectTimeout = "timeout"
|
connectTimeout = "timeout"
|
||||||
auth = "auth"
|
user = "user"
|
||||||
noTLS = "notls"
|
noTLS = "notls"
|
||||||
)
|
)
|
||||||
|
|
||||||
if v := md.GetString(auth); v != "" {
|
if v := md.GetString(user); v != "" {
|
||||||
ss := strings.SplitN(v, ":", 2)
|
ss := strings.SplitN(v, ":", 2)
|
||||||
if len(ss) == 1 {
|
if len(ss) == 1 {
|
||||||
c.md.User = url.User(ss[0])
|
c.md.User = url.User(ss[0])
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package ss
|
package ss
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-gost/gost/pkg/common/util/ss"
|
"github.com/go-gost/gost/pkg/common/util/ss"
|
||||||
@ -16,18 +17,22 @@ type metadata struct {
|
|||||||
|
|
||||||
func (c *ssConnector) parseMetadata(md md.Metadata) (err error) {
|
func (c *ssConnector) parseMetadata(md md.Metadata) (err error) {
|
||||||
const (
|
const (
|
||||||
method = "method"
|
user = "user"
|
||||||
password = "password"
|
|
||||||
key = "key"
|
key = "key"
|
||||||
connectTimeout = "timeout"
|
connectTimeout = "timeout"
|
||||||
noDelay = "nodelay"
|
noDelay = "nodelay"
|
||||||
)
|
)
|
||||||
|
|
||||||
c.md.cipher, err = ss.ShadowCipher(
|
var method, password string
|
||||||
md.GetString(method),
|
if v := md.GetString(user); v != "" {
|
||||||
md.GetString(password),
|
ss := strings.SplitN(v, ":", 2)
|
||||||
md.GetString(key),
|
if len(ss) == 1 {
|
||||||
)
|
method = ss[0]
|
||||||
|
} else {
|
||||||
|
method, password = ss[0], ss[1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
c.md.cipher, err = ss.ShadowCipher(method, password, md.GetString(key))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package ss
|
package ss
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-gost/gost/pkg/common/util/ss"
|
"github.com/go-gost/gost/pkg/common/util/ss"
|
||||||
@ -16,18 +17,22 @@ type metadata struct {
|
|||||||
|
|
||||||
func (c *ssuConnector) parseMetadata(md md.Metadata) (err error) {
|
func (c *ssuConnector) parseMetadata(md md.Metadata) (err error) {
|
||||||
const (
|
const (
|
||||||
method = "method"
|
user = "user"
|
||||||
password = "password"
|
|
||||||
key = "key"
|
key = "key"
|
||||||
connectTimeout = "timeout"
|
connectTimeout = "timeout"
|
||||||
udpBufferSize = "udpBufferSize" // udp buffer size
|
udpBufferSize = "udpBufferSize" // udp buffer size
|
||||||
)
|
)
|
||||||
|
|
||||||
c.md.cipher, err = ss.ShadowCipher(
|
var method, password string
|
||||||
md.GetString(method),
|
if v := md.GetString(user); v != "" {
|
||||||
md.GetString(password),
|
ss := strings.SplitN(v, ":", 2)
|
||||||
md.GetString(key),
|
if len(ss) == 1 {
|
||||||
)
|
method = ss[0]
|
||||||
|
} else {
|
||||||
|
method, password = ss[0], ss[1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
c.md.cipher, err = ss.ShadowCipher(method, password, md.GetString(key))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -16,16 +16,16 @@ type metadata struct {
|
|||||||
|
|
||||||
func (h *httpHandler) parseMetadata(md md.Metadata) error {
|
func (h *httpHandler) parseMetadata(md md.Metadata) error {
|
||||||
const (
|
const (
|
||||||
proxyAgentKey = "proxyAgent"
|
proxyAgent = "proxyAgent"
|
||||||
authsKey = "auths"
|
users = "users"
|
||||||
probeResistKey = "probeResist"
|
probeResistKey = "probeResist"
|
||||||
knockKey = "knock"
|
knock = "knock"
|
||||||
retryCount = "retry"
|
retryCount = "retry"
|
||||||
)
|
)
|
||||||
|
|
||||||
h.md.proxyAgent = md.GetString(proxyAgentKey)
|
h.md.proxyAgent = md.GetString(proxyAgent)
|
||||||
|
|
||||||
if v, _ := md.Get(authsKey).([]interface{}); len(v) > 0 {
|
if v, _ := md.Get(users).([]interface{}); len(v) > 0 {
|
||||||
authenticator := auth.NewLocalAuthenticator(nil)
|
authenticator := auth.NewLocalAuthenticator(nil)
|
||||||
for _, auth := range v {
|
for _, auth := range v {
|
||||||
if s, _ := auth.(string); s != "" {
|
if s, _ := auth.(string); s != "" {
|
||||||
@ -45,7 +45,7 @@ func (h *httpHandler) parseMetadata(md md.Metadata) error {
|
|||||||
h.md.probeResist = &probeResist{
|
h.md.probeResist = &probeResist{
|
||||||
Type: ss[0],
|
Type: ss[0],
|
||||||
Value: ss[1],
|
Value: ss[1],
|
||||||
Knock: md.GetString(knockKey),
|
Knock: md.GetString(knock),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -89,8 +89,8 @@ func (h *relayHandler) Handle(ctx context.Context, conn net.Conn) {
|
|||||||
feature := f.(*relay.UserAuthFeature)
|
feature := f.(*relay.UserAuthFeature)
|
||||||
user, pass = feature.Username, feature.Password
|
user, pass = feature.Username, feature.Password
|
||||||
}
|
}
|
||||||
if f.Type() == relay.FeatureTargetAddr {
|
if f.Type() == relay.FeatureAddr {
|
||||||
feature := f.(*relay.TargetAddrFeature)
|
feature := f.(*relay.AddrFeature)
|
||||||
target = net.JoinHostPort(feature.Host, strconv.Itoa(int(feature.Port)))
|
target = net.JoinHostPort(feature.Host, strconv.Itoa(int(feature.Port)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,12 +16,12 @@ type metadata struct {
|
|||||||
|
|
||||||
func (h *relayHandler) parseMetadata(md md.Metadata) (err error) {
|
func (h *relayHandler) parseMetadata(md md.Metadata) (err error) {
|
||||||
const (
|
const (
|
||||||
authsKey = "auths"
|
users = "users"
|
||||||
readTimeout = "readTimeout"
|
readTimeout = "readTimeout"
|
||||||
retryCount = "retry"
|
retryCount = "retry"
|
||||||
)
|
)
|
||||||
|
|
||||||
if v, _ := md.Get(authsKey).([]interface{}); len(v) > 0 {
|
if v, _ := md.Get(users).([]interface{}); len(v) > 0 {
|
||||||
authenticator := auth.NewLocalAuthenticator(nil)
|
authenticator := auth.NewLocalAuthenticator(nil)
|
||||||
for _, auth := range v {
|
for _, auth := range v {
|
||||||
if s, _ := auth.(string); s != "" {
|
if s, _ := auth.(string); s != "" {
|
||||||
|
@ -15,12 +15,12 @@ type metadata struct {
|
|||||||
|
|
||||||
func (h *socks4Handler) parseMetadata(md md.Metadata) (err error) {
|
func (h *socks4Handler) parseMetadata(md md.Metadata) (err error) {
|
||||||
const (
|
const (
|
||||||
authsKey = "auths"
|
users = "users"
|
||||||
readTimeout = "readTimeout"
|
readTimeout = "readTimeout"
|
||||||
retryCount = "retry"
|
retryCount = "retry"
|
||||||
)
|
)
|
||||||
|
|
||||||
if v, _ := md.Get(authsKey).([]interface{}); len(v) > 0 {
|
if v, _ := md.Get(users).([]interface{}); len(v) > 0 {
|
||||||
authenticator := auth.NewLocalAuthenticator(nil)
|
authenticator := auth.NewLocalAuthenticator(nil)
|
||||||
for _, auth := range v {
|
for _, auth := range v {
|
||||||
if v, _ := auth.(string); v != "" {
|
if v, _ := auth.(string); v != "" {
|
||||||
|
@ -28,7 +28,7 @@ func (h *socks5Handler) parseMetadata(md md.Metadata) error {
|
|||||||
certFile = "certFile"
|
certFile = "certFile"
|
||||||
keyFile = "keyFile"
|
keyFile = "keyFile"
|
||||||
caFile = "caFile"
|
caFile = "caFile"
|
||||||
authsKey = "auths"
|
users = "users"
|
||||||
readTimeout = "readTimeout"
|
readTimeout = "readTimeout"
|
||||||
timeout = "timeout"
|
timeout = "timeout"
|
||||||
retryCount = "retry"
|
retryCount = "retry"
|
||||||
@ -49,7 +49,7 @@ func (h *socks5Handler) parseMetadata(md md.Metadata) error {
|
|||||||
h.logger.Warn("parse tls config: ", err)
|
h.logger.Warn("parse tls config: ", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if v, _ := md.Get(authsKey).([]interface{}); len(v) > 0 {
|
if v, _ := md.Get(users).([]interface{}); len(v) > 0 {
|
||||||
authenticator := auth.NewLocalAuthenticator(nil)
|
authenticator := auth.NewLocalAuthenticator(nil)
|
||||||
for _, auth := range v {
|
for _, auth := range v {
|
||||||
if s, _ := auth.(string); s != "" {
|
if s, _ := auth.(string); s != "" {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package ss
|
package ss
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-gost/gost/pkg/common/util/ss"
|
"github.com/go-gost/gost/pkg/common/util/ss"
|
||||||
@ -16,18 +17,27 @@ type metadata struct {
|
|||||||
|
|
||||||
func (h *ssHandler) parseMetadata(md md.Metadata) (err error) {
|
func (h *ssHandler) parseMetadata(md md.Metadata) (err error) {
|
||||||
const (
|
const (
|
||||||
method = "method"
|
users = "users"
|
||||||
password = "password"
|
|
||||||
key = "key"
|
key = "key"
|
||||||
readTimeout = "readTimeout"
|
readTimeout = "readTimeout"
|
||||||
retryCount = "retry"
|
retryCount = "retry"
|
||||||
)
|
)
|
||||||
|
|
||||||
h.md.cipher, err = ss.ShadowCipher(
|
var method, password string
|
||||||
md.GetString(method),
|
if v, _ := md.Get(users).([]interface{}); len(v) > 0 {
|
||||||
md.GetString(password),
|
h.logger.Info(v)
|
||||||
md.GetString(key),
|
for _, auth := range v {
|
||||||
)
|
if s, _ := auth.(string); s != "" {
|
||||||
|
ss := strings.SplitN(s, ":", 2)
|
||||||
|
if len(ss) == 1 {
|
||||||
|
method = ss[0]
|
||||||
|
} else {
|
||||||
|
method, password = ss[0], ss[1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
h.md.cipher, err = ss.ShadowCipher(method, password, md.GetString(key))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package ss
|
package ss
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-gost/gost/pkg/common/util/ss"
|
"github.com/go-gost/gost/pkg/common/util/ss"
|
||||||
@ -17,19 +18,27 @@ type metadata struct {
|
|||||||
|
|
||||||
func (h *ssuHandler) parseMetadata(md md.Metadata) (err error) {
|
func (h *ssuHandler) parseMetadata(md md.Metadata) (err error) {
|
||||||
const (
|
const (
|
||||||
method = "method"
|
users = "users"
|
||||||
password = "password"
|
|
||||||
key = "key"
|
key = "key"
|
||||||
readTimeout = "readTimeout"
|
readTimeout = "readTimeout"
|
||||||
retryCount = "retry"
|
retryCount = "retry"
|
||||||
bufferSize = "bufferSize"
|
bufferSize = "bufferSize"
|
||||||
)
|
)
|
||||||
|
|
||||||
h.md.cipher, err = ss.ShadowCipher(
|
var method, password string
|
||||||
md.GetString(method),
|
if v, _ := md.Get(users).([]interface{}); len(v) > 0 {
|
||||||
md.GetString(password),
|
for _, auth := range v {
|
||||||
md.GetString(key),
|
if s, _ := auth.(string); s != "" {
|
||||||
)
|
ss := strings.SplitN(s, ":", 2)
|
||||||
|
if len(ss) == 1 {
|
||||||
|
method = ss[0]
|
||||||
|
} else {
|
||||||
|
method, password = ss[0], ss[1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
h.md.cipher, err = ss.ShadowCipher(method, password, md.GetString(key))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user