|
@@ -411,6 +411,8 @@ func (s *ServerService) ImportDB(file multipart.File) error {
|
|
|
|
|
|
|
|
|
tempPath := fmt.Sprintf("%s.temp", config.GetDBPath())
|
|
|
+
|
|
|
+ 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 {
|
|
|
|
|
|
_, err = file.Seek(0, 0)
|
|
|
if err != nil {
|
|
|
- defer os.Remove(tempPath)
|
|
|
return common.NewErrorf("Error resetting file reader: %v", err)
|
|
|
}
|
|
|
|
|
|
|
|
|
_, err = io.Copy(tempFile, file)
|
|
|
if err != nil {
|
|
|
- defer os.Remove(tempPath)
|
|
|
return common.NewErrorf("Error saving db: %v", err)
|
|
|
}
|
|
|
|
|
|
|
|
|
err = database.InitDB(tempPath)
|
|
|
if err != nil {
|
|
|
- defer os.Remove(tempPath)
|
|
|
return common.NewErrorf("Error checking db: %v", err)
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- if s.xrayService.IsXrayRunning() {
|
|
|
- err := s.StopXrayService()
|
|
|
- if err != nil {
|
|
|
- defer os.Remove(tempPath)
|
|
|
- return common.NewErrorf("Failed to stop Xray: %v", err)
|
|
|
- }
|
|
|
- }
|
|
|
+
|
|
|
+ s.StopXrayService()
|
|
|
|
|
|
|
|
|
fallbackPath := fmt.Sprintf("%s.backup", config.GetDBPath())
|
|
|
+
|
|
|
+ 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)
|
|
|
}
|
|
|
|
|
|
|
|
|
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)
|
|
|
}
|
|
|
|
|
|
|
|
|
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()
|
|
|
|
|
|
-
|
|
|
- defer os.Remove(fallbackPath)
|
|
|
-
|
|
|
|
|
|
err = s.RestartXrayService()
|
|
|
if err != nil {
|