diff --git a/web/assets/js/model/xray.js b/web/assets/js/model/xray.js index 3e3ff9cb..573f2f88 100644 --- a/web/assets/js/model/xray.js +++ b/web/assets/js/model/xray.js @@ -853,6 +853,7 @@ class StreamSettings extends XrayCommonClass { } static fromJson(json={}) { + return new StreamSettings( json.network, json.security, @@ -1412,13 +1413,13 @@ class Inbound extends XrayCommonClass { if (!ObjectUtil.isArrEmpty(this.stream.reality.serverNames)) { params.set("sni", this.stream.reality.serverNames.split(",")[0]); } - if (this.stream.network === 'tcp') { + if (this.stream.network === 'tcp' && !ObjectUtil.isEmpty(this.settings.vlesses[clientIndex].flow)) { params.set("flow", this.settings.vlesses[clientIndex].flow); } - if (this.stream.reality.shortIds != "") { + if (this.stream.reality.shortIds.length > 0) { params.set("sid", this.stream.reality.shortIds.split(",")[0]); } - if (this.stream.reality.settings.fingerprint != "") { + if (!ObjectUtil.isEmpty(this.stream.reality.fingerprint)) { params.set("fp", this.stream.reality.settings.fingerprint); } if (!ObjectUtil.isEmpty(this.stream.reality.settings.serverName)) { @@ -1519,10 +1520,10 @@ class Inbound extends XrayCommonClass { if (!ObjectUtil.isEmpty(this.stream.reality.settings.serverName)) { address = this.stream.reality.settings.serverName; } - if (this.stream.reality.shortIds != "") { + if (this.stream.reality.shortIds.length > 0) { params.set("sid", this.stream.reality.shortIds.split(",")[0]); } - if (this.stream.reality.settings.fingerprint != "") { + if (!ObjectUtil.isEmpty(this.stream.reality.fingerprint)) { params.set("fp", this.stream.reality.settings.fingerprint); } if (!ObjectUtil.isEmpty(this.stream.reality.settings.serverName)) { diff --git a/web/html/xui/inbounds.html b/web/html/xui/inbounds.html index 15782b1d..5bfcaccd 100644 --- a/web/html/xui/inbounds.html +++ b/web/html/xui/inbounds.html @@ -658,8 +658,8 @@ inbound = dbInbound.toInbound(); clients = this.getClients(dbInbound.protocol, inbound.settings); index = this.findIndexOfClient(clients, client); - clients[index].enable = ! clients[index].enable - await this.updateClient(inbound, dbInbound, index); + clients[index].enable = !clients[index].enable; + await this.updateClient(clients[index],dbInboundId, index); this.loading(false); }, async submit(url, data) { diff --git a/web/service/inbound.go b/web/service/inbound.go index c3f92e5a..9fb9a5b1 100644 --- a/web/service/inbound.go +++ b/web/service/inbound.go @@ -266,11 +266,18 @@ func (s *InboundService) AddInboundClient(data *model.Inbound) error { if err != nil { return err } - existEmail, err := s.checkEmailsExistForClients(clients) + + var settings map[string]interface{} + err = json.Unmarshal([]byte(data.Settings), &settings) if err != nil { return err } + interfaceClients := settings["clients"].([]interface{}) + existEmail, err := s.checkEmailsExistForClients(clients) + if err != nil { + return err + } if existEmail != "" { return common.NewError("Duplicate email:", existEmail) } @@ -280,21 +287,18 @@ func (s *InboundService) AddInboundClient(data *model.Inbound) error { return err } - var settings map[string]interface{} - err = json.Unmarshal([]byte(oldInbound.Settings), &settings) + var oldSettings map[string]interface{} + err = json.Unmarshal([]byte(oldInbound.Settings), &oldSettings) if err != nil { return err } - oldClients := settings["clients"].([]interface{}) - var newClients []interface{} - for _, client := range clients { - newClients = append(newClients, client) - } + oldClients := oldSettings["clients"].([]interface{}) + oldClients = append(oldClients, interfaceClients...) - settings["clients"] = append(oldClients, newClients...) + oldSettings["clients"] = oldClients - newSettings, err := json.MarshalIndent(settings, "", " ") + newSettings, err := json.MarshalIndent(oldSettings, "", " ") if err != nil { return err } @@ -341,6 +345,14 @@ func (s *InboundService) UpdateInboundClient(data *model.Inbound, index int) err return err } + var settings map[string]interface{} + err = json.Unmarshal([]byte(data.Settings), &settings) + if err != nil { + return err + } + + inerfaceClients := settings["clients"].([]interface{}) + oldInbound, err := s.GetInbound(data.Id) if err != nil { return err @@ -361,20 +373,18 @@ func (s *InboundService) UpdateInboundClient(data *model.Inbound, index int) err } } - var settings map[string]interface{} - err = json.Unmarshal([]byte(oldInbound.Settings), &settings) + var oldSettings map[string]interface{} + err = json.Unmarshal([]byte(oldInbound.Settings), &oldSettings) if err != nil { return err } - settingsClients := settings["clients"].([]interface{}) - var newClients []interface{} - newClients = append(newClients, clients[0]) - settingsClients[index] = newClients[0] + settingsClients := oldSettings["clients"].([]interface{}) + settingsClients[index] = inerfaceClients[0] - settings["clients"] = settingsClients + oldSettings["clients"] = settingsClients - newSettings, err := json.MarshalIndent(settings, "", " ") + newSettings, err := json.MarshalIndent(oldSettings, "", " ") if err != nil { return err }