small-package/luci-app-openclash/root/usr/share/openclash/yml_change.sh

189 lines
5.4 KiB
Bash

#!/bin/sh
. /usr/share/openclash/ruby.sh
LOG_FILE="/tmp/openclash.log"
LOGTIME=$(echo $(date "+%Y-%m-%d %H:%M:%S"))
dns_advanced_setting=$(uci -q get openclash.config.dns_advanced_setting)
if [ "${14}" != "1" ]; then
controller_address="0.0.0.0"
bind_address="*"
else
controller_address=${11}
bind_address=${11}
fi
if [ -n "$(ruby_read "$7" "['tun']")" ]; then
if [ -n "$(ruby_read "$7" "['tun']['device-url']")" ]; then
if [ "${15}" -eq 1 ] || [ "${15}" -eq 3 ]; then
uci set openclash.config.config_reload=0
fi
else
uci set openclash.config.config_reload=0
fi
else
if [ -n "${15}" ]; then
uci set openclash.config.config_reload=0
fi
fi
if [ -z "${15}" ]; then
en_mode_tun=0
else
en_mode_tun=${15}
fi
if [ -z "${16}" ]; then
stack_type=system
else
stack_type=${16}
fi
if [ "$(ruby_read "$7" "['external-controller']")" != "$controller_address:$5" ]; then
uci set openclash.config.config_reload=0
fi
if [ "$(ruby_read "$7" "['secret']")" != "$4" ]; then
uci set openclash.config.config_reload=0
fi
uci commit openclash
if [ "$2" = "fake-ip" ]; then
if [ ! -f "/tmp/openclash_fake_filter.list" ] || [ ! -z "$(grep "config servers" /etc/config/openclash 2>/dev/null)" ]; then
/usr/share/openclash/openclash_fake_filter.sh
fi
if [ -s "/tmp/openclash_servers_fake_filter.conf" ]; then
mkdir -p /tmp/dnsmasq.d
ln -s /tmp/openclash_servers_fake_filter.conf /tmp/dnsmasq.d/dnsmasq_openclash.conf
fi
fi
ruby -ryaml -E UTF-8 -e "
begin
Value = YAML.load_file('$7');
rescue Exception => e
puts '${LOGTIME} Error: Load File Error,【' + e.message + '】'
end
begin
Value['redir-port']=$6;
Value['tproxy-port']=${20};
Value['port']=$9;
Value['socks-port']=${10};
Value['mixed-port']=${19};
Value['mode']='${13}';
Value['log-level']='${12}';
Value['allow-lan']=true;
Value['external-controller']='$controller_address:$5';
Value['secret']='$4';
Value['bind-address']='$bind_address';
Value['external-ui']='/usr/share/openclash/dashboard';
if not Value.key?('dns') then
Value_1={'dns'=>{'enable'=>true}}
Value['dns']=Value_1['dns']
else
Value['dns']['enable']=true
end;
if $8 == 1 then
Value['ipv6']=true
else
Value['ipv6']=false
end;
if ${21} == 1 then
Value['dns']['ipv6']=true
else
Value['dns']['ipv6']=false
end;
Value['dns']['enhanced-mode']='$2';
if '$2' == 'fake-ip' then
Value['dns']['fake-ip-range']='198.18.0.1/16'
else
Value['dns'].delete('fake-ip-range')
end;
if ${21} != 1 then
Value['dns']['listen']='127.0.0.1:${17}'
else
Value['dns']['listen']='0.0.0.0:${17}'
end;
Value_2={'tun'=>{'enable'=>true}};
if $en_mode_tun == 1 or $en_mode_tun == 3 then
Value['tun']=Value_2['tun']
Value['tun']['stack']='$stack_type'
Value_2={'dns-hijack'=>['tcp://8.8.8.8:53','tcp://8.8.4.4:53']}
Value['tun'].merge!(Value_2)
elsif $en_mode_tun == 2
Value['tun']=Value_2['tun']
Value['tun']['device-url']='dev://utun'
Value['tun']['dns-listen']='0.0.0.0:53'
elsif $en_mode_tun == 0
if Value.key?('tun') then
Value.delete('tun')
end
end;
if not Value.key?('profile') then
Value_3={'profile'=>{'store-selected'=>true}}
Value['profile']=Value_3['profile']
else
Value['profile']['store-selected']=true
end;
rescue Exception => e
puts '${LOGTIME} Error: Set General Error,【' + e.message + '】'
end
begin
#添加自定义Hosts设置
if '$2' == 'redir-host' then
if File::exist?('/etc/openclash/custom/openclash_custom_hosts.list') then
Value_3 = YAML.load_file('/etc/openclash/custom/openclash_custom_hosts.list')
if Value_3 != false then
Value['dns']['use-hosts']=true
if Value.has_key?('hosts') and not Value['hosts'].to_a.empty? then
Value['hosts'].merge!(Value_3)
Value['hosts'].uniq
else
Value['hosts']=Value_3
end
end
end
end;
rescue Exception => e
puts '${LOGTIME} Error: Set Hosts Rules Error,【' + e.message + '】'
end
begin
#fake-ip-filter
if '$2' == 'fake-ip' then
if File::exist?('/tmp/openclash_fake_filter.list') then
Value_4 = YAML.load_file('/tmp/openclash_fake_filter.list')
if Value_4 != false then
if Value['dns'].has_key?('fake-ip-filter') and not Value['dns']['fake-ip-filter'].to_a.empty? then
Value_5 = Value_4['fake-ip-filter'].reverse!
Value_5.each{|x| Value['dns']['fake-ip-filter'].insert(-1,x)}
Value['dns']['fake-ip-filter']=Value['dns']['fake-ip-filter'].uniq
else
Value['dns']['fake-ip-filter']=Value_4['fake-ip-filter']
end
end
end
end;
rescue Exception => e
puts '${LOGTIME} Error: Set Fake-IP-Filter Error,【' + e.message + '】'
end
begin
#nameserver-policy
if '$dns_advanced_setting' == '1' then
if File::exist?('/etc/openclash/custom/openclash_custom_domain_dns_policy.list') then
Value_6 = YAML.load_file('/etc/openclash/custom/openclash_custom_domain_dns_policy.list')
if Value_6 != false then
if Value['dns'].has_key?('nameserver-policy') and not Value['dns']['nameserver-policy'].to_a.empty? then
Value['dns']['nameserver-policy'].merge!(Value_6)
Value['dns']['nameserver-policy'].uniq
else
Value['dns']['nameserver-policy']=Value_6
end
end
end
end;
rescue Exception => e
puts '${LOGTIME} Error: Set Nameserver-Policy Error,【' + e.message + '】'
ensure
File.open('$7','w') {|f| YAML.dump(Value, f)}
end" 2>/dev/null >> $LOG_FILE