diff options
Diffstat (limited to 'sub')
| -rw-r--r-- | sub/sub.go | 14 | ||||
| -rw-r--r-- | sub/subController.go | 4 | ||||
| -rw-r--r-- | sub/subJsonService.go | 23 |
3 files changed, 37 insertions, 4 deletions
@@ -92,9 +92,21 @@ func (s *Server) initRouter() (*gin.Engine, error) { SubJsonFragment = "" } + SubJsonMux, err := s.settingService.GetSubJsonMux() + if err != nil { + SubJsonMux = "" + } + + SubJsonRules, err := s.settingService.GetSubJsonRules() + if err != nil { + SubJsonRules = "" + } + g := engine.Group("/") - s.sub = NewSUBController(g, LinksPath, JsonPath, Encrypt, ShowInfo, RemarkModel, SubUpdates, SubJsonFragment) + s.sub = NewSUBController( + g, LinksPath, JsonPath, Encrypt, ShowInfo, RemarkModel, SubUpdates, + SubJsonFragment, SubJsonMux, SubJsonRules) return engine, nil } diff --git a/sub/subController.go b/sub/subController.go index dc66c892..8fd39efa 100644 --- a/sub/subController.go +++ b/sub/subController.go @@ -26,6 +26,8 @@ func NewSUBController( rModel string, update string, jsonFragment string, + jsonMux string, + jsonRules string, ) *SUBController { sub := NewSubService(showInfo, rModel) a := &SUBController{ @@ -35,7 +37,7 @@ func NewSUBController( updateInterval: update, subService: sub, - subJsonService: NewSubJsonService(jsonFragment, sub), + subJsonService: NewSubJsonService(jsonFragment, jsonMux, jsonRules, sub), } a.initRouter(g) return a diff --git a/sub/subJsonService.go b/sub/subJsonService.go index d50e9644..c037eb00 100644 --- a/sub/subJsonService.go +++ b/sub/subJsonService.go @@ -21,12 +21,13 @@ type SubJsonService struct { configJson map[string]interface{} defaultOutbounds []json_util.RawMessage fragment string + mux string inboundService service.InboundService SubService *SubService } -func NewSubJsonService(fragment string, subService *SubService) *SubJsonService { +func NewSubJsonService(fragment string, mux string, rules string, subService *SubService) *SubJsonService { var configJson map[string]interface{} var defaultOutbounds []json_util.RawMessage json.Unmarshal([]byte(defaultJson), &configJson) @@ -37,6 +38,17 @@ func NewSubJsonService(fragment string, subService *SubService) *SubJsonService } } + if rules != "" { + var newRules []interface{} + routing, _ := configJson["routing"].(map[string]interface{}) + defaultRules, _ := routing["rules"].([]interface{}) + json.Unmarshal([]byte(rules), &newRules) + defaultRules = append(newRules, defaultRules...) + fmt.Printf("routing: %#v\n\nRules: %#v\n\n", routing, defaultRules) + routing["rules"] = defaultRules + configJson["routing"] = routing + } + if fragment != "" { defaultOutbounds = append(defaultOutbounds, json_util.RawMessage(fragment)) } @@ -45,6 +57,7 @@ func NewSubJsonService(fragment string, subService *SubService) *SubJsonService configJson: configJson, defaultOutbounds: defaultOutbounds, fragment: fragment, + mux: mux, SubService: subService, } } @@ -277,6 +290,9 @@ func (s *SubJsonService) genVnext(inbound *model.Inbound, streamSettings json_ut outbound.Protocol = string(inbound.Protocol) outbound.Tag = "proxy" + if s.mux != "" { + outbound.Mux = json_util.RawMessage(s.mux) + } outbound.StreamSettings = streamSettings outbound.Settings = OutboundSettings{ Vnext: vnextData, @@ -313,6 +329,9 @@ func (s *SubJsonService) genServer(inbound *model.Inbound, streamSettings json_u outbound.Protocol = string(inbound.Protocol) outbound.Tag = "proxy" + if s.mux != "" { + outbound.Mux = json_util.RawMessage(s.mux) + } outbound.StreamSettings = streamSettings outbound.Settings = OutboundSettings{ Servers: serverData, @@ -326,7 +345,7 @@ type Outbound struct { Protocol string `json:"protocol"` Tag string `json:"tag"` StreamSettings json_util.RawMessage `json:"streamSettings"` - Mux map[string]interface{} `json:"mux,omitempty"` + Mux json_util.RawMessage `json:"mux,omitempty"` ProxySettings map[string]interface{} `json:"proxySettings,omitempty"` Settings OutboundSettings `json:"settings,omitempty"` } |
