Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/MHSanaei/3x-ui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/web
diff options
context:
space:
mode:
authorHamidreza Ghavami <hamid.r.gh.1998@gmail.com>2023-05-06 03:17:57 +0300
committerHamidreza Ghavami <hamid.r.gh.1998@gmail.com>2023-05-06 03:17:57 +0300
commit83c853ffb6b896c8a6d1eef4e0354ba1201ebf13 (patch)
treeea1e1764da0208035a7000f7d884a6c36b55d830 /web
parent058ab5f90195a901caa845e37c16309c65e5a09d (diff)
update ImportDB and enhancement
Diffstat (limited to 'web')
-rw-r--r--web/controller/server.go4
-rw-r--r--web/service/server.go54
2 files changed, 43 insertions, 15 deletions
diff --git a/web/controller/server.go b/web/controller/server.go
index b3dc0ad6..9e649e6c 100644
--- a/web/controller/server.go
+++ b/web/controller/server.go
@@ -154,13 +154,15 @@ func (a *ServerController) importDB(c *gin.Context) {
defer file.Close()
// Always restart Xray before return
defer a.serverService.RestartXrayService()
+ defer func() {
+ a.lastGetStatusTime = time.Now()
+ }()
// Import it
err = a.serverService.ImportDB(file)
if err != nil {
jsonMsg(c, "", err)
return
}
- a.lastGetStatusTime = time.Now()
jsonObj(c, "Import DB", nil)
}
diff --git a/web/service/server.go b/web/service/server.go
index a9e10ea2..d8a2239b 100644
--- a/web/service/server.go
+++ b/web/service/server.go
@@ -409,23 +409,33 @@ func (s *ServerService) ImportDB(file multipart.File) error {
return common.NewError("Invalid db file format")
}
+ // Reset the file reader to the beginning
+ _, err = file.Seek(0, 0)
+ if err != nil {
+ return common.NewErrorf("Error resetting file reader: %v", err)
+ }
+
// Save the file as temporary file
tempPath := fmt.Sprintf("%s.temp", config.GetDBPath())
- // remove temp file before return
- defer os.Remove(tempPath)
+ // Remove the existing fallback file (if any) before creating one
+ _, err = os.Stat(tempPath)
+ if err == nil {
+ errRemove := os.Remove(tempPath)
+ if errRemove != nil {
+ return common.NewErrorf("Error removing existing temporary db file: %v", errRemove)
+ }
+ }
+ // Create the temporary file
tempFile, err := os.Create(tempPath)
if err != nil {
return common.NewErrorf("Error creating temporary db file: %v", err)
}
defer tempFile.Close()
- // Reset the file reader to the beginning
- _, err = file.Seek(0, 0)
- if err != nil {
- return common.NewErrorf("Error resetting file reader: %v", err)
- }
+ // Remove temp file before returning
+ defer os.Remove(tempPath)
- // Save temp file
+ // Save uploaded file to temporary file
_, err = io.Copy(tempFile, file)
if err != nil {
return common.NewErrorf("Error saving db: %v", err)
@@ -440,26 +450,42 @@ func (s *ServerService) ImportDB(file multipart.File) error {
// Stop Xray
s.StopXrayService()
- // Backup db for fallback
+ // Backup the current database for fallback
fallbackPath := fmt.Sprintf("%s.backup", config.GetDBPath())
- // remove fallback file before return
- defer os.Remove(fallbackPath)
+ // Remove the existing fallback file (if any)
+ _, err = os.Stat(fallbackPath)
+ if err == nil {
+ errRemove := os.Remove(fallbackPath)
+ if errRemove != nil {
+ return common.NewErrorf("Error removing existing fallback db file: %v", errRemove)
+ }
+ }
+ // Move the current database to the fallback location
err = os.Rename(config.GetDBPath(), fallbackPath)
if err != nil {
- return common.NewErrorf("Error backup temporary db file: %v", err)
+ return common.NewErrorf("Error backing up temporary db file: %v", err)
}
+ // Remove the temporary file before returning
+ defer os.Remove(fallbackPath)
+
// Move temp to DB path
err = os.Rename(tempPath, config.GetDBPath())
if err != nil {
- os.Rename(fallbackPath, config.GetDBPath())
+ errRename := os.Rename(fallbackPath, config.GetDBPath())
+ if errRename != nil {
+ return common.NewErrorf("Error moving db file and restoring fallback: %v", errRename)
+ }
return common.NewErrorf("Error moving db file: %v", err)
}
// Migrate DB
err = database.InitDB(config.GetDBPath())
if err != nil {
- os.Rename(fallbackPath, config.GetDBPath())
+ errRename := os.Rename(fallbackPath, config.GetDBPath())
+ if errRename != nil {
+ return common.NewErrorf("Error migrating db and restoring fallback: %v", errRename)
+ }
return common.NewErrorf("Error migrating db: %v", err)
}
s.inboundService.MigrateDB()