46 lines
1.0 KiB
Go
46 lines
1.0 KiB
Go
package singbox
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/perfect-panel/server/pkg/adapter/proxy"
|
|
)
|
|
|
|
type ShadowsocksOptions struct {
|
|
ServerOptions
|
|
Method string `json:"method,omitempty"`
|
|
Password string `json:"password,omitempty"`
|
|
Plugin string `json:"plugin,omitempty"`
|
|
PluginOptions string `json:"plugin_opts,omitempty"`
|
|
Network string `json:"network,omitempty"`
|
|
}
|
|
|
|
func ParseShadowsocks(data proxy.Proxy, uuid string) (*Proxy, error) {
|
|
ss := data.Option.(proxy.Shadowsocks)
|
|
|
|
password := uuid
|
|
// SIP022 AEAD-2022 Ciphers
|
|
if strings.Contains(ss.Method, "2022") {
|
|
serverKey, userKey := proxy.GenerateShadowsocks2022Password(ss, uuid)
|
|
password = fmt.Sprintf("%s:%s", serverKey, userKey)
|
|
}
|
|
|
|
p := &Proxy{
|
|
Tag: data.Name,
|
|
Type: Shadowsocks,
|
|
ShadowsocksOptions: &ShadowsocksOptions{
|
|
ServerOptions: ServerOptions{
|
|
Tag: data.Name,
|
|
Type: Shadowsocks,
|
|
Server: data.Server,
|
|
ServerPort: data.Port,
|
|
},
|
|
Method: ss.Method,
|
|
Password: password,
|
|
Network: "tcp",
|
|
},
|
|
}
|
|
return p, nil
|
|
}
|