diff --git a/web/html/xui/setting.html b/web/html/xui/setting.html
index 72a53251..54d54d72 100644
--- a/web/html/xui/setting.html
+++ b/web/html/xui/setting.html
@@ -355,178 +355,301 @@ const app = new Vue({
this.checkRequiredOutbounds();
}
},
- async mounted() {
- await this.getAllSetting();
- while (true) {
- await PromiseUtil.sleep(1000);
- this.saveBtnDisable = this.oldAllSetting.equals(this.allSetting);
+ async mounted() {
+ await this.getAllSetting();
+ while (true) {
+ await PromiseUtil.sleep(1000);
+ this.saveBtnDisable = this.oldAllSetting.equals(this.allSetting);
+ }
+ },
+ computed: {
+ templateSettings: {
+ get: function () { return this.allSetting.xrayTemplateConfig ? JSON.parse(this.allSetting.xrayTemplateConfig) : null; },
+ set: function (newValue) { this.allSetting.xrayTemplateConfig = JSON.stringify(newValue, null, 2) },
+ },
+ inboundSettings: {
+ get: function () { return this.templateSettings ? JSON.stringify(this.templateSettings.inbounds, null, 2) : null; },
+ set: function (newValue) {
+ newTemplateSettings = this.templateSettings;
+ newTemplateSettings.inbounds = JSON.parse(newValue)
+ this.templateSettings = newTemplateSettings
+ },
+ },
+ outboundSettings: {
+ get: function () { return this.templateSettings ? JSON.stringify(this.templateSettings.outbounds, null, 2) : null; },
+ set: function (newValue) {
+ newTemplateSettings = this.templateSettings;
+ newTemplateSettings.outbounds = JSON.parse(newValue)
+ this.templateSettings = newTemplateSettings
+ },
+ },
+ routingRuleSettings: {
+ get: function () { return this.templateSettings ? JSON.stringify(this.templateSettings.routing.rules, null, 2) : null; },
+ set: function (newValue) {
+ newTemplateSettings = this.templateSettings;
+ newTemplateSettings.routing.rules = JSON.parse(newValue)
+ this.templateSettings = newTemplateSettings
+ },
+ },
+ torrentSettings: {
+ get: function () {
+ return this.templateRuleGetter({
+ outboundTag: "blocked",
+ property: "protocol",
+ data: this.settingsData.protocols.bittorrent
+ });
+ },
+ set: function (newValue) {
+ this.templateRuleSetter({
+ newValue,
+ outboundTag: "blocked",
+ property: "protocol",
+ data: this.settingsData.protocols.bittorrent
+ });
+ },
+ },
+ privateIpSettings: {
+ get: function () {
+ return this.templateRuleGetter({
+ outboundTag: "blocked",
+ property: "ip",
+ data: this.settingsData.ips.local
+ });
+ },
+ set: function (newValue) {
+ this.templateRuleSetter({
+ newValue,
+ outboundTag: "blocked",
+ property: "ip",
+ data: this.settingsData.ips.local
+ });
+ },
+ },
+ AdsSettings: {
+ get: function () {
+ return this.templateRuleGetter({
+ outboundTag: "blocked",
+ property: "domain",
+ data: this.settingsData.domains.ads
+ });
+ },
+ set: function (newValue) {
+ this.templateRuleSetter({
+ newValue,
+ outboundTag: "blocked",
+ property: "domain",
+ data: this.settingsData.domains.ads
+ });
+ },
+ },
+ PornSettings: {
+ get: function () {
+ return this.templateRuleGetter({
+ outboundTag: "blocked",
+ property: "domain",
+ data: this.settingsData.domains.porn
+ });
+ },
+ set: function (newValue) {
+ this.templateRuleSetter({
+ newValue,
+ outboundTag: "blocked",
+ property: "domain",
+ data: this.settingsData.domains.porn
+ });
+ },
+ },
+ GoogleIPv4Settings: {
+ get: function () {
+ return this.templateRuleGetter({
+ outboundTag: "IPv4",
+ property: "domain",
+ data: this.settingsData.domains.google
+ });
+ },
+ set: function (newValue) {
+ this.templateRuleSetter({
+ newValue,
+ outboundTag: "IPv4",
+ property: "domain",
+ data: this.settingsData.domains.google
+ });
+ },
+ },
+ NetflixIPv4Settings: {
+ get: function () {
+ return this.templateRuleGetter({
+ outboundTag: "IPv4",
+ property: "domain",
+ data: this.settingsData.domains.netflix
+ });
+ },
+ set: function (newValue) {
+ this.templateRuleSetter({
+ newValue,
+ outboundTag: "IPv4",
+ property: "domain",
+ data: this.settingsData.domains.netflix
+ });
+ },
+ },
+ IRIpSettings: {
+ get: function () {
+ return this.templateRuleGetter({
+ outboundTag: "blocked",
+ property: "ip",
+ data: this.settingsData.ips.ir
+ });
+ },
+ set: function (newValue) {
+ this.templateRuleSetter({
+ newValue,
+ outboundTag: "blocked",
+ property: "ip",
+ data: this.settingsData.ips.ir
+ });
+ },
+ },
+ IRDomainSettings: {
+ get: function () {
+ return this.templateRuleGetter({
+ outboundTag: "blocked",
+ property: "domain",
+ data: this.settingsData.domains.ir
+ });
+ },
+ set: function (newValue) {
+ this.templateRuleSetter({
+ newValue,
+ outboundTag: "blocked",
+ property: "domain",
+ data: this.settingsData.domains.ir
+ });
+ },
+ },
+ ChinaIpSettings: {
+ get: function () {
+ return this.templateRuleGetter({
+ outboundTag: "blocked",
+ property: "ip",
+ data: this.settingsData.ips.cn
+ });
+ },
+ set: function (newValue) {
+ this.templateRuleSetter({
+ newValue,
+ outboundTag: "blocked",
+ property: "ip",
+ data: this.settingsData.ips.cn
+ });
+ },
+ },
+ ChinaDomainSettings: {
+ get: function () {
+ return this.templateRuleGetter({
+ outboundTag: "blocked",
+ property: "domain",
+ data: this.settingsData.domains.cn
+ });
+ },
+ set: function (newValue) {
+ this.templateRuleSetter({
+ newValue,
+ outboundTag: "blocked",
+ property: "domain",
+ data: this.settingsData.domains.cn
+ });
+ },
+ },
+ GoogleWARPSettings: {
+ get: function () {
+ return this.templateRuleGetter({
+ outboundTag: "WARP",
+ property: "domain",
+ data: this.settingsData.domains.google
+ });
+ },
+ set: function (newValue) {
+ this.templateRuleSetter({
+ newValue,
+ outboundTag: "WARP",
+ property: "domain",
+ data: this.settingsData.domains.google
+ });
+ },
+ },
+ OpenAIWARPSettings: {
+ get: function () {
+ return this.templateRuleGetter({
+ outboundTag: "WARP",
+ property: "domain",
+ data: this.settingsData.domains.openai
+ });
+ },
+ set: function (newValue) {
+ this.templateRuleSetter({
+ newValue,
+ outboundTag: "WARP",
+ property: "domain",
+ data: this.settingsData.domains.openai
+ });
+ },
+ },
+ NetflixWARPSettings: {
+ get: function () {
+ return this.templateRuleGetter({
+ outboundTag: "WARP",
+ property: "domain",
+ data: this.settingsData.domains.netflix
+ });
+ },
+ set: function (newValue) {
+ this.templateRuleSetter({
+ newValue,
+ outboundTag: "WARP",
+ property: "domain",
+ data: this.settingsData.domains.netflix
+ });
+ },
+ },
+ SpotifyWARPSettings: {
+ get: function () {
+ return this.templateRuleGetter({
+ outboundTag: "WARP",
+ property: "domain",
+ data: this.settingsData.domains.spotify
+ });
+ },
+ set: function (newValue) {
+ this.templateRuleSetter({
+ newValue,
+ outboundTag: "WARP",
+ property: "domain",
+ data: this.settingsData.domains.spotify
+ });
+ },
+ },
+ IRWARPSettings: {
+ get: function () {
+ return this.templateRuleGetter({
+ outboundTag: "WARP",
+ property: "domain",
+ data: this.settingsData.domains.ir
+ });
+ },
+ set: function (newValue) {
+ this.templateRuleSetter({
+ newValue,
+ outboundTag: "WARP",
+ property: "domain",
+ data: this.settingsData.domains.ir
+ });
+ },
+ },
}
- },
- computed: {
- templateSettings: {
- get: function () { return this.allSetting.xrayTemplateConfig ? JSON.parse(this.allSetting.xrayTemplateConfig) : null ; },
- set: function (newValue) { this.allSetting.xrayTemplateConfig = JSON.stringify(newValue, null, 2) },
- },
- inboundSettings: {
- get: function () { return this.templateSettings ? JSON.stringify(this.templateSettings.inbounds, null, 2) : null; },
- set: function (newValue) {
- newTemplateSettings = this.templateSettings;
- newTemplateSettings.inbounds = JSON.parse(newValue)
- this.templateSettings = newTemplateSettings
- },
- },
- outboundSettings: {
- get: function () { return this.templateSettings ? JSON.stringify(this.templateSettings.outbounds, null, 2) : null; },
- set: function (newValue) {
- newTemplateSettings = this.templateSettings;
- newTemplateSettings.outbounds = JSON.parse(newValue)
- this.templateSettings = newTemplateSettings
- },
- },
- routingRuleSettings: {
- get: function () { return this.templateSettings ? JSON.stringify(this.templateSettings.routing.rules, null, 2) : null; },
- set: function (newValue) {
- newTemplateSettings = this.templateSettings;
- newTemplateSettings.routing.rules = JSON.parse(newValue)
- this.templateSettings = newTemplateSettings
- },
- },
- torrentSettings: {
- get: function () {
- torrentFilter = false
- if(this.templateSettings != null){
- this.templateSettings.routing.rules.forEach(routingRule => {
- if(routingRule.hasOwnProperty("protocol")){
- if (routingRule.protocol[0] === "bittorrent" && routingRule.outboundTag == "blocked"){
- torrentFilter = true
- }
- }
- });
- }
- return torrentFilter
- },
- set: function (newValue) {
- newTemplateSettings = JSON.parse(this.allSetting.xrayTemplateConfig);
- if (newValue){
- newTemplateSettings.routing.rules.push(JSON.parse("{\"outboundTag\": \"blocked\",\"protocol\": [\"bittorrent\"],\"type\": \"field\"}"))
- }
- else {
- newTemplateSettings.routing.rules = [];
- this.templateSettings.routing.rules.forEach(routingRule => {
- if (routingRule.hasOwnProperty('protocol')){
- if (routingRule.protocol[0] === "bittorrent" && routingRule.outboundTag == "blocked"){
- return;
- }
- }
- newTemplateSettings.routing.rules.push(routingRule);
- });
- }
- this.templateSettings = newTemplateSettings
- },
- },
- privateIpSettings: {
- get: function () {
- localIpFilter = false
- if(this.templateSettings != null){
- this.templateSettings.routing.rules.forEach(routingRule => {
- if(routingRule.hasOwnProperty("ip")){
- if (routingRule.ip[0] === "geoip:private" && routingRule.outboundTag == "blocked"){
- localIpFilter = true
- }
- }
- });
- }
- return localIpFilter
- },
- set: function (newValue) {
- newTemplateSettings = JSON.parse(this.allSetting.xrayTemplateConfig);
- if (newValue){
- newTemplateSettings.routing.rules.push(JSON.parse("{\"outboundTag\": \"blocked\",\"ip\": [\"geoip:private\"],\"type\": \"field\"}"))
- }
- else {
- newTemplateSettings.routing.rules = [];
- this.templateSettings.routing.rules.forEach(routingRule => {
- if (routingRule.hasOwnProperty('ip')){
- if (routingRule.ip[0] === "geoip:private" && routingRule.outboundTag == "blocked"){
- return;
- }
- }
- newTemplateSettings.routing.rules.push(routingRule);
- });
- }
- this.templateSettings = newTemplateSettings
- },
- },
- IRIpSettings: {
- get: function () {
- localIpFilter = false
- if(this.templateSettings != null){
- this.templateSettings.routing.rules.forEach(routingRule => {
- if(routingRule.hasOwnProperty("ip")){
- if (routingRule.ip[0] === "geoip:ir" && routingRule.outboundTag == "blocked"){
- localIpFilter = true
- }
- }
- });
- }
- return localIpFilter
- },
- set: function (newValue) {
- newTemplateSettings = JSON.parse(this.allSetting.xrayTemplateConfig);
- if (newValue){
- newTemplateSettings.routing.rules.push(JSON.parse("{\"outboundTag\": \"blocked\",\"ip\": [\"geoip:ir\"],\"type\": \"field\"}"))
- }
- else {
- newTemplateSettings.routing.rules = [];
- this.templateSettings.routing.rules.forEach(routingRule => {
- if (routingRule.hasOwnProperty('ip')){
- if (routingRule.ip[0] === "geoip:ir" && routingRule.outboundTag == "blocked"){
- return;
- }
- }
- newTemplateSettings.routing.rules.push(routingRule);
- });
- }
- this.templateSettings = newTemplateSettings
- },
- },
- IRdomainSettings: {
- get: function () {
- localdomainFilter = false
- if(this.templateSettings != null){
- this.templateSettings.routing.rules.forEach(routingRule => {
- if(routingRule.hasOwnProperty("domain")){
- if ((routingRule.domain[0] === "regexp:.+.ir$" || routingRule.domain[0] === "ext:iran.dat:ir" || routingRule.domain[0] === "ext:iran.dat:other") && routingRule.outboundTag == "blocked") {
- localdomainFilter = true
- }
- }
- });
- }
- return localdomainFilter
- },
- set: function (newValue) {
- newTemplateSettings = JSON.parse(this.allSetting.xrayTemplateConfig);
- if (newValue){
- newTemplateSettings.routing.rules.push(JSON.parse("{\"outboundTag\": \"blocked\",\"domain\": [\"regexp:.+.ir$\", \"ext:iran.dat:ir\", \"ext:iran.dat:other\"],\"type\": \"field\"}"))
- }
- else {
- newTemplateSettings.routing.rules = [];
- this.templateSettings.routing.rules.forEach(routingRule => {
- if (routingRule.hasOwnProperty('domain')){
- if ((routingRule.domain[0] === "regexp:.+.ir$" || routingRule.domain[0] === "ext:iran.dat:ir" || routingRule.domain[0] === "ext:iran.dat:other") && routingRule.outboundTag == "blocked"){
- return;
- }
- }
- newTemplateSettings.routing.rules.push(routingRule);
- });
- }
- this.templateSettings = newTemplateSettings
- },
- },
-
- }
- });
+ });
-
+