fix import db and always restart xray

This commit is contained in:
Hamidreza Ghavami 2023-05-06 02:22:45 +04:30
parent 6602c55f3c
commit 6c087ceb1a
2 changed files with 10 additions and 18 deletions

View file

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

View file

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