Browse Source

fix import db and always restart xray

Hamidreza Ghavami 1 year ago
parent
commit
6c087ceb1a
2 changed files with 10 additions and 18 deletions
  1. 2 0
      web/controller/server.go
  2. 8 18
      web/service/server.go

+ 2 - 0
web/controller/server.go

@@ -152,6 +152,8 @@ func (a *ServerController) importDB(c *gin.Context) {
 		return
 	}
 	defer file.Close()
+	// Always restart Xray before return
+	defer a.serverService.RestartXrayService()
 	// Import it
 	err = a.serverService.ImportDB(file)
 	if err != nil {

+ 8 - 18
web/service/server.go

@@ -411,6 +411,8 @@ func (s *ServerService) ImportDB(file multipart.File) error {
 
 	// Save the file as temporary file
 	tempPath := fmt.Sprintf("%s.temp", config.GetDBPath())
+	// remove temp file before return
+	defer os.Remove(tempPath)
 	tempFile, err := os.Create(tempPath)
 	if err != nil {
 		return common.NewErrorf("Error creating temporary db file: %v", err)
@@ -420,60 +422,48 @@ func (s *ServerService) ImportDB(file multipart.File) error {
 	// Reset the file reader to the beginning
 	_, err = file.Seek(0, 0)
 	if err != nil {
-		defer os.Remove(tempPath)
 		return common.NewErrorf("Error resetting file reader: %v", err)
 	}
 
 	// Save temp file
 	_, err = io.Copy(tempFile, file)
 	if err != nil {
-		defer os.Remove(tempPath)
 		return common.NewErrorf("Error saving db: %v", err)
 	}
 
 	// Check if we can init db or not
 	err = database.InitDB(tempPath)
 	if err != nil {
-		defer os.Remove(tempPath)
 		return common.NewErrorf("Error checking db: %v", err)
 	}
 
-	// Stop Xray if its running
-	if s.xrayService.IsXrayRunning() {
-		err := s.StopXrayService()
-		if err != nil {
-			defer os.Remove(tempPath)
-			return common.NewErrorf("Failed to stop Xray: %v", err)
-		}
-	}
+	// Stop Xray
+	s.StopXrayService()
 
 	// Backup db for fallback
 	fallbackPath := fmt.Sprintf("%s.backup", config.GetDBPath())
+	// remove fallback file before return
+	defer os.Remove(fallbackPath)
 	err = os.Rename(config.GetDBPath(), fallbackPath)
 	if err != nil {
-		defer os.Remove(tempPath)
 		return common.NewErrorf("Error backup temporary db file: %v", err)
 	}
 
 	// Move temp to DB path
 	err = os.Rename(tempPath, config.GetDBPath())
 	if err != nil {
-		defer os.Remove(tempPath)
-		defer os.Rename(fallbackPath, config.GetDBPath())
+		os.Rename(fallbackPath, config.GetDBPath())
 		return common.NewErrorf("Error moving db file: %v", err)
 	}
 
 	// Migrate DB
 	err = database.InitDB(config.GetDBPath())
 	if err != nil {
-		defer os.Rename(fallbackPath, config.GetDBPath())
+		os.Rename(fallbackPath, config.GetDBPath())
 		return common.NewErrorf("Error migrating db: %v", err)
 	}
 	s.inboundService.MigrateDB()
 
-	// remove fallback file
-	defer os.Remove(fallbackPath)
-
 	// Start Xray
 	err = s.RestartXrayService()
 	if err != nil {