From 24eb36715ad701980b19d8bb7373d0f1eeec153b Mon Sep 17 00:00:00 2001 From: Hamidreza <70919649+hamid-gh98@users.noreply.github.com> Date: Tue, 8 Aug 2023 22:21:02 +0330 Subject: [PATCH] Add iran.dat when updating xray (#870) we can download iran.dat, because it's one of the required files in our settings --- web/service/server.go | 48 ++++++++++++++++++++++++++++++++++--------- xray/process.go | 5 +++++ 2 files changed, 43 insertions(+), 10 deletions(-) diff --git a/web/service/server.go b/web/service/server.go index 376126df..6319cab7 100644 --- a/web/service/server.go +++ b/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 diff --git a/xray/process.go b/xray/process.go index 9bccffd9..b860360f 100644 --- a/xray/process.go +++ b/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" }