|
@@ -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);
|
|
|
- }
|
|
|
- },
|
|
|
- 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) },
|
|
|
+ async mounted() {
|
|
|
+ await this.getAllSetting();
|
|
|
+ while (true) {
|
|
|
+ await PromiseUtil.sleep(1000);
|
|
|
+ this.saveBtnDisable = this.oldAllSetting.equals(this.allSetting);
|
|
|
+ }
|
|
|
},
|
|
|
- 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
|
|
|
+ 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) },
|
|
|
},
|
|
|
- },
|
|
|
- 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
|
|
|
+ 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
|
|
|
+ },
|
|
|
},
|
|
|
- },
|
|
|
- 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
|
|
|
+ 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
|
|
|
+ },
|
|
|
},
|
|
|
- },
|
|
|
- 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
|
|
|
- }
|
|
|
- }
|
|
|
+ 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
|
|
|
});
|
|
|
- }
|
|
|
- return torrentFilter
|
|
|
+ },
|
|
|
+ set: function (newValue) {
|
|
|
+ this.templateRuleSetter({
|
|
|
+ newValue,
|
|
|
+ outboundTag: "blocked",
|
|
|
+ property: "protocol",
|
|
|
+ data: this.settingsData.protocols.bittorrent
|
|
|
+ });
|
|
|
+ },
|
|
|
},
|
|
|
- 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);
|
|
|
+ privateIpSettings: {
|
|
|
+ get: function () {
|
|
|
+ return this.templateRuleGetter({
|
|
|
+ outboundTag: "blocked",
|
|
|
+ property: "ip",
|
|
|
+ data: this.settingsData.ips.local
|
|
|
});
|
|
|
- }
|
|
|
- this.templateSettings = newTemplateSettings
|
|
|
+ },
|
|
|
+ set: function (newValue) {
|
|
|
+ this.templateRuleSetter({
|
|
|
+ newValue,
|
|
|
+ outboundTag: "blocked",
|
|
|
+ property: "ip",
|
|
|
+ data: this.settingsData.ips.local
|
|
|
+ });
|
|
|
+ },
|
|
|
},
|
|
|
- },
|
|
|
- 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
|
|
|
- }
|
|
|
- }
|
|
|
+ AdsSettings: {
|
|
|
+ get: function () {
|
|
|
+ return this.templateRuleGetter({
|
|
|
+ outboundTag: "blocked",
|
|
|
+ property: "domain",
|
|
|
+ data: this.settingsData.domains.ads
|
|
|
});
|
|
|
- }
|
|
|
- return localIpFilter
|
|
|
+ },
|
|
|
+ set: function (newValue) {
|
|
|
+ this.templateRuleSetter({
|
|
|
+ newValue,
|
|
|
+ outboundTag: "blocked",
|
|
|
+ property: "domain",
|
|
|
+ data: this.settingsData.domains.ads
|
|
|
+ });
|
|
|
+ },
|
|
|
},
|
|
|
- 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);
|
|
|
+ PornSettings: {
|
|
|
+ get: function () {
|
|
|
+ return this.templateRuleGetter({
|
|
|
+ outboundTag: "blocked",
|
|
|
+ property: "domain",
|
|
|
+ data: this.settingsData.domains.porn
|
|
|
});
|
|
|
- }
|
|
|
- this.templateSettings = newTemplateSettings
|
|
|
+ },
|
|
|
+ set: function (newValue) {
|
|
|
+ this.templateRuleSetter({
|
|
|
+ newValue,
|
|
|
+ outboundTag: "blocked",
|
|
|
+ property: "domain",
|
|
|
+ data: this.settingsData.domains.porn
|
|
|
+ });
|
|
|
+ },
|
|
|
},
|
|
|
- },
|
|
|
- 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
|
|
|
- }
|
|
|
- }
|
|
|
+ GoogleIPv4Settings: {
|
|
|
+ get: function () {
|
|
|
+ return this.templateRuleGetter({
|
|
|
+ outboundTag: "IPv4",
|
|
|
+ property: "domain",
|
|
|
+ data: this.settingsData.domains.google
|
|
|
});
|
|
|
- }
|
|
|
- return localIpFilter
|
|
|
+ },
|
|
|
+ set: function (newValue) {
|
|
|
+ this.templateRuleSetter({
|
|
|
+ newValue,
|
|
|
+ outboundTag: "IPv4",
|
|
|
+ property: "domain",
|
|
|
+ data: this.settingsData.domains.google
|
|
|
+ });
|
|
|
+ },
|
|
|
},
|
|
|
- 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);
|
|
|
+ NetflixIPv4Settings: {
|
|
|
+ get: function () {
|
|
|
+ return this.templateRuleGetter({
|
|
|
+ outboundTag: "IPv4",
|
|
|
+ property: "domain",
|
|
|
+ data: this.settingsData.domains.netflix
|
|
|
});
|
|
|
- }
|
|
|
- this.templateSettings = newTemplateSettings
|
|
|
+ },
|
|
|
+ set: function (newValue) {
|
|
|
+ this.templateRuleSetter({
|
|
|
+ newValue,
|
|
|
+ outboundTag: "IPv4",
|
|
|
+ property: "domain",
|
|
|
+ data: this.settingsData.domains.netflix
|
|
|
+ });
|
|
|
+ },
|
|
|
},
|
|
|
- },
|
|
|
- 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
|
|
|
- }
|
|
|
- }
|
|
|
+ IRIpSettings: {
|
|
|
+ get: function () {
|
|
|
+ return this.templateRuleGetter({
|
|
|
+ outboundTag: "blocked",
|
|
|
+ property: "ip",
|
|
|
+ data: this.settingsData.ips.ir
|
|
|
});
|
|
|
- }
|
|
|
- return localdomainFilter
|
|
|
+ },
|
|
|
+ set: function (newValue) {
|
|
|
+ this.templateRuleSetter({
|
|
|
+ newValue,
|
|
|
+ outboundTag: "blocked",
|
|
|
+ property: "ip",
|
|
|
+ data: this.settingsData.ips.ir
|
|
|
+ });
|
|
|
+ },
|
|
|
},
|
|
|
- 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);
|
|
|
+ IRDomainSettings: {
|
|
|
+ get: function () {
|
|
|
+ return this.templateRuleGetter({
|
|
|
+ outboundTag: "blocked",
|
|
|
+ property: "domain",
|
|
|
+ data: this.settingsData.domains.ir
|
|
|
});
|
|
|
- }
|
|
|
- this.templateSettings = newTemplateSettings
|
|
|
+ },
|
|
|
+ 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
|
|
|
+ });
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+ });
|
|
|
|
|
|
-</script>
|
|
|
+ </script>
|
|
|
</body>
|
|
|
-</html>
|
|
|
+
|
|
|
+</html>
|