Skip to content

Commit

Permalink
[iplimit] fix access log path in settings service (#2044)
Browse files Browse the repository at this point in the history
* [iplimit] fix access log path in settings service

better to avoid hardcoding the access log path to enhance flexibility. not all users prefer the default './access.log'

* [iplimit] fix iplimit
  • Loading branch information
hamid-gh98 committed Mar 13, 2024
1 parent 97489e7 commit 569c942
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 32 deletions.
35 changes: 22 additions & 13 deletions web/job/check_client_ip_job.go
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ func (j *CheckClientIpJob) Run() {
shouldClearAccessLog = j.processLogFile()
} else {
if !f2bInstalled {
logger.Warning("fail2ban is not installed. IP limiting may not work properly.")
logger.Warning("[iplimit] fail2ban is not installed. IP limiting may not work properly.")
}
}
}
Expand All @@ -58,8 +58,11 @@ func (j *CheckClientIpJob) clearAccessLog() {
logAccessP, err := os.OpenFile(xray.GetAccessPersistentLogPath(), os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0o644)
j.checkError(err)

// get access log path to open it
accessLogPath, err := xray.GetAccessLogPath()
j.checkError(err)

// reopen the access log file for reading
accessLogPath := xray.GetAccessLogPath()
file, err := os.Open(accessLogPath)
j.checkError(err)

Expand Down Expand Up @@ -106,15 +109,9 @@ func (j *CheckClientIpJob) hasLimitIp() bool {
return false
}

func (j *CheckClientIpJob) checkFail2BanInstalled() bool {
cmd := "fail2ban-client"
args := []string{"-h"}
err := exec.Command(cmd, args...).Run()
return err == nil
}

func (j *CheckClientIpJob) processLogFile() bool {
accessLogPath := xray.GetAccessLogPath()
accessLogPath, err := xray.GetAccessLogPath()
j.checkError(err)

file, err := os.Open(accessLogPath)
j.checkError(err)
Expand Down Expand Up @@ -170,10 +167,21 @@ func (j *CheckClientIpJob) processLogFile() bool {
return shouldCleanLog
}

func (j *CheckClientIpJob) checkAccessLogAvailable(doWarning bool) bool {
accessLogPath := xray.GetAccessLogPath()
func (j *CheckClientIpJob) checkFail2BanInstalled() bool {
cmd := "fail2ban-client"
args := []string{"-h"}
err := exec.Command(cmd, args...).Run()
return err == nil
}

func (j *CheckClientIpJob) checkAccessLogAvailable(handleWarning bool) bool {
isAvailable := true
warningMsg := ""
accessLogPath, err := xray.GetAccessLogPath()
if err != nil {
return false
}

// access log is not available if it is set to 'none' or an empty string
switch accessLogPath {
case "none":
Expand All @@ -183,7 +191,8 @@ func (j *CheckClientIpJob) checkAccessLogAvailable(doWarning bool) bool {
warningMsg = "Access log doesn't exist in your Xray Configs"
isAvailable = false
}
if doWarning && warningMsg != "" {

if handleWarning && warningMsg != "" {
logger.Warning(warningMsg)
}
return isAvailable
Expand Down
16 changes: 3 additions & 13 deletions web/service/setting.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import (
"x-ui/util/random"
"x-ui/util/reflect_util"
"x-ui/web/entity"
"x-ui/xray"
)

//go:embed config.json
Expand Down Expand Up @@ -460,22 +461,11 @@ func (s *SettingService) SetWarp(data string) error {
}

func (s *SettingService) GetIpLimitEnable() (bool, error) {
templateConfig, err := s.GetXrayConfigTemplate()
accessLogPath, err := xray.GetAccessLogPath()
if err != nil {
return false, err
}

var xrayConfig map[string]interface{}
err = json.Unmarshal([]byte(templateConfig), &xrayConfig)
if err != nil {
return false, err
}
if logConfig, ok := xrayConfig["log"].(map[string]interface{}); ok {
if accessLogPath, ok := logConfig["access"].(string); ok {
return accessLogPath == "./access.log", nil
}
}
return false, nil
return (accessLogPath != "none" && accessLogPath != ""), nil
}

func (s *SettingService) UpdateAllSetting(allSetting *entity.AllSetting) error {
Expand Down
12 changes: 6 additions & 6 deletions xray/process.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,28 +57,28 @@ func GetAccessPersistentPrevLogPath() string {
return config.GetLogFolder() + "/3xipl-ap.prev.log"
}

func GetAccessLogPath() string {
func GetAccessLogPath() (string, error) {
config, err := os.ReadFile(GetConfigPath())
if err != nil {
logger.Warningf("Something went wrong: %s", err)
return "", err
}

jsonConfig := map[string]interface{}{}
err = json.Unmarshal([]byte(config), &jsonConfig)
if err != nil {
logger.Warningf("Something went wrong: %s", err)
return "", err
}

if jsonConfig["log"] != nil {
jsonLog := jsonConfig["log"].(map[string]interface{})
if jsonLog["access"] != nil {

accessLogPath := jsonLog["access"].(string)

return accessLogPath
return accessLogPath, nil
}
}
return ""
return "", err
}

func stopProcess(p *Process) {
Expand Down Expand Up @@ -203,7 +203,7 @@ func (p *process) Start() (err error) {
return common.NewErrorf("Failed to generate xray configuration file: %v", err)
}

err = os.MkdirAll(config.GetLogFolder(), 0770)
err = os.MkdirAll(config.GetLogFolder(), 0o770)
if err != nil {
logger.Warningf("Something went wrong: %s", err)
}
Expand Down

0 comments on commit 569c942

Please sign in to comment.