diff options
| author | mhsanaei <ho3ein.sanaei@gmail.com> | 2024-04-01 15:32:02 +0300 |
|---|---|---|
| committer | mhsanaei <ho3ein.sanaei@gmail.com> | 2024-04-01 15:32:02 +0300 |
| commit | 4e20bb5f02c4aef31c9026458984825e820414ba (patch) | |
| tree | 2229b2c5ce10742631b39efa4f6c1099c6d1f74f | |
| parent | 44b7eb881cb2ff2142f3566913c1e70ee8106556 (diff) | |
Add host for WS
| -rw-r--r-- | sub/subService.go | 33 | ||||
| -rw-r--r-- | web/assets/js/model/outbound.js | 2 | ||||
| -rw-r--r-- | web/assets/js/model/xray.js | 16 | ||||
| -rw-r--r-- | web/html/xui/form/stream/stream_httpupgrade.html | 6 | ||||
| -rw-r--r-- | web/html/xui/form/stream/stream_ws.html | 3 |
5 files changed, 50 insertions, 10 deletions
diff --git a/sub/subService.go b/sub/subService.go index 42713756..ae530597 100644 --- a/sub/subService.go +++ b/sub/subService.go @@ -202,8 +202,13 @@ func (s *SubService) genVmessLink(inbound *model.Inbound, email string) string { case "ws": ws, _ := stream["wsSettings"].(map[string]interface{}) obj["path"] = ws["path"].(string) - headers, _ := ws["headers"].(map[string]interface{}) - obj["host"] = searchHost(headers) + obj["host"] = ws["host"].(string) + if headers, ok := ws["headers"].(map[string]interface{}); ok { + hostFromHeaders := searchHost(headers) + if hostFromHeaders != "" { + obj["host"] = hostFromHeaders + } + } case "http": obj["net"] = "h2" http, _ := stream["httpSettings"].(map[string]interface{}) @@ -343,7 +348,13 @@ func (s *SubService) genVlessLink(inbound *model.Inbound, email string) string { ws, _ := stream["wsSettings"].(map[string]interface{}) params["path"] = ws["path"].(string) headers, _ := ws["headers"].(map[string]interface{}) - params["host"] = searchHost(headers) + params["host"] = ws["host"].(string) + if headers != nil { + hostFromHeaders := searchHost(headers) + if hostFromHeaders != "" { + params["host"] = hostFromHeaders + } + } case "http": http, _ := stream["httpSettings"].(map[string]interface{}) params["path"] = http["path"].(string) @@ -560,7 +571,13 @@ func (s *SubService) genTrojanLink(inbound *model.Inbound, email string) string ws, _ := stream["wsSettings"].(map[string]interface{}) params["path"] = ws["path"].(string) headers, _ := ws["headers"].(map[string]interface{}) - params["host"] = searchHost(headers) + params["host"] = ws["host"].(string) + if headers != nil { + hostFromHeaders := searchHost(headers) + if hostFromHeaders != "" { + params["host"] = hostFromHeaders + } + } case "http": http, _ := stream["httpSettings"].(map[string]interface{}) params["path"] = http["path"].(string) @@ -778,7 +795,13 @@ func (s *SubService) genShadowsocksLink(inbound *model.Inbound, email string) st ws, _ := stream["wsSettings"].(map[string]interface{}) params["path"] = ws["path"].(string) headers, _ := ws["headers"].(map[string]interface{}) - params["host"] = searchHost(headers) + params["host"] = ws["host"].(string) + if headers != nil { + hostFromHeaders := searchHost(headers) + if hostFromHeaders != "" { + params["host"] = hostFromHeaders + } + } case "http": http, _ := stream["httpSettings"].(map[string]interface{}) params["path"] = http["path"].(string) diff --git a/web/assets/js/model/outbound.js b/web/assets/js/model/outbound.js index 708728a8..aa83287c 100644 --- a/web/assets/js/model/outbound.js +++ b/web/assets/js/model/outbound.js @@ -194,6 +194,7 @@ class WsStreamSettings extends CommonClass { static fromJson(json={}) { return new WsStreamSettings( json.path, + json.host, json.headers && !ObjectUtil.isEmpty(json.headers.Host) ? json.headers.Host : '', ); } @@ -201,6 +202,7 @@ class WsStreamSettings extends CommonClass { toJson() { return { path: this.path, + host: this.host, headers: ObjectUtil.isEmpty(this.host) ? undefined : {Host: this.host}, }; } diff --git a/web/assets/js/model/xray.js b/web/assets/js/model/xray.js index 9d863798..40e435cc 100644 --- a/web/assets/js/model/xray.js +++ b/web/assets/js/model/xray.js @@ -338,10 +338,11 @@ class KcpStreamSettings extends XrayCommonClass { } class WsStreamSettings extends XrayCommonClass { - constructor(acceptProxyProtocol=false, path='/', headers=[]) { + constructor(acceptProxyProtocol=false, path='/', host='', headers=[]) { super(); this.acceptProxyProtocol = acceptProxyProtocol; this.path = path; + this.host = host; this.headers = headers; } @@ -366,6 +367,7 @@ class WsStreamSettings extends XrayCommonClass { return new WsStreamSettings( json.acceptProxyProtocol, json.path, + json.host, XrayCommonClass.toHeaders(json.headers), ); } @@ -374,6 +376,7 @@ class WsStreamSettings extends XrayCommonClass { return { acceptProxyProtocol: this.acceptProxyProtocol, path: this.path, + host: this.host, headers: XrayCommonClass.toV2Headers(this.headers, false), }; } @@ -1108,7 +1111,12 @@ class Inbound extends XrayCommonClass { if (this.isTcp) { return this.stream.tcp.request.getHeader("Host"); } else if (this.isWs) { - return this.stream.ws.getHeader("Host"); + const hostHeader = this.stream.ws.getHeader("Host"); + if (hostHeader !== null) { + return hostHeader; + } else { + return this.stream.ws.host; + } } else if (this.isH2) { return this.stream.http.host[0]; } else if (this.isHttpupgrade) { @@ -1230,6 +1238,7 @@ class Inbound extends XrayCommonClass { } else if (network === 'ws') { let ws = this.stream.ws; obj.path = ws.path; + obj.host = ws.host; let index = ws.headers.findIndex(header => header.name.toLowerCase() === 'host'); if (index >= 0) { obj.host = ws.headers[index].value; @@ -1300,6 +1309,7 @@ class Inbound extends XrayCommonClass { case "ws": const ws = this.stream.ws; params.set("path", ws.path); + params.set("host", ws.host); const index = ws.headers.findIndex(header => header.name.toLowerCase() === 'host'); if (index >= 0) { const host = ws.headers[index].value; @@ -1420,6 +1430,7 @@ class Inbound extends XrayCommonClass { case "ws": const ws = this.stream.ws; params.set("path", ws.path); + params.set("host", ws.host); const index = ws.headers.findIndex(header => header.name.toLowerCase() === 'host'); if (index >= 0) { const host = ws.headers[index].value; @@ -1507,6 +1518,7 @@ class Inbound extends XrayCommonClass { case "ws": const ws = this.stream.ws; params.set("path", ws.path); + params.set("host", ws.host); const index = ws.headers.findIndex(header => header.name.toLowerCase() === 'host'); if (index >= 0) { const host = ws.headers[index].value; diff --git a/web/html/xui/form/stream/stream_httpupgrade.html b/web/html/xui/form/stream/stream_httpupgrade.html index 15c02aeb..31897804 100644 --- a/web/html/xui/form/stream/stream_httpupgrade.html +++ b/web/html/xui/form/stream/stream_httpupgrade.html @@ -3,11 +3,11 @@ <a-form-item label="PROXY Protocol"> <a-switch v-model="inbound.stream.httpupgrade.acceptProxyProtocol"></a-switch> </a-form-item> - <a-form-item label='{{ i18n "path" }}'> - <a-input v-model.trim="inbound.stream.httpupgrade.path"></a-input> - </a-form-item> <a-form-item label='{{ i18n "host" }}'> <a-input v-model.trim="inbound.stream.httpupgrade.host"></a-input> </a-form-item> + <a-form-item label='{{ i18n "path" }}'> + <a-input v-model.trim="inbound.stream.httpupgrade.path"></a-input> + </a-form-item> </a-form> {{end}} diff --git a/web/html/xui/form/stream/stream_ws.html b/web/html/xui/form/stream/stream_ws.html index 62380e94..44ebca8d 100644 --- a/web/html/xui/form/stream/stream_ws.html +++ b/web/html/xui/form/stream/stream_ws.html @@ -3,6 +3,9 @@ <a-form-item label="PROXY Protocol"> <a-switch v-model="inbound.stream.ws.acceptProxyProtocol"></a-switch> </a-form-item> + <a-form-item label='{{ i18n "host" }}'> + <a-input v-model.trim="inbound.stream.ws.host"></a-input> + </a-form-item> <a-form-item label='{{ i18n "path" }}'> <a-input v-model.trim="inbound.stream.ws.path"></a-input> </a-form-item> |
