Bläddra i källkod

Add iran.dat when updating xray (#870)

we can download iran.dat, because it's one of the required files in our settings
Hamidreza 1 år sedan
förälder
incheckning
24eb36715a
2 ändrade filer med 43 tillägg och 10 borttagningar
  1. 38 10
      web/service/server.go
  2. 5 0
      xray/process.go

+ 38 - 10
web/service/server.go

@@ -254,7 +254,6 @@ func (s *ServerService) GetXrayVersions() ([]string, error) {
 }
 
 func (s *ServerService) StopXrayService() (string error) {
-
 	err := s.xrayService.StopXray()
 	if err != nil {
 		logger.Error("stop xray failed:", err)
@@ -265,7 +264,6 @@ func (s *ServerService) StopXrayService() (string error) {
 }
 
 func (s *ServerService) RestartXrayService() (string error) {
-
 	s.xrayService.StopXray()
 	defer func() {
 		err := s.xrayService.RestartXray(true)
@@ -363,17 +361,47 @@ func (s *ServerService) UpdateXray(version string) error {
 		return err
 	}
 
-	err = copyZipFile("xray", xray.GetBinaryPath())
-	if err != nil {
+	downloadFile := func(fileName string, url string) error {
+		os.Remove(fileName)
+		file, err := os.OpenFile(fileName, os.O_CREATE|os.O_RDWR|os.O_TRUNC, fs.ModePerm)
+		if err != nil {
+			return err
+		}
+		defer file.Close()
+		resp, err := http.Get(url)
+		if err != nil {
+			return err
+		}
+		defer resp.Body.Close()
+		if resp.StatusCode != http.StatusOK {
+			return fmt.Errorf("download file failed: %s", resp.Status)
+		}
+		_, err = io.Copy(file, resp.Body)
 		return err
 	}
-	err = copyZipFile("geosite.dat", xray.GetGeositePath())
-	if err != nil {
-		return err
+
+	copyFiles := map[string]string{
+		"xray":        xray.GetBinaryPath(),
+		"geosite.dat": xray.GetGeositePath(),
+		"geoip.dat":   xray.GetGeoipPath(),
 	}
-	err = copyZipFile("geoip.dat", xray.GetGeoipPath())
-	if err != nil {
-		return err
+
+	downloadFiles := map[string]string{
+		xray.GetIranPath(): "https://github.com/MasterKia/iran-hosted-domains/releases/latest/download/iran.dat",
+	}
+
+	for fileName, filePath := range copyFiles {
+		err := copyZipFile(fileName, filePath)
+		if err != nil {
+			return err
+		}
+	}
+
+	for fileName, filePath := range downloadFiles {
+		err := downloadFile(fileName, filePath)
+		if err != nil {
+			return err
+		}
 	}
 
 	return nil

+ 5 - 0
xray/process.go

@@ -13,6 +13,7 @@ import (
 	"strings"
 	"sync"
 	"syscall"
+
 	"x-ui/config"
 	"x-ui/logger"
 	"x-ui/util/common"
@@ -40,6 +41,10 @@ func GetGeoipPath() string {
 	return config.GetBinFolderPath() + "/geoip.dat"
 }
 
+func GetIranPath() string {
+	return config.GetBinFolderPath() + "/iran.dat"
+}
+
 func GetIPLimitLogPath() string {
 	return config.GetLogFolder() + "/3xipl.log"
 }