Explorar el Código

fix restart after enabling user

Co-Authored-By: Alireza Ahmadi <[email protected]>
mhsanaei hace 2 semanas
padre
commit
2dc59a601c
Se han modificado 1 ficheros con 34 adiciones y 21 borrados
  1. 34 21
      web/service/inbound.go

+ 34 - 21
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(&notDepleted).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 := ""