From 2dc59a601cdd8167a597a23ac60bc3ffd793c59d Mon Sep 17 00:00:00 2001 From: mhsanaei Date: Mon, 2 Sep 2024 10:26:19 +0200 Subject: [PATCH] fix restart after enabling user Co-Authored-By: Alireza Ahmadi --- web/service/inbound.go | 55 ++++++++++++++++++++++++++---------------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/web/service/inbound.go b/web/service/inbound.go index baf7616f..fa0ecf31 100644 --- a/web/service/inbound.go +++ b/web/service/inbound.go @@ -534,11 +534,13 @@ func (s *InboundService) DelInboundClient(inboundId int, clientId string) (bool, interfaceClients := settings["clients"].([]interface{}) var newClients []interface{} + needApiDel := false for _, client := range interfaceClients { c := client.(map[string]interface{}) c_id := c[client_key].(string) if c_id == clientId { - email = c["email"].(string) + email, _ = c["email"].(string) + needApiDel, _ = c["enable"].(bool) } else { newClients = append(newClients, client) } @@ -557,11 +559,6 @@ func (s *InboundService) DelInboundClient(inboundId int, clientId string) (bool, oldInbound.Settings = string(newSettings) 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) if err != nil { @@ -569,17 +566,31 @@ func (s *InboundService) DelInboundClient(inboundId int, clientId string) (bool, return false, err } needRestart := false + 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 } @@ -697,12 +708,14 @@ func (s *InboundService) UpdateInboundClient(data *model.Inbound, clientId strin needRestart := false if len(oldEmail) > 0 { 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 { cipher := ""