|  | @@ -163,8 +163,8 @@
 | 
											
												
													
														|  |                          </a-col>
 |  |                          </a-col>
 | 
											
												
													
														|  |                          <a-col :lg="24" :xl="12">
 |  |                          <a-col :lg="24" :xl="12">
 | 
											
												
													
														|  |                            <template>
 |  |                            <template>
 | 
											
												
													
														|  | -                            <a-select v-model="setLogLevel" :dropdown-class-name="themeSwitcher.currentTheme" style="width: 100%">
 |  | 
 | 
											
												
													
														|  | -                              <a-select-option v-for="s in logLevel" :value="s">[[ s ]]</a-select-option>
 |  | 
 | 
											
												
													
														|  | 
 |  | +                            <a-select v-model="logLevel" :dropdown-class-name="themeSwitcher.currentTheme" style="width: 100%">
 | 
											
												
													
														|  | 
 |  | +                                <a-select-option v-for="s in log.loglevel" :value="s">[[ s ]]</a-select-option>
 | 
											
												
													
														|  |                              </a-select>
 |  |                              </a-select>
 | 
											
												
													
														|  |                            </template>
 |  |                            </template>
 | 
											
												
													
														|  |                          </a-col>
 |  |                          </a-col>
 | 
											
										
											
												
													
														|  | @@ -178,7 +178,8 @@
 | 
											
												
													
														|  |                          <a-col :lg="24" :xl="12">
 |  |                          <a-col :lg="24" :xl="12">
 | 
											
												
													
														|  |                            <template>
 |  |                            <template>
 | 
											
												
													
														|  |                              <a-select v-model="accessLog" :dropdown-class-name="themeSwitcher.currentTheme" style="width: 100%">
 |  |                              <a-select v-model="accessLog" :dropdown-class-name="themeSwitcher.currentTheme" style="width: 100%">
 | 
											
												
													
														|  | -                              <a-select-option v-for="s in access" :key="s" :value="s">[[ s ]]</a-select-option>
 |  | 
 | 
											
												
													
														|  | 
 |  | +                                <a-select-option value=''>Empty</a-select-option>
 | 
											
												
													
														|  | 
 |  | +                                <a-select-option v-for="s in log.access" :value="s">[[ s ]]</a-select-option>
 | 
											
												
													
														|  |                              </a-select>
 |  |                              </a-select>
 | 
											
												
													
														|  |                            </template>
 |  |                            </template>
 | 
											
												
													
														|  |                          </a-col>
 |  |                          </a-col>
 | 
											
										
											
												
													
														|  | @@ -192,11 +193,28 @@
 | 
											
												
													
														|  |                          <a-col :lg="24" :xl="12">
 |  |                          <a-col :lg="24" :xl="12">
 | 
											
												
													
														|  |                            <template>
 |  |                            <template>
 | 
											
												
													
														|  |                              <a-select v-model="errorLog" :dropdown-class-name="themeSwitcher.currentTheme" style="width: 100%">
 |  |                              <a-select v-model="errorLog" :dropdown-class-name="themeSwitcher.currentTheme" style="width: 100%">
 | 
											
												
													
														|  | -                              <a-select-option v-for="s in error" :key="s" :value="s">[[ s ]]</a-select-option>
 |  | 
 | 
											
												
													
														|  | 
 |  | +                                <a-select-option value=''>Empty</a-select-option>
 | 
											
												
													
														|  | 
 |  | +                                <a-select-option v-for="s in log.error" :value="s">[[ s ]]</a-select-option>
 | 
											
												
													
														|  |                              </a-select>
 |  |                              </a-select>
 | 
											
												
													
														|  |                            </template>
 |  |                            </template>
 | 
											
												
													
														|  |                          </a-col>
 |  |                          </a-col>
 | 
											
												
													
														|  |                        </a-row>
 |  |                        </a-row>
 | 
											
												
													
														|  | 
 |  | +                      <a-row style="padding: 10px 20px">
 | 
											
												
													
														|  | 
 |  | +                        <a-col :lg="24" :xl="12">
 | 
											
												
													
														|  | 
 |  | +                          <a-list-item-meta title='{{ i18n "pages.xray.maskAddress" }}'
 | 
											
												
													
														|  | 
 |  | +                            description='{{ i18n "pages.xray.maskAddressDesc" }}'>
 | 
											
												
													
														|  | 
 |  | +                          </a-list-item-meta>
 | 
											
												
													
														|  | 
 |  | +                        </a-col>
 | 
											
												
													
														|  | 
 |  | +                        <a-col :lg="24" :xl="12">
 | 
											
												
													
														|  | 
 |  | +                          <template>
 | 
											
												
													
														|  | 
 |  | +                            <a-select v-model="maskAddressLog" :dropdown-class-name="themeSwitcher.currentTheme" style="width: 100%">
 | 
											
												
													
														|  | 
 |  | +                                <a-select-option value=''>Empty</a-select-option>
 | 
											
												
													
														|  | 
 |  | +                                <a-select-option v-for="s in log.maskAddress" :value="s">[[ s ]]</a-select-option>
 | 
											
												
													
														|  | 
 |  | +                            </a-select>
 | 
											
												
													
														|  | 
 |  | +                          </template>
 | 
											
												
													
														|  | 
 |  | +                        </a-col>
 | 
											
												
													
														|  | 
 |  | +                      </a-row>
 | 
											
												
													
														|  | 
 |  | +                      <setting-list-item type="switch" title='{{ i18n "pages.xray.dnsLog"}}' desc='{{ i18n "pages.xray.dnsLogDesc"}}' v-model="dnslog"></setting-list-item>
 | 
											
												
													
														|  |                      </a-list-item>
 |  |                      </a-list-item>
 | 
											
												
													
														|  |                    </a-collapse-panel>
 |  |                    </a-collapse-panel>
 | 
											
												
													
														|  |                    <a-collapse-panel header='{{ i18n "pages.xray.blockConfigs"}}'>
 |  |                    <a-collapse-panel header='{{ i18n "pages.xray.blockConfigs"}}'>
 | 
											
										
											
												
													
														|  | @@ -791,9 +809,13 @@
 | 
											
												
													
														|  |                  protocol: "freedom"
 |  |                  protocol: "freedom"
 | 
											
												
													
														|  |              },
 |  |              },
 | 
											
												
													
														|  |              routingDomainStrategies: ["AsIs", "IPIfNonMatch", "IPOnDemand"],
 |  |              routingDomainStrategies: ["AsIs", "IPIfNonMatch", "IPOnDemand"],
 | 
											
												
													
														|  | -            logLevel: ["none" , "debug" , "info" , "warning", "error"],
 |  | 
 | 
											
												
													
														|  | -            access: [],
 |  | 
 | 
											
												
													
														|  | -            error: [],
 |  | 
 | 
											
												
													
														|  | 
 |  | +            log: {
 | 
											
												
													
														|  | 
 |  | +                loglevel: ["none", "debug", "info", "warning", "error"],
 | 
											
												
													
														|  | 
 |  | +                access: ["none", "./access.log"],
 | 
											
												
													
														|  | 
 |  | +                error: ["none", "./error.log"],
 | 
											
												
													
														|  | 
 |  | +                dnsLog: false,
 | 
											
												
													
														|  | 
 |  | +                maskAddress: ["quarter", "half", "full"],
 | 
											
												
													
														|  | 
 |  | +            },
 | 
											
												
													
														|  |              settingsData: {
 |  |              settingsData: {
 | 
											
												
													
														|  |                  protocols: {
 |  |                  protocols: {
 | 
											
												
													
														|  |                      bittorrent: ["bittorrent"],
 |  |                      bittorrent: ["bittorrent"],
 | 
											
										
											
												
													
														|  | @@ -1519,27 +1541,11 @@
 | 
											
												
													
														|  |              templateSettings: {
 |  |              templateSettings: {
 | 
											
												
													
														|  |                  get: function () {
 |  |                  get: function () {
 | 
											
												
													
														|  |                      const parsedSettings = this.xraySetting ? JSON.parse(this.xraySetting) : null;
 |  |                      const parsedSettings = this.xraySetting ? JSON.parse(this.xraySetting) : null;
 | 
											
												
													
														|  | -                    let accessLogPath = "./access.log";
 |  | 
 | 
											
												
													
														|  | -                    let errorLogPath = "./error.log";
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -                    if (parsedSettings && parsedSettings.log) {
 |  | 
 | 
											
												
													
														|  | -                        if (parsedSettings.log.access && parsedSettings.log.access !== "none") {
 |  | 
 | 
											
												
													
														|  | -                            accessLogPath = parsedSettings.log.access;
 |  | 
 | 
											
												
													
														|  | -                        }
 |  | 
 | 
											
												
													
														|  | -                        if (parsedSettings.log.error && parsedSettings.log.error !== "none") {
 |  | 
 | 
											
												
													
														|  | -                            errorLogPath = parsedSettings.log.error;
 |  | 
 | 
											
												
													
														|  | -                        }
 |  | 
 | 
											
												
													
														|  | -                    }
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -                    this.access = ["none", accessLogPath];
 |  | 
 | 
											
												
													
														|  | -                    this.error = ["none", errorLogPath];
 |  | 
 | 
											
												
													
														|  |                      return parsedSettings;
 |  |                      return parsedSettings;
 | 
											
												
													
														|  |                  },
 |  |                  },
 | 
											
												
													
														|  |                  set: function (newValue) {
 |  |                  set: function (newValue) {
 | 
											
												
													
														|  | -                    if (newValue && newValue.log) {
 |  | 
 | 
											
												
													
														|  | 
 |  | +                    if (newValue) {
 | 
											
												
													
														|  |                          this.xraySetting = JSON.stringify(newValue, null, 2);
 |  |                          this.xraySetting = JSON.stringify(newValue, null, 2);
 | 
											
												
													
														|  | -                        this.access = ["none", newValue.log.access || "./access.log"];
 |  | 
 | 
											
												
													
														|  | -                        this.error = ["none", newValue.log.error || "./error.log"];
 |  | 
 | 
											
												
													
														|  |                      }
 |  |                      }
 | 
											
												
													
														|  |                  },
 |  |                  },
 | 
											
												
													
														|  |              },
 |  |              },
 | 
											
										
											
												
													
														|  | @@ -1688,7 +1694,7 @@
 | 
											
												
													
														|  |                      this.templateSettings = newTemplateSettings;
 |  |                      this.templateSettings = newTemplateSettings;
 | 
											
												
													
														|  |                  }
 |  |                  }
 | 
											
												
													
														|  |              },
 |  |              },
 | 
											
												
													
														|  | -            setLogLevel: {
 |  | 
 | 
											
												
													
														|  | 
 |  | +            logLevel: {
 | 
											
												
													
														|  |                  get: function () {
 |  |                  get: function () {
 | 
											
												
													
														|  |                      if (!this.templateSettings || !this.templateSettings.log || !this.templateSettings.log.loglevel) return "warning";
 |  |                      if (!this.templateSettings || !this.templateSettings.log || !this.templateSettings.log.loglevel) return "warning";
 | 
											
												
													
														|  |                      return this.templateSettings.log.loglevel;
 |  |                      return this.templateSettings.log.loglevel;
 | 
											
										
											
												
													
														|  | @@ -1721,6 +1727,28 @@
 | 
											
												
													
														|  |                      this.templateSettings = newTemplateSettings;
 |  |                      this.templateSettings = newTemplateSettings;
 | 
											
												
													
														|  |                  }
 |  |                  }
 | 
											
												
													
														|  |              },
 |  |              },
 | 
											
												
													
														|  | 
 |  | +            dnslog: {
 | 
											
												
													
														|  | 
 |  | +                get: function () {
 | 
											
												
													
														|  | 
 |  | +                    if (!this.templateSettings || !this.templateSettings.log || !this.templateSettings.log.dnsLog) return false;
 | 
											
												
													
														|  | 
 |  | +                    return this.templateSettings.log.dnsLog;
 | 
											
												
													
														|  | 
 |  | +                },
 | 
											
												
													
														|  | 
 |  | +                set: function (newValue) {
 | 
											
												
													
														|  | 
 |  | +                    newTemplateSettings = this.templateSettings;
 | 
											
												
													
														|  | 
 |  | +                    newTemplateSettings.log.dnsLog = newValue;
 | 
											
												
													
														|  | 
 |  | +                    this.templateSettings = newTemplateSettings;
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  | 
 |  | +            },
 | 
											
												
													
														|  | 
 |  | +            maskAddressLog: {
 | 
											
												
													
														|  | 
 |  | +                get: function () {
 | 
											
												
													
														|  | 
 |  | +                    if (!this.templateSettings || !this.templateSettings.log || !this.templateSettings.log.maskAddress) return "";
 | 
											
												
													
														|  | 
 |  | +                    return this.templateSettings.log.maskAddress;
 | 
											
												
													
														|  | 
 |  | +                },
 | 
											
												
													
														|  | 
 |  | +                set: function (newValue) {
 | 
											
												
													
														|  | 
 |  | +                    newTemplateSettings = this.templateSettings;
 | 
											
												
													
														|  | 
 |  | +                    newTemplateSettings.log.maskAddress = newValue;
 | 
											
												
													
														|  | 
 |  | +                    this.templateSettings = newTemplateSettings;
 | 
											
												
													
														|  | 
 |  | +                }
 | 
											
												
													
														|  | 
 |  | +            },
 | 
											
												
													
														|  |              blockedIPs: {
 |  |              blockedIPs: {
 | 
											
												
													
														|  |                  get: function () {
 |  |                  get: function () {
 | 
											
												
													
														|  |                      return this.templateRuleGetter({ outboundTag: "blocked", property: "ip" });
 |  |                      return this.templateRuleGetter({ outboundTag: "blocked", property: "ip" });
 |