fix restart after enabling user

Co-Authored-By: Alireza Ahmadi <alireza7@gmail.com>
This commit is contained in:
mhsanaei 2024-09-02 10:26:19 +02:00
parent 4ad04e2032
commit 2dc59a601c

View File

@ -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()) notDepleted := true
err1 := s.xrayApi.RemoveUser(oldInbound.Tag, email) err = db.Model(xray.ClientTraffic{}).Select("enable").Where("email = ?", email).First(&notDepleted).Error
if err1 == nil { if err != nil {
logger.Debug("Client deleted by api:", email) logger.Error("Get stats error")
needRestart = false return false, err
} else { }
logger.Debug("Unable to del client by api:", err1) err = s.DelClientStat(db, email)
needRestart = true 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 oldClients[clientIndex].Enable {
if err1 == nil { err1 := s.xrayApi.RemoveUser(oldInbound.Tag, oldEmail)
logger.Debug("Old client deleted by api:", clients[0].Email) if err1 == nil {
} else { logger.Debug("Old client deleted by api:", clients[0].Email)
logger.Debug("Error in deleting client by api:", err1) } else {
needRestart = true logger.Debug("Error in deleting client by api:", err1)
needRestart = true
}
} }
if clients[0].Enable { if clients[0].Enable {
cipher := "" cipher := ""