|
@@ -534,11 +534,13 @@ func (s *InboundService) DelInboundClient(inboundId int, clientId string) (bool,
|
|
|
|
|
|
interfaceClients := settings["clients"].([]interface{})
|
|
interfaceClients := settings["clients"].([]interface{})
|
|
var newClients []interface{}
|
|
var newClients []interface{}
|
|
|
|
+ needApiDel := false
|
|
for _, client := range interfaceClients {
|
|
for _, client := range interfaceClients {
|
|
c := client.(map[string]interface{})
|
|
c := client.(map[string]interface{})
|
|
c_id := c[client_key].(string)
|
|
c_id := c[client_key].(string)
|
|
if c_id == clientId {
|
|
if c_id == clientId {
|
|
- email = c["email"].(string)
|
|
|
|
|
|
+ email, _ = c["email"].(string)
|
|
|
|
+ needApiDel, _ = c["enable"].(bool)
|
|
} else {
|
|
} else {
|
|
newClients = append(newClients, client)
|
|
newClients = append(newClients, client)
|
|
}
|
|
}
|
|
@@ -557,11 +559,6 @@ func (s *InboundService) DelInboundClient(inboundId int, clientId string) (bool,
|
|
oldInbound.Settings = string(newSettings)
|
|
oldInbound.Settings = string(newSettings)
|
|
|
|
|
|
db := database.GetDB()
|
|
db := database.GetDB()
|
|
- err = s.DelClientStat(db, email)
|
|
|
|
- if err != nil {
|
|
|
|
- logger.Error("Delete stats Data Error")
|
|
|
|
- return false, err
|
|
|
|
- }
|
|
|
|
|
|
|
|
err = s.DelClientIPs(db, email)
|
|
err = s.DelClientIPs(db, email)
|
|
if err != nil {
|
|
if err != nil {
|
|
@@ -569,17 +566,31 @@ func (s *InboundService) DelInboundClient(inboundId int, clientId string) (bool,
|
|
return false, err
|
|
return false, err
|
|
}
|
|
}
|
|
needRestart := false
|
|
needRestart := false
|
|
|
|
+
|
|
if len(email) > 0 {
|
|
if len(email) > 0 {
|
|
- s.xrayApi.Init(p.GetAPIPort())
|
|
|
|
- err1 := s.xrayApi.RemoveUser(oldInbound.Tag, email)
|
|
|
|
- if err1 == nil {
|
|
|
|
- logger.Debug("Client deleted by api:", email)
|
|
|
|
- needRestart = false
|
|
|
|
- } else {
|
|
|
|
- logger.Debug("Unable to del client by api:", err1)
|
|
|
|
- needRestart = true
|
|
|
|
|
|
+ notDepleted := true
|
|
|
|
+ err = db.Model(xray.ClientTraffic{}).Select("enable").Where("email = ?", email).First(¬Depleted).Error
|
|
|
|
+ if err != nil {
|
|
|
|
+ logger.Error("Get stats error")
|
|
|
|
+ return false, err
|
|
|
|
+ }
|
|
|
|
+ err = s.DelClientStat(db, email)
|
|
|
|
+ if err != nil {
|
|
|
|
+ logger.Error("Delete stats Data Error")
|
|
|
|
+ return false, err
|
|
|
|
+ }
|
|
|
|
+ if needApiDel && notDepleted {
|
|
|
|
+ s.xrayApi.Init(p.GetAPIPort())
|
|
|
|
+ err1 := s.xrayApi.RemoveUser(oldInbound.Tag, email)
|
|
|
|
+ if err1 == nil {
|
|
|
|
+ logger.Debug("Client deleted by api:", email)
|
|
|
|
+ needRestart = false
|
|
|
|
+ } else {
|
|
|
|
+ logger.Debug("Unable to del client by api:", err1)
|
|
|
|
+ needRestart = true
|
|
|
|
+ }
|
|
|
|
+ s.xrayApi.Close()
|
|
}
|
|
}
|
|
- s.xrayApi.Close()
|
|
|
|
}
|
|
}
|
|
return needRestart, db.Save(oldInbound).Error
|
|
return needRestart, db.Save(oldInbound).Error
|
|
}
|
|
}
|
|
@@ -697,12 +708,14 @@ func (s *InboundService) UpdateInboundClient(data *model.Inbound, clientId strin
|
|
needRestart := false
|
|
needRestart := false
|
|
if len(oldEmail) > 0 {
|
|
if len(oldEmail) > 0 {
|
|
s.xrayApi.Init(p.GetAPIPort())
|
|
s.xrayApi.Init(p.GetAPIPort())
|
|
- err1 := s.xrayApi.RemoveUser(oldInbound.Tag, oldEmail)
|
|
|
|
- if err1 == nil {
|
|
|
|
- logger.Debug("Old client deleted by api:", clients[0].Email)
|
|
|
|
- } else {
|
|
|
|
- logger.Debug("Error in deleting client by api:", err1)
|
|
|
|
- needRestart = true
|
|
|
|
|
|
+ if oldClients[clientIndex].Enable {
|
|
|
|
+ err1 := s.xrayApi.RemoveUser(oldInbound.Tag, oldEmail)
|
|
|
|
+ if err1 == nil {
|
|
|
|
+ logger.Debug("Old client deleted by api:", clients[0].Email)
|
|
|
|
+ } else {
|
|
|
|
+ logger.Debug("Error in deleting client by api:", err1)
|
|
|
|
+ needRestart = true
|
|
|
|
+ }
|
|
}
|
|
}
|
|
if clients[0].Enable {
|
|
if clients[0].Enable {
|
|
cipher := ""
|
|
cipher := ""
|