[iplimit] fix access log path in settings service ()

* [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
This commit is contained in:
Hamidreza 2024-03-13 11:24:41 +03:30 committed by GitHub
parent 97489e743a
commit 569c9428fb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 31 additions and 32 deletions

View file

@ -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.")
}
}
}
@ -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)
@ -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)
@ -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":
@ -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

View file

@ -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
@ -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 {

View file

@ -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) {
@ -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)
}