v2.6.9 -------->>> Independent SpeedLimit
This commit is contained in:
parent
8d84d07786
commit
b8af6de061
@ -514,6 +514,12 @@ func (s *InboundService) AddInboundClient(data *model.Inbound) (bool, error) {
|
|||||||
cm["created_at"] = nowTs
|
cm["created_at"] = nowTs
|
||||||
}
|
}
|
||||||
cm["updated_at"] = nowTs
|
cm["updated_at"] = nowTs
|
||||||
|
|
||||||
|
// ↓↓↓↓↓↓ 【重要补充】在这里手动确保 SpeedLimit 被写入数据库 ↓↓↓↓↓↓
|
||||||
|
// clients[i] 和 interfaceClients[i] 是一一对应的
|
||||||
|
// 我们从强类型的 clients[i] 对象中取出 SpeedLimit,赋值给弱类型的 map
|
||||||
|
cm["speedLimit"] = clients[i].SpeedLimit // 中文注释: 确保批量添加时,speedLimit 的值也被写入数据库。
|
||||||
|
|
||||||
interfaceClients[i] = cm
|
interfaceClients[i] = cm
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -587,14 +593,21 @@ func (s *InboundService) AddInboundClient(data *model.Inbound) (bool, error) {
|
|||||||
if oldInbound.Protocol == "shadowsocks" {
|
if oldInbound.Protocol == "shadowsocks" {
|
||||||
cipher = oldSettings["method"].(string)
|
cipher = oldSettings["method"].(string)
|
||||||
}
|
}
|
||||||
err1 := s.xrayApi.AddUser(string(oldInbound.Protocol), oldInbound.Tag, map[string]any{
|
|
||||||
|
// 中文注释: 在这里为 API 调用添加 speedLimit 参数。
|
||||||
|
clientMap := map[string]any{
|
||||||
"email": client.Email,
|
"email": client.Email,
|
||||||
"id": client.ID,
|
"id": client.ID,
|
||||||
"security": client.Security,
|
"security": client.Security,
|
||||||
"flow": client.Flow,
|
"flow": client.Flow,
|
||||||
"password": client.Password,
|
"password": client.Password,
|
||||||
"cipher": cipher,
|
"cipher": cipher,
|
||||||
})
|
|
||||||
|
// Xray-core 会将这个值作为 level,然后去 policy 中寻找对应的限速策略。
|
||||||
|
"level": client.SpeedLimit,
|
||||||
|
}
|
||||||
|
err1 := s.xrayApi.AddUser(string(oldInbound.Protocol), oldInbound.Tag, clientMap)
|
||||||
|
|
||||||
if err1 == nil {
|
if err1 == nil {
|
||||||
logger.Debug("Client added by api:", client.Email)
|
logger.Debug("Client added by api:", client.Email)
|
||||||
} else {
|
} else {
|
||||||
@ -783,6 +796,12 @@ func (s *InboundService) UpdateInboundClient(data *model.Inbound, clientId strin
|
|||||||
}
|
}
|
||||||
newMap["created_at"] = preservedCreated
|
newMap["created_at"] = preservedCreated
|
||||||
newMap["updated_at"] = time.Now().Unix() * 1000
|
newMap["updated_at"] = time.Now().Unix() * 1000
|
||||||
|
|
||||||
|
// ↓↓↓↓↓↓ 【重要补充】在这里手动确保 SpeedLimit 被写入数据库 ↓↓↓↓↓↓
|
||||||
|
// clients[0] 是从请求中解码出来的强类型对象,它的 SpeedLimit 字段是有值的。
|
||||||
|
// 我们把它手动赋值给即将用于保存的 newMap。
|
||||||
|
newMap["speedLimit"] = clients[0].SpeedLimit // 中文注释:确保将 speedLimit 的值写入将要保存到数据库的 map 中。
|
||||||
|
|
||||||
interfaceClients[0] = newMap
|
interfaceClients[0] = newMap
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -850,14 +869,20 @@ func (s *InboundService) UpdateInboundClient(data *model.Inbound, clientId strin
|
|||||||
if oldInbound.Protocol == "shadowsocks" {
|
if oldInbound.Protocol == "shadowsocks" {
|
||||||
cipher = oldSettings["method"].(string)
|
cipher = oldSettings["method"].(string)
|
||||||
}
|
}
|
||||||
err1 := s.xrayApi.AddUser(string(oldInbound.Protocol), oldInbound.Tag, map[string]any{
|
|
||||||
|
// 中文注释: 同样,在更新用户时,也必须把新的 speedLimit 值通过 API 传给 Xray-core。
|
||||||
|
clientMap := map[string]any{
|
||||||
"email": clients[0].Email,
|
"email": clients[0].Email,
|
||||||
"id": clients[0].ID,
|
"id": clients[0].ID,
|
||||||
"security": clients[0].Security,
|
"security": clients[0].Security,
|
||||||
"flow": clients[0].Flow,
|
"flow": clients[0].Flow,
|
||||||
"password": clients[0].Password,
|
"password": clients[0].Password,
|
||||||
"cipher": cipher,
|
"cipher": cipher,
|
||||||
})
|
|
||||||
|
"level": clients[0].SpeedLimit,
|
||||||
|
}
|
||||||
|
err1 := s.xrayApi.AddUser(string(oldInbound.Protocol), oldInbound.Tag, clientMap)
|
||||||
|
|
||||||
if err1 == nil {
|
if err1 == nil {
|
||||||
logger.Debug("Client edited by api:", clients[0].Email)
|
logger.Debug("Client edited by api:", clients[0].Email)
|
||||||
} else {
|
} else {
|
||||||
@ -2114,6 +2139,12 @@ func (s *InboundService) MigrationRequirements() {
|
|||||||
c["created_at"] = time.Now().Unix() * 1000
|
c["created_at"] = time.Now().Unix() * 1000
|
||||||
}
|
}
|
||||||
c["updated_at"] = time.Now().Unix() * 1000
|
c["updated_at"] = time.Now().Unix() * 1000
|
||||||
|
|
||||||
|
// 中文注释: 回填 speedLimit,如果不存在设为 0,确保旧数据有字段,避免显示和配置问题
|
||||||
|
if _, ok := c["speedLimit"]; !ok {
|
||||||
|
c["speedLimit"] = 0
|
||||||
|
}
|
||||||
|
|
||||||
newClients = append(newClients, any(c))
|
newClients = append(newClients, any(c))
|
||||||
}
|
}
|
||||||
settings["clients"] = newClients
|
settings["clients"] = newClients
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user