43 lines
962 B
Go
43 lines
962 B
Go
package protocol
|
|
|
|
import (
|
|
"encoding/json"
|
|
"xboard-go/internal/model"
|
|
)
|
|
|
|
type SingBoxConfig struct {
|
|
Outbounds []map[string]interface{} `json:"outbounds"`
|
|
}
|
|
|
|
func GenerateSingBox(servers []model.Server, user model.User) (string, error) {
|
|
config := SingBoxConfig{
|
|
Outbounds: []map[string]interface{}{},
|
|
}
|
|
|
|
// Add selector outbound
|
|
selector := map[string]interface{}{
|
|
"type": "selector",
|
|
"tag": "Proxy",
|
|
"outbounds": []string{},
|
|
}
|
|
|
|
for _, s := range servers {
|
|
outbound := map[string]interface{}{
|
|
"type": s.Type,
|
|
"tag": s.Name,
|
|
"server": s.Host,
|
|
"server_port": s.Port,
|
|
}
|
|
// Add protocol-specific settings
|
|
// ... logic to handle VMess, Shadowsocks, etc.
|
|
|
|
config.Outbounds = append(config.Outbounds, outbound)
|
|
selector["outbounds"] = append(selector["outbounds"].([]string), s.Name)
|
|
}
|
|
|
|
config.Outbounds = append(config.Outbounds, selector)
|
|
|
|
data, err := json.MarshalIndent(config, "", " ")
|
|
return string(data), err
|
|
}
|