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
diff options
context:
space:
mode:
-rw-r--r--config/config.go2
-rw-r--r--web/job/check_client_ip_job.go15
-rw-r--r--web/service/server.go40
3 files changed, 39 insertions, 18 deletions
diff --git a/config/config.go b/config/config.go
index 32d83055..d5fe65ff 100644
--- a/config/config.go
+++ b/config/config.go
@@ -95,7 +95,7 @@ func GetLogFolder() string {
return logFolderPath
}
if runtime.GOOS == "windows" {
- return getBaseDir()
+ return filepath.Join(".", "log")
}
return "/var/log"
}
diff --git a/web/job/check_client_ip_job.go b/web/job/check_client_ip_job.go
index 5a30b616..c839a876 100644
--- a/web/job/check_client_ip_job.go
+++ b/web/job/check_client_ip_job.go
@@ -8,6 +8,7 @@ import (
"os"
"os/exec"
"regexp"
+ "runtime"
"sort"
"time"
@@ -40,11 +41,17 @@ func (j *CheckClientIpJob) Run() {
isAccessLogAvailable := j.checkAccessLogAvailable(iplimitActive)
if iplimitActive {
- if f2bInstalled && isAccessLogAvailable {
- shouldClearAccessLog = j.processLogFile()
+ if runtime.GOOS == "windows" {
+ if isAccessLogAvailable {
+ shouldClearAccessLog = j.processLogFile()
+ }
} else {
- if !f2bInstalled {
- logger.Warning("[LimitIP] Fail2Ban is not installed, Please install Fail2Ban from the x-ui bash menu.")
+ if f2bInstalled && isAccessLogAvailable {
+ shouldClearAccessLog = j.processLogFile()
+ } else {
+ if !f2bInstalled {
+ logger.Warning("[LimitIP] Fail2Ban is not installed, Please install Fail2Ban from the x-ui bash menu.")
+ }
}
}
}
diff --git a/web/service/server.go b/web/service/server.go
index 5c3268a6..85af5597 100644
--- a/web/service/server.go
+++ b/web/service/server.go
@@ -12,6 +12,7 @@ import (
"net/http"
"os"
"os/exec"
+ "path/filepath"
"runtime"
"strconv"
"strings"
@@ -376,6 +377,8 @@ func (s *ServerService) downloadXRay(version string) (string, error) {
switch osName {
case "darwin":
osName = "macos"
+ case "windows":
+ osName = "windows"
}
switch arch {
@@ -419,19 +422,23 @@ func (s *ServerService) downloadXRay(version string) (string, error) {
}
func (s *ServerService) UpdateXray(version string) error {
+ // 1. Stop xray before doing anything
+ if err := s.StopXrayService(); err != nil {
+ logger.Warning("failed to stop xray before update:", err)
+ }
+
+ // 2. Download the zip
zipFileName, err := s.downloadXRay(version)
if err != nil {
return err
}
+ defer os.Remove(zipFileName)
zipFile, err := os.Open(zipFileName)
if err != nil {
return err
}
- defer func() {
- zipFile.Close()
- os.Remove(zipFileName)
- }()
+ defer zipFile.Close()
stat, err := zipFile.Stat()
if err != nil {
@@ -442,19 +449,14 @@ func (s *ServerService) UpdateXray(version string) error {
return err
}
- s.xrayService.StopXray()
- defer func() {
- err := s.xrayService.RestartXray(true)
- if err != nil {
- logger.Error("start xray failed:", err)
- }
- }()
-
+ // 3. Helper to extract files
copyZipFile := func(zipName string, fileName string) error {
zipFile, err := reader.Open(zipName)
if err != nil {
return err
}
+ defer zipFile.Close()
+ os.MkdirAll(filepath.Dir(fileName), 0755)
os.Remove(fileName)
file, err := os.OpenFile(fileName, os.O_CREATE|os.O_RDWR|os.O_TRUNC, fs.ModePerm)
if err != nil {
@@ -465,11 +467,23 @@ func (s *ServerService) UpdateXray(version string) error {
return err
}
- err = copyZipFile("xray", xray.GetBinaryPath())
+ // 4. Extract correct binary
+ if runtime.GOOS == "windows" {
+ targetBinary := filepath.Join("bin", "xray-windows-amd64.exe")
+ err = copyZipFile("xray.exe", targetBinary)
+ } else {
+ err = copyZipFile("xray", xray.GetBinaryPath())
+ }
if err != nil {
return err
}
+ // 5. Restart xray
+ if err := s.xrayService.RestartXray(true); err != nil {
+ logger.Error("start xray failed:", err)
+ return err
+ }
+
return nil
}