Browse Source

ip limit only if log is available

Alireza Ahmadi 1 year ago
parent
commit
18af7047f8
3 changed files with 35 additions and 13 deletions
  1. 2 2
      web/html/xui/form/client.html
  2. 2 0
      web/html/xui/inbounds.html
  3. 31 11
      web/service/setting.go

+ 2 - 2
web/html/xui/form/client.html

@@ -63,7 +63,7 @@
         </template>
         </template>
         <a-input v-model.trim="client.tgId"></a-input>
         <a-input v-model.trim="client.tgId"></a-input>
     </a-form-item>
     </a-form-item>
-    <a-form-item>
+    <a-form-item v-if="app.ipLimitEnable">
         <template slot="label">
         <template slot="label">
             <a-tooltip>
             <a-tooltip>
                 <template slot="title">
                 <template slot="title">
@@ -75,7 +75,7 @@
         </template>
         </template>
         <a-input-number v-model="client.limitIp" min="0"></a-input-number>
         <a-input-number v-model="client.limitIp" min="0"></a-input-number>
     </a-form-item>
     </a-form-item>
-    <a-form-item v-if="client.email && client.limitIp > 0 && isEdit">
+    <a-form-item v-if="app.ipLimitEnable && client.email && isEdit">
         <template slot="label">
         <template slot="label">
             <a-tooltip>
             <a-tooltip>
                 <template slot="title">
                 <template slot="title">

+ 2 - 0
web/html/xui/inbounds.html

@@ -571,6 +571,7 @@
             datepicker: 'gregorian',
             datepicker: 'gregorian',
             tgBotEnable: false,
             tgBotEnable: false,
             showAlert: false,
             showAlert: false,
+            ipLimitEnable: false,
             pageSize: 0,
             pageSize: 0,
             isMobile: window.innerWidth <= 768,
             isMobile: window.innerWidth <= 768,
         },
         },
@@ -618,6 +619,7 @@
                     this.pageSize = pageSize;
                     this.pageSize = pageSize;
                     this.remarkModel = remarkModel;
                     this.remarkModel = remarkModel;
                     this.datepicker = datepicker;
                     this.datepicker = datepicker;
+                    this.ipLimitEnable = ipLimitEnable;
                 }
                 }
             },
             },
             setInbounds(dbInbounds) {
             setInbounds(dbInbounds) {

+ 31 - 11
web/service/setting.go

@@ -459,6 +459,25 @@ func (s *SettingService) SetWarp(data string) error {
 	return s.setString("warp", data)
 	return s.setString("warp", data)
 }
 }
 
 
+func (s *SettingService) GetIpLimitEnable() (bool, error) {
+	templateConfig, err := s.GetXrayConfigTemplate()
+	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
+}
+
 func (s *SettingService) UpdateAllSetting(allSetting *entity.AllSetting) error {
 func (s *SettingService) UpdateAllSetting(allSetting *entity.AllSetting) error {
 	if err := allSetting.CheckValid(); err != nil {
 	if err := allSetting.CheckValid(); err != nil {
 		return err
 		return err
@@ -492,17 +511,18 @@ func (s *SettingService) GetDefaultXrayConfig() (interface{}, error) {
 func (s *SettingService) GetDefaultSettings(host string) (interface{}, error) {
 func (s *SettingService) GetDefaultSettings(host string) (interface{}, error) {
 	type settingFunc func() (interface{}, error)
 	type settingFunc func() (interface{}, error)
 	settings := map[string]settingFunc{
 	settings := map[string]settingFunc{
-		"expireDiff":  func() (interface{}, error) { return s.GetExpireDiff() },
-		"trafficDiff": func() (interface{}, error) { return s.GetTrafficDiff() },
-		"pageSize":    func() (interface{}, error) { return s.GetPageSize() },
-		"defaultCert": func() (interface{}, error) { return s.GetCertFile() },
-		"defaultKey":  func() (interface{}, error) { return s.GetKeyFile() },
-		"tgBotEnable": func() (interface{}, error) { return s.GetTgbotenabled() },
-		"subEnable":   func() (interface{}, error) { return s.GetSubEnable() },
-		"subURI":      func() (interface{}, error) { return s.GetSubURI() },
-		"subJsonURI":  func() (interface{}, error) { return s.GetSubJsonURI() },
-		"remarkModel": func() (interface{}, error) { return s.GetRemarkModel() },
-		"datepicker":  func() (interface{}, error) { return s.GetDatepicker() },
+		"expireDiff":    func() (interface{}, error) { return s.GetExpireDiff() },
+		"trafficDiff":   func() (interface{}, error) { return s.GetTrafficDiff() },
+		"pageSize":      func() (interface{}, error) { return s.GetPageSize() },
+		"defaultCert":   func() (interface{}, error) { return s.GetCertFile() },
+		"defaultKey":    func() (interface{}, error) { return s.GetKeyFile() },
+		"tgBotEnable":   func() (interface{}, error) { return s.GetTgbotenabled() },
+		"subEnable":     func() (interface{}, error) { return s.GetSubEnable() },
+		"subURI":        func() (interface{}, error) { return s.GetSubURI() },
+		"subJsonURI":    func() (interface{}, error) { return s.GetSubJsonURI() },
+		"remarkModel":   func() (interface{}, error) { return s.GetRemarkModel() },
+		"datepicker":    func() (interface{}, error) { return s.GetDatepicker() },
+		"ipLimitEnable": func() (interface{}, error) { return s.GetIpLimitEnable() },
 	}
 	}
 
 
 	result := make(map[string]interface{})
 	result := make(map[string]interface{})