mirror of
https://github.com/XTLS/Xray-core.git
synced 2026-05-08 14:13:22 +00:00
https://github.com/XTLS/Xray-core/pull/6055#issuecomment-4363896372 https://github.com/XTLS/Xray-core/pull/6082#issuecomment-4384523482
73 lines
1.7 KiB
Go
73 lines
1.7 KiB
Go
package conf
|
|
|
|
import (
|
|
"github.com/xtls/xray-core/common/errors"
|
|
"github.com/xtls/xray-core/common/protocol"
|
|
"github.com/xtls/xray-core/common/serial"
|
|
"github.com/xtls/xray-core/common/task"
|
|
"github.com/xtls/xray-core/proxy/hysteria"
|
|
"github.com/xtls/xray-core/proxy/hysteria/account"
|
|
"google.golang.org/protobuf/proto"
|
|
)
|
|
|
|
type HysteriaClientConfig struct {
|
|
Version int32 `json:"version"`
|
|
Address *Address `json:"address"`
|
|
Port uint16 `json:"port"`
|
|
}
|
|
|
|
func (c *HysteriaClientConfig) Build() (proto.Message, error) {
|
|
if c.Version != 2 {
|
|
return nil, errors.New("version != 2")
|
|
}
|
|
|
|
config := &hysteria.ClientConfig{}
|
|
config.Version = c.Version
|
|
config.Server = &protocol.ServerEndpoint{
|
|
Address: c.Address.Build(),
|
|
Port: uint32(c.Port),
|
|
}
|
|
|
|
return config, nil
|
|
}
|
|
|
|
type HysteriaUserConfig struct {
|
|
Auth string `json:"auth"`
|
|
Level uint32 `json:"level"`
|
|
Email string `json:"email"`
|
|
}
|
|
|
|
type HysteriaServerConfig struct {
|
|
Version int32 `json:"version"`
|
|
Users []*HysteriaUserConfig `json:"users"`
|
|
Clients []*HysteriaUserConfig `json:"clients"`
|
|
}
|
|
|
|
func (c *HysteriaServerConfig) Build() (proto.Message, error) {
|
|
config := new(hysteria.ServerConfig)
|
|
|
|
if c.Clients != nil {
|
|
c.Users = c.Clients
|
|
}
|
|
if len(c.Users) > 0 {
|
|
config.Users = make([]*protocol.User, len(c.Users))
|
|
processUser := func(idx int) error {
|
|
user := c.Users[idx]
|
|
acc := &account.Account{
|
|
Auth: user.Auth,
|
|
}
|
|
config.Users[idx] = &protocol.User{
|
|
Email: user.Email,
|
|
Level: user.Level,
|
|
Account: serial.ToTypedMessage(acc),
|
|
}
|
|
return nil
|
|
}
|
|
if err := task.ParallelForN(len(c.Users), processUser); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
return config, nil
|
|
}
|